【8.1.2】初始化前端项目

dev-8.1.9
fengshuonan 2024-03-25 12:51:10 +08:00
parent 335bf5ad51
commit f7ab135322
336 changed files with 59703 additions and 0 deletions

2
guns-front-project/.env Normal file
View File

@ -0,0 +1,2 @@
# 项目启动后,左上角项目名称
VITE_APP_NAME=Guns Tech.

View File

@ -0,0 +1,14 @@
# API请求的前缀走这个前缀的会被转发到后台
VITE_API_PREFIX=/api
# 后台接口的地址这个地址只有在开发环境用上线后用nginx转发
VITE_API_URL=http://localhost:8080
# sso单点服务器的地址上线后需要改为线上的单点服务地址
VITE_APP_SSO_HOST=http://localhost:8888
# sso单点客户端id上线后需要改为线上的客户端id
VITE_APP_SSO_ID=1187303628294164583
# oauth2服务端地址用在点击首页的第三方登录logo
VITE_APP_BACKEND_HOST=http://localhost:8080

View File

@ -0,0 +1,14 @@
# API请求的前缀走这个前缀的会被转发到后台打包到tomcat这里要改为/
VITE_API_PREFIX=/api
# 后台接口的地址这个地址只有在开发环境用上线后用nginx转发
VITE_API_URL=https://vue3.javaguns.com/api
# sso单点服务器的地址上线后需要改为线上的单点服务地址
VITE_APP_SSO_HOST=http://localhost:8888
# sso单点客户端id上线后需要改为线上的客户端id
VITE_APP_SSO_ID=1187303628294164583
# oauth2服务端地址用在点击首页的第三方登录logo
VITE_APP_BACKEND_HOST=http://www.javaguns.com/api

View File

@ -0,0 +1,4 @@
public
src/assets
dist
node_modules

View File

@ -0,0 +1,55 @@
/* eslint-env node */
require('@rushstack/eslint-patch/modern-module-resolution')
module.exports = {
root: true,
env: {
browser: true,
node: true,
es6: true,
'vue/setup-compiler-macros': true
},
parser: 'vue-eslint-parser',
extends: ['plugin:vue/vue3-recommended', 'eslint:recommended'],
parserOptions: {
ecmaVersion: 2020,
sourceType: 'module'
},
rules: {
'vue/script-setup-uses-vars': 'error',
'vue/custom-event-name-casing': 'off',
'no-use-before-define': 'off',
'no-unused-vars': [
'error',
{
argsIgnorePattern: '^_',
varsIgnorePattern: '^_'
}
],
'space-before-function-paren': 'off',
'vue/attributes-order': 'off',
'vue/one-component-per-file': 'off',
'vue/html-closing-bracket-newline': 'off',
'vue/max-attributes-per-line': 'off',
'vue/multiline-html-element-content-newline': 'off',
'vue/singleline-html-element-content-newline': 'off',
'vue/attribute-hyphenation': 'off',
'vue/require-default-prop': 'off',
'vue/html-self-closing': [
'error',
{
html: {
void: 'always',
normal: 'never',
component: 'always'
},
svg: 'always',
math: 'always'
}
],
'vue/v-on-event-hyphenation': 'off',
'vue/multi-word-component-names': 'off',
// 允许props修改
'vue/no-mutating-props': 0
}
}

32
guns-front-project/.gitignore vendored Normal file
View File

@ -0,0 +1,32 @@
# Logs
logs
*.log
npm-debug.log*
yarn-debug.log*
yarn-error.log*
pnpm-debug.log*
lerna-debug.log*
# local env files
.env.local
.env.*.local
node_modules
.DS_Store
dist
dist-ssr
coverage
*.local
/cypress/videos/
/cypress/screenshots/
# Editor directories and files
.vscode/*
!.vscode/extensions.json
.idea
*.suo
*.ntvs*
*.njsproj
*.sln
*.sw?

View File

@ -0,0 +1,9 @@
/dist/*
.local
.output.js
/node_modules/**
**/*.svg
**/*.sh
/public/*

View File

@ -0,0 +1,20 @@
{
"arrowParens": "avoid",
"bracketSpacing": true,
"embeddedLanguageFormatting": "auto",
"htmlWhitespaceSensitivity": "css",
"insertPragma": false,
"jsxBracketSameLine": false,
"jsxSingleQuote": true,
"printWidth": 140,
"proseWrap": "preserve",
"quoteProps": "as-needed",
"requirePragma": false,
"semi": true,
"singleQuote": true,
"tabWidth": 2,
"trailingComma": "none",
"useTabs": false,
"vueIndentScriptAndStyle": false,
"endOfLine": "auto"
}

View File

@ -0,0 +1,67 @@
<!doctype html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<link rel="icon" href="/favicon.ico" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>Guns Tech.</title>
<style>
.global-loading {
width: 36px;
font-size: 0;
display: inline-block;
transform: rotate(45deg);
animation: loadingRotate 1.2s infinite linear;
position: relative;
top: calc(50% - 18px);
left: calc(50% - 18px);
}
.global-loading span {
width: 10px;
height: 10px;
margin: 4px;
border-radius: 50%;
background: #1890ff;
display: inline-block;
opacity: 0.9;
}
.global-loading span:nth-child(2) {
opacity: 0.7;
}
.global-loading span:nth-child(3) {
opacity: 0.5;
}
.global-loading span:nth-child(4) {
opacity: 0.3;
}
@keyframes loadingRotate {
to {
transform: rotate(405deg);
}
}
#app > .global-loading {
position: fixed;
}
#app {
height: 100%;
}
</style>
</head>
<body>
<div id="app">
<div class="global-loading">
<span></span>
<span></span>
<span></span>
<span></span>
</div>
</div>
<script type="module" src="/src/main.js"></script>
</body>
</html>

View File

@ -0,0 +1,14 @@
{
"compilerOptions": {
"target": "esnext",
"module": "esnext",
"moduleResolution": "node",
"jsx": "preserve",
"baseUrl": "./",
"lib": ["esnext", "dom"],
"paths": {
"@/*": ["src/*"]
}
},
"exclude": ["node_modules", "dist"]
}

View File

@ -0,0 +1,56 @@
{
"name": "new-project",
"version": "0.0.0",
"private": true,
"scripts": {
"dev": "vite",
"build": "node --max_old_space_size=8096 ./node_modules/vite/bin/vite.js build",
"preview": "vite preview",
"test:unit": "vitest",
"lint": "eslint . --ext .vue,.js,.jsx,.cjs,.mjs --fix --ignore-path .gitignore",
"format": "prettier --write src/"
},
"dependencies": {
"@ant-design/icons-vue": "^7.0.1",
"ant-design-vue": "^3.2.17",
"axios": "^1.6.0",
"cropperjs": "^1.5.12",
"dayjs": "^1.11.10",
"echarts": "^5.4.2",
"jsencrypt": "^3.3.2",
"less": "^4.2.0",
"lodash-es": "^4.17.21",
"nprogress": "^0.2.0",
"pinia": "^2.1.7",
"tinymce": "^5.10.7",
"vue": "^3.3.4",
"vue-clipboard3": "^2.0.0",
"vue-echarts": "^6.5.4",
"vue-i18n": "^9.1.9",
"vue-router": "^4.2.5",
"vuedraggable": "^4.1.0",
"vxe-table": "^4.4.2",
"xe-utils": "^3.5.14",
"xlsx": "^0.18.5"
},
"devDependencies": {
"@rushstack/eslint-patch": "^1.3.3",
"@vitejs/plugin-legacy": "^4.0.2",
"@vitejs/plugin-vue": "^4.4.0",
"@vitejs/plugin-vue-jsx": "^3.0.2",
"@vue/eslint-config-prettier": "^8.0.0",
"@vue/test-utils": "^2.4.1",
"consola": "3.2.0",
"eslint": "^8.49.0",
"eslint-plugin-vue": "^9.17.0",
"jsdom": "^22.1.0",
"prettier": "^3.0.3",
"terser": "^5.16.9",
"unplugin-vue-components": "^0.24.1",
"vite": "^4.4.11",
"vite-plugin-compression": "^0.5.1",
"vite-plugin-style-import": "^2.0.0",
"vitest": "^0.34.6",
"vue-eslint-parser": "^9.1.1"
}
}

View File

@ -0,0 +1,3 @@
module.exports = {
plugins: {}
};

View File

@ -0,0 +1,20 @@
module.exports = {
arrowParens: 'always',
bracketSpacing: true,
embeddedLanguageFormatting: 'auto',
htmlWhitespaceSensitivity: 'css',
insertPragma: false,
jsxBracketSameLine: false,
jsxSingleQuote: true,
printWidth: 140,
proseWrap: 'preserve',
quoteProps: 'as-needed',
requirePragma: false,
semi: true,
singleQuote: true,
tabWidth: 2,
trailingComma: 'none',
useTabs: false,
vueIndentScriptAndStyle: true,
endOfLine: 'auto'
};

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.0 KiB

View File

@ -0,0 +1,462 @@
tinymce.addI18n('zh_CN',{
"Redo": "\u91cd\u505a",
"Undo": "\u64a4\u9500",
"Cut": "\u526a\u5207",
"Copy": "\u590d\u5236",
"Paste": "\u7c98\u8d34",
"Select all": "\u5168\u9009",
"New document": "\u65b0\u6587\u4ef6",
"Ok": "\u786e\u5b9a",
"Cancel": "\u53d6\u6d88",
"Visual aids": "\u7f51\u683c\u7ebf",
"Bold": "\u7c97\u4f53",
"Italic": "\u659c\u4f53",
"Underline": "\u4e0b\u5212\u7ebf",
"Strikethrough": "\u5220\u9664\u7ebf",
"Superscript": "\u4e0a\u6807",
"Subscript": "\u4e0b\u6807",
"Clear formatting": "\u6e05\u9664\u683c\u5f0f",
"Align left": "\u5de6\u8fb9\u5bf9\u9f50",
"Align center": "\u4e2d\u95f4\u5bf9\u9f50",
"Align right": "\u53f3\u8fb9\u5bf9\u9f50",
"Justify": "\u4e24\u7aef\u5bf9\u9f50",
"Bullet list": "\u9879\u76ee\u7b26\u53f7",
"Numbered list": "\u7f16\u53f7\u5217\u8868",
"Decrease indent": "\u51cf\u5c11\u7f29\u8fdb",
"Increase indent": "\u589e\u52a0\u7f29\u8fdb",
"Close": "\u5173\u95ed",
"Formats": "\u683c\u5f0f",
"Your browser doesn't support direct access to the clipboard. Please use the Ctrl+X\/C\/V keyboard shortcuts instead.": "\u4f60\u7684\u6d4f\u89c8\u5668\u4e0d\u652f\u6301\u6253\u5f00\u526a\u8d34\u677f\uff0c\u8bf7\u4f7f\u7528Ctrl+X\/C\/V\u7b49\u5feb\u6377\u952e\u3002",
"Headers": "\u6807\u9898",
"Header 1": "\u6807\u98981",
"Header 2": "\u6807\u98982",
"Header 3": "\u6807\u98983",
"Header 4": "\u6807\u98984",
"Header 5": "\u6807\u98985",
"Header 6": "\u6807\u98986",
"Headings": "\u6807\u9898",
"Heading 1": "\u6807\u98981",
"Heading 2": "\u6807\u98982",
"Heading 3": "\u6807\u98983",
"Heading 4": "\u6807\u98984",
"Heading 5": "\u6807\u98985",
"Heading 6": "\u6807\u98986",
"Preformatted": "\u9884\u5148\u683c\u5f0f\u5316\u7684",
"Div": "Div",
"Pre": "Pre",
"Code": "\u4ee3\u7801",
"Paragraph": "\u6bb5\u843d",
"Blockquote": "\u5f15\u6587\u533a\u5757",
"Inline": "\u6587\u672c",
"Blocks": "\u57fa\u5757",
"Paste is now in plain text mode. Contents will now be pasted as plain text until you toggle this option off.": "\u5f53\u524d\u4e3a\u7eaf\u6587\u672c\u7c98\u8d34\u6a21\u5f0f\uff0c\u518d\u6b21\u70b9\u51fb\u53ef\u4ee5\u56de\u5230\u666e\u901a\u7c98\u8d34\u6a21\u5f0f\u3002",
"Fonts": "\u5b57\u4f53",
"Font Sizes": "\u5b57\u53f7",
"Class": "\u7c7b\u578b",
"Browse for an image": "\u6d4f\u89c8\u56fe\u50cf",
"OR": "\u6216",
"Drop an image here": "\u62d6\u653e\u4e00\u5f20\u56fe\u50cf\u81f3\u6b64",
"Upload": "\u4e0a\u4f20",
"Block": "\u5757",
"Align": "\u5bf9\u9f50",
"Default": "\u9ed8\u8ba4",
"Circle": "\u7a7a\u5fc3\u5706",
"Disc": "\u5b9e\u5fc3\u5706",
"Square": "\u65b9\u5757",
"Lower Alpha": "\u5c0f\u5199\u82f1\u6587\u5b57\u6bcd",
"Lower Greek": "\u5c0f\u5199\u5e0c\u814a\u5b57\u6bcd",
"Lower Roman": "\u5c0f\u5199\u7f57\u9a6c\u5b57\u6bcd",
"Upper Alpha": "\u5927\u5199\u82f1\u6587\u5b57\u6bcd",
"Upper Roman": "\u5927\u5199\u7f57\u9a6c\u5b57\u6bcd",
"Anchor...": "\u951a\u70b9...",
"Name": "\u540d\u79f0",
"Id": "\u6807\u8bc6\u7b26",
"Id should start with a letter, followed only by letters, numbers, dashes, dots, colons or underscores.": "\u6807\u8bc6\u7b26\u5e94\u8be5\u4ee5\u5b57\u6bcd\u5f00\u5934\uff0c\u540e\u8ddf\u5b57\u6bcd\u3001\u6570\u5b57\u3001\u7834\u6298\u53f7\u3001\u70b9\u3001\u5192\u53f7\u6216\u4e0b\u5212\u7ebf\u3002",
"You have unsaved changes are you sure you want to navigate away?": "\u4f60\u8fd8\u6709\u6587\u6863\u5c1a\u672a\u4fdd\u5b58\uff0c\u786e\u5b9a\u8981\u79bb\u5f00\uff1f",
"Restore last draft": "\u6062\u590d\u4e0a\u6b21\u7684\u8349\u7a3f",
"Special character...": "\u7279\u6b8a\u5b57\u7b26...",
"Source code": "\u6e90\u4ee3\u7801",
"Insert\/Edit code sample": "\u63d2\u5165\/\u7f16\u8f91\u4ee3\u7801\u793a\u4f8b",
"Language": "\u8bed\u8a00",
"Code sample...": "\u793a\u4f8b\u4ee3\u7801...",
"Color Picker": "\u9009\u8272\u5668",
"R": "R",
"G": "G",
"B": "B",
"Left to right": "\u4ece\u5de6\u5230\u53f3",
"Right to left": "\u4ece\u53f3\u5230\u5de6",
"Emoticons": "\u8868\u60c5",
"Emoticons...": "\u8868\u60c5\u7b26\u53f7...",
"Metadata and Document Properties": "\u5143\u6570\u636e\u548c\u6587\u6863\u5c5e\u6027",
"Title": "\u6807\u9898",
"Keywords": "\u5173\u952e\u8bcd",
"Description": "\u63cf\u8ff0",
"Robots": "\u673a\u5668\u4eba",
"Author": "\u4f5c\u8005",
"Encoding": "\u7f16\u7801",
"Fullscreen": "\u5168\u5c4f",
"Action": "\u64cd\u4f5c",
"Shortcut": "\u5feb\u6377\u952e",
"Help": "\u5e2e\u52a9",
"Address": "\u5730\u5740",
"Focus to menubar": "\u79fb\u52a8\u7126\u70b9\u5230\u83dc\u5355\u680f",
"Focus to toolbar": "\u79fb\u52a8\u7126\u70b9\u5230\u5de5\u5177\u680f",
"Focus to element path": "\u79fb\u52a8\u7126\u70b9\u5230\u5143\u7d20\u8def\u5f84",
"Focus to contextual toolbar": "\u79fb\u52a8\u7126\u70b9\u5230\u4e0a\u4e0b\u6587\u83dc\u5355",
"Insert link (if link plugin activated)": "\u63d2\u5165\u94fe\u63a5 (\u5982\u679c\u94fe\u63a5\u63d2\u4ef6\u5df2\u6fc0\u6d3b)",
"Save (if save plugin activated)": "\u4fdd\u5b58(\u5982\u679c\u4fdd\u5b58\u63d2\u4ef6\u5df2\u6fc0\u6d3b)",
"Find (if searchreplace plugin activated)": "\u67e5\u627e(\u5982\u679c\u67e5\u627e\u66ff\u6362\u63d2\u4ef6\u5df2\u6fc0\u6d3b)",
"Plugins installed ({0}):": "\u5df2\u5b89\u88c5\u63d2\u4ef6 ({0}):",
"Premium plugins:": "\u4f18\u79c0\u63d2\u4ef6\uff1a",
"Learn more...": "\u4e86\u89e3\u66f4\u591a...",
"You are using {0}": "\u4f60\u6b63\u5728\u4f7f\u7528 {0}",
"Plugins": "\u63d2\u4ef6",
"Handy Shortcuts": "\u5feb\u6377\u952e",
"Horizontal line": "\u6c34\u5e73\u5206\u5272\u7ebf",
"Insert\/edit image": "\u63d2\u5165\/\u7f16\u8f91\u56fe\u7247",
"Alternative description": "\u66ff\u4ee3\u63cf\u8ff0",
"Accessibility": "\u8f85\u52a9\u529f\u80fd",
"Image is decorative": "\u56fe\u50cf\u662f\u88c5\u9970\u6027\u7684",
"Source": "\u5730\u5740",
"Dimensions": "\u5927\u5c0f",
"Constrain proportions": "\u4fdd\u6301\u7eb5\u6a2a\u6bd4",
"General": "\u666e\u901a",
"Advanced": "\u9ad8\u7ea7",
"Style": "\u6837\u5f0f",
"Vertical space": "\u5782\u76f4\u8fb9\u8ddd",
"Horizontal space": "\u6c34\u5e73\u8fb9\u8ddd",
"Border": "\u8fb9\u6846",
"Insert image": "\u63d2\u5165\u56fe\u7247",
"Image...": "\u56fe\u7247...",
"Image list": "\u56fe\u7247\u5217\u8868",
"Rotate counterclockwise": "\u9006\u65f6\u9488\u65cb\u8f6c",
"Rotate clockwise": "\u987a\u65f6\u9488\u65cb\u8f6c",
"Flip vertically": "\u5782\u76f4\u7ffb\u8f6c",
"Flip horizontally": "\u6c34\u5e73\u7ffb\u8f6c",
"Edit image": "\u7f16\u8f91\u56fe\u7247",
"Image options": "\u56fe\u7247\u9009\u9879",
"Zoom in": "\u653e\u5927",
"Zoom out": "\u7f29\u5c0f",
"Crop": "\u88c1\u526a",
"Resize": "\u8c03\u6574\u5927\u5c0f",
"Orientation": "\u65b9\u5411",
"Brightness": "\u4eae\u5ea6",
"Sharpen": "\u9510\u5316",
"Contrast": "\u5bf9\u6bd4\u5ea6",
"Color levels": "\u989c\u8272\u5c42\u6b21",
"Gamma": "\u4f3d\u9a6c\u503c",
"Invert": "\u53cd\u8f6c",
"Apply": "\u5e94\u7528",
"Back": "\u540e\u9000",
"Insert date\/time": "\u63d2\u5165\u65e5\u671f\/\u65f6\u95f4",
"Date\/time": "\u65e5\u671f\/\u65f6\u95f4",
"Insert\/edit link": "\u63d2\u5165\/\u7f16\u8f91\u94fe\u63a5",
"Text to display": "\u663e\u793a\u6587\u5b57",
"Url": "\u5730\u5740",
"Open link in...": "\u94fe\u63a5\u6253\u5f00\u4f4d\u7f6e...",
"Current window": "\u5f53\u524d\u7a97\u53e3",
"None": "\u65e0",
"New window": "\u5728\u65b0\u7a97\u53e3\u6253\u5f00",
"Open link": "\u6253\u5f00\u94fe\u63a5",
"Remove link": "\u5220\u9664\u94fe\u63a5",
"Anchors": "\u951a\u70b9",
"Link...": "\u94fe\u63a5...",
"Paste or type a link": "\u7c98\u8d34\u6216\u8f93\u5165\u94fe\u63a5",
"The URL you entered seems to be an email address. Do you want to add the required mailto: prefix?": "\u4f60\u6240\u586b\u5199\u7684URL\u5730\u5740\u4e3a\u90ae\u4ef6\u5730\u5740\uff0c\u9700\u8981\u52a0\u4e0amailto:\u524d\u7f00\u5417\uff1f",
"The URL you entered seems to be an external link. Do you want to add the required http:\/\/ prefix?": "\u4f60\u6240\u586b\u5199\u7684URL\u5730\u5740\u5c5e\u4e8e\u5916\u90e8\u94fe\u63a5\uff0c\u9700\u8981\u52a0\u4e0ahttp:\/\/:\u524d\u7f00\u5417\uff1f",
"The URL you entered seems to be an external link. Do you want to add the required https:\/\/ prefix?": "\u60a8\u8f93\u5165\u7684 URL \u4f3c\u4e4e\u662f\u4e00\u4e2a\u5916\u90e8\u94fe\u63a5\u3002\u60a8\u60f3\u6dfb\u52a0\u6240\u9700\u7684 https:\/\/ \u524d\u7f00\u5417\uff1f",
"Link list": "\u94fe\u63a5\u5217\u8868",
"Insert video": "\u63d2\u5165\u89c6\u9891",
"Insert\/edit video": "\u63d2\u5165\/\u7f16\u8f91\u89c6\u9891",
"Insert\/edit media": "\u63d2\u5165\/\u7f16\u8f91\u5a92\u4f53",
"Alternative source": "\u955c\u50cf",
"Alternative source URL": "\u66ff\u4ee3\u6765\u6e90\u7f51\u5740",
"Media poster (Image URL)": "\u5c01\u9762(\u56fe\u7247\u5730\u5740)",
"Paste your embed code below:": "\u5c06\u5185\u5d4c\u4ee3\u7801\u7c98\u8d34\u5728\u4e0b\u9762:",
"Embed": "\u5185\u5d4c",
"Media...": "\u591a\u5a92\u4f53...",
"Nonbreaking space": "\u4e0d\u95f4\u65ad\u7a7a\u683c",
"Page break": "\u5206\u9875\u7b26",
"Paste as text": "\u7c98\u8d34\u4e3a\u6587\u672c",
"Preview": "\u9884\u89c8",
"Print...": "\u6253\u5370...",
"Save": "\u4fdd\u5b58",
"Find": "\u67e5\u627e",
"Replace with": "\u66ff\u6362\u4e3a",
"Replace": "\u66ff\u6362",
"Replace all": "\u5168\u90e8\u66ff\u6362",
"Previous": "\u4e0a\u4e00\u4e2a",
"Next": "\u4e0b\u4e00\u4e2a",
"Find and Replace": "\u67e5\u627e\u548c\u66ff\u6362",
"Find and replace...": "\u67e5\u627e\u5e76\u66ff\u6362...",
"Could not find the specified string.": "\u672a\u627e\u5230\u641c\u7d22\u5185\u5bb9.",
"Match case": "\u533a\u5206\u5927\u5c0f\u5199",
"Find whole words only": "\u5168\u5b57\u5339\u914d",
"Find in selection": "\u5728\u9009\u533a\u4e2d\u67e5\u627e",
"Spellcheck": "\u62fc\u5199\u68c0\u67e5",
"Spellcheck Language": "\u62fc\u5199\u68c0\u67e5\u8bed\u8a00",
"No misspellings found.": "\u6ca1\u6709\u53d1\u73b0\u62fc\u5199\u9519\u8bef",
"Ignore": "\u5ffd\u7565",
"Ignore all": "\u5168\u90e8\u5ffd\u7565",
"Finish": "\u5b8c\u6210",
"Add to Dictionary": "\u6dfb\u52a0\u5230\u5b57\u5178",
"Insert table": "\u63d2\u5165\u8868\u683c",
"Table properties": "\u8868\u683c\u5c5e\u6027",
"Delete table": "\u5220\u9664\u8868\u683c",
"Cell": "\u5355\u5143\u683c",
"Row": "\u884c",
"Column": "\u5217",
"Cell properties": "\u5355\u5143\u683c\u5c5e\u6027",
"Merge cells": "\u5408\u5e76\u5355\u5143\u683c",
"Split cell": "\u62c6\u5206\u5355\u5143\u683c",
"Insert row before": "\u5728\u4e0a\u65b9\u63d2\u5165",
"Insert row after": "\u5728\u4e0b\u65b9\u63d2\u5165",
"Delete row": "\u5220\u9664\u884c",
"Row properties": "\u884c\u5c5e\u6027",
"Cut row": "\u526a\u5207\u884c",
"Copy row": "\u590d\u5236\u884c",
"Paste row before": "\u7c98\u8d34\u5230\u4e0a\u65b9",
"Paste row after": "\u7c98\u8d34\u5230\u4e0b\u65b9",
"Insert column before": "\u5728\u5de6\u4fa7\u63d2\u5165",
"Insert column after": "\u5728\u53f3\u4fa7\u63d2\u5165",
"Delete column": "\u5220\u9664\u5217",
"Cols": "\u5217",
"Rows": "\u884c",
"Width": "\u5bbd",
"Height": "\u9ad8",
"Cell spacing": "\u5355\u5143\u683c\u5916\u95f4\u8ddd",
"Cell padding": "\u5355\u5143\u683c\u5185\u8fb9\u8ddd",
"Caption": "\u6807\u9898",
"Show caption": "\u663e\u793a\u6807\u9898",
"Left": "\u5de6\u5bf9\u9f50",
"Center": "\u5c45\u4e2d",
"Right": "\u53f3\u5bf9\u9f50",
"Cell type": "\u5355\u5143\u683c\u7c7b\u578b",
"Scope": "\u8303\u56f4",
"Alignment": "\u5bf9\u9f50\u65b9\u5f0f",
"H Align": "\u6c34\u5e73\u5bf9\u9f50",
"V Align": "\u5782\u76f4\u5bf9\u9f50",
"Top": "\u9876\u90e8\u5bf9\u9f50",
"Middle": "\u5782\u76f4\u5c45\u4e2d",
"Bottom": "\u5e95\u90e8\u5bf9\u9f50",
"Header cell": "\u8868\u5934\u5355\u5143\u683c",
"Row group": "\u884c\u7ec4",
"Column group": "\u5217\u7ec4",
"Row type": "\u884c\u7c7b\u578b",
"Header": "\u8868\u5934",
"Body": "\u8868\u4f53",
"Footer": "\u8868\u5c3e",
"Border color": "\u8fb9\u6846\u989c\u8272",
"Insert template...": "\u63d2\u5165\u6a21\u677f...",
"Templates": "\u6a21\u677f",
"Template": "\u6a21\u677f",
"Text color": "\u6587\u5b57\u989c\u8272",
"Background color": "\u80cc\u666f\u8272",
"Custom...": "\u81ea\u5b9a\u4e49...",
"Custom color": "\u81ea\u5b9a\u4e49\u989c\u8272",
"No color": "\u65e0",
"Remove color": "\u79fb\u9664\u989c\u8272",
"Table of Contents": "\u5185\u5bb9\u5217\u8868",
"Show blocks": "\u663e\u793a\u533a\u5757\u8fb9\u6846",
"Show invisible characters": "\u663e\u793a\u4e0d\u53ef\u89c1\u5b57\u7b26",
"Word count": "\u5b57\u6570",
"Count": "\u8ba1\u6570",
"Document": "\u6587\u6863",
"Selection": "\u9009\u62e9",
"Words": "\u5355\u8bcd",
"Words: {0}": "\u5b57\u6570\uff1a{0}",
"{0} words": "{0} \u5b57",
"File": "\u6587\u4ef6",
"Edit": "\u7f16\u8f91",
"Insert": "\u63d2\u5165",
"View": "\u89c6\u56fe",
"Format": "\u683c\u5f0f",
"Table": "\u8868\u683c",
"Tools": "\u5de5\u5177",
"Powered by {0}": "\u7531{0}\u9a71\u52a8",
"Rich Text Area. Press ALT-F9 for menu. Press ALT-F10 for toolbar. Press ALT-0 for help": "\u5728\u7f16\u8f91\u533a\u6309ALT-F9\u6253\u5f00\u83dc\u5355\uff0c\u6309ALT-F10\u6253\u5f00\u5de5\u5177\u680f\uff0c\u6309ALT-0\u67e5\u770b\u5e2e\u52a9",
"Image title": "\u56fe\u7247\u6807\u9898",
"Border width": "\u8fb9\u6846\u5bbd\u5ea6",
"Border style": "\u8fb9\u6846\u6837\u5f0f",
"Error": "\u9519\u8bef",
"Warn": "\u8b66\u544a",
"Valid": "\u6709\u6548",
"To open the popup, press Shift+Enter": "\u6309Shitf+Enter\u952e\u6253\u5f00\u5bf9\u8bdd\u6846",
"Rich Text Area. Press ALT-0 for help.": "\u7f16\u8f91\u533a\u3002\u6309Alt+0\u952e\u6253\u5f00\u5e2e\u52a9\u3002",
"System Font": "\u7cfb\u7edf\u5b57\u4f53",
"Failed to upload image: {0}": "\u56fe\u7247\u4e0a\u4f20\u5931\u8d25: {0}",
"Failed to load plugin: {0} from url {1}": "\u63d2\u4ef6\u52a0\u8f7d\u5931\u8d25: {0} \u6765\u81ea\u94fe\u63a5 {1}",
"Failed to load plugin url: {0}": "\u63d2\u4ef6\u52a0\u8f7d\u5931\u8d25 \u94fe\u63a5: {0}",
"Failed to initialize plugin: {0}": "\u63d2\u4ef6\u521d\u59cb\u5316\u5931\u8d25: {0}",
"example": "\u793a\u4f8b",
"Search": "\u641c\u7d22",
"All": "\u5168\u90e8",
"Currency": "\u8d27\u5e01",
"Text": "\u6587\u5b57",
"Quotations": "\u5f15\u7528",
"Mathematical": "\u6570\u5b66",
"Extended Latin": "\u62c9\u4e01\u8bed\u6269\u5145",
"Symbols": "\u7b26\u53f7",
"Arrows": "\u7bad\u5934",
"User Defined": "\u81ea\u5b9a\u4e49",
"dollar sign": "\u7f8e\u5143\u7b26\u53f7",
"currency sign": "\u8d27\u5e01\u7b26\u53f7",
"euro-currency sign": "\u6b27\u5143\u7b26\u53f7",
"colon sign": "\u5192\u53f7",
"cruzeiro sign": "\u514b\u9c81\u8d5b\u7f57\u5e01\u7b26\u53f7",
"french franc sign": "\u6cd5\u90ce\u7b26\u53f7",
"lira sign": "\u91cc\u62c9\u7b26\u53f7",
"mill sign": "\u5bc6\u5c14\u7b26\u53f7",
"naira sign": "\u5948\u62c9\u7b26\u53f7",
"peseta sign": "\u6bd4\u585e\u5854\u7b26\u53f7",
"rupee sign": "\u5362\u6bd4\u7b26\u53f7",
"won sign": "\u97e9\u5143\u7b26\u53f7",
"new sheqel sign": "\u65b0\u8c22\u514b\u5c14\u7b26\u53f7",
"dong sign": "\u8d8a\u5357\u76fe\u7b26\u53f7",
"kip sign": "\u8001\u631d\u57fa\u666e\u7b26\u53f7",
"tugrik sign": "\u56fe\u683c\u91cc\u514b\u7b26\u53f7",
"drachma sign": "\u5fb7\u62c9\u514b\u9a6c\u7b26\u53f7",
"german penny symbol": "\u5fb7\u56fd\u4fbf\u58eb\u7b26\u53f7",
"peso sign": "\u6bd4\u7d22\u7b26\u53f7",
"guarani sign": "\u74dc\u62c9\u5c3c\u7b26\u53f7",
"austral sign": "\u6fb3\u5143\u7b26\u53f7",
"hryvnia sign": "\u683c\u91cc\u592b\u5c3c\u4e9a\u7b26\u53f7",
"cedi sign": "\u585e\u5730\u7b26\u53f7",
"livre tournois sign": "\u91cc\u5f17\u5f17\u5c14\u7b26\u53f7",
"spesmilo sign": "spesmilo\u7b26\u53f7",
"tenge sign": "\u575a\u6208\u7b26\u53f7",
"indian rupee sign": "\u5370\u5ea6\u5362\u6bd4",
"turkish lira sign": "\u571f\u8033\u5176\u91cc\u62c9",
"nordic mark sign": "\u5317\u6b27\u9a6c\u514b",
"manat sign": "\u9a6c\u7eb3\u7279\u7b26\u53f7",
"ruble sign": "\u5362\u5e03\u7b26\u53f7",
"yen character": "\u65e5\u5143\u5b57\u6837",
"yuan character": "\u4eba\u6c11\u5e01\u5143\u5b57\u6837",
"yuan character, in hong kong and taiwan": "\u5143\u5b57\u6837\uff08\u6e2f\u53f0\u5730\u533a\uff09",
"yen\/yuan character variant one": "\u5143\u5b57\u6837\uff08\u5927\u5199\uff09",
"Loading emoticons...": "\u52a0\u8f7d\u8868\u60c5\u7b26\u53f7...",
"Could not load emoticons": "\u4e0d\u80fd\u52a0\u8f7d\u8868\u60c5\u7b26\u53f7",
"People": "\u4eba\u7c7b",
"Animals and Nature": "\u52a8\u7269\u548c\u81ea\u7136",
"Food and Drink": "\u98df\u7269\u548c\u996e\u54c1",
"Activity": "\u6d3b\u52a8",
"Travel and Places": "\u65c5\u6e38\u548c\u5730\u70b9",
"Objects": "\u7269\u4ef6",
"Flags": "\u65d7\u5e1c",
"Characters": "\u5b57\u7b26",
"Characters (no spaces)": "\u5b57\u7b26(\u65e0\u7a7a\u683c)",
"{0} characters": "{0} \u4e2a\u5b57\u7b26",
"Error: Form submit field collision.": "\u9519\u8bef: \u8868\u5355\u63d0\u4ea4\u5b57\u6bb5\u51b2\u7a81\u3002",
"Error: No form element found.": "\u9519\u8bef: \u6ca1\u6709\u8868\u5355\u63a7\u4ef6\u3002",
"Update": "\u66f4\u65b0",
"Color swatch": "\u989c\u8272\u6837\u672c",
"Turquoise": "\u9752\u7eff\u8272",
"Green": "\u7eff\u8272",
"Blue": "\u84dd\u8272",
"Purple": "\u7d2b\u8272",
"Navy Blue": "\u6d77\u519b\u84dd",
"Dark Turquoise": "\u6df1\u84dd\u7eff\u8272",
"Dark Green": "\u6df1\u7eff\u8272",
"Medium Blue": "\u4e2d\u84dd\u8272",
"Medium Purple": "\u4e2d\u7d2b\u8272",
"Midnight Blue": "\u6df1\u84dd\u8272",
"Yellow": "\u9ec4\u8272",
"Orange": "\u6a59\u8272",
"Red": "\u7ea2\u8272",
"Light Gray": "\u6d45\u7070\u8272",
"Gray": "\u7070\u8272",
"Dark Yellow": "\u6697\u9ec4\u8272",
"Dark Orange": "\u6df1\u6a59\u8272",
"Dark Red": "\u6df1\u7ea2\u8272",
"Medium Gray": "\u4e2d\u7070\u8272",
"Dark Gray": "\u6df1\u7070\u8272",
"Light Green": "\u6d45\u7eff\u8272",
"Light Yellow": "\u6d45\u9ec4\u8272",
"Light Red": "\u6d45\u7ea2\u8272",
"Light Purple": "\u6d45\u7d2b\u8272",
"Light Blue": "\u6d45\u84dd\u8272",
"Dark Purple": "\u6df1\u7d2b\u8272",
"Dark Blue": "\u6df1\u84dd\u8272",
"Black": "\u9ed1\u8272",
"White": "\u767d\u8272",
"Switch to or from fullscreen mode": "\u5207\u6362\u5168\u5c4f\u6a21\u5f0f",
"Open help dialog": "\u6253\u5f00\u5e2e\u52a9\u5bf9\u8bdd\u6846",
"history": "\u5386\u53f2",
"styles": "\u6837\u5f0f",
"formatting": "\u683c\u5f0f\u5316",
"alignment": "\u5bf9\u9f50",
"indentation": "\u7f29\u8fdb",
"Font": "\u5b57\u4f53",
"Size": "\u5b57\u53f7",
"More...": "\u66f4\u591a...",
"Select...": "\u9009\u62e9...",
"Preferences": "\u9996\u9009\u9879",
"Yes": "\u662f",
"No": "\u5426",
"Keyboard Navigation": "\u952e\u76d8\u6307\u5f15",
"Version": "\u7248\u672c",
"Code view": "\u4ee3\u7801\u89c6\u56fe",
"Open popup menu for split buttons": "\u6253\u5f00\u5f39\u51fa\u5f0f\u83dc\u5355\uff0c\u7528\u4e8e\u62c6\u5206\u6309\u94ae",
"List Properties": "\u5217\u8868\u5c5e\u6027",
"List properties...": "\u6807\u9898\u5b57\u4f53\u5c5e\u6027",
"Start list at number": "\u4ee5\u6570\u5b57\u5f00\u59cb\u5217\u8868",
"Line height": "\u884c\u9ad8",
"comments": "\u5907\u6ce8",
"Format Painter": "\u683c\u5f0f\u5237",
"Insert\/edit iframe": "\u63d2\u5165\/\u7f16\u8f91\u6846\u67b6",
"Capitalization": "\u5927\u5199",
"lowercase": "\u5c0f\u5199",
"UPPERCASE": "\u5927\u5199",
"Title Case": "\u9996\u5b57\u6bcd\u5927\u5199",
"permanent pen": "\u8bb0\u53f7\u7b14",
"Permanent Pen Properties": "\u6c38\u4e45\u7b14\u5c5e\u6027",
"Permanent pen properties...": "\u6c38\u4e45\u7b14\u5c5e\u6027...",
"case change": "\u6848\u4f8b\u66f4\u6539",
"page embed": "\u9875\u9762\u5d4c\u5165",
"Advanced sort...": "\u9ad8\u7ea7\u6392\u5e8f...",
"Advanced Sort": "\u9ad8\u7ea7\u6392\u5e8f",
"Sort table by column ascending": "\u6309\u5217\u5347\u5e8f\u8868",
"Sort table by column descending": "\u6309\u5217\u964d\u5e8f\u8868",
"Sort": "\u6392\u5e8f",
"Order": "\u6392\u5e8f",
"Sort by": "\u6392\u5e8f\u65b9\u5f0f",
"Ascending": "\u5347\u5e8f",
"Descending": "\u964d\u5e8f",
"Column {0}": "\u5217{0}",
"Row {0}": "\u884c{0}",
"Spellcheck...": "\u62fc\u5199\u68c0\u67e5...",
"Misspelled word": "\u62fc\u5199\u9519\u8bef\u7684\u5355\u8bcd",
"Suggestions": "\u5efa\u8bae",
"Change": "\u66f4\u6539",
"Finding word suggestions": "\u67e5\u627e\u5355\u8bcd\u5efa\u8bae",
"Success": "\u6210\u529f",
"Repair": "\u4fee\u590d",
"Issue {0} of {1}": "\u5171\u8ba1{1}\u95ee\u9898{0}",
"Images must be marked as decorative or have an alternative text description": "\u56fe\u50cf\u5fc5\u987b\u6807\u8bb0\u4e3a\u88c5\u9970\u6027\u6216\u5177\u6709\u66ff\u4ee3\u6587\u672c\u63cf\u8ff0",
"Images must have an alternative text description. Decorative images are not allowed.": "\u56fe\u50cf\u5fc5\u987b\u5177\u6709\u66ff\u4ee3\u6587\u672c\u63cf\u8ff0\u3002\u4e0d\u5141\u8bb8\u4f7f\u7528\u88c5\u9970\u56fe\u50cf\u3002",
"Or provide alternative text:": "\u6216\u63d0\u4f9b\u5907\u9009\u6587\u672c\uff1a",
"Make image decorative:": "\u4f7f\u56fe\u50cf\u88c5\u9970\uff1a",
"ID attribute must be unique": "ID \u5c5e\u6027\u5fc5\u987b\u662f\u552f\u4e00\u7684",
"Make ID unique": "\u4f7f ID \u72ec\u4e00\u65e0\u4e8c",
"Keep this ID and remove all others": "\u4fdd\u7559\u6b64 ID \u5e76\u5220\u9664\u6240\u6709\u5176\u4ed6",
"Remove this ID": "\u5220\u9664\u6b64 ID",
"Remove all IDs": "\u6e05\u9664\u5168\u90e8IDs",
"Checklist": "\u6e05\u5355",
"Anchor": "\u951a\u70b9",
"Special character": "\u7279\u6b8a\u7b26\u53f7",
"Code sample": "\u4ee3\u7801\u793a\u4f8b",
"Color": "\u989c\u8272",
"Document properties": "\u6587\u6863\u5c5e\u6027",
"Image description": "\u56fe\u7247\u63cf\u8ff0",
"Image": "\u56fe\u7247",
"Insert link": "\u63d2\u5165\u94fe\u63a5",
"Target": "\u6253\u5f00\u65b9\u5f0f",
"Link": "\u94fe\u63a5",
"Poster": "\u5c01\u9762",
"Media": "\u5a92\u4f53",
"Print": "\u6253\u5370",
"Prev": "\u4e0a\u4e00\u4e2a",
"Find and replace": "\u67e5\u627e\u548c\u66ff\u6362",
"Whole words": "\u5168\u5b57\u5339\u914d",
"Insert template": "\u63d2\u5165\u6a21\u677f"
});

View File

@ -0,0 +1,419 @@
tinymce.addI18n('zh_TW',{
"Redo": "\u91cd\u505a",
"Undo": "\u64a4\u92b7",
"Cut": "\u526a\u4e0b",
"Copy": "\u8907\u88fd",
"Paste": "\u8cbc\u4e0a",
"Select all": "\u5168\u9078",
"New document": "\u65b0\u6587\u4ef6",
"Ok": "\u78ba\u5b9a",
"Cancel": "\u53d6\u6d88",
"Visual aids": "\u5c0f\u5e6b\u624b",
"Bold": "\u7c97\u9ad4",
"Italic": "\u659c\u9ad4",
"Underline": "\u4e0b\u5283\u7dda",
"Strikethrough": "\u522a\u9664\u7dda",
"Superscript": "\u4e0a\u6a19",
"Subscript": "\u4e0b\u6a19",
"Clear formatting": "\u6e05\u9664\u683c\u5f0f",
"Align left": "\u5de6\u908a\u5c0d\u9f4a",
"Align center": "\u4e2d\u9593\u5c0d\u9f4a",
"Align right": "\u53f3\u908a\u5c0d\u9f4a",
"Justify": "\u5de6\u53f3\u5c0d\u9f4a",
"Bullet list": "\u9805\u76ee\u6e05\u55ae",
"Numbered list": "\u6578\u5b57\u6e05\u55ae",
"Decrease indent": "\u6e1b\u5c11\u7e2e\u6392",
"Increase indent": "\u589e\u52a0\u7e2e\u6392",
"Close": "\u95dc\u9589",
"Formats": "\u683c\u5f0f",
"Your browser doesn't support direct access to the clipboard. Please use the Ctrl+X\/C\/V keyboard shortcuts instead.": "\u60a8\u7684\u700f\u89bd\u5668\u4e0d\u652f\u63f4\u5b58\u53d6\u526a\u8cbc\u7c3f\uff0c\u53ef\u4ee5\u4f7f\u7528\u5feb\u901f\u9375 Ctrl + X\/C\/V \u4ee3\u66ff\u526a\u4e0b\u3001\u8907\u88fd\u8207\u8cbc\u4e0a\u3002",
"Headers": "\u6a19\u984c",
"Header 1": "\u6a19\u984c 1",
"Header 2": "\u6a19\u984c 2",
"Header 3": "\u6a19\u984c 3",
"Header 4": "\u6a19\u984c 4",
"Header 5": "\u6a19\u984c 5",
"Header 6": "\u6a19\u984c 6",
"Headings": "\u6a19\u984c",
"Heading 1": "\u6a19\u984c1",
"Heading 2": "\u6a19\u984c2",
"Heading 3": "\u6a19\u984c3",
"Heading 4": "\u6a19\u984c4",
"Heading 5": "\u6a19\u984c5",
"Heading 6": "\u6a19\u984c6",
"Preformatted": "\u9810\u5148\u683c\u5f0f\u5316\u7684",
"Div": "Div",
"Pre": "Pre",
"Code": "\u4ee3\u78bc",
"Paragraph": "\u6bb5\u843d",
"Blockquote": "\u5f15\u6587\u5340\u584a",
"Inline": "\u5167\u806f",
"Blocks": "\u57fa\u584a",
"Paste is now in plain text mode. Contents will now be pasted as plain text until you toggle this option off.": "\u76ee\u524d\u5c07\u4ee5\u7d14\u6587\u5b57\u7684\u6a21\u5f0f\u8cbc\u4e0a\uff0c\u60a8\u53ef\u4ee5\u518d\u9ede\u9078\u4e00\u6b21\u53d6\u6d88\u3002",
"Fonts": "\u5b57\u578b",
"Font Sizes": "\u5b57\u578b\u5927\u5c0f",
"Class": "\u985e\u578b",
"Browse for an image": "\u5f9e\u5716\u7247\u4e2d\u700f\u89bd",
"OR": "\u6216",
"Drop an image here": "\u62d6\u66f3\u5716\u7247\u81f3\u6b64",
"Upload": "\u4e0a\u50b3",
"Block": "\u5340\u584a",
"Align": "\u5c0d\u9f4a",
"Default": "\u9810\u8a2d",
"Circle": "\u7a7a\u5fc3\u5713",
"Disc": "\u5be6\u5fc3\u5713",
"Square": "\u6b63\u65b9\u5f62",
"Lower Alpha": "\u5c0f\u5beb\u82f1\u6587\u5b57\u6bcd",
"Lower Greek": "\u5e0c\u81d8\u5b57\u6bcd",
"Lower Roman": "\u5c0f\u5beb\u7f85\u99ac\u6578\u5b57",
"Upper Alpha": "\u5927\u5beb\u82f1\u6587\u5b57\u6bcd",
"Upper Roman": "\u5927\u5beb\u7f85\u99ac\u6578\u5b57",
"Anchor...": "\u9328\u9ede...",
"Name": "\u540d\u7a31",
"Id": "Id",
"Id should start with a letter, followed only by letters, numbers, dashes, dots, colons or underscores.": "Id\u61c9\u4ee5\u5b57\u6bcd\u958b\u982d\uff0c\u5f8c\u9762\u63a5\u8457\u5b57\u6bcd\uff0c\u6578\u5b57\uff0c\u7834\u6298\u865f\uff0c\u9ede\u6578\uff0c\u5192\u865f\u6216\u4e0b\u5283\u7dda\u3002",
"You have unsaved changes are you sure you want to navigate away?": "\u7de8\u8f2f\u5c1a\u672a\u88ab\u5132\u5b58\uff0c\u4f60\u78ba\u5b9a\u8981\u96e2\u958b\uff1f",
"Restore last draft": "\u8f09\u5165\u4e0a\u4e00\u6b21\u7de8\u8f2f\u7684\u8349\u7a3f",
"Special character...": "\u7279\u6b8a\u5b57\u5143......",
"Source code": "\u539f\u59cb\u78bc",
"Insert\/Edit code sample": "\u63d2\u5165\/\u7de8\u8f2f \u7a0b\u5f0f\u78bc\u7bc4\u4f8b",
"Language": "\u8a9e\u8a00",
"Code sample...": "\u7a0b\u5f0f\u78bc\u7bc4\u4f8b...",
"Color Picker": "\u9078\u8272\u5668",
"R": "\u7d05",
"G": "\u7da0",
"B": "\u85cd",
"Left to right": "\u5f9e\u5de6\u5230\u53f3",
"Right to left": "\u5f9e\u53f3\u5230\u5de6",
"Emoticons...": "\u8868\u60c5\u7b26\u865f\u2026",
"Metadata and Document Properties": "\u5f8c\u8a2d\u8cc7\u6599\u8207\u6587\u4ef6\u5c6c\u6027",
"Title": "\u6a19\u984c",
"Keywords": "\u95dc\u9375\u5b57",
"Description": "\u63cf\u8ff0",
"Robots": "\u6a5f\u5668\u4eba",
"Author": "\u4f5c\u8005",
"Encoding": "\u7de8\u78bc",
"Fullscreen": "\u5168\u87a2\u5e55",
"Action": "\u52d5\u4f5c",
"Shortcut": "\u5feb\u901f\u9375",
"Help": "\u5e6b\u52a9",
"Address": "\u5730\u5740",
"Focus to menubar": "\u8df3\u81f3\u9078\u55ae\u5217",
"Focus to toolbar": "\u8df3\u81f3\u5de5\u5177\u5217",
"Focus to element path": "\u8df3\u81f3HTML\u5143\u7d20\u5217",
"Focus to contextual toolbar": "\u8df3\u81f3\u5feb\u6377\u9078\u55ae",
"Insert link (if link plugin activated)": "\u65b0\u589e\u6377\u5f91 (\u6377\u5f91\u5916\u639b\u555f\u7528\u6642)",
"Save (if save plugin activated)": "\u5132\u5b58 (\u5132\u5b58\u5916\u639b\u555f\u7528\u6642)",
"Find (if searchreplace plugin activated)": "\u5c0b\u627e (\u5c0b\u627e\u53d6\u4ee3\u5916\u639b\u555f\u7528\u6642)",
"Plugins installed ({0}):": "({0}) \u500b\u5916\u639b\u5df2\u5b89\u88dd\uff1a",
"Premium plugins:": "\u52a0\u503c\u5916\u639b\uff1a",
"Learn more...": "\u4e86\u89e3\u66f4\u591a...",
"You are using {0}": "\u60a8\u6b63\u5728\u4f7f\u7528 {0}",
"Plugins": "\u5916\u639b",
"Handy Shortcuts": "\u5feb\u901f\u9375",
"Horizontal line": "\u6c34\u5e73\u7dda",
"Insert\/edit image": "\u63d2\u5165\/\u7de8\u8f2f \u5716\u7247",
"Image description": "\u5716\u7247\u63cf\u8ff0",
"Source": "\u5716\u7247\u7db2\u5740",
"Dimensions": "\u5c3a\u5bf8",
"Constrain proportions": "\u7b49\u6bd4\u4f8b\u7e2e\u653e",
"General": "\u4e00\u822c",
"Advanced": "\u9032\u968e",
"Style": "\u6a23\u5f0f",
"Vertical space": "\u9ad8\u5ea6",
"Horizontal space": "\u5bec\u5ea6",
"Border": "\u908a\u6846",
"Insert image": "\u63d2\u5165\u5716\u7247",
"Image...": "\u5716\u7247......",
"Image list": "\u5716\u7247\u6e05\u55ae",
"Rotate counterclockwise": "\u9006\u6642\u91dd\u65cb\u8f49",
"Rotate clockwise": "\u9806\u6642\u91dd\u65cb\u8f49",
"Flip vertically": "\u5782\u76f4\u7ffb\u8f49",
"Flip horizontally": "\u6c34\u5e73\u7ffb\u8f49",
"Edit image": "\u7de8\u8f2f\u5716\u7247",
"Image options": "\u5716\u7247\u9078\u9805",
"Zoom in": "\u653e\u5927",
"Zoom out": "\u7e2e\u5c0f",
"Crop": "\u88c1\u526a",
"Resize": "\u8abf\u6574\u5927\u5c0f",
"Orientation": "\u65b9\u5411",
"Brightness": "\u4eae\u5ea6",
"Sharpen": "\u92b3\u5316",
"Contrast": "\u5c0d\u6bd4",
"Color levels": "\u984f\u8272\u5c64\u6b21",
"Gamma": "\u4f3d\u99ac\u503c",
"Invert": "\u53cd\u8f49",
"Apply": "\u61c9\u7528",
"Back": "\u5f8c\u9000",
"Insert date\/time": "\u63d2\u5165 \u65e5\u671f\/\u6642\u9593",
"Date\/time": "\u65e5\u671f\/\u6642\u9593",
"Insert\/Edit Link": "\u63d2\u5165\/\u7de8\u8f2f\u9023\u7d50",
"Insert\/edit link": "\u63d2\u5165\/\u7de8\u8f2f\u9023\u7d50",
"Text to display": "\u986f\u793a\u6587\u5b57",
"Url": "\u7db2\u5740",
"Open link in...": "\u958b\u555f\u9023\u7d50\u65bc...",
"Current window": "\u76ee\u524d\u8996\u7a97",
"None": "\u7121",
"New window": "\u53e6\u958b\u8996\u7a97",
"Remove link": "\u79fb\u9664\u9023\u7d50",
"Anchors": "\u52a0\u5165\u9328\u9ede",
"Link...": "\u9023\u7d50...",
"Paste or type a link": "\u8cbc\u4e0a\u6216\u8f38\u5165\u9023\u7d50",
"The URL you entered seems to be an email address. Do you want to add the required mailto: prefix?": "\u4f60\u6240\u586b\u5beb\u7684URL\u70ba\u96fb\u5b50\u90f5\u4ef6\uff0c\u9700\u8981\u52a0\u4e0amailto:\u524d\u7db4\u55ce\uff1f",
"The URL you entered seems to be an external link. Do you want to add the required http:\/\/ prefix?": "\u4f60\u6240\u586b\u5beb\u7684URL\u5c6c\u65bc\u5916\u90e8\u93c8\u63a5\uff0c\u9700\u8981\u52a0\u4e0ahttp:\/\/:\u524d\u7db4\u55ce\uff1f",
"Link list": "\u9023\u7d50\u6e05\u55ae",
"Insert video": "\u63d2\u5165\u5f71\u97f3",
"Insert\/edit video": "\u63d2\u4ef6\/\u7de8\u8f2f \u5f71\u97f3",
"Insert\/edit media": "\u63d2\u5165\/\u7de8\u8f2f \u5a92\u9ad4",
"Alternative source": "\u66ff\u4ee3\u5f71\u97f3",
"Alternative source URL": "\u66ff\u4ee3\u4f86\u6e90URL",
"Media poster (Image URL)": "\u5a92\u9ad4\u6d77\u5831\uff08\u5f71\u50cfImage URL\uff09",
"Paste your embed code below:": "\u8acb\u5c07\u60a8\u7684\u5d4c\u5165\u5f0f\u7a0b\u5f0f\u78bc\u8cbc\u5728\u4e0b\u9762:",
"Embed": "\u5d4c\u5165\u78bc",
"Media...": "\u5a92\u9ad4...",
"Nonbreaking space": "\u4e0d\u5206\u884c\u7684\u7a7a\u683c",
"Page break": "\u5206\u9801",
"Paste as text": "\u4ee5\u7d14\u6587\u5b57\u8cbc\u4e0a",
"Preview": "\u9810\u89bd",
"Print...": "\u5217\u5370...",
"Save": "\u5132\u5b58",
"Find": "\u641c\u5c0b",
"Replace with": "\u66f4\u63db",
"Replace": "\u66ff\u63db",
"Replace all": "\u66ff\u63db\u5168\u90e8",
"Previous": "\u4e0a\u4e00\u500b",
"Next": "\u4e0b\u4e00\u500b",
"Find and replace...": "\u5c0b\u627e\u53ca\u53d6\u4ee3...",
"Could not find the specified string.": "\u7121\u6cd5\u67e5\u8a62\u5230\u6b64\u7279\u5b9a\u5b57\u4e32",
"Match case": "\u76f8\u5339\u914d\u6848\u4ef6",
"Find whole words only": "\u50c5\u627e\u51fa\u5b8c\u6574\u5b57\u532f",
"Spell check": "\u62fc\u5beb\u6aa2\u67e5",
"Ignore": "\u5ffd\u7565",
"Ignore all": "\u5ffd\u7565\u6240\u6709",
"Finish": "\u5b8c\u6210",
"Add to Dictionary": "\u52a0\u5165\u5b57\u5178\u4e2d",
"Insert table": "\u63d2\u5165\u8868\u683c",
"Table properties": "\u8868\u683c\u5c6c\u6027",
"Delete table": "\u522a\u9664\u8868\u683c",
"Cell": "\u5132\u5b58\u683c",
"Row": "\u5217",
"Column": "\u884c",
"Cell properties": "\u5132\u5b58\u683c\u5c6c\u6027",
"Merge cells": "\u5408\u4f75\u5132\u5b58\u683c",
"Split cell": "\u5206\u5272\u5132\u5b58\u683c",
"Insert row before": "\u63d2\u5165\u5217\u5728...\u4e4b\u524d",
"Insert row after": "\u63d2\u5165\u5217\u5728...\u4e4b\u5f8c",
"Delete row": "\u522a\u9664\u5217",
"Row properties": "\u5217\u5c6c\u6027",
"Cut row": "\u526a\u4e0b\u5217",
"Copy row": "\u8907\u88fd\u5217",
"Paste row before": "\u8cbc\u4e0a\u5217\u5728...\u4e4b\u524d",
"Paste row after": "\u8cbc\u4e0a\u5217\u5728...\u4e4b\u5f8c",
"Insert column before": "\u63d2\u5165\u6b04\u4f4d\u5728...\u4e4b\u524d",
"Insert column after": "\u63d2\u5165\u6b04\u4f4d\u5728...\u4e4b\u5f8c",
"Delete column": "\u522a\u9664\u884c",
"Cols": "\u6b04\u4f4d\u6bb5",
"Rows": "\u5217",
"Width": "\u5bec\u5ea6",
"Height": "\u9ad8\u5ea6",
"Cell spacing": "\u5132\u5b58\u683c\u5f97\u9593\u8ddd",
"Cell padding": "\u5132\u5b58\u683c\u7684\u908a\u8ddd",
"Show caption": "\u986f\u793a\u6a19\u984c",
"Left": "\u5de6\u908a",
"Center": "\u4e2d\u9593",
"Right": "\u53f3\u908a",
"Cell type": "\u5132\u5b58\u683c\u7684\u985e\u578b",
"Scope": "\u7bc4\u570d",
"Alignment": "\u5c0d\u9f4a",
"H Align": "\u6c34\u5e73\u4f4d\u7f6e",
"V Align": "\u5782\u76f4\u4f4d\u7f6e",
"Top": "\u7f6e\u9802",
"Middle": "\u7f6e\u4e2d",
"Bottom": "\u7f6e\u5e95",
"Header cell": "\u6a19\u982d\u5132\u5b58\u683c",
"Row group": "\u5217\u7fa4\u7d44",
"Column group": "\u6b04\u4f4d\u7fa4\u7d44",
"Row type": "\u884c\u7684\u985e\u578b",
"Header": "\u6a19\u982d",
"Body": "\u4e3b\u9ad4",
"Footer": "\u9801\u5c3e",
"Border color": "\u908a\u6846\u984f\u8272",
"Insert template...": "\u63d2\u5165\u6a23\u7248...",
"Templates": "\u6a23\u7248",
"Template": "\u6a23\u677f",
"Text color": "\u6587\u5b57\u984f\u8272",
"Background color": "\u80cc\u666f\u984f\u8272",
"Custom...": "\u81ea\u8a02",
"Custom color": "\u81ea\u8a02\u984f\u8272",
"No color": "No color",
"Remove color": "\u79fb\u9664\u984f\u8272",
"Table of Contents": "\u76ee\u9304",
"Show blocks": "\u986f\u793a\u5340\u584a\u8cc7\u8a0a",
"Show invisible characters": "\u986f\u793a\u96b1\u85cf\u5b57\u5143",
"Word count": "\u8a08\u7b97\u5b57\u6578",
"Count": "\u8a08\u7b97",
"Document": "\u6587\u4ef6",
"Selection": "\u9078\u9805",
"Words": "\u5b57\u6578",
"Words: {0}": "\u5b57\u6578\uff1a{0}",
"{0} words": "{0} \u5b57\u5143",
"File": "\u6a94\u6848",
"Edit": "\u7de8\u8f2f",
"Insert": "\u63d2\u5165",
"View": "\u6aa2\u8996",
"Format": "\u683c\u5f0f",
"Table": "\u8868\u683c",
"Tools": "\u5de5\u5177",
"Powered by {0}": "\u7531 {0} \u63d0\u4f9b",
"Rich Text Area. Press ALT-F9 for menu. Press ALT-F10 for toolbar. Press ALT-0 for help": "\u8c50\u5bcc\u7684\u6587\u672c\u5340\u57df\u3002\u6309ALT-F9\u524d\u5f80\u4e3b\u9078\u55ae\u3002\u6309ALT-F10\u547c\u53eb\u5de5\u5177\u6b04\u3002\u6309ALT-0\u5c0b\u6c42\u5e6b\u52a9",
"Image title": "\u5716\u7247\u6a19\u984c",
"Border width": "\u6846\u7dda\u5bec\u5ea6",
"Border style": "\u6846\u7dda\u6a23\u5f0f",
"Error": "\u932f\u8aa4",
"Warn": "\u8b66\u544a",
"Valid": "\u6709\u6548",
"To open the popup, press Shift+Enter": "\u8981\u958b\u555f\u5f48\u51fa\u8996\u7a97\uff0c\u8acb\u6309Shift+Enter",
"Rich Text Area. Press ALT-0 for help.": "\u5bcc\u6587\u672c\u5340\u57df\u3002\u8acb\u6309ALT-0\u5c0b\u6c42\u5354\u52a9\u3002",
"System Font": "\u7cfb\u7d71\u5b57\u578b",
"Failed to upload image: {0}": "\u7121\u6cd5\u4e0a\u50b3\u5f71\u50cf\uff1a{0}",
"Failed to load plugin: {0} from url {1}": "\u7121\u6cd5\u4e0a\u50b3\u63d2\u4ef6\uff1a{0}\u81eaurl{1}",
"Failed to load plugin url: {0}": "\u7121\u6cd5\u4e0a\u50b3\u63d2\u4ef6\uff1a{0}",
"Failed to initialize plugin: {0}": "\u7121\u6cd5\u555f\u52d5\u63d2\u4ef6\uff1a{0}",
"example": "\u7bc4\u4f8b",
"Search": "\u641c\u7d22",
"All": "\u5168\u90e8",
"Currency": "\u8ca8\u5e63",
"Text": "\u6587\u672c",
"Quotations": "\u5f15\u7528",
"Mathematical": "\u6578\u5b78",
"Extended Latin": "\u62c9\u4e01\u5b57\u6bcd\u64f4\u5145",
"Symbols": "\u7b26\u865f",
"Arrows": "\u7bad\u982d",
"User Defined": "\u4f7f\u7528\u8005\u5df2\u5b9a\u7fa9",
"dollar sign": "\u7f8e\u5143\u7b26\u865f",
"currency sign": "\u8ca8\u5e63\u7b26\u865f",
"euro-currency sign": "\u6b50\u5143\u7b26\u865f",
"colon sign": "\u79d1\u6717\u7b26\u865f",
"cruzeiro sign": "\u514b\u9b6f\u8cfd\u7f85\u7b26\u865f",
"french franc sign": "\u6cd5\u6717\u7b26\u865f",
"lira sign": "\u91cc\u62c9\u7b26\u865f",
"mill sign": "\u6587\u7b26\u865f",
"naira sign": "\u5948\u62c9\u7b26\u865f",
"peseta sign": "\u6bd4\u585e\u5854\u7b26\u865f",
"rupee sign": "\u76e7\u6bd4\u7b26\u865f",
"won sign": "\u97d3\u571c\u7b26\u865f",
"new sheqel sign": "\u65b0\u8b1d\u514b\u723e\u7b26\u865f",
"dong sign": "\u8d8a\u5357\u76fe\u7b26\u865f",
"kip sign": "\u8001\u64be\u5e63\u7b26\u865f",
"tugrik sign": "\u8499\u53e4\u5e63\u7b26\u865f",
"drachma sign": "\u5fb7\u514b\u62c9\u99ac\u7b26\u865f",
"german penny symbol": "\u5fb7\u570b\u5206\u7b26\u865f",
"peso sign": "\u62ab\u7d22\u7b26\u865f",
"guarani sign": "\u5df4\u62c9\u572d\u5e63\u7b26\u865f",
"austral sign": "\u963f\u6839\u5ef7\u5e63\u7b26\u865f",
"hryvnia sign": "\u70cf\u514b\u862d\u5e63\u7b26\u865f",
"cedi sign": "\u8fe6\u7d0d\u5e63\u7b26\u865f",
"livre tournois sign": "\u91cc\u5f17\u723e\u7b26\u865f",
"spesmilo sign": "\u570b\u969b\u5e63\u7b26\u865f",
"tenge sign": "\u54c8\u85a9\u514b\u5e63\u7b26\u865f",
"indian rupee sign": "\u5370\u5ea6\u76e7\u6bd4\u7b26\u865f",
"turkish lira sign": "\u571f\u8033\u5176\u91cc\u62c9\u7b26\u865f",
"nordic mark sign": "\u5317\u6b50\u99ac\u514b\u7b26\u865f",
"manat sign": "\u4e9e\u585e\u62dc\u7136\u5e63\u7b26\u865f",
"ruble sign": "\u76e7\u5e03\u7b26\u865f",
"yen character": "\u65e5\u5713\u7b26\u865f",
"yuan character": "\u4eba\u6c11\u5e63\u7b26\u865f",
"yuan character, in hong kong and taiwan": "\u6e2f\u5143\u8207\u53f0\u5e63\u7b26\u865f",
"yen\/yuan character variant one": "\u65e5\u5713\/\u4eba\u6c11\u5e63\u7b26\u865f\u8b8a\u5316\u578b",
"Loading emoticons...": "\u8f09\u5165\u8868\u60c5\u7b26\u865f\u2026",
"Could not load emoticons": "\u7121\u6cd5\u8f09\u5165\u8868\u60c5\u7b26\u865f",
"People": "\u4eba",
"Animals and Nature": "\u52d5\u7269\u8207\u81ea\u7136",
"Food and Drink": "\u98f2\u98df",
"Activity": "\u6d3b\u52d5",
"Travel and Places": "\u65c5\u884c\u8207\u5730\u9ede",
"Objects": "\u7269\u4ef6",
"Flags": "\u65d7\u6a19",
"Characters": "\u5b57\u5143",
"Characters (no spaces)": "\u5b57\u5143\uff08\u7121\u7a7a\u683c\uff09",
"{0} characters": "{0}\u5b57\u5143",
"Error: Form submit field collision.": "\u932f\u8aa4\uff1a\u8868\u683c\u905e\u4ea4\u6b04\u4f4d\u885d\u7a81\u3002",
"Error: No form element found.": "\u932f\u8aa4\uff1a\u627e\u4e0d\u5230\u8868\u683c\u5143\u7d20\u3002",
"Update": "\u66f4\u65b0",
"Color swatch": "\u8272\u5f69\u6a23\u672c",
"Turquoise": "\u571f\u8033\u5176\u85cd",
"Green": "\u7da0\u8272",
"Blue": "\u85cd\u8272",
"Purple": "\u7d2b\u8272",
"Navy Blue": "\u6df1\u85cd\u8272",
"Dark Turquoise": "\u6df1\u571f\u8033\u5176\u85cd",
"Dark Green": "\u6df1\u7da0\u8272",
"Medium Blue": "\u4e2d\u85cd\u8272",
"Medium Purple": "\u4e2d\u7d2b\u8272",
"Midnight Blue": "\u9ed1\u85cd\u8272",
"Yellow": "\u9ec3\u8272",
"Orange": "\u6a59\u8272",
"Red": "\u7d05\u8272",
"Light Gray": "\u6dfa\u7070\u8272",
"Gray": "\u7070\u8272",
"Dark Yellow": "\u6df1\u9ec3\u8272",
"Dark Orange": "\u6df1\u6a59\u8272",
"Dark Red": "\u6697\u7d05\u8272",
"Medium Gray": "\u4e2d\u7070\u8272",
"Dark Gray": "\u6df1\u7070\u8272",
"Light Green": "\u6de1\u7da0\u8272",
"Light Yellow": "\u6dfa\u9ec3\u8272",
"Light Red": "\u6dfa\u7d05\u8272",
"Light Purple": "\u6dfa\u7d2b\u8272",
"Light Blue": "\u6dfa\u85cd\u8272",
"Dark Purple": "\u6df1\u7d2b\u8272",
"Dark Blue": "\u6df1\u85cd\u8272",
"Black": "\u9ed1\u8272",
"White": "\u767d\u8272",
"Switch to or from fullscreen mode": "\u8f49\u63db\u81ea\/\u81f3\u5168\u87a2\u5e55\u6a21\u5f0f",
"Open help dialog": "\u958b\u555f\u5354\u52a9\u5c0d\u8a71",
"history": "\u6b77\u53f2",
"styles": "\u6a23\u5f0f",
"formatting": "\u683c\u5f0f",
"alignment": "\u5c0d\u9f4a",
"indentation": "\u7e2e\u6392",
"permanent pen": "\u6c38\u4e45\u6027\u7b46",
"comments": "\u8a3b\u89e3",
"Format Painter": "\u8907\u88fd\u683c\u5f0f",
"Insert\/edit iframe": "\u63d2\u5165\/\u7de8\u8f2fiframe",
"Capitalization": "\u5927\u5beb",
"lowercase": "\u5c0f\u5beb",
"UPPERCASE": "\u5927\u5beb",
"Title Case": "\u5b57\u9996\u5927\u5beb",
"Permanent Pen Properties": "\u6c38\u4e45\u6a19\u8a18\u5c6c\u6027",
"Permanent pen properties...": "\u6c38\u4e45\u6a19\u8a18\u5c6c\u6027......",
"Font": "\u5b57\u578b",
"Size": "\u5b57\u5f62\u5927\u5c0f",
"More...": "\u66f4\u591a\u8cc7\u8a0a......",
"Spellcheck Language": "\u62fc\u5beb\u8a9e\u8a00",
"Select...": "\u9078\u64c7......",
"Preferences": "\u9996\u9078\u9805",
"Yes": "\u662f",
"No": "\u5426",
"Keyboard Navigation": "\u9375\u76e4\u5c0e\u822a",
"Version": "\u7248\u672c",
"Anchor": "\u52a0\u5165\u9328\u9ede",
"Special character": "\u7279\u6b8a\u5b57\u5143",
"Code sample": "\u7a0b\u5f0f\u78bc\u7bc4\u4f8b",
"Color": "\u984f\u8272",
"Emoticons": "\u8868\u60c5",
"Document properties": "\u6587\u4ef6\u7684\u5c6c\u6027",
"Image": "\u5716\u7247",
"Insert link": "\u63d2\u5165\u9023\u7d50",
"Target": "\u958b\u555f\u65b9\u5f0f",
"Link": "\u9023\u7d50",
"Poster": "\u9810\u89bd\u5716\u7247",
"Media": "\u5a92\u9ad4",
"Print": "\u5217\u5370",
"Prev": "\u4e0a\u4e00\u500b",
"Find and replace": "\u5c0b\u627e\u53ca\u53d6\u4ee3",
"Whole words": "\u6574\u500b\u55ae\u5b57",
"Spellcheck": "\u62fc\u5b57\u6aa2\u67e5",
"Caption": "\u8868\u683c\u6a19\u984c",
"Insert template": "\u63d2\u5165\u6a23\u7248"
});

View File

@ -0,0 +1,72 @@
/**
* Copyright (c) Tiny Technologies, Inc. All rights reserved.
* Licensed under the LGPL or a commercial license.
* For LGPL see License.txt in the project root for license information.
* For commercial licenses see https://www.tiny.cloud/
*/
body {
background-color: #2f3742;
color: #dfe0e4;
font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Oxygen, Ubuntu, Cantarell, 'Open Sans', 'Helvetica Neue', sans-serif;
line-height: 1.4;
margin: 1rem;
}
a {
color: #4099ff;
}
table {
border-collapse: collapse;
}
/* Apply a default padding if legacy cellpadding attribute is missing */
table:not([cellpadding]) th,
table:not([cellpadding]) td {
padding: 0.4rem;
}
/* Set default table styles if a table has a positive border attribute
and no inline css */
table[border]:not([border="0"]):not([style*="border-width"]) th,
table[border]:not([border="0"]):not([style*="border-width"]) td {
border-width: 1px;
}
/* Set default table styles if a table has a positive border attribute
and no inline css */
table[border]:not([border="0"]):not([style*="border-style"]) th,
table[border]:not([border="0"]):not([style*="border-style"]) td {
border-style: solid;
}
/* Set default table styles if a table has a positive border attribute
and no inline css */
table[border]:not([border="0"]):not([style*="border-color"]) th,
table[border]:not([border="0"]):not([style*="border-color"]) td {
border-color: #6d737b;
}
figure {
display: table;
margin: 1rem auto;
}
figure figcaption {
color: #8a8f97;
display: block;
margin-top: 0.25rem;
text-align: center;
}
hr {
border-color: #6d737b;
border-style: solid;
border-width: 1px 0 0 0;
}
code {
background-color: #6d737b;
border-radius: 3px;
padding: 0.1rem 0.2rem;
}
.mce-content-body:not([dir=rtl]) blockquote {
border-left: 2px solid #6d737b;
margin-left: 1.5rem;
padding-left: 1rem;
}
.mce-content-body[dir=rtl] blockquote {
border-right: 2px solid #6d737b;
margin-right: 1.5rem;
padding-right: 1rem;
}

View File

@ -0,0 +1,7 @@
/**
* Copyright (c) Tiny Technologies, Inc. All rights reserved.
* Licensed under the LGPL or a commercial license.
* For LGPL see License.txt in the project root for license information.
* For commercial licenses see https://www.tiny.cloud/
*/
body{background-color:#2f3742;color:#dfe0e4;font-family:-apple-system,BlinkMacSystemFont,'Segoe UI',Roboto,Oxygen,Ubuntu,Cantarell,'Open Sans','Helvetica Neue',sans-serif;line-height:1.4;margin:1rem}a{color:#4099ff}table{border-collapse:collapse}table:not([cellpadding]) td,table:not([cellpadding]) th{padding:.4rem}table[border]:not([border="0"]):not([style*=border-width]) td,table[border]:not([border="0"]):not([style*=border-width]) th{border-width:1px}table[border]:not([border="0"]):not([style*=border-style]) td,table[border]:not([border="0"]):not([style*=border-style]) th{border-style:solid}table[border]:not([border="0"]):not([style*=border-color]) td,table[border]:not([border="0"]):not([style*=border-color]) th{border-color:#6d737b}figure{display:table;margin:1rem auto}figure figcaption{color:#8a8f97;display:block;margin-top:.25rem;text-align:center}hr{border-color:#6d737b;border-style:solid;border-width:1px 0 0 0}code{background-color:#6d737b;border-radius:3px;padding:.1rem .2rem}.mce-content-body:not([dir=rtl]) blockquote{border-left:2px solid #6d737b;margin-left:1.5rem;padding-left:1rem}.mce-content-body[dir=rtl] blockquote{border-right:2px solid #6d737b;margin-right:1.5rem;padding-right:1rem}

View File

@ -0,0 +1,67 @@
/**
* Copyright (c) Tiny Technologies, Inc. All rights reserved.
* Licensed under the LGPL or a commercial license.
* For LGPL see License.txt in the project root for license information.
* For commercial licenses see https://www.tiny.cloud/
*/
body {
font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Oxygen, Ubuntu, Cantarell, 'Open Sans', 'Helvetica Neue', sans-serif;
line-height: 1.4;
margin: 1rem;
}
table {
border-collapse: collapse;
}
/* Apply a default padding if legacy cellpadding attribute is missing */
table:not([cellpadding]) th,
table:not([cellpadding]) td {
padding: 0.4rem;
}
/* Set default table styles if a table has a positive border attribute
and no inline css */
table[border]:not([border="0"]):not([style*="border-width"]) th,
table[border]:not([border="0"]):not([style*="border-width"]) td {
border-width: 1px;
}
/* Set default table styles if a table has a positive border attribute
and no inline css */
table[border]:not([border="0"]):not([style*="border-style"]) th,
table[border]:not([border="0"]):not([style*="border-style"]) td {
border-style: solid;
}
/* Set default table styles if a table has a positive border attribute
and no inline css */
table[border]:not([border="0"]):not([style*="border-color"]) th,
table[border]:not([border="0"]):not([style*="border-color"]) td {
border-color: #ccc;
}
figure {
display: table;
margin: 1rem auto;
}
figure figcaption {
color: #999;
display: block;
margin-top: 0.25rem;
text-align: center;
}
hr {
border-color: #ccc;
border-style: solid;
border-width: 1px 0 0 0;
}
code {
background-color: #e8e8e8;
border-radius: 3px;
padding: 0.1rem 0.2rem;
}
.mce-content-body:not([dir=rtl]) blockquote {
border-left: 2px solid #ccc;
margin-left: 1.5rem;
padding-left: 1rem;
}
.mce-content-body[dir=rtl] blockquote {
border-right: 2px solid #ccc;
margin-right: 1.5rem;
padding-right: 1rem;
}

View File

@ -0,0 +1,7 @@
/**
* Copyright (c) Tiny Technologies, Inc. All rights reserved.
* Licensed under the LGPL or a commercial license.
* For LGPL see License.txt in the project root for license information.
* For commercial licenses see https://www.tiny.cloud/
*/
body{font-family:-apple-system,BlinkMacSystemFont,'Segoe UI',Roboto,Oxygen,Ubuntu,Cantarell,'Open Sans','Helvetica Neue',sans-serif;line-height:1.4;margin:1rem}table{border-collapse:collapse}table:not([cellpadding]) td,table:not([cellpadding]) th{padding:.4rem}table[border]:not([border="0"]):not([style*=border-width]) td,table[border]:not([border="0"]):not([style*=border-width]) th{border-width:1px}table[border]:not([border="0"]):not([style*=border-style]) td,table[border]:not([border="0"]):not([style*=border-style]) th{border-style:solid}table[border]:not([border="0"]):not([style*=border-color]) td,table[border]:not([border="0"]):not([style*=border-color]) th{border-color:#ccc}figure{display:table;margin:1rem auto}figure figcaption{color:#999;display:block;margin-top:.25rem;text-align:center}hr{border-color:#ccc;border-style:solid;border-width:1px 0 0 0}code{background-color:#e8e8e8;border-radius:3px;padding:.1rem .2rem}.mce-content-body:not([dir=rtl]) blockquote{border-left:2px solid #ccc;margin-left:1.5rem;padding-left:1rem}.mce-content-body[dir=rtl] blockquote{border-right:2px solid #ccc;margin-right:1.5rem;padding-right:1rem}

View File

@ -0,0 +1,72 @@
/**
* Copyright (c) Tiny Technologies, Inc. All rights reserved.
* Licensed under the LGPL or a commercial license.
* For LGPL see License.txt in the project root for license information.
* For commercial licenses see https://www.tiny.cloud/
*/
@media screen {
html {
background: #f4f4f4;
min-height: 100%;
}
}
body {
font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Oxygen, Ubuntu, Cantarell, 'Open Sans', 'Helvetica Neue', sans-serif;
}
@media screen {
body {
background-color: #fff;
box-shadow: 0 0 4px rgba(0, 0, 0, 0.15);
box-sizing: border-box;
margin: 1rem auto 0;
max-width: 820px;
min-height: calc(100vh - 1rem);
padding: 4rem 6rem 6rem 6rem;
}
}
table {
border-collapse: collapse;
}
/* Apply a default padding if legacy cellpadding attribute is missing */
table:not([cellpadding]) th,
table:not([cellpadding]) td {
padding: 0.4rem;
}
/* Set default table styles if a table has a positive border attribute
and no inline css */
table[border]:not([border="0"]):not([style*="border-width"]) th,
table[border]:not([border="0"]):not([style*="border-width"]) td {
border-width: 1px;
}
/* Set default table styles if a table has a positive border attribute
and no inline css */
table[border]:not([border="0"]):not([style*="border-style"]) th,
table[border]:not([border="0"]):not([style*="border-style"]) td {
border-style: solid;
}
/* Set default table styles if a table has a positive border attribute
and no inline css */
table[border]:not([border="0"]):not([style*="border-color"]) th,
table[border]:not([border="0"]):not([style*="border-color"]) td {
border-color: #ccc;
}
figure figcaption {
color: #999;
margin-top: 0.25rem;
text-align: center;
}
hr {
border-color: #ccc;
border-style: solid;
border-width: 1px 0 0 0;
}
.mce-content-body:not([dir=rtl]) blockquote {
border-left: 2px solid #ccc;
margin-left: 1.5rem;
padding-left: 1rem;
}
.mce-content-body[dir=rtl] blockquote {
border-right: 2px solid #ccc;
margin-right: 1.5rem;
padding-right: 1rem;
}

View File

@ -0,0 +1,7 @@
/**
* Copyright (c) Tiny Technologies, Inc. All rights reserved.
* Licensed under the LGPL or a commercial license.
* For LGPL see License.txt in the project root for license information.
* For commercial licenses see https://www.tiny.cloud/
*/
@media screen{html{background:#f4f4f4;min-height:100%}}body{font-family:-apple-system,BlinkMacSystemFont,'Segoe UI',Roboto,Oxygen,Ubuntu,Cantarell,'Open Sans','Helvetica Neue',sans-serif}@media screen{body{background-color:#fff;box-shadow:0 0 4px rgba(0,0,0,.15);box-sizing:border-box;margin:1rem auto 0;max-width:820px;min-height:calc(100vh - 1rem);padding:4rem 6rem 6rem 6rem}}table{border-collapse:collapse}table:not([cellpadding]) td,table:not([cellpadding]) th{padding:.4rem}table[border]:not([border="0"]):not([style*=border-width]) td,table[border]:not([border="0"]):not([style*=border-width]) th{border-width:1px}table[border]:not([border="0"]):not([style*=border-style]) td,table[border]:not([border="0"]):not([style*=border-style]) th{border-style:solid}table[border]:not([border="0"]):not([style*=border-color]) td,table[border]:not([border="0"]):not([style*=border-color]) th{border-color:#ccc}figure figcaption{color:#999;margin-top:.25rem;text-align:center}hr{border-color:#ccc;border-style:solid;border-width:1px 0 0 0}.mce-content-body:not([dir=rtl]) blockquote{border-left:2px solid #ccc;margin-left:1.5rem;padding-left:1rem}.mce-content-body[dir=rtl] blockquote{border-right:2px solid #ccc;margin-right:1.5rem;padding-right:1rem}

View File

@ -0,0 +1,68 @@
/**
* Copyright (c) Tiny Technologies, Inc. All rights reserved.
* Licensed under the LGPL or a commercial license.
* For LGPL see License.txt in the project root for license information.
* For commercial licenses see https://www.tiny.cloud/
*/
body {
font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Oxygen, Ubuntu, Cantarell, 'Open Sans', 'Helvetica Neue', sans-serif;
line-height: 1.4;
margin: 1rem auto;
max-width: 900px;
}
table {
border-collapse: collapse;
}
/* Apply a default padding if legacy cellpadding attribute is missing */
table:not([cellpadding]) th,
table:not([cellpadding]) td {
padding: 0.4rem;
}
/* Set default table styles if a table has a positive border attribute
and no inline css */
table[border]:not([border="0"]):not([style*="border-width"]) th,
table[border]:not([border="0"]):not([style*="border-width"]) td {
border-width: 1px;
}
/* Set default table styles if a table has a positive border attribute
and no inline css */
table[border]:not([border="0"]):not([style*="border-style"]) th,
table[border]:not([border="0"]):not([style*="border-style"]) td {
border-style: solid;
}
/* Set default table styles if a table has a positive border attribute
and no inline css */
table[border]:not([border="0"]):not([style*="border-color"]) th,
table[border]:not([border="0"]):not([style*="border-color"]) td {
border-color: #ccc;
}
figure {
display: table;
margin: 1rem auto;
}
figure figcaption {
color: #999;
display: block;
margin-top: 0.25rem;
text-align: center;
}
hr {
border-color: #ccc;
border-style: solid;
border-width: 1px 0 0 0;
}
code {
background-color: #e8e8e8;
border-radius: 3px;
padding: 0.1rem 0.2rem;
}
.mce-content-body:not([dir=rtl]) blockquote {
border-left: 2px solid #ccc;
margin-left: 1.5rem;
padding-left: 1rem;
}
.mce-content-body[dir=rtl] blockquote {
border-right: 2px solid #ccc;
margin-right: 1.5rem;
padding-right: 1rem;
}

View File

@ -0,0 +1,7 @@
/**
* Copyright (c) Tiny Technologies, Inc. All rights reserved.
* Licensed under the LGPL or a commercial license.
* For LGPL see License.txt in the project root for license information.
* For commercial licenses see https://www.tiny.cloud/
*/
body{font-family:-apple-system,BlinkMacSystemFont,'Segoe UI',Roboto,Oxygen,Ubuntu,Cantarell,'Open Sans','Helvetica Neue',sans-serif;line-height:1.4;margin:1rem auto;max-width:900px}table{border-collapse:collapse}table:not([cellpadding]) td,table:not([cellpadding]) th{padding:.4rem}table[border]:not([border="0"]):not([style*=border-width]) td,table[border]:not([border="0"]):not([style*=border-width]) th{border-width:1px}table[border]:not([border="0"]):not([style*=border-style]) td,table[border]:not([border="0"]):not([style*=border-style]) th{border-style:solid}table[border]:not([border="0"]):not([style*=border-color]) td,table[border]:not([border="0"]):not([style*=border-color]) th{border-color:#ccc}figure{display:table;margin:1rem auto}figure figcaption{color:#999;display:block;margin-top:.25rem;text-align:center}hr{border-color:#ccc;border-style:solid;border-width:1px 0 0 0}code{background-color:#e8e8e8;border-radius:3px;padding:.1rem .2rem}.mce-content-body:not([dir=rtl]) blockquote{border-left:2px solid #ccc;margin-left:1.5rem;padding-left:1rem}.mce-content-body[dir=rtl] blockquote{border-right:2px solid #ccc;margin-right:1.5rem;padding-right:1rem}

View File

@ -0,0 +1,714 @@
/**
* Copyright (c) Tiny Technologies, Inc. All rights reserved.
* Licensed under the LGPL or a commercial license.
* For LGPL see License.txt in the project root for license information.
* For commercial licenses see https://www.tiny.cloud/
*/
.mce-content-body .mce-item-anchor {
background: transparent url("data:image/svg+xml;charset=UTF-8,%3Csvg%20width%3D'8'%20height%3D'12'%20xmlns%3D'http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg'%3E%3Cpath%20d%3D'M0%200L8%200%208%2012%204.09117821%209%200%2012z'%20fill%3D%22%23cccccc%22%2F%3E%3C%2Fsvg%3E%0A") no-repeat center;
cursor: default;
display: inline-block;
height: 12px !important;
padding: 0 2px;
-webkit-user-modify: read-only;
-moz-user-modify: read-only;
-webkit-user-select: all;
-moz-user-select: all;
-ms-user-select: all;
user-select: all;
width: 8px !important;
}
.mce-content-body .mce-item-anchor[data-mce-selected] {
outline-offset: 1px;
}
.tox-comments-visible .tox-comment {
background-color: #fff0b7;
}
.tox-comments-visible .tox-comment--active {
background-color: #ffe168;
}
.tox-checklist > li:not(.tox-checklist--hidden) {
list-style: none;
margin: 0.25em 0;
}
.tox-checklist > li:not(.tox-checklist--hidden)::before {
content: url("data:image/svg+xml;charset=UTF-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%2216%22%20height%3D%2216%22%20viewBox%3D%220%200%2016%2016%22%3E%3Cg%20id%3D%22checklist-unchecked%22%20fill%3D%22none%22%20fill-rule%3D%22evenodd%22%3E%3Crect%20id%3D%22Rectangle%22%20width%3D%2215%22%20height%3D%2215%22%20x%3D%22.5%22%20y%3D%22.5%22%20fill-rule%3D%22nonzero%22%20stroke%3D%22%236d737b%22%20rx%3D%222%22%2F%3E%3C%2Fg%3E%3C%2Fsvg%3E%0A");
cursor: pointer;
height: 1em;
margin-left: -1.5em;
margin-top: 0.125em;
position: absolute;
width: 1em;
}
.tox-checklist li:not(.tox-checklist--hidden).tox-checklist--checked::before {
content: url("data:image/svg+xml;charset=UTF-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%2216%22%20height%3D%2216%22%20viewBox%3D%220%200%2016%2016%22%3E%3Cg%20id%3D%22checklist-checked%22%20fill%3D%22none%22%20fill-rule%3D%22evenodd%22%3E%3Crect%20id%3D%22Rectangle%22%20width%3D%2216%22%20height%3D%2216%22%20fill%3D%22%234099FF%22%20fill-rule%3D%22nonzero%22%20rx%3D%222%22%2F%3E%3Cpath%20id%3D%22Path%22%20fill%3D%22%23FFF%22%20fill-rule%3D%22nonzero%22%20d%3D%22M11.5703186%2C3.14417309%20C11.8516238%2C2.73724603%2012.4164781%2C2.62829933%2012.83558%2C2.89774797%20C13.260121%2C3.17069355%2013.3759736%2C3.72932262%2013.0909105%2C4.14168582%20L7.7580587%2C11.8560195%20C7.43776896%2C12.3193404%206.76483983%2C12.3852142%206.35607322%2C11.9948725%20L3.02491697%2C8.8138662%20C2.66090143%2C8.46625845%202.65798871%2C7.89594698%203.01850234%2C7.54483354%20C3.373942%2C7.19866177%203.94940006%2C7.19592841%204.30829608%2C7.5386474%20L6.85276923%2C9.9684299%20L11.5703186%2C3.14417309%20Z%22%2F%3E%3C%2Fg%3E%3C%2Fsvg%3E%0A");
}
[dir=rtl] .tox-checklist > li:not(.tox-checklist--hidden)::before {
margin-left: 0;
margin-right: -1.5em;
}
/* stylelint-disable */
/* http://prismjs.com/ */
/**
* Dracula Theme originally by Zeno Rocha [@zenorocha]
* https://draculatheme.com/
*
* Ported for PrismJS by Albert Vallverdu [@byverdu]
*/
code[class*="language-"],
pre[class*="language-"] {
color: #f8f8f2;
background: none;
text-shadow: 0 1px rgba(0, 0, 0, 0.3);
font-family: Consolas, Monaco, 'Andale Mono', 'Ubuntu Mono', monospace;
text-align: left;
white-space: pre;
word-spacing: normal;
word-break: normal;
word-wrap: normal;
line-height: 1.5;
-moz-tab-size: 4;
tab-size: 4;
-webkit-hyphens: none;
-ms-hyphens: none;
hyphens: none;
}
/* Code blocks */
pre[class*="language-"] {
padding: 1em;
margin: 0.5em 0;
overflow: auto;
border-radius: 0.3em;
}
:not(pre) > code[class*="language-"],
pre[class*="language-"] {
background: #282a36;
}
/* Inline code */
:not(pre) > code[class*="language-"] {
padding: 0.1em;
border-radius: 0.3em;
white-space: normal;
}
.token.comment,
.token.prolog,
.token.doctype,
.token.cdata {
color: #6272a4;
}
.token.punctuation {
color: #f8f8f2;
}
.namespace {
opacity: 0.7;
}
.token.property,
.token.tag,
.token.constant,
.token.symbol,
.token.deleted {
color: #ff79c6;
}
.token.boolean,
.token.number {
color: #bd93f9;
}
.token.selector,
.token.attr-name,
.token.string,
.token.char,
.token.builtin,
.token.inserted {
color: #50fa7b;
}
.token.operator,
.token.entity,
.token.url,
.language-css .token.string,
.style .token.string,
.token.variable {
color: #f8f8f2;
}
.token.atrule,
.token.attr-value,
.token.function,
.token.class-name {
color: #f1fa8c;
}
.token.keyword {
color: #8be9fd;
}
.token.regex,
.token.important {
color: #ffb86c;
}
.token.important,
.token.bold {
font-weight: bold;
}
.token.italic {
font-style: italic;
}
.token.entity {
cursor: help;
}
/* stylelint-enable */
.mce-content-body {
overflow-wrap: break-word;
word-wrap: break-word;
}
.mce-content-body .mce-visual-caret {
background-color: black;
background-color: currentColor;
position: absolute;
}
.mce-content-body .mce-visual-caret-hidden {
display: none;
}
.mce-content-body *[data-mce-caret] {
left: -1000px;
margin: 0;
padding: 0;
position: absolute;
right: auto;
top: 0;
}
.mce-content-body .mce-offscreen-selection {
left: -2000000px;
max-width: 1000000px;
position: absolute;
}
.mce-content-body *[contentEditable=false] {
cursor: default;
}
.mce-content-body *[contentEditable=true] {
cursor: text;
}
.tox-cursor-format-painter {
cursor: url("data:image/svg+xml;charset=UTF-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%2224%22%20height%3D%2224%22%20viewBox%3D%220%200%2024%2024%22%3E%0A%20%20%3Cg%20fill%3D%22none%22%20fill-rule%3D%22evenodd%22%3E%0A%20%20%20%20%3Cpath%20fill%3D%22%23000%22%20fill-rule%3D%22nonzero%22%20d%3D%22M15%2C6%20C15%2C5.45%2014.55%2C5%2014%2C5%20L6%2C5%20C5.45%2C5%205%2C5.45%205%2C6%20L5%2C10%20C5%2C10.55%205.45%2C11%206%2C11%20L14%2C11%20C14.55%2C11%2015%2C10.55%2015%2C10%20L15%2C9%20L16%2C9%20L16%2C12%20L9%2C12%20L9%2C19%20C9%2C19.55%209.45%2C20%2010%2C20%20L11%2C20%20C11.55%2C20%2012%2C19.55%2012%2C19%20L12%2C14%20L18%2C14%20L18%2C7%20L15%2C7%20L15%2C6%20Z%22%2F%3E%0A%20%20%20%20%3Cpath%20fill%3D%22%23000%22%20fill-rule%3D%22nonzero%22%20d%3D%22M1%2C1%20L8.25%2C1%20C8.66421356%2C1%209%2C1.33578644%209%2C1.75%20L9%2C1.75%20C9%2C2.16421356%208.66421356%2C2.5%208.25%2C2.5%20L2.5%2C2.5%20L2.5%2C8.25%20C2.5%2C8.66421356%202.16421356%2C9%201.75%2C9%20L1.75%2C9%20C1.33578644%2C9%201%2C8.66421356%201%2C8.25%20L1%2C1%20Z%22%2F%3E%0A%20%20%3C%2Fg%3E%0A%3C%2Fsvg%3E%0A"), default;
}
.mce-content-body figure.align-left {
float: left;
}
.mce-content-body figure.align-right {
float: right;
}
.mce-content-body figure.image.align-center {
display: table;
margin-left: auto;
margin-right: auto;
}
.mce-preview-object {
border: 1px solid gray;
display: inline-block;
line-height: 0;
margin: 0 2px 0 2px;
position: relative;
}
.mce-preview-object .mce-shim {
background: url(data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7);
height: 100%;
left: 0;
position: absolute;
top: 0;
width: 100%;
}
.mce-preview-object[data-mce-selected="2"] .mce-shim {
display: none;
}
.mce-object {
background: transparent url("data:image/svg+xml;charset=UTF-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%2224%22%20height%3D%2224%22%3E%3Cpath%20d%3D%22M4%203h16a1%201%200%200%201%201%201v16a1%201%200%200%201-1%201H4a1%201%200%200%201-1-1V4a1%201%200%200%201%201-1zm1%202v14h14V5H5zm4.79%202.565l5.64%204.028a.5.5%200%200%201%200%20.814l-5.64%204.028a.5.5%200%200%201-.79-.407V7.972a.5.5%200%200%201%20.79-.407z%22%20fill%3D%22%23cccccc%22%2F%3E%3C%2Fsvg%3E%0A") no-repeat center;
border: 1px dashed #aaa;
}
.mce-pagebreak {
border: 1px dashed #aaa;
cursor: default;
display: block;
height: 5px;
margin-top: 15px;
page-break-before: always;
width: 100%;
}
@media print {
.mce-pagebreak {
border: 0;
}
}
.tiny-pageembed .mce-shim {
background: url(data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7);
height: 100%;
left: 0;
position: absolute;
top: 0;
width: 100%;
}
.tiny-pageembed[data-mce-selected="2"] .mce-shim {
display: none;
}
.tiny-pageembed {
display: inline-block;
position: relative;
}
.tiny-pageembed--21by9,
.tiny-pageembed--16by9,
.tiny-pageembed--4by3,
.tiny-pageembed--1by1 {
display: block;
overflow: hidden;
padding: 0;
position: relative;
width: 100%;
}
.tiny-pageembed--21by9 {
padding-top: 42.857143%;
}
.tiny-pageembed--16by9 {
padding-top: 56.25%;
}
.tiny-pageembed--4by3 {
padding-top: 75%;
}
.tiny-pageembed--1by1 {
padding-top: 100%;
}
.tiny-pageembed--21by9 iframe,
.tiny-pageembed--16by9 iframe,
.tiny-pageembed--4by3 iframe,
.tiny-pageembed--1by1 iframe {
border: 0;
height: 100%;
left: 0;
position: absolute;
top: 0;
width: 100%;
}
.mce-content-body[data-mce-placeholder] {
position: relative;
}
.mce-content-body[data-mce-placeholder]:not(.mce-visualblocks)::before {
color: rgba(34, 47, 62, 0.7);
content: attr(data-mce-placeholder);
position: absolute;
}
.mce-content-body:not([dir=rtl])[data-mce-placeholder]:not(.mce-visualblocks)::before {
left: 1px;
}
.mce-content-body[dir=rtl][data-mce-placeholder]:not(.mce-visualblocks)::before {
right: 1px;
}
.mce-content-body div.mce-resizehandle {
background-color: #4099ff;
border-color: #4099ff;
border-style: solid;
border-width: 1px;
box-sizing: border-box;
height: 10px;
position: absolute;
width: 10px;
z-index: 1298;
}
.mce-content-body div.mce-resizehandle:hover {
background-color: #4099ff;
}
.mce-content-body div.mce-resizehandle:nth-of-type(1) {
cursor: nwse-resize;
}
.mce-content-body div.mce-resizehandle:nth-of-type(2) {
cursor: nesw-resize;
}
.mce-content-body div.mce-resizehandle:nth-of-type(3) {
cursor: nwse-resize;
}
.mce-content-body div.mce-resizehandle:nth-of-type(4) {
cursor: nesw-resize;
}
.mce-content-body .mce-resize-backdrop {
z-index: 10000;
}
.mce-content-body .mce-clonedresizable {
cursor: default;
opacity: 0.5;
outline: 1px dashed black;
position: absolute;
z-index: 10001;
}
.mce-content-body .mce-clonedresizable.mce-resizetable-columns th,
.mce-content-body .mce-clonedresizable.mce-resizetable-columns td {
border: 0;
}
.mce-content-body .mce-resize-helper {
background: #555;
background: rgba(0, 0, 0, 0.75);
border: 1px;
border-radius: 3px;
color: white;
display: none;
font-family: sans-serif;
font-size: 12px;
line-height: 14px;
margin: 5px 10px;
padding: 5px;
position: absolute;
white-space: nowrap;
z-index: 10002;
}
.tox-rtc-user-selection {
position: relative;
}
.tox-rtc-user-cursor {
bottom: 0;
cursor: default;
position: absolute;
top: 0;
width: 2px;
}
.tox-rtc-user-cursor::before {
background-color: inherit;
border-radius: 50%;
content: '';
display: block;
height: 8px;
position: absolute;
right: -3px;
top: -3px;
width: 8px;
}
.tox-rtc-user-cursor:hover::after {
background-color: inherit;
border-radius: 100px;
box-sizing: border-box;
color: #fff;
content: attr(data-user);
display: block;
font-size: 12px;
font-weight: bold;
left: -5px;
min-height: 8px;
min-width: 8px;
padding: 0 12px;
position: absolute;
top: -11px;
white-space: nowrap;
z-index: 1000;
}
.tox-rtc-user-selection--1 .tox-rtc-user-cursor {
background-color: #2dc26b;
}
.tox-rtc-user-selection--2 .tox-rtc-user-cursor {
background-color: #e03e2d;
}
.tox-rtc-user-selection--3 .tox-rtc-user-cursor {
background-color: #f1c40f;
}
.tox-rtc-user-selection--4 .tox-rtc-user-cursor {
background-color: #3598db;
}
.tox-rtc-user-selection--5 .tox-rtc-user-cursor {
background-color: #b96ad9;
}
.tox-rtc-user-selection--6 .tox-rtc-user-cursor {
background-color: #e67e23;
}
.tox-rtc-user-selection--7 .tox-rtc-user-cursor {
background-color: #aaa69d;
}
.tox-rtc-user-selection--8 .tox-rtc-user-cursor {
background-color: #f368e0;
}
.tox-rtc-remote-image {
background: #eaeaea url("data:image/svg+xml;charset=UTF-8,%3Csvg%20width%3D%2236%22%20height%3D%2212%22%20viewBox%3D%220%200%2036%2012%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%0A%20%20%3Ccircle%20cx%3D%226%22%20cy%3D%226%22%20r%3D%223%22%20fill%3D%22rgba(0%2C%200%2C%200%2C%20.2)%22%3E%0A%20%20%20%20%3Canimate%20attributeName%3D%22r%22%20values%3D%223%3B5%3B3%22%20calcMode%3D%22linear%22%20dur%3D%221s%22%20repeatCount%3D%22indefinite%22%20%2F%3E%0A%20%20%3C%2Fcircle%3E%0A%20%20%3Ccircle%20cx%3D%2218%22%20cy%3D%226%22%20r%3D%223%22%20fill%3D%22rgba(0%2C%200%2C%200%2C%20.2)%22%3E%0A%20%20%20%20%3Canimate%20attributeName%3D%22r%22%20values%3D%223%3B5%3B3%22%20calcMode%3D%22linear%22%20begin%3D%22.33s%22%20dur%3D%221s%22%20repeatCount%3D%22indefinite%22%20%2F%3E%0A%20%20%3C%2Fcircle%3E%0A%20%20%3Ccircle%20cx%3D%2230%22%20cy%3D%226%22%20r%3D%223%22%20fill%3D%22rgba(0%2C%200%2C%200%2C%20.2)%22%3E%0A%20%20%20%20%3Canimate%20attributeName%3D%22r%22%20values%3D%223%3B5%3B3%22%20calcMode%3D%22linear%22%20begin%3D%22.66s%22%20dur%3D%221s%22%20repeatCount%3D%22indefinite%22%20%2F%3E%0A%20%20%3C%2Fcircle%3E%0A%3C%2Fsvg%3E%0A") no-repeat center center;
border: 1px solid #ccc;
min-height: 240px;
min-width: 320px;
}
.mce-match-marker {
background: #aaa;
color: #fff;
}
.mce-match-marker-selected {
background: #39f;
color: #fff;
}
.mce-match-marker-selected::-moz-selection {
background: #39f;
color: #fff;
}
.mce-match-marker-selected::selection {
background: #39f;
color: #fff;
}
.mce-content-body img[data-mce-selected],
.mce-content-body video[data-mce-selected],
.mce-content-body audio[data-mce-selected],
.mce-content-body object[data-mce-selected],
.mce-content-body embed[data-mce-selected],
.mce-content-body table[data-mce-selected] {
outline: 3px solid #4099ff;
}
.mce-content-body hr[data-mce-selected] {
outline: 3px solid #4099ff;
outline-offset: 1px;
}
.mce-content-body *[contentEditable=false] *[contentEditable=true]:focus {
outline: 3px solid #4099ff;
}
.mce-content-body *[contentEditable=false] *[contentEditable=true]:hover {
outline: 3px solid #4099ff;
}
.mce-content-body *[contentEditable=false][data-mce-selected] {
cursor: not-allowed;
outline: 3px solid #4099ff;
}
.mce-content-body.mce-content-readonly *[contentEditable=true]:focus,
.mce-content-body.mce-content-readonly *[contentEditable=true]:hover {
outline: none;
}
.mce-content-body *[data-mce-selected="inline-boundary"] {
background-color: #4099ff;
}
.mce-content-body .mce-edit-focus {
outline: 3px solid #4099ff;
}
.mce-content-body td[data-mce-selected],
.mce-content-body th[data-mce-selected] {
position: relative;
}
.mce-content-body td[data-mce-selected]::-moz-selection,
.mce-content-body th[data-mce-selected]::-moz-selection {
background: none;
}
.mce-content-body td[data-mce-selected]::selection,
.mce-content-body th[data-mce-selected]::selection {
background: none;
}
.mce-content-body td[data-mce-selected] *,
.mce-content-body th[data-mce-selected] * {
outline: none;
-webkit-touch-callout: none;
-webkit-user-select: none;
-moz-user-select: none;
-ms-user-select: none;
user-select: none;
}
.mce-content-body td[data-mce-selected]::after,
.mce-content-body th[data-mce-selected]::after {
background-color: rgba(180, 215, 255, 0.7);
border: 1px solid transparent;
bottom: -1px;
content: '';
left: -1px;
mix-blend-mode: lighten;
position: absolute;
right: -1px;
top: -1px;
}
@media screen and (-ms-high-contrast: active), (-ms-high-contrast: none) {
.mce-content-body td[data-mce-selected]::after,
.mce-content-body th[data-mce-selected]::after {
border-color: rgba(0, 84, 180, 0.7);
}
}
.mce-content-body img::-moz-selection {
background: none;
}
.mce-content-body img::selection {
background: none;
}
.ephox-snooker-resizer-bar {
background-color: #4099ff;
opacity: 0;
-webkit-user-select: none;
-moz-user-select: none;
-ms-user-select: none;
user-select: none;
}
.ephox-snooker-resizer-cols {
cursor: col-resize;
}
.ephox-snooker-resizer-rows {
cursor: row-resize;
}
.ephox-snooker-resizer-bar.ephox-snooker-resizer-bar-dragging {
opacity: 1;
}
.mce-spellchecker-word {
background-image: url("data:image/svg+xml;charset=UTF-8,%3Csvg%20width%3D'4'%20height%3D'4'%20xmlns%3D'http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg'%3E%3Cpath%20stroke%3D'%23ff0000'%20fill%3D'none'%20stroke-linecap%3D'round'%20stroke-opacity%3D'.75'%20d%3D'M0%203L2%201%204%203'%2F%3E%3C%2Fsvg%3E%0A");
background-position: 0 calc(100% + 1px);
background-repeat: repeat-x;
background-size: auto 6px;
cursor: default;
height: 2rem;
}
.mce-spellchecker-grammar {
background-image: url("data:image/svg+xml;charset=UTF-8,%3Csvg%20width%3D'4'%20height%3D'4'%20xmlns%3D'http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg'%3E%3Cpath%20stroke%3D'%2300A835'%20fill%3D'none'%20stroke-linecap%3D'round'%20d%3D'M0%203L2%201%204%203'%2F%3E%3C%2Fsvg%3E%0A");
background-position: 0 calc(100% + 1px);
background-repeat: repeat-x;
background-size: auto 6px;
cursor: default;
}
.mce-toc {
border: 1px solid gray;
}
.mce-toc h2 {
margin: 4px;
}
.mce-toc li {
list-style-type: none;
}
table[style*="border-width: 0px"],
.mce-item-table:not([border]),
.mce-item-table[border="0"],
table[style*="border-width: 0px"] td,
.mce-item-table:not([border]) td,
.mce-item-table[border="0"] td,
table[style*="border-width: 0px"] th,
.mce-item-table:not([border]) th,
.mce-item-table[border="0"] th,
table[style*="border-width: 0px"] caption,
.mce-item-table:not([border]) caption,
.mce-item-table[border="0"] caption {
border: 1px dashed #bbb;
}
.mce-visualblocks p,
.mce-visualblocks h1,
.mce-visualblocks h2,
.mce-visualblocks h3,
.mce-visualblocks h4,
.mce-visualblocks h5,
.mce-visualblocks h6,
.mce-visualblocks div:not([data-mce-bogus]),
.mce-visualblocks section,
.mce-visualblocks article,
.mce-visualblocks blockquote,
.mce-visualblocks address,
.mce-visualblocks pre,
.mce-visualblocks figure,
.mce-visualblocks figcaption,
.mce-visualblocks hgroup,
.mce-visualblocks aside,
.mce-visualblocks ul,
.mce-visualblocks ol,
.mce-visualblocks dl {
background-repeat: no-repeat;
border: 1px dashed #bbb;
margin-left: 3px;
padding-top: 10px;
}
.mce-visualblocks p {
background-image: url(data:image/gif;base64,R0lGODlhCQAJAJEAAAAAAP///7u7u////yH5BAEAAAMALAAAAAAJAAkAAAIQnG+CqCN/mlyvsRUpThG6AgA7);
}
.mce-visualblocks h1 {
background-image: url(data:image/gif;base64,R0lGODlhDQAKAIABALu7u////yH5BAEAAAEALAAAAAANAAoAAAIXjI8GybGu1JuxHoAfRNRW3TWXyF2YiRUAOw==);
}
.mce-visualblocks h2 {
background-image: url(data:image/gif;base64,R0lGODlhDgAKAIABALu7u////yH5BAEAAAEALAAAAAAOAAoAAAIajI8Hybbx4oOuqgTynJd6bGlWg3DkJzoaUAAAOw==);
}
.mce-visualblocks h3 {
background-image: url(data:image/gif;base64,R0lGODlhDgAKAIABALu7u////yH5BAEAAAEALAAAAAAOAAoAAAIZjI8Hybbx4oOuqgTynJf2Ln2NOHpQpmhAAQA7);
}
.mce-visualblocks h4 {
background-image: url(data:image/gif;base64,R0lGODlhDgAKAIABALu7u////yH5BAEAAAEALAAAAAAOAAoAAAIajI8HybbxInR0zqeAdhtJlXwV1oCll2HaWgAAOw==);
}
.mce-visualblocks h5 {
background-image: url(data:image/gif;base64,R0lGODlhDgAKAIABALu7u////yH5BAEAAAEALAAAAAAOAAoAAAIajI8HybbxIoiuwjane4iq5GlW05GgIkIZUAAAOw==);
}
.mce-visualblocks h6 {
background-image: url(data:image/gif;base64,R0lGODlhDgAKAIABALu7u////yH5BAEAAAEALAAAAAAOAAoAAAIajI8HybbxIoiuwjan04jep1iZ1XRlAo5bVgAAOw==);
}
.mce-visualblocks div:not([data-mce-bogus]) {
background-image: url(data:image/gif;base64,R0lGODlhEgAKAIABALu7u////yH5BAEAAAEALAAAAAASAAoAAAIfjI9poI0cgDywrhuxfbrzDEbQM2Ei5aRjmoySW4pAAQA7);
}
.mce-visualblocks section {
background-image: url(data:image/gif;base64,R0lGODlhKAAKAIABALu7u////yH5BAEAAAEALAAAAAAoAAoAAAI5jI+pywcNY3sBWHdNrplytD2ellDeSVbp+GmWqaDqDMepc8t17Y4vBsK5hDyJMcI6KkuYU+jpjLoKADs=);
}
.mce-visualblocks article {
background-image: url(data:image/gif;base64,R0lGODlhKgAKAIABALu7u////yH5BAEAAAEALAAAAAAqAAoAAAI6jI+pywkNY3wG0GBvrsd2tXGYSGnfiF7ikpXemTpOiJScasYoDJJrjsG9gkCJ0ag6KhmaIe3pjDYBBQA7);
}
.mce-visualblocks blockquote {
background-image: url(data:image/gif;base64,R0lGODlhPgAKAIABALu7u////yH5BAEAAAEALAAAAAA+AAoAAAJPjI+py+0Knpz0xQDyuUhvfoGgIX5iSKZYgq5uNL5q69asZ8s5rrf0yZmpNkJZzFesBTu8TOlDVAabUyatguVhWduud3EyiUk45xhTTgMBBQA7);
}
.mce-visualblocks address {
background-image: url(data:image/gif;base64,R0lGODlhLQAKAIABALu7u////yH5BAEAAAEALAAAAAAtAAoAAAI/jI+pywwNozSP1gDyyZcjb3UaRpXkWaXmZW4OqKLhBmLs+K263DkJK7OJeifh7FicKD9A1/IpGdKkyFpNmCkAADs=);
}
.mce-visualblocks pre {
background-image: url(data:image/gif;base64,R0lGODlhFQAKAIABALu7uwAAACH5BAEAAAEALAAAAAAVAAoAAAIjjI+ZoN0cgDwSmnpz1NCueYERhnibZVKLNnbOq8IvKpJtVQAAOw==);
}
.mce-visualblocks figure {
background-image: url(data:image/gif;base64,R0lGODlhJAAKAIAAALu7u////yH5BAEAAAEALAAAAAAkAAoAAAI0jI+py+2fwAHUSFvD3RlvG4HIp4nX5JFSpnZUJ6LlrM52OE7uSWosBHScgkSZj7dDKnWAAgA7);
}
.mce-visualblocks figcaption {
border: 1px dashed #bbb;
}
.mce-visualblocks hgroup {
background-image: url(data:image/gif;base64,R0lGODlhJwAKAIABALu7uwAAACH5BAEAAAEALAAAAAAnAAoAAAI3jI+pywYNI3uB0gpsRtt5fFnfNZaVSYJil4Wo03Hv6Z62uOCgiXH1kZIIJ8NiIxRrAZNMZAtQAAA7);
}
.mce-visualblocks aside {
background-image: url(data:image/gif;base64,R0lGODlhHgAKAIABAKqqqv///yH5BAEAAAEALAAAAAAeAAoAAAItjI+pG8APjZOTzgtqy7I3f1yehmQcFY4WKZbqByutmW4aHUd6vfcVbgudgpYCADs=);
}
.mce-visualblocks ul {
background-image: url(data:image/gif;base64,R0lGODlhDQAKAIAAALu7u////yH5BAEAAAEALAAAAAANAAoAAAIXjI8GybGuYnqUVSjvw26DzzXiqIDlVwAAOw==);
}
.mce-visualblocks ol {
background-image: url(data:image/gif;base64,R0lGODlhDQAKAIABALu7u////yH5BAEAAAEALAAAAAANAAoAAAIXjI8GybH6HHt0qourxC6CvzXieHyeWQAAOw==);
}
.mce-visualblocks dl {
background-image: url(data:image/gif;base64,R0lGODlhDQAKAIABALu7u////yH5BAEAAAEALAAAAAANAAoAAAIXjI8GybEOnmOvUoWznTqeuEjNSCqeGRUAOw==);
}
.mce-visualblocks:not([dir=rtl]) p,
.mce-visualblocks:not([dir=rtl]) h1,
.mce-visualblocks:not([dir=rtl]) h2,
.mce-visualblocks:not([dir=rtl]) h3,
.mce-visualblocks:not([dir=rtl]) h4,
.mce-visualblocks:not([dir=rtl]) h5,
.mce-visualblocks:not([dir=rtl]) h6,
.mce-visualblocks:not([dir=rtl]) div:not([data-mce-bogus]),
.mce-visualblocks:not([dir=rtl]) section,
.mce-visualblocks:not([dir=rtl]) article,
.mce-visualblocks:not([dir=rtl]) blockquote,
.mce-visualblocks:not([dir=rtl]) address,
.mce-visualblocks:not([dir=rtl]) pre,
.mce-visualblocks:not([dir=rtl]) figure,
.mce-visualblocks:not([dir=rtl]) figcaption,
.mce-visualblocks:not([dir=rtl]) hgroup,
.mce-visualblocks:not([dir=rtl]) aside,
.mce-visualblocks:not([dir=rtl]) ul,
.mce-visualblocks:not([dir=rtl]) ol,
.mce-visualblocks:not([dir=rtl]) dl {
margin-left: 3px;
}
.mce-visualblocks[dir=rtl] p,
.mce-visualblocks[dir=rtl] h1,
.mce-visualblocks[dir=rtl] h2,
.mce-visualblocks[dir=rtl] h3,
.mce-visualblocks[dir=rtl] h4,
.mce-visualblocks[dir=rtl] h5,
.mce-visualblocks[dir=rtl] h6,
.mce-visualblocks[dir=rtl] div:not([data-mce-bogus]),
.mce-visualblocks[dir=rtl] section,
.mce-visualblocks[dir=rtl] article,
.mce-visualblocks[dir=rtl] blockquote,
.mce-visualblocks[dir=rtl] address,
.mce-visualblocks[dir=rtl] pre,
.mce-visualblocks[dir=rtl] figure,
.mce-visualblocks[dir=rtl] figcaption,
.mce-visualblocks[dir=rtl] hgroup,
.mce-visualblocks[dir=rtl] aside,
.mce-visualblocks[dir=rtl] ul,
.mce-visualblocks[dir=rtl] ol,
.mce-visualblocks[dir=rtl] dl {
background-position-x: right;
margin-right: 3px;
}
.mce-nbsp,
.mce-shy {
background: #aaa;
}
.mce-shy::after {
content: '-';
}
body {
font-family: sans-serif;
}
table {
border-collapse: collapse;
}

View File

@ -0,0 +1,726 @@
/**
* Copyright (c) Tiny Technologies, Inc. All rights reserved.
* Licensed under the LGPL or a commercial license.
* For LGPL see License.txt in the project root for license information.
* For commercial licenses see https://www.tiny.cloud/
*/
.mce-content-body .mce-item-anchor {
background: transparent url("data:image/svg+xml;charset=UTF-8,%3Csvg%20width%3D'8'%20height%3D'12'%20xmlns%3D'http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg'%3E%3Cpath%20d%3D'M0%200L8%200%208%2012%204.09117821%209%200%2012z'%2F%3E%3C%2Fsvg%3E%0A") no-repeat center;
cursor: default;
display: inline-block;
height: 12px !important;
padding: 0 2px;
-webkit-user-modify: read-only;
-moz-user-modify: read-only;
-webkit-user-select: all;
-moz-user-select: all;
-ms-user-select: all;
user-select: all;
width: 8px !important;
}
.mce-content-body .mce-item-anchor[data-mce-selected] {
outline-offset: 1px;
}
.tox-comments-visible .tox-comment {
background-color: #fff0b7;
}
.tox-comments-visible .tox-comment--active {
background-color: #ffe168;
}
.tox-checklist > li:not(.tox-checklist--hidden) {
list-style: none;
margin: 0.25em 0;
}
.tox-checklist > li:not(.tox-checklist--hidden)::before {
content: url("data:image/svg+xml;charset=UTF-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%2216%22%20height%3D%2216%22%20viewBox%3D%220%200%2016%2016%22%3E%3Cg%20id%3D%22checklist-unchecked%22%20fill%3D%22none%22%20fill-rule%3D%22evenodd%22%3E%3Crect%20id%3D%22Rectangle%22%20width%3D%2215%22%20height%3D%2215%22%20x%3D%22.5%22%20y%3D%22.5%22%20fill-rule%3D%22nonzero%22%20stroke%3D%22%234C4C4C%22%20rx%3D%222%22%2F%3E%3C%2Fg%3E%3C%2Fsvg%3E%0A");
cursor: pointer;
height: 1em;
margin-left: -1.5em;
margin-top: 0.125em;
position: absolute;
width: 1em;
}
.tox-checklist li:not(.tox-checklist--hidden).tox-checklist--checked::before {
content: url("data:image/svg+xml;charset=UTF-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%2216%22%20height%3D%2216%22%20viewBox%3D%220%200%2016%2016%22%3E%3Cg%20id%3D%22checklist-checked%22%20fill%3D%22none%22%20fill-rule%3D%22evenodd%22%3E%3Crect%20id%3D%22Rectangle%22%20width%3D%2216%22%20height%3D%2216%22%20fill%3D%22%234099FF%22%20fill-rule%3D%22nonzero%22%20rx%3D%222%22%2F%3E%3Cpath%20id%3D%22Path%22%20fill%3D%22%23FFF%22%20fill-rule%3D%22nonzero%22%20d%3D%22M11.5703186%2C3.14417309%20C11.8516238%2C2.73724603%2012.4164781%2C2.62829933%2012.83558%2C2.89774797%20C13.260121%2C3.17069355%2013.3759736%2C3.72932262%2013.0909105%2C4.14168582%20L7.7580587%2C11.8560195%20C7.43776896%2C12.3193404%206.76483983%2C12.3852142%206.35607322%2C11.9948725%20L3.02491697%2C8.8138662%20C2.66090143%2C8.46625845%202.65798871%2C7.89594698%203.01850234%2C7.54483354%20C3.373942%2C7.19866177%203.94940006%2C7.19592841%204.30829608%2C7.5386474%20L6.85276923%2C9.9684299%20L11.5703186%2C3.14417309%20Z%22%2F%3E%3C%2Fg%3E%3C%2Fsvg%3E%0A");
}
[dir=rtl] .tox-checklist > li:not(.tox-checklist--hidden)::before {
margin-left: 0;
margin-right: -1.5em;
}
/* stylelint-disable */
/* http://prismjs.com/ */
/**
* prism.js default theme for JavaScript, CSS and HTML
* Based on dabblet (http://dabblet.com)
* @author Lea Verou
*/
code[class*="language-"],
pre[class*="language-"] {
color: black;
background: none;
text-shadow: 0 1px white;
font-family: Consolas, Monaco, 'Andale Mono', 'Ubuntu Mono', monospace;
font-size: 1em;
text-align: left;
white-space: pre;
word-spacing: normal;
word-break: normal;
word-wrap: normal;
line-height: 1.5;
-moz-tab-size: 4;
tab-size: 4;
-webkit-hyphens: none;
-ms-hyphens: none;
hyphens: none;
}
pre[class*="language-"]::-moz-selection,
pre[class*="language-"] ::-moz-selection,
code[class*="language-"]::-moz-selection,
code[class*="language-"] ::-moz-selection {
text-shadow: none;
background: #b3d4fc;
}
pre[class*="language-"]::selection,
pre[class*="language-"] ::selection,
code[class*="language-"]::selection,
code[class*="language-"] ::selection {
text-shadow: none;
background: #b3d4fc;
}
@media print {
code[class*="language-"],
pre[class*="language-"] {
text-shadow: none;
}
}
/* Code blocks */
pre[class*="language-"] {
padding: 1em;
margin: 0.5em 0;
overflow: auto;
}
:not(pre) > code[class*="language-"],
pre[class*="language-"] {
background: #f5f2f0;
}
/* Inline code */
:not(pre) > code[class*="language-"] {
padding: 0.1em;
border-radius: 0.3em;
white-space: normal;
}
.token.comment,
.token.prolog,
.token.doctype,
.token.cdata {
color: slategray;
}
.token.punctuation {
color: #999;
}
.namespace {
opacity: 0.7;
}
.token.property,
.token.tag,
.token.boolean,
.token.number,
.token.constant,
.token.symbol,
.token.deleted {
color: #905;
}
.token.selector,
.token.attr-name,
.token.string,
.token.char,
.token.builtin,
.token.inserted {
color: #690;
}
.token.operator,
.token.entity,
.token.url,
.language-css .token.string,
.style .token.string {
color: #9a6e3a;
background: hsla(0, 0%, 100%, 0.5);
}
.token.atrule,
.token.attr-value,
.token.keyword {
color: #07a;
}
.token.function,
.token.class-name {
color: #DD4A68;
}
.token.regex,
.token.important,
.token.variable {
color: #e90;
}
.token.important,
.token.bold {
font-weight: bold;
}
.token.italic {
font-style: italic;
}
.token.entity {
cursor: help;
}
/* stylelint-enable */
.mce-content-body {
overflow-wrap: break-word;
word-wrap: break-word;
}
.mce-content-body .mce-visual-caret {
background-color: black;
background-color: currentColor;
position: absolute;
}
.mce-content-body .mce-visual-caret-hidden {
display: none;
}
.mce-content-body *[data-mce-caret] {
left: -1000px;
margin: 0;
padding: 0;
position: absolute;
right: auto;
top: 0;
}
.mce-content-body .mce-offscreen-selection {
left: -2000000px;
max-width: 1000000px;
position: absolute;
}
.mce-content-body *[contentEditable=false] {
cursor: default;
}
.mce-content-body *[contentEditable=true] {
cursor: text;
}
.tox-cursor-format-painter {
cursor: url("data:image/svg+xml;charset=UTF-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%2224%22%20height%3D%2224%22%20viewBox%3D%220%200%2024%2024%22%3E%0A%20%20%3Cg%20fill%3D%22none%22%20fill-rule%3D%22evenodd%22%3E%0A%20%20%20%20%3Cpath%20fill%3D%22%23000%22%20fill-rule%3D%22nonzero%22%20d%3D%22M15%2C6%20C15%2C5.45%2014.55%2C5%2014%2C5%20L6%2C5%20C5.45%2C5%205%2C5.45%205%2C6%20L5%2C10%20C5%2C10.55%205.45%2C11%206%2C11%20L14%2C11%20C14.55%2C11%2015%2C10.55%2015%2C10%20L15%2C9%20L16%2C9%20L16%2C12%20L9%2C12%20L9%2C19%20C9%2C19.55%209.45%2C20%2010%2C20%20L11%2C20%20C11.55%2C20%2012%2C19.55%2012%2C19%20L12%2C14%20L18%2C14%20L18%2C7%20L15%2C7%20L15%2C6%20Z%22%2F%3E%0A%20%20%20%20%3Cpath%20fill%3D%22%23000%22%20fill-rule%3D%22nonzero%22%20d%3D%22M1%2C1%20L8.25%2C1%20C8.66421356%2C1%209%2C1.33578644%209%2C1.75%20L9%2C1.75%20C9%2C2.16421356%208.66421356%2C2.5%208.25%2C2.5%20L2.5%2C2.5%20L2.5%2C8.25%20C2.5%2C8.66421356%202.16421356%2C9%201.75%2C9%20L1.75%2C9%20C1.33578644%2C9%201%2C8.66421356%201%2C8.25%20L1%2C1%20Z%22%2F%3E%0A%20%20%3C%2Fg%3E%0A%3C%2Fsvg%3E%0A"), default;
}
.mce-content-body figure.align-left {
float: left;
}
.mce-content-body figure.align-right {
float: right;
}
.mce-content-body figure.image.align-center {
display: table;
margin-left: auto;
margin-right: auto;
}
.mce-preview-object {
border: 1px solid gray;
display: inline-block;
line-height: 0;
margin: 0 2px 0 2px;
position: relative;
}
.mce-preview-object .mce-shim {
background: url(data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7);
height: 100%;
left: 0;
position: absolute;
top: 0;
width: 100%;
}
.mce-preview-object[data-mce-selected="2"] .mce-shim {
display: none;
}
.mce-object {
background: transparent url("data:image/svg+xml;charset=UTF-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%2224%22%20height%3D%2224%22%3E%3Cpath%20d%3D%22M4%203h16a1%201%200%200%201%201%201v16a1%201%200%200%201-1%201H4a1%201%200%200%201-1-1V4a1%201%200%200%201%201-1zm1%202v14h14V5H5zm4.79%202.565l5.64%204.028a.5.5%200%200%201%200%20.814l-5.64%204.028a.5.5%200%200%201-.79-.407V7.972a.5.5%200%200%201%20.79-.407z%22%2F%3E%3C%2Fsvg%3E%0A") no-repeat center;
border: 1px dashed #aaa;
}
.mce-pagebreak {
border: 1px dashed #aaa;
cursor: default;
display: block;
height: 5px;
margin-top: 15px;
page-break-before: always;
width: 100%;
}
@media print {
.mce-pagebreak {
border: 0;
}
}
.tiny-pageembed .mce-shim {
background: url(data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7);
height: 100%;
left: 0;
position: absolute;
top: 0;
width: 100%;
}
.tiny-pageembed[data-mce-selected="2"] .mce-shim {
display: none;
}
.tiny-pageembed {
display: inline-block;
position: relative;
}
.tiny-pageembed--21by9,
.tiny-pageembed--16by9,
.tiny-pageembed--4by3,
.tiny-pageembed--1by1 {
display: block;
overflow: hidden;
padding: 0;
position: relative;
width: 100%;
}
.tiny-pageembed--21by9 {
padding-top: 42.857143%;
}
.tiny-pageembed--16by9 {
padding-top: 56.25%;
}
.tiny-pageembed--4by3 {
padding-top: 75%;
}
.tiny-pageembed--1by1 {
padding-top: 100%;
}
.tiny-pageembed--21by9 iframe,
.tiny-pageembed--16by9 iframe,
.tiny-pageembed--4by3 iframe,
.tiny-pageembed--1by1 iframe {
border: 0;
height: 100%;
left: 0;
position: absolute;
top: 0;
width: 100%;
}
.mce-content-body[data-mce-placeholder] {
position: relative;
}
.mce-content-body[data-mce-placeholder]:not(.mce-visualblocks)::before {
color: rgba(34, 47, 62, 0.7);
content: attr(data-mce-placeholder);
position: absolute;
}
.mce-content-body:not([dir=rtl])[data-mce-placeholder]:not(.mce-visualblocks)::before {
left: 1px;
}
.mce-content-body[dir=rtl][data-mce-placeholder]:not(.mce-visualblocks)::before {
right: 1px;
}
.mce-content-body div.mce-resizehandle {
background-color: #4099ff;
border-color: #4099ff;
border-style: solid;
border-width: 1px;
box-sizing: border-box;
height: 10px;
position: absolute;
width: 10px;
z-index: 1298;
}
.mce-content-body div.mce-resizehandle:hover {
background-color: #4099ff;
}
.mce-content-body div.mce-resizehandle:nth-of-type(1) {
cursor: nwse-resize;
}
.mce-content-body div.mce-resizehandle:nth-of-type(2) {
cursor: nesw-resize;
}
.mce-content-body div.mce-resizehandle:nth-of-type(3) {
cursor: nwse-resize;
}
.mce-content-body div.mce-resizehandle:nth-of-type(4) {
cursor: nesw-resize;
}
.mce-content-body .mce-resize-backdrop {
z-index: 10000;
}
.mce-content-body .mce-clonedresizable {
cursor: default;
opacity: 0.5;
outline: 1px dashed black;
position: absolute;
z-index: 10001;
}
.mce-content-body .mce-clonedresizable.mce-resizetable-columns th,
.mce-content-body .mce-clonedresizable.mce-resizetable-columns td {
border: 0;
}
.mce-content-body .mce-resize-helper {
background: #555;
background: rgba(0, 0, 0, 0.75);
border: 1px;
border-radius: 3px;
color: white;
display: none;
font-family: sans-serif;
font-size: 12px;
line-height: 14px;
margin: 5px 10px;
padding: 5px;
position: absolute;
white-space: nowrap;
z-index: 10002;
}
.tox-rtc-user-selection {
position: relative;
}
.tox-rtc-user-cursor {
bottom: 0;
cursor: default;
position: absolute;
top: 0;
width: 2px;
}
.tox-rtc-user-cursor::before {
background-color: inherit;
border-radius: 50%;
content: '';
display: block;
height: 8px;
position: absolute;
right: -3px;
top: -3px;
width: 8px;
}
.tox-rtc-user-cursor:hover::after {
background-color: inherit;
border-radius: 100px;
box-sizing: border-box;
color: #fff;
content: attr(data-user);
display: block;
font-size: 12px;
font-weight: bold;
left: -5px;
min-height: 8px;
min-width: 8px;
padding: 0 12px;
position: absolute;
top: -11px;
white-space: nowrap;
z-index: 1000;
}
.tox-rtc-user-selection--1 .tox-rtc-user-cursor {
background-color: #2dc26b;
}
.tox-rtc-user-selection--2 .tox-rtc-user-cursor {
background-color: #e03e2d;
}
.tox-rtc-user-selection--3 .tox-rtc-user-cursor {
background-color: #f1c40f;
}
.tox-rtc-user-selection--4 .tox-rtc-user-cursor {
background-color: #3598db;
}
.tox-rtc-user-selection--5 .tox-rtc-user-cursor {
background-color: #b96ad9;
}
.tox-rtc-user-selection--6 .tox-rtc-user-cursor {
background-color: #e67e23;
}
.tox-rtc-user-selection--7 .tox-rtc-user-cursor {
background-color: #aaa69d;
}
.tox-rtc-user-selection--8 .tox-rtc-user-cursor {
background-color: #f368e0;
}
.tox-rtc-remote-image {
background: #eaeaea url("data:image/svg+xml;charset=UTF-8,%3Csvg%20width%3D%2236%22%20height%3D%2212%22%20viewBox%3D%220%200%2036%2012%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%0A%20%20%3Ccircle%20cx%3D%226%22%20cy%3D%226%22%20r%3D%223%22%20fill%3D%22rgba(0%2C%200%2C%200%2C%20.2)%22%3E%0A%20%20%20%20%3Canimate%20attributeName%3D%22r%22%20values%3D%223%3B5%3B3%22%20calcMode%3D%22linear%22%20dur%3D%221s%22%20repeatCount%3D%22indefinite%22%20%2F%3E%0A%20%20%3C%2Fcircle%3E%0A%20%20%3Ccircle%20cx%3D%2218%22%20cy%3D%226%22%20r%3D%223%22%20fill%3D%22rgba(0%2C%200%2C%200%2C%20.2)%22%3E%0A%20%20%20%20%3Canimate%20attributeName%3D%22r%22%20values%3D%223%3B5%3B3%22%20calcMode%3D%22linear%22%20begin%3D%22.33s%22%20dur%3D%221s%22%20repeatCount%3D%22indefinite%22%20%2F%3E%0A%20%20%3C%2Fcircle%3E%0A%20%20%3Ccircle%20cx%3D%2230%22%20cy%3D%226%22%20r%3D%223%22%20fill%3D%22rgba(0%2C%200%2C%200%2C%20.2)%22%3E%0A%20%20%20%20%3Canimate%20attributeName%3D%22r%22%20values%3D%223%3B5%3B3%22%20calcMode%3D%22linear%22%20begin%3D%22.66s%22%20dur%3D%221s%22%20repeatCount%3D%22indefinite%22%20%2F%3E%0A%20%20%3C%2Fcircle%3E%0A%3C%2Fsvg%3E%0A") no-repeat center center;
border: 1px solid #ccc;
min-height: 240px;
min-width: 320px;
}
.mce-match-marker {
background: #aaa;
color: #fff;
}
.mce-match-marker-selected {
background: #39f;
color: #fff;
}
.mce-match-marker-selected::-moz-selection {
background: #39f;
color: #fff;
}
.mce-match-marker-selected::selection {
background: #39f;
color: #fff;
}
.mce-content-body img[data-mce-selected],
.mce-content-body video[data-mce-selected],
.mce-content-body audio[data-mce-selected],
.mce-content-body object[data-mce-selected],
.mce-content-body embed[data-mce-selected],
.mce-content-body table[data-mce-selected] {
outline: 3px solid #b4d7ff;
}
.mce-content-body hr[data-mce-selected] {
outline: 3px solid #b4d7ff;
outline-offset: 1px;
}
.mce-content-body *[contentEditable=false] *[contentEditable=true]:focus {
outline: 3px solid #b4d7ff;
}
.mce-content-body *[contentEditable=false] *[contentEditable=true]:hover {
outline: 3px solid #b4d7ff;
}
.mce-content-body *[contentEditable=false][data-mce-selected] {
cursor: not-allowed;
outline: 3px solid #b4d7ff;
}
.mce-content-body.mce-content-readonly *[contentEditable=true]:focus,
.mce-content-body.mce-content-readonly *[contentEditable=true]:hover {
outline: none;
}
.mce-content-body *[data-mce-selected="inline-boundary"] {
background-color: #b4d7ff;
}
.mce-content-body .mce-edit-focus {
outline: 3px solid #b4d7ff;
}
.mce-content-body td[data-mce-selected],
.mce-content-body th[data-mce-selected] {
position: relative;
}
.mce-content-body td[data-mce-selected]::-moz-selection,
.mce-content-body th[data-mce-selected]::-moz-selection {
background: none;
}
.mce-content-body td[data-mce-selected]::selection,
.mce-content-body th[data-mce-selected]::selection {
background: none;
}
.mce-content-body td[data-mce-selected] *,
.mce-content-body th[data-mce-selected] * {
outline: none;
-webkit-touch-callout: none;
-webkit-user-select: none;
-moz-user-select: none;
-ms-user-select: none;
user-select: none;
}
.mce-content-body td[data-mce-selected]::after,
.mce-content-body th[data-mce-selected]::after {
background-color: rgba(180, 215, 255, 0.7);
border: 1px solid rgba(180, 215, 255, 0.7);
bottom: -1px;
content: '';
left: -1px;
mix-blend-mode: multiply;
position: absolute;
right: -1px;
top: -1px;
}
@media screen and (-ms-high-contrast: active), (-ms-high-contrast: none) {
.mce-content-body td[data-mce-selected]::after,
.mce-content-body th[data-mce-selected]::after {
border-color: rgba(0, 84, 180, 0.7);
}
}
.mce-content-body img::-moz-selection {
background: none;
}
.mce-content-body img::selection {
background: none;
}
.ephox-snooker-resizer-bar {
background-color: #b4d7ff;
opacity: 0;
-webkit-user-select: none;
-moz-user-select: none;
-ms-user-select: none;
user-select: none;
}
.ephox-snooker-resizer-cols {
cursor: col-resize;
}
.ephox-snooker-resizer-rows {
cursor: row-resize;
}
.ephox-snooker-resizer-bar.ephox-snooker-resizer-bar-dragging {
opacity: 1;
}
.mce-spellchecker-word {
background-image: url("data:image/svg+xml;charset=UTF-8,%3Csvg%20width%3D'4'%20height%3D'4'%20xmlns%3D'http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg'%3E%3Cpath%20stroke%3D'%23ff0000'%20fill%3D'none'%20stroke-linecap%3D'round'%20stroke-opacity%3D'.75'%20d%3D'M0%203L2%201%204%203'%2F%3E%3C%2Fsvg%3E%0A");
background-position: 0 calc(100% + 1px);
background-repeat: repeat-x;
background-size: auto 6px;
cursor: default;
height: 2rem;
}
.mce-spellchecker-grammar {
background-image: url("data:image/svg+xml;charset=UTF-8,%3Csvg%20width%3D'4'%20height%3D'4'%20xmlns%3D'http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg'%3E%3Cpath%20stroke%3D'%2300A835'%20fill%3D'none'%20stroke-linecap%3D'round'%20d%3D'M0%203L2%201%204%203'%2F%3E%3C%2Fsvg%3E%0A");
background-position: 0 calc(100% + 1px);
background-repeat: repeat-x;
background-size: auto 6px;
cursor: default;
}
.mce-toc {
border: 1px solid gray;
}
.mce-toc h2 {
margin: 4px;
}
.mce-toc li {
list-style-type: none;
}
table[style*="border-width: 0px"],
.mce-item-table:not([border]),
.mce-item-table[border="0"],
table[style*="border-width: 0px"] td,
.mce-item-table:not([border]) td,
.mce-item-table[border="0"] td,
table[style*="border-width: 0px"] th,
.mce-item-table:not([border]) th,
.mce-item-table[border="0"] th,
table[style*="border-width: 0px"] caption,
.mce-item-table:not([border]) caption,
.mce-item-table[border="0"] caption {
border: 1px dashed #bbb;
}
.mce-visualblocks p,
.mce-visualblocks h1,
.mce-visualblocks h2,
.mce-visualblocks h3,
.mce-visualblocks h4,
.mce-visualblocks h5,
.mce-visualblocks h6,
.mce-visualblocks div:not([data-mce-bogus]),
.mce-visualblocks section,
.mce-visualblocks article,
.mce-visualblocks blockquote,
.mce-visualblocks address,
.mce-visualblocks pre,
.mce-visualblocks figure,
.mce-visualblocks figcaption,
.mce-visualblocks hgroup,
.mce-visualblocks aside,
.mce-visualblocks ul,
.mce-visualblocks ol,
.mce-visualblocks dl {
background-repeat: no-repeat;
border: 1px dashed #bbb;
margin-left: 3px;
padding-top: 10px;
}
.mce-visualblocks p {
background-image: url(data:image/gif;base64,R0lGODlhCQAJAJEAAAAAAP///7u7u////yH5BAEAAAMALAAAAAAJAAkAAAIQnG+CqCN/mlyvsRUpThG6AgA7);
}
.mce-visualblocks h1 {
background-image: url(data:image/gif;base64,R0lGODlhDQAKAIABALu7u////yH5BAEAAAEALAAAAAANAAoAAAIXjI8GybGu1JuxHoAfRNRW3TWXyF2YiRUAOw==);
}
.mce-visualblocks h2 {
background-image: url(data:image/gif;base64,R0lGODlhDgAKAIABALu7u////yH5BAEAAAEALAAAAAAOAAoAAAIajI8Hybbx4oOuqgTynJd6bGlWg3DkJzoaUAAAOw==);
}
.mce-visualblocks h3 {
background-image: url(data:image/gif;base64,R0lGODlhDgAKAIABALu7u////yH5BAEAAAEALAAAAAAOAAoAAAIZjI8Hybbx4oOuqgTynJf2Ln2NOHpQpmhAAQA7);
}
.mce-visualblocks h4 {
background-image: url(data:image/gif;base64,R0lGODlhDgAKAIABALu7u////yH5BAEAAAEALAAAAAAOAAoAAAIajI8HybbxInR0zqeAdhtJlXwV1oCll2HaWgAAOw==);
}
.mce-visualblocks h5 {
background-image: url(data:image/gif;base64,R0lGODlhDgAKAIABALu7u////yH5BAEAAAEALAAAAAAOAAoAAAIajI8HybbxIoiuwjane4iq5GlW05GgIkIZUAAAOw==);
}
.mce-visualblocks h6 {
background-image: url(data:image/gif;base64,R0lGODlhDgAKAIABALu7u////yH5BAEAAAEALAAAAAAOAAoAAAIajI8HybbxIoiuwjan04jep1iZ1XRlAo5bVgAAOw==);
}
.mce-visualblocks div:not([data-mce-bogus]) {
background-image: url(data:image/gif;base64,R0lGODlhEgAKAIABALu7u////yH5BAEAAAEALAAAAAASAAoAAAIfjI9poI0cgDywrhuxfbrzDEbQM2Ei5aRjmoySW4pAAQA7);
}
.mce-visualblocks section {
background-image: url(data:image/gif;base64,R0lGODlhKAAKAIABALu7u////yH5BAEAAAEALAAAAAAoAAoAAAI5jI+pywcNY3sBWHdNrplytD2ellDeSVbp+GmWqaDqDMepc8t17Y4vBsK5hDyJMcI6KkuYU+jpjLoKADs=);
}
.mce-visualblocks article {
background-image: url(data:image/gif;base64,R0lGODlhKgAKAIABALu7u////yH5BAEAAAEALAAAAAAqAAoAAAI6jI+pywkNY3wG0GBvrsd2tXGYSGnfiF7ikpXemTpOiJScasYoDJJrjsG9gkCJ0ag6KhmaIe3pjDYBBQA7);
}
.mce-visualblocks blockquote {
background-image: url(data:image/gif;base64,R0lGODlhPgAKAIABALu7u////yH5BAEAAAEALAAAAAA+AAoAAAJPjI+py+0Knpz0xQDyuUhvfoGgIX5iSKZYgq5uNL5q69asZ8s5rrf0yZmpNkJZzFesBTu8TOlDVAabUyatguVhWduud3EyiUk45xhTTgMBBQA7);
}
.mce-visualblocks address {
background-image: url(data:image/gif;base64,R0lGODlhLQAKAIABALu7u////yH5BAEAAAEALAAAAAAtAAoAAAI/jI+pywwNozSP1gDyyZcjb3UaRpXkWaXmZW4OqKLhBmLs+K263DkJK7OJeifh7FicKD9A1/IpGdKkyFpNmCkAADs=);
}
.mce-visualblocks pre {
background-image: url(data:image/gif;base64,R0lGODlhFQAKAIABALu7uwAAACH5BAEAAAEALAAAAAAVAAoAAAIjjI+ZoN0cgDwSmnpz1NCueYERhnibZVKLNnbOq8IvKpJtVQAAOw==);
}
.mce-visualblocks figure {
background-image: url(data:image/gif;base64,R0lGODlhJAAKAIAAALu7u////yH5BAEAAAEALAAAAAAkAAoAAAI0jI+py+2fwAHUSFvD3RlvG4HIp4nX5JFSpnZUJ6LlrM52OE7uSWosBHScgkSZj7dDKnWAAgA7);
}
.mce-visualblocks figcaption {
border: 1px dashed #bbb;
}
.mce-visualblocks hgroup {
background-image: url(data:image/gif;base64,R0lGODlhJwAKAIABALu7uwAAACH5BAEAAAEALAAAAAAnAAoAAAI3jI+pywYNI3uB0gpsRtt5fFnfNZaVSYJil4Wo03Hv6Z62uOCgiXH1kZIIJ8NiIxRrAZNMZAtQAAA7);
}
.mce-visualblocks aside {
background-image: url(data:image/gif;base64,R0lGODlhHgAKAIABAKqqqv///yH5BAEAAAEALAAAAAAeAAoAAAItjI+pG8APjZOTzgtqy7I3f1yehmQcFY4WKZbqByutmW4aHUd6vfcVbgudgpYCADs=);
}
.mce-visualblocks ul {
background-image: url(data:image/gif;base64,R0lGODlhDQAKAIAAALu7u////yH5BAEAAAEALAAAAAANAAoAAAIXjI8GybGuYnqUVSjvw26DzzXiqIDlVwAAOw==);
}
.mce-visualblocks ol {
background-image: url(data:image/gif;base64,R0lGODlhDQAKAIABALu7u////yH5BAEAAAEALAAAAAANAAoAAAIXjI8GybH6HHt0qourxC6CvzXieHyeWQAAOw==);
}
.mce-visualblocks dl {
background-image: url(data:image/gif;base64,R0lGODlhDQAKAIABALu7u////yH5BAEAAAEALAAAAAANAAoAAAIXjI8GybEOnmOvUoWznTqeuEjNSCqeGRUAOw==);
}
.mce-visualblocks:not([dir=rtl]) p,
.mce-visualblocks:not([dir=rtl]) h1,
.mce-visualblocks:not([dir=rtl]) h2,
.mce-visualblocks:not([dir=rtl]) h3,
.mce-visualblocks:not([dir=rtl]) h4,
.mce-visualblocks:not([dir=rtl]) h5,
.mce-visualblocks:not([dir=rtl]) h6,
.mce-visualblocks:not([dir=rtl]) div:not([data-mce-bogus]),
.mce-visualblocks:not([dir=rtl]) section,
.mce-visualblocks:not([dir=rtl]) article,
.mce-visualblocks:not([dir=rtl]) blockquote,
.mce-visualblocks:not([dir=rtl]) address,
.mce-visualblocks:not([dir=rtl]) pre,
.mce-visualblocks:not([dir=rtl]) figure,
.mce-visualblocks:not([dir=rtl]) figcaption,
.mce-visualblocks:not([dir=rtl]) hgroup,
.mce-visualblocks:not([dir=rtl]) aside,
.mce-visualblocks:not([dir=rtl]) ul,
.mce-visualblocks:not([dir=rtl]) ol,
.mce-visualblocks:not([dir=rtl]) dl {
margin-left: 3px;
}
.mce-visualblocks[dir=rtl] p,
.mce-visualblocks[dir=rtl] h1,
.mce-visualblocks[dir=rtl] h2,
.mce-visualblocks[dir=rtl] h3,
.mce-visualblocks[dir=rtl] h4,
.mce-visualblocks[dir=rtl] h5,
.mce-visualblocks[dir=rtl] h6,
.mce-visualblocks[dir=rtl] div:not([data-mce-bogus]),
.mce-visualblocks[dir=rtl] section,
.mce-visualblocks[dir=rtl] article,
.mce-visualblocks[dir=rtl] blockquote,
.mce-visualblocks[dir=rtl] address,
.mce-visualblocks[dir=rtl] pre,
.mce-visualblocks[dir=rtl] figure,
.mce-visualblocks[dir=rtl] figcaption,
.mce-visualblocks[dir=rtl] hgroup,
.mce-visualblocks[dir=rtl] aside,
.mce-visualblocks[dir=rtl] ul,
.mce-visualblocks[dir=rtl] ol,
.mce-visualblocks[dir=rtl] dl {
background-position-x: right;
margin-right: 3px;
}
.mce-nbsp,
.mce-shy {
background: #aaa;
}
.mce-shy::after {
content: '-';
}

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@ -0,0 +1,29 @@
/**
* Copyright (c) Tiny Technologies, Inc. All rights reserved.
* Licensed under the LGPL or a commercial license.
* For LGPL see License.txt in the project root for license information.
* For commercial licenses see https://www.tiny.cloud/
*/
.tinymce-mobile-unfocused-selections .tinymce-mobile-unfocused-selection {
/* Note: this file is used inside the content, so isn't part of theming */
background-color: green;
display: inline-block;
opacity: 0.5;
position: absolute;
}
body {
-webkit-text-size-adjust: none;
}
body img {
/* this is related to the content margin */
max-width: 96vw;
}
body table img {
max-width: 95%;
}
body {
font-family: sans-serif;
}
table {
border-collapse: collapse;
}

View File

@ -0,0 +1,7 @@
/**
* Copyright (c) Tiny Technologies, Inc. All rights reserved.
* Licensed under the LGPL or a commercial license.
* For LGPL see License.txt in the project root for license information.
* For commercial licenses see https://www.tiny.cloud/
*/
.tinymce-mobile-unfocused-selections .tinymce-mobile-unfocused-selection{background-color:green;display:inline-block;opacity:.5;position:absolute}body{-webkit-text-size-adjust:none}body img{max-width:96vw}body table img{max-width:95%}body{font-family:sans-serif}table{border-collapse:collapse}

File diff suppressed because it is too large Load Diff

File diff suppressed because one or more lines are too long

View File

@ -0,0 +1,673 @@
/**
* Copyright (c) Tiny Technologies, Inc. All rights reserved.
* Licensed under the LGPL or a commercial license.
* For LGPL see License.txt in the project root for license information.
* For commercial licenses see https://www.tiny.cloud/
*/
/* RESET all the things! */
.tinymce-mobile-outer-container {
all: initial;
display: block;
}
.tinymce-mobile-outer-container * {
border: 0;
box-sizing: initial;
cursor: inherit;
float: none;
line-height: 1;
margin: 0;
outline: 0;
padding: 0;
-webkit-tap-highlight-color: transparent;
/* TBIO-3691, stop the gray flicker on touch. */
text-shadow: none;
white-space: nowrap;
}
.tinymce-mobile-icon-arrow-back::before {
content: "\e5cd";
}
.tinymce-mobile-icon-image::before {
content: "\e412";
}
.tinymce-mobile-icon-cancel-circle::before {
content: "\e5c9";
}
.tinymce-mobile-icon-full-dot::before {
content: "\e061";
}
.tinymce-mobile-icon-align-center::before {
content: "\e234";
}
.tinymce-mobile-icon-align-left::before {
content: "\e236";
}
.tinymce-mobile-icon-align-right::before {
content: "\e237";
}
.tinymce-mobile-icon-bold::before {
content: "\e238";
}
.tinymce-mobile-icon-italic::before {
content: "\e23f";
}
.tinymce-mobile-icon-unordered-list::before {
content: "\e241";
}
.tinymce-mobile-icon-ordered-list::before {
content: "\e242";
}
.tinymce-mobile-icon-font-size::before {
content: "\e245";
}
.tinymce-mobile-icon-underline::before {
content: "\e249";
}
.tinymce-mobile-icon-link::before {
content: "\e157";
}
.tinymce-mobile-icon-unlink::before {
content: "\eca2";
}
.tinymce-mobile-icon-color::before {
content: "\e891";
}
.tinymce-mobile-icon-previous::before {
content: "\e314";
}
.tinymce-mobile-icon-next::before {
content: "\e315";
}
.tinymce-mobile-icon-large-font::before,
.tinymce-mobile-icon-style-formats::before {
content: "\e264";
}
.tinymce-mobile-icon-undo::before {
content: "\e166";
}
.tinymce-mobile-icon-redo::before {
content: "\e15a";
}
.tinymce-mobile-icon-removeformat::before {
content: "\e239";
}
.tinymce-mobile-icon-small-font::before {
content: "\e906";
}
.tinymce-mobile-icon-readonly-back::before,
.tinymce-mobile-format-matches::after {
content: "\e5ca";
}
.tinymce-mobile-icon-small-heading::before {
content: "small";
}
.tinymce-mobile-icon-large-heading::before {
content: "large";
}
.tinymce-mobile-icon-small-heading::before,
.tinymce-mobile-icon-large-heading::before {
font-family: sans-serif;
font-size: 80%;
}
.tinymce-mobile-mask-edit-icon::before {
content: "\e254";
}
.tinymce-mobile-icon-back::before {
content: "\e5c4";
}
.tinymce-mobile-icon-heading::before {
/* TODO: Translate */
content: "Headings";
font-family: sans-serif;
font-size: 80%;
font-weight: bold;
}
.tinymce-mobile-icon-h1::before {
content: "H1";
font-weight: bold;
}
.tinymce-mobile-icon-h2::before {
content: "H2";
font-weight: bold;
}
.tinymce-mobile-icon-h3::before {
content: "H3";
font-weight: bold;
}
.tinymce-mobile-outer-container .tinymce-mobile-disabled-mask {
align-items: center;
display: flex;
justify-content: center;
background: rgba(51, 51, 51, 0.5);
height: 100%;
position: absolute;
top: 0;
width: 100%;
}
.tinymce-mobile-outer-container .tinymce-mobile-disabled-mask .tinymce-mobile-content-container {
align-items: center;
border-radius: 50%;
display: flex;
flex-direction: column;
font-family: sans-serif;
font-size: 1em;
justify-content: space-between;
}
.tinymce-mobile-outer-container .tinymce-mobile-disabled-mask .tinymce-mobile-content-container .mixin-menu-item {
align-items: center;
display: flex;
justify-content: center;
border-radius: 50%;
height: 2.1em;
width: 2.1em;
}
.tinymce-mobile-outer-container .tinymce-mobile-disabled-mask .tinymce-mobile-content-container .tinymce-mobile-content-tap-section {
align-items: center;
display: flex;
justify-content: center;
flex-direction: column;
font-size: 1em;
}
@media only screen and (min-device-width:700px) {
.tinymce-mobile-outer-container .tinymce-mobile-disabled-mask .tinymce-mobile-content-container .tinymce-mobile-content-tap-section {
font-size: 1.2em;
}
}
.tinymce-mobile-outer-container .tinymce-mobile-disabled-mask .tinymce-mobile-content-container .tinymce-mobile-content-tap-section .tinymce-mobile-mask-tap-icon {
align-items: center;
display: flex;
justify-content: center;
border-radius: 50%;
height: 2.1em;
width: 2.1em;
background-color: white;
color: #207ab7;
}
.tinymce-mobile-outer-container .tinymce-mobile-disabled-mask .tinymce-mobile-content-container .tinymce-mobile-content-tap-section .tinymce-mobile-mask-tap-icon::before {
content: "\e900";
font-family: 'tinymce-mobile', sans-serif;
}
.tinymce-mobile-outer-container .tinymce-mobile-disabled-mask .tinymce-mobile-content-container .tinymce-mobile-content-tap-section:not(.tinymce-mobile-mask-tap-icon-selected) .tinymce-mobile-mask-tap-icon {
z-index: 2;
}
.tinymce-mobile-android-container.tinymce-mobile-android-maximized {
background: #ffffff;
border: none;
bottom: 0;
display: flex;
flex-direction: column;
left: 0;
position: fixed;
right: 0;
top: 0;
}
.tinymce-mobile-android-container:not(.tinymce-mobile-android-maximized) {
position: relative;
}
.tinymce-mobile-android-container .tinymce-mobile-editor-socket {
display: flex;
flex-grow: 1;
}
.tinymce-mobile-android-container .tinymce-mobile-editor-socket iframe {
display: flex !important;
flex-grow: 1;
height: auto !important;
}
.tinymce-mobile-android-scroll-reload {
overflow: hidden;
}
:not(.tinymce-mobile-readonly-mode) > .tinymce-mobile-android-selection-context-toolbar {
margin-top: 23px;
}
.tinymce-mobile-toolstrip {
background: #fff;
display: flex;
flex: 0 0 auto;
z-index: 1;
}
.tinymce-mobile-toolstrip .tinymce-mobile-toolbar {
align-items: center;
background-color: #fff;
border-bottom: 1px solid #cccccc;
display: flex;
flex: 1;
height: 2.5em;
width: 100%;
/* Make it no larger than the toolstrip, so that it needs to scroll */
}
.tinymce-mobile-toolstrip .tinymce-mobile-toolbar:not(.tinymce-mobile-context-toolbar) .tinymce-mobile-toolbar-group {
align-items: center;
display: flex;
height: 100%;
flex-shrink: 1;
}
.tinymce-mobile-toolstrip .tinymce-mobile-toolbar:not(.tinymce-mobile-context-toolbar) .tinymce-mobile-toolbar-group > div {
align-items: center;
display: flex;
height: 100%;
flex: 1;
}
.tinymce-mobile-toolstrip .tinymce-mobile-toolbar:not(.tinymce-mobile-context-toolbar) .tinymce-mobile-toolbar-group.tinymce-mobile-exit-container {
background: #f44336;
}
.tinymce-mobile-toolstrip .tinymce-mobile-toolbar:not(.tinymce-mobile-context-toolbar) .tinymce-mobile-toolbar-group.tinymce-mobile-toolbar-scrollable-group {
flex-grow: 1;
}
.tinymce-mobile-toolstrip .tinymce-mobile-toolbar:not(.tinymce-mobile-context-toolbar) .tinymce-mobile-toolbar-group .tinymce-mobile-toolbar-group-item {
padding-left: 0.5em;
padding-right: 0.5em;
}
.tinymce-mobile-toolstrip .tinymce-mobile-toolbar:not(.tinymce-mobile-context-toolbar) .tinymce-mobile-toolbar-group .tinymce-mobile-toolbar-group-item.tinymce-mobile-toolbar-button {
align-items: center;
display: flex;
height: 80%;
margin-left: 2px;
margin-right: 2px;
}
.tinymce-mobile-toolstrip .tinymce-mobile-toolbar:not(.tinymce-mobile-context-toolbar) .tinymce-mobile-toolbar-group .tinymce-mobile-toolbar-group-item.tinymce-mobile-toolbar-button.tinymce-mobile-toolbar-button-selected {
background: #c8cbcf;
color: #cccccc;
}
.tinymce-mobile-toolstrip .tinymce-mobile-toolbar:not(.tinymce-mobile-context-toolbar) .tinymce-mobile-toolbar-group:first-of-type,
.tinymce-mobile-toolstrip .tinymce-mobile-toolbar:not(.tinymce-mobile-context-toolbar) .tinymce-mobile-toolbar-group:last-of-type {
background: #207ab7;
color: #eceff1;
}
.tinymce-mobile-toolstrip .tinymce-mobile-toolbar.tinymce-mobile-context-toolbar {
/* Note, this file is imported inside .tinymce-mobile-context-toolbar, so that prefix is on everything here. */
}
.tinymce-mobile-toolstrip .tinymce-mobile-toolbar.tinymce-mobile-context-toolbar .tinymce-mobile-toolbar-group {
align-items: center;
display: flex;
height: 100%;
flex: 1;
padding-bottom: 0.4em;
padding-top: 0.4em;
/* Make any buttons appearing on the left and right display in the centre (e.g. color edges) */
/* For widgets like the colour picker, use the whole height */
}
.tinymce-mobile-toolstrip .tinymce-mobile-toolbar.tinymce-mobile-context-toolbar .tinymce-mobile-toolbar-group .tinymce-mobile-serialised-dialog {
display: flex;
min-height: 1.5em;
overflow: hidden;
padding-left: 0;
padding-right: 0;
position: relative;
width: 100%;
}
.tinymce-mobile-toolstrip .tinymce-mobile-toolbar.tinymce-mobile-context-toolbar .tinymce-mobile-toolbar-group .tinymce-mobile-serialised-dialog .tinymce-mobile-serialised-dialog-chain {
display: flex;
height: 100%;
transition: left cubic-bezier(0.4, 0, 1, 1) 0.15s;
width: 100%;
}
.tinymce-mobile-toolstrip .tinymce-mobile-toolbar.tinymce-mobile-context-toolbar .tinymce-mobile-toolbar-group .tinymce-mobile-serialised-dialog .tinymce-mobile-serialised-dialog-chain .tinymce-mobile-serialised-dialog-screen {
display: flex;
flex: 0 0 auto;
justify-content: space-between;
width: 100%;
}
.tinymce-mobile-toolstrip .tinymce-mobile-toolbar.tinymce-mobile-context-toolbar .tinymce-mobile-toolbar-group .tinymce-mobile-serialised-dialog .tinymce-mobile-serialised-dialog-chain .tinymce-mobile-serialised-dialog-screen input {
font-family: Sans-serif;
}
.tinymce-mobile-toolstrip .tinymce-mobile-toolbar.tinymce-mobile-context-toolbar .tinymce-mobile-toolbar-group .tinymce-mobile-serialised-dialog .tinymce-mobile-serialised-dialog-chain .tinymce-mobile-serialised-dialog-screen .tinymce-mobile-input-container {
display: flex;
flex-grow: 1;
position: relative;
}
.tinymce-mobile-toolstrip .tinymce-mobile-toolbar.tinymce-mobile-context-toolbar .tinymce-mobile-toolbar-group .tinymce-mobile-serialised-dialog .tinymce-mobile-serialised-dialog-chain .tinymce-mobile-serialised-dialog-screen .tinymce-mobile-input-container .tinymce-mobile-input-container-x {
-ms-grid-row-align: center;
align-self: center;
background: inherit;
border: none;
border-radius: 50%;
color: #888;
font-size: 0.6em;
font-weight: bold;
height: 100%;
padding-right: 2px;
position: absolute;
right: 0;
}
.tinymce-mobile-toolstrip .tinymce-mobile-toolbar.tinymce-mobile-context-toolbar .tinymce-mobile-toolbar-group .tinymce-mobile-serialised-dialog .tinymce-mobile-serialised-dialog-chain .tinymce-mobile-serialised-dialog-screen .tinymce-mobile-input-container.tinymce-mobile-input-container-empty .tinymce-mobile-input-container-x {
display: none;
}
.tinymce-mobile-toolstrip .tinymce-mobile-toolbar.tinymce-mobile-context-toolbar .tinymce-mobile-toolbar-group .tinymce-mobile-serialised-dialog .tinymce-mobile-serialised-dialog-chain .tinymce-mobile-serialised-dialog-screen .tinymce-mobile-icon-previous,
.tinymce-mobile-toolstrip .tinymce-mobile-toolbar.tinymce-mobile-context-toolbar .tinymce-mobile-toolbar-group .tinymce-mobile-serialised-dialog .tinymce-mobile-serialised-dialog-chain .tinymce-mobile-serialised-dialog-screen .tinymce-mobile-icon-next {
align-items: center;
display: flex;
}
.tinymce-mobile-toolstrip .tinymce-mobile-toolbar.tinymce-mobile-context-toolbar .tinymce-mobile-toolbar-group .tinymce-mobile-serialised-dialog .tinymce-mobile-serialised-dialog-chain .tinymce-mobile-serialised-dialog-screen .tinymce-mobile-icon-previous::before,
.tinymce-mobile-toolstrip .tinymce-mobile-toolbar.tinymce-mobile-context-toolbar .tinymce-mobile-toolbar-group .tinymce-mobile-serialised-dialog .tinymce-mobile-serialised-dialog-chain .tinymce-mobile-serialised-dialog-screen .tinymce-mobile-icon-next::before {
align-items: center;
display: flex;
font-weight: bold;
height: 100%;
padding-left: 0.5em;
padding-right: 0.5em;
}
.tinymce-mobile-toolstrip .tinymce-mobile-toolbar.tinymce-mobile-context-toolbar .tinymce-mobile-toolbar-group .tinymce-mobile-serialised-dialog .tinymce-mobile-serialised-dialog-chain .tinymce-mobile-serialised-dialog-screen .tinymce-mobile-icon-previous.tinymce-mobile-toolbar-navigation-disabled::before,
.tinymce-mobile-toolstrip .tinymce-mobile-toolbar.tinymce-mobile-context-toolbar .tinymce-mobile-toolbar-group .tinymce-mobile-serialised-dialog .tinymce-mobile-serialised-dialog-chain .tinymce-mobile-serialised-dialog-screen .tinymce-mobile-icon-next.tinymce-mobile-toolbar-navigation-disabled::before {
visibility: hidden;
}
.tinymce-mobile-toolstrip .tinymce-mobile-toolbar.tinymce-mobile-context-toolbar .tinymce-mobile-toolbar-group .tinymce-mobile-dot-item {
color: #cccccc;
font-size: 10px;
line-height: 10px;
margin: 0 2px;
padding-top: 3px;
}
.tinymce-mobile-toolstrip .tinymce-mobile-toolbar.tinymce-mobile-context-toolbar .tinymce-mobile-toolbar-group .tinymce-mobile-dot-item.tinymce-mobile-dot-active {
color: #c8cbcf;
}
.tinymce-mobile-toolstrip .tinymce-mobile-toolbar.tinymce-mobile-context-toolbar .tinymce-mobile-toolbar-group .tinymce-mobile-icon-large-font::before,
.tinymce-mobile-toolstrip .tinymce-mobile-toolbar.tinymce-mobile-context-toolbar .tinymce-mobile-toolbar-group .tinymce-mobile-icon-large-heading::before {
margin-left: 0.5em;
margin-right: 0.9em;
}
.tinymce-mobile-toolstrip .tinymce-mobile-toolbar.tinymce-mobile-context-toolbar .tinymce-mobile-toolbar-group .tinymce-mobile-icon-small-font::before,
.tinymce-mobile-toolstrip .tinymce-mobile-toolbar.tinymce-mobile-context-toolbar .tinymce-mobile-toolbar-group .tinymce-mobile-icon-small-heading::before {
margin-left: 0.9em;
margin-right: 0.5em;
}
.tinymce-mobile-toolstrip .tinymce-mobile-toolbar.tinymce-mobile-context-toolbar .tinymce-mobile-toolbar-group .tinymce-mobile-slider {
display: flex;
flex: 1;
margin-left: 0;
margin-right: 0;
padding: 0.28em 0;
position: relative;
}
.tinymce-mobile-toolstrip .tinymce-mobile-toolbar.tinymce-mobile-context-toolbar .tinymce-mobile-toolbar-group .tinymce-mobile-slider .tinymce-mobile-slider-size-container {
align-items: center;
display: flex;
flex-grow: 1;
height: 100%;
}
.tinymce-mobile-toolstrip .tinymce-mobile-toolbar.tinymce-mobile-context-toolbar .tinymce-mobile-toolbar-group .tinymce-mobile-slider .tinymce-mobile-slider-size-container .tinymce-mobile-slider-size-line {
background: #cccccc;
display: flex;
flex: 1;
height: 0.2em;
margin-bottom: 0.3em;
margin-top: 0.3em;
}
.tinymce-mobile-toolstrip .tinymce-mobile-toolbar.tinymce-mobile-context-toolbar .tinymce-mobile-toolbar-group .tinymce-mobile-slider.tinymce-mobile-hue-slider-container {
padding-left: 2em;
padding-right: 2em;
}
.tinymce-mobile-toolstrip .tinymce-mobile-toolbar.tinymce-mobile-context-toolbar .tinymce-mobile-toolbar-group .tinymce-mobile-slider.tinymce-mobile-hue-slider-container .tinymce-mobile-slider-gradient-container {
align-items: center;
display: flex;
flex-grow: 1;
height: 100%;
}
.tinymce-mobile-toolstrip .tinymce-mobile-toolbar.tinymce-mobile-context-toolbar .tinymce-mobile-toolbar-group .tinymce-mobile-slider.tinymce-mobile-hue-slider-container .tinymce-mobile-slider-gradient-container .tinymce-mobile-slider-gradient {
background: linear-gradient(to right, hsl(0, 100%, 50%) 0%, hsl(60, 100%, 50%) 17%, hsl(120, 100%, 50%) 33%, hsl(180, 100%, 50%) 50%, hsl(240, 100%, 50%) 67%, hsl(300, 100%, 50%) 83%, hsl(0, 100%, 50%) 100%);
display: flex;
flex: 1;
height: 0.2em;
margin-bottom: 0.3em;
margin-top: 0.3em;
}
.tinymce-mobile-toolstrip .tinymce-mobile-toolbar.tinymce-mobile-context-toolbar .tinymce-mobile-toolbar-group .tinymce-mobile-slider.tinymce-mobile-hue-slider-container .tinymce-mobile-hue-slider-black {
/* Not part of theming */
background: black;
height: 0.2em;
margin-bottom: 0.3em;
margin-top: 0.3em;
width: 1.2em;
}
.tinymce-mobile-toolstrip .tinymce-mobile-toolbar.tinymce-mobile-context-toolbar .tinymce-mobile-toolbar-group .tinymce-mobile-slider.tinymce-mobile-hue-slider-container .tinymce-mobile-hue-slider-white {
/* Not part of theming */
background: white;
height: 0.2em;
margin-bottom: 0.3em;
margin-top: 0.3em;
width: 1.2em;
}
.tinymce-mobile-toolstrip .tinymce-mobile-toolbar.tinymce-mobile-context-toolbar .tinymce-mobile-toolbar-group .tinymce-mobile-slider .tinymce-mobile-slider-thumb {
/* vertically centering trick (margin: auto, top: 0, bottom: 0). On iOS and Safari, if you leave
* out these values, then it shows the thumb at the top of the spectrum. This is probably because it is
* absolutely positioned with only a left value, and not a top. Note, on Chrome it seems to be fine without
* this approach.
*/
align-items: center;
background-clip: padding-box;
background-color: #455a64;
border: 0.5em solid rgba(136, 136, 136, 0);
border-radius: 3em;
bottom: 0;
color: #fff;
display: flex;
height: 0.5em;
justify-content: center;
left: -10px;
margin: auto;
position: absolute;
top: 0;
transition: border 120ms cubic-bezier(0.39, 0.58, 0.57, 1);
width: 0.5em;
}
.tinymce-mobile-toolstrip .tinymce-mobile-toolbar.tinymce-mobile-context-toolbar .tinymce-mobile-toolbar-group .tinymce-mobile-slider .tinymce-mobile-slider-thumb.tinymce-mobile-thumb-active {
border: 0.5em solid rgba(136, 136, 136, 0.39);
}
.tinymce-mobile-toolstrip .tinymce-mobile-toolbar.tinymce-mobile-context-toolbar .tinymce-mobile-toolbar-group .tinymce-mobile-serializer-wrapper,
.tinymce-mobile-toolstrip .tinymce-mobile-toolbar.tinymce-mobile-context-toolbar .tinymce-mobile-toolbar-group > div {
align-items: center;
display: flex;
height: 100%;
flex: 1;
}
.tinymce-mobile-toolstrip .tinymce-mobile-toolbar.tinymce-mobile-context-toolbar .tinymce-mobile-toolbar-group .tinymce-mobile-serializer-wrapper {
flex-direction: column;
justify-content: center;
}
.tinymce-mobile-toolstrip .tinymce-mobile-toolbar.tinymce-mobile-context-toolbar .tinymce-mobile-toolbar-group .tinymce-mobile-toolbar-group-item {
align-items: center;
display: flex;
}
.tinymce-mobile-toolstrip .tinymce-mobile-toolbar.tinymce-mobile-context-toolbar .tinymce-mobile-toolbar-group .tinymce-mobile-toolbar-group-item:not(.tinymce-mobile-serialised-dialog) {
height: 100%;
}
.tinymce-mobile-toolstrip .tinymce-mobile-toolbar.tinymce-mobile-context-toolbar .tinymce-mobile-toolbar-group .tinymce-mobile-dot-container {
display: flex;
}
.tinymce-mobile-toolstrip .tinymce-mobile-toolbar.tinymce-mobile-context-toolbar .tinymce-mobile-toolbar-group input {
background: #ffffff;
border: none;
border-radius: 0;
color: #455a64;
flex-grow: 1;
font-size: 0.85em;
padding-bottom: 0.1em;
padding-left: 5px;
padding-top: 0.1em;
}
.tinymce-mobile-toolstrip .tinymce-mobile-toolbar.tinymce-mobile-context-toolbar .tinymce-mobile-toolbar-group input::-webkit-input-placeholder {
/* WebKit, Blink, Edge */
color: #888;
}
.tinymce-mobile-toolstrip .tinymce-mobile-toolbar.tinymce-mobile-context-toolbar .tinymce-mobile-toolbar-group input::placeholder {
/* WebKit, Blink, Edge */
color: #888;
}
/* dropup */
.tinymce-mobile-dropup {
background: white;
display: flex;
overflow: hidden;
width: 100%;
}
.tinymce-mobile-dropup.tinymce-mobile-dropup-shrinking {
transition: height 0.3s ease-out;
}
.tinymce-mobile-dropup.tinymce-mobile-dropup-growing {
transition: height 0.3s ease-in;
}
.tinymce-mobile-dropup.tinymce-mobile-dropup-closed {
flex-grow: 0;
}
.tinymce-mobile-dropup.tinymce-mobile-dropup-open:not(.tinymce-mobile-dropup-growing) {
flex-grow: 1;
}
/* TODO min-height for device size and orientation */
.tinymce-mobile-ios-container .tinymce-mobile-dropup:not(.tinymce-mobile-dropup-closed) {
min-height: 200px;
}
@media only screen and (orientation: landscape) {
.tinymce-mobile-dropup:not(.tinymce-mobile-dropup-closed) {
min-height: 200px;
}
}
@media only screen and (min-device-width : 320px) and (max-device-width : 568px) and (orientation : landscape) {
.tinymce-mobile-ios-container .tinymce-mobile-dropup:not(.tinymce-mobile-dropup-closed) {
min-height: 150px;
}
}
/* styles menu */
.tinymce-mobile-styles-menu {
font-family: sans-serif;
outline: 4px solid black;
overflow: hidden;
position: relative;
width: 100%;
}
.tinymce-mobile-styles-menu [role="menu"] {
display: flex;
flex-direction: column;
height: 100%;
position: absolute;
width: 100%;
}
.tinymce-mobile-styles-menu [role="menu"].transitioning {
transition: transform 0.5s ease-in-out;
}
.tinymce-mobile-styles-menu .tinymce-mobile-styles-item {
border-bottom: 1px solid #ddd;
color: #455a64;
cursor: pointer;
display: flex;
padding: 1em 1em;
position: relative;
}
.tinymce-mobile-styles-menu .tinymce-mobile-styles-collapser .tinymce-mobile-styles-collapse-icon::before {
color: #455a64;
content: "\e314";
font-family: 'tinymce-mobile', sans-serif;
}
.tinymce-mobile-styles-menu .tinymce-mobile-styles-item.tinymce-mobile-styles-item-is-menu::after {
color: #455a64;
content: "\e315";
font-family: 'tinymce-mobile', sans-serif;
padding-left: 1em;
padding-right: 1em;
position: absolute;
right: 0;
}
.tinymce-mobile-styles-menu .tinymce-mobile-styles-item.tinymce-mobile-format-matches::after {
font-family: 'tinymce-mobile', sans-serif;
padding-left: 1em;
padding-right: 1em;
position: absolute;
right: 0;
}
.tinymce-mobile-styles-menu .tinymce-mobile-styles-separator,
.tinymce-mobile-styles-menu .tinymce-mobile-styles-collapser {
align-items: center;
background: #fff;
border-top: #455a64;
color: #455a64;
display: flex;
min-height: 2.5em;
padding-left: 1em;
padding-right: 1em;
}
.tinymce-mobile-styles-menu [data-transitioning-destination="before"][data-transitioning-state],
.tinymce-mobile-styles-menu [data-transitioning-state="before"] {
transform: translate(-100%);
}
.tinymce-mobile-styles-menu [data-transitioning-destination="current"][data-transitioning-state],
.tinymce-mobile-styles-menu [data-transitioning-state="current"] {
transform: translate(0%);
}
.tinymce-mobile-styles-menu [data-transitioning-destination="after"][data-transitioning-state],
.tinymce-mobile-styles-menu [data-transitioning-state="after"] {
transform: translate(100%);
}
@font-face {
font-family: 'tinymce-mobile';
font-style: normal;
font-weight: normal;
src: url('fonts/tinymce-mobile.woff?8x92w3') format('woff');
}
@media (min-device-width: 700px) {
.tinymce-mobile-outer-container,
.tinymce-mobile-outer-container input {
font-size: 25px;
}
}
@media (max-device-width: 700px) {
.tinymce-mobile-outer-container,
.tinymce-mobile-outer-container input {
font-size: 18px;
}
}
.tinymce-mobile-icon {
font-family: 'tinymce-mobile', sans-serif;
}
.mixin-flex-and-centre {
align-items: center;
display: flex;
justify-content: center;
}
.mixin-flex-bar {
align-items: center;
display: flex;
height: 100%;
}
.tinymce-mobile-outer-container .tinymce-mobile-editor-socket iframe {
background-color: #fff;
width: 100%;
}
.tinymce-mobile-editor-socket .tinymce-mobile-mask-edit-icon {
/* Note, on the iPod touch in landscape, this isn't visible when the navbar appears */
background-color: #207ab7;
border-radius: 50%;
bottom: 1em;
color: white;
font-size: 1em;
height: 2.1em;
position: fixed;
right: 2em;
width: 2.1em;
align-items: center;
display: flex;
justify-content: center;
}
@media only screen and (min-device-width:700px) {
.tinymce-mobile-editor-socket .tinymce-mobile-mask-edit-icon {
font-size: 1.2em;
}
}
.tinymce-mobile-outer-container:not(.tinymce-mobile-fullscreen-maximized) .tinymce-mobile-editor-socket {
height: 300px;
overflow: hidden;
}
.tinymce-mobile-outer-container:not(.tinymce-mobile-fullscreen-maximized) .tinymce-mobile-editor-socket iframe {
height: 100%;
}
.tinymce-mobile-outer-container:not(.tinymce-mobile-fullscreen-maximized) .tinymce-mobile-toolstrip {
display: none;
}
/*
Note, that if you don't include this (::-webkit-file-upload-button), the toolbar width gets
increased and the whole body becomes scrollable. It's important!
*/
input[type="file"]::-webkit-file-upload-button {
display: none;
}
@media only screen and (min-device-width : 320px) and (max-device-width : 568px) and (orientation : landscape) {
.tinymce-mobile-ios-container .tinymce-mobile-editor-socket .tinymce-mobile-mask-edit-icon {
bottom: 50%;
}
}

File diff suppressed because one or more lines are too long

View File

@ -0,0 +1,37 @@
/**
* Copyright (c) Tiny Technologies, Inc. All rights reserved.
* Licensed under the LGPL or a commercial license.
* For LGPL see License.txt in the project root for license information.
* For commercial licenses see https://www.tiny.cloud/
*/
body.tox-dialog__disable-scroll {
overflow: hidden;
}
.tox-fullscreen {
border: 0;
height: 100%;
margin: 0;
overflow: hidden;
-ms-scroll-chaining: none;
overscroll-behavior: none;
padding: 0;
touch-action: pinch-zoom;
width: 100%;
}
.tox.tox-tinymce.tox-fullscreen .tox-statusbar__resize-handle {
display: none;
}
.tox.tox-tinymce.tox-fullscreen,
.tox-shadowhost.tox-fullscreen {
left: 0;
position: fixed;
top: 0;
z-index: 1200;
}
.tox.tox-tinymce.tox-fullscreen {
background-color: transparent;
}
.tox-fullscreen .tox.tox-tinymce-aux,
.tox-fullscreen ~ .tox.tox-tinymce-aux {
z-index: 1201;
}

View File

@ -0,0 +1,7 @@
/**
* Copyright (c) Tiny Technologies, Inc. All rights reserved.
* Licensed under the LGPL or a commercial license.
* For LGPL see License.txt in the project root for license information.
* For commercial licenses see https://www.tiny.cloud/
*/
body.tox-dialog__disable-scroll{overflow:hidden}.tox-fullscreen{border:0;height:100%;margin:0;overflow:hidden;-ms-scroll-chaining:none;overscroll-behavior:none;padding:0;touch-action:pinch-zoom;width:100%}.tox.tox-tinymce.tox-fullscreen .tox-statusbar__resize-handle{display:none}.tox-shadowhost.tox-fullscreen,.tox.tox-tinymce.tox-fullscreen{left:0;position:fixed;top:0;z-index:1200}.tox.tox-tinymce.tox-fullscreen{background-color:transparent}.tox-fullscreen .tox.tox-tinymce-aux,.tox-fullscreen~.tox.tox-tinymce-aux{z-index:1201}

View File

@ -0,0 +1,732 @@
/**
* Copyright (c) Tiny Technologies, Inc. All rights reserved.
* Licensed under the LGPL or a commercial license.
* For LGPL see License.txt in the project root for license information.
* For commercial licenses see https://www.tiny.cloud/
*/
.mce-content-body .mce-item-anchor {
background: transparent url("data:image/svg+xml;charset=UTF-8,%3Csvg%20width%3D'8'%20height%3D'12'%20xmlns%3D'http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg'%3E%3Cpath%20d%3D'M0%200L8%200%208%2012%204.09117821%209%200%2012z'%2F%3E%3C%2Fsvg%3E%0A") no-repeat center;
cursor: default;
display: inline-block;
height: 12px !important;
padding: 0 2px;
-webkit-user-modify: read-only;
-moz-user-modify: read-only;
-webkit-user-select: all;
-moz-user-select: all;
-ms-user-select: all;
user-select: all;
width: 8px !important;
}
.mce-content-body .mce-item-anchor[data-mce-selected] {
outline-offset: 1px;
}
.tox-comments-visible .tox-comment {
background-color: #fff0b7;
}
.tox-comments-visible .tox-comment--active {
background-color: #ffe168;
}
.tox-checklist > li:not(.tox-checklist--hidden) {
list-style: none;
margin: 0.25em 0;
}
.tox-checklist > li:not(.tox-checklist--hidden)::before {
content: url("data:image/svg+xml;charset=UTF-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%2216%22%20height%3D%2216%22%20viewBox%3D%220%200%2016%2016%22%3E%3Cg%20id%3D%22checklist-unchecked%22%20fill%3D%22none%22%20fill-rule%3D%22evenodd%22%3E%3Crect%20id%3D%22Rectangle%22%20width%3D%2215%22%20height%3D%2215%22%20x%3D%22.5%22%20y%3D%22.5%22%20fill-rule%3D%22nonzero%22%20stroke%3D%22%234C4C4C%22%20rx%3D%222%22%2F%3E%3C%2Fg%3E%3C%2Fsvg%3E%0A");
cursor: pointer;
height: 1em;
margin-left: -1.5em;
margin-top: 0.125em;
position: absolute;
width: 1em;
}
.tox-checklist li:not(.tox-checklist--hidden).tox-checklist--checked::before {
content: url("data:image/svg+xml;charset=UTF-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%2216%22%20height%3D%2216%22%20viewBox%3D%220%200%2016%2016%22%3E%3Cg%20id%3D%22checklist-checked%22%20fill%3D%22none%22%20fill-rule%3D%22evenodd%22%3E%3Crect%20id%3D%22Rectangle%22%20width%3D%2216%22%20height%3D%2216%22%20fill%3D%22%234099FF%22%20fill-rule%3D%22nonzero%22%20rx%3D%222%22%2F%3E%3Cpath%20id%3D%22Path%22%20fill%3D%22%23FFF%22%20fill-rule%3D%22nonzero%22%20d%3D%22M11.5703186%2C3.14417309%20C11.8516238%2C2.73724603%2012.4164781%2C2.62829933%2012.83558%2C2.89774797%20C13.260121%2C3.17069355%2013.3759736%2C3.72932262%2013.0909105%2C4.14168582%20L7.7580587%2C11.8560195%20C7.43776896%2C12.3193404%206.76483983%2C12.3852142%206.35607322%2C11.9948725%20L3.02491697%2C8.8138662%20C2.66090143%2C8.46625845%202.65798871%2C7.89594698%203.01850234%2C7.54483354%20C3.373942%2C7.19866177%203.94940006%2C7.19592841%204.30829608%2C7.5386474%20L6.85276923%2C9.9684299%20L11.5703186%2C3.14417309%20Z%22%2F%3E%3C%2Fg%3E%3C%2Fsvg%3E%0A");
}
[dir=rtl] .tox-checklist > li:not(.tox-checklist--hidden)::before {
margin-left: 0;
margin-right: -1.5em;
}
/* stylelint-disable */
/* http://prismjs.com/ */
/**
* prism.js default theme for JavaScript, CSS and HTML
* Based on dabblet (http://dabblet.com)
* @author Lea Verou
*/
code[class*="language-"],
pre[class*="language-"] {
color: black;
background: none;
text-shadow: 0 1px white;
font-family: Consolas, Monaco, 'Andale Mono', 'Ubuntu Mono', monospace;
font-size: 1em;
text-align: left;
white-space: pre;
word-spacing: normal;
word-break: normal;
word-wrap: normal;
line-height: 1.5;
-moz-tab-size: 4;
tab-size: 4;
-webkit-hyphens: none;
-ms-hyphens: none;
hyphens: none;
}
pre[class*="language-"]::-moz-selection,
pre[class*="language-"] ::-moz-selection,
code[class*="language-"]::-moz-selection,
code[class*="language-"] ::-moz-selection {
text-shadow: none;
background: #b3d4fc;
}
pre[class*="language-"]::selection,
pre[class*="language-"] ::selection,
code[class*="language-"]::selection,
code[class*="language-"] ::selection {
text-shadow: none;
background: #b3d4fc;
}
@media print {
code[class*="language-"],
pre[class*="language-"] {
text-shadow: none;
}
}
/* Code blocks */
pre[class*="language-"] {
padding: 1em;
margin: 0.5em 0;
overflow: auto;
}
:not(pre) > code[class*="language-"],
pre[class*="language-"] {
background: #f5f2f0;
}
/* Inline code */
:not(pre) > code[class*="language-"] {
padding: 0.1em;
border-radius: 0.3em;
white-space: normal;
}
.token.comment,
.token.prolog,
.token.doctype,
.token.cdata {
color: slategray;
}
.token.punctuation {
color: #999;
}
.namespace {
opacity: 0.7;
}
.token.property,
.token.tag,
.token.boolean,
.token.number,
.token.constant,
.token.symbol,
.token.deleted {
color: #905;
}
.token.selector,
.token.attr-name,
.token.string,
.token.char,
.token.builtin,
.token.inserted {
color: #690;
}
.token.operator,
.token.entity,
.token.url,
.language-css .token.string,
.style .token.string {
color: #9a6e3a;
background: hsla(0, 0%, 100%, 0.5);
}
.token.atrule,
.token.attr-value,
.token.keyword {
color: #07a;
}
.token.function,
.token.class-name {
color: #DD4A68;
}
.token.regex,
.token.important,
.token.variable {
color: #e90;
}
.token.important,
.token.bold {
font-weight: bold;
}
.token.italic {
font-style: italic;
}
.token.entity {
cursor: help;
}
/* stylelint-enable */
.mce-content-body {
overflow-wrap: break-word;
word-wrap: break-word;
}
.mce-content-body .mce-visual-caret {
background-color: black;
background-color: currentColor;
position: absolute;
}
.mce-content-body .mce-visual-caret-hidden {
display: none;
}
.mce-content-body *[data-mce-caret] {
left: -1000px;
margin: 0;
padding: 0;
position: absolute;
right: auto;
top: 0;
}
.mce-content-body .mce-offscreen-selection {
left: -2000000px;
max-width: 1000000px;
position: absolute;
}
.mce-content-body *[contentEditable=false] {
cursor: default;
}
.mce-content-body *[contentEditable=true] {
cursor: text;
}
.tox-cursor-format-painter {
cursor: url("data:image/svg+xml;charset=UTF-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%2224%22%20height%3D%2224%22%20viewBox%3D%220%200%2024%2024%22%3E%0A%20%20%3Cg%20fill%3D%22none%22%20fill-rule%3D%22evenodd%22%3E%0A%20%20%20%20%3Cpath%20fill%3D%22%23000%22%20fill-rule%3D%22nonzero%22%20d%3D%22M15%2C6%20C15%2C5.45%2014.55%2C5%2014%2C5%20L6%2C5%20C5.45%2C5%205%2C5.45%205%2C6%20L5%2C10%20C5%2C10.55%205.45%2C11%206%2C11%20L14%2C11%20C14.55%2C11%2015%2C10.55%2015%2C10%20L15%2C9%20L16%2C9%20L16%2C12%20L9%2C12%20L9%2C19%20C9%2C19.55%209.45%2C20%2010%2C20%20L11%2C20%20C11.55%2C20%2012%2C19.55%2012%2C19%20L12%2C14%20L18%2C14%20L18%2C7%20L15%2C7%20L15%2C6%20Z%22%2F%3E%0A%20%20%20%20%3Cpath%20fill%3D%22%23000%22%20fill-rule%3D%22nonzero%22%20d%3D%22M1%2C1%20L8.25%2C1%20C8.66421356%2C1%209%2C1.33578644%209%2C1.75%20L9%2C1.75%20C9%2C2.16421356%208.66421356%2C2.5%208.25%2C2.5%20L2.5%2C2.5%20L2.5%2C8.25%20C2.5%2C8.66421356%202.16421356%2C9%201.75%2C9%20L1.75%2C9%20C1.33578644%2C9%201%2C8.66421356%201%2C8.25%20L1%2C1%20Z%22%2F%3E%0A%20%20%3C%2Fg%3E%0A%3C%2Fsvg%3E%0A"), default;
}
.mce-content-body figure.align-left {
float: left;
}
.mce-content-body figure.align-right {
float: right;
}
.mce-content-body figure.image.align-center {
display: table;
margin-left: auto;
margin-right: auto;
}
.mce-preview-object {
border: 1px solid gray;
display: inline-block;
line-height: 0;
margin: 0 2px 0 2px;
position: relative;
}
.mce-preview-object .mce-shim {
background: url(data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7);
height: 100%;
left: 0;
position: absolute;
top: 0;
width: 100%;
}
.mce-preview-object[data-mce-selected="2"] .mce-shim {
display: none;
}
.mce-object {
background: transparent url("data:image/svg+xml;charset=UTF-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%2224%22%20height%3D%2224%22%3E%3Cpath%20d%3D%22M4%203h16a1%201%200%200%201%201%201v16a1%201%200%200%201-1%201H4a1%201%200%200%201-1-1V4a1%201%200%200%201%201-1zm1%202v14h14V5H5zm4.79%202.565l5.64%204.028a.5.5%200%200%201%200%20.814l-5.64%204.028a.5.5%200%200%201-.79-.407V7.972a.5.5%200%200%201%20.79-.407z%22%2F%3E%3C%2Fsvg%3E%0A") no-repeat center;
border: 1px dashed #aaa;
}
.mce-pagebreak {
border: 1px dashed #aaa;
cursor: default;
display: block;
height: 5px;
margin-top: 15px;
page-break-before: always;
width: 100%;
}
@media print {
.mce-pagebreak {
border: 0;
}
}
.tiny-pageembed .mce-shim {
background: url(data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7);
height: 100%;
left: 0;
position: absolute;
top: 0;
width: 100%;
}
.tiny-pageembed[data-mce-selected="2"] .mce-shim {
display: none;
}
.tiny-pageembed {
display: inline-block;
position: relative;
}
.tiny-pageembed--21by9,
.tiny-pageembed--16by9,
.tiny-pageembed--4by3,
.tiny-pageembed--1by1 {
display: block;
overflow: hidden;
padding: 0;
position: relative;
width: 100%;
}
.tiny-pageembed--21by9 {
padding-top: 42.857143%;
}
.tiny-pageembed--16by9 {
padding-top: 56.25%;
}
.tiny-pageembed--4by3 {
padding-top: 75%;
}
.tiny-pageembed--1by1 {
padding-top: 100%;
}
.tiny-pageembed--21by9 iframe,
.tiny-pageembed--16by9 iframe,
.tiny-pageembed--4by3 iframe,
.tiny-pageembed--1by1 iframe {
border: 0;
height: 100%;
left: 0;
position: absolute;
top: 0;
width: 100%;
}
.mce-content-body[data-mce-placeholder] {
position: relative;
}
.mce-content-body[data-mce-placeholder]:not(.mce-visualblocks)::before {
color: rgba(34, 47, 62, 0.7);
content: attr(data-mce-placeholder);
position: absolute;
}
.mce-content-body:not([dir=rtl])[data-mce-placeholder]:not(.mce-visualblocks)::before {
left: 1px;
}
.mce-content-body[dir=rtl][data-mce-placeholder]:not(.mce-visualblocks)::before {
right: 1px;
}
.mce-content-body div.mce-resizehandle {
background-color: #4099ff;
border-color: #4099ff;
border-style: solid;
border-width: 1px;
box-sizing: border-box;
height: 10px;
position: absolute;
width: 10px;
z-index: 1298;
}
.mce-content-body div.mce-resizehandle:hover {
background-color: #4099ff;
}
.mce-content-body div.mce-resizehandle:nth-of-type(1) {
cursor: nwse-resize;
}
.mce-content-body div.mce-resizehandle:nth-of-type(2) {
cursor: nesw-resize;
}
.mce-content-body div.mce-resizehandle:nth-of-type(3) {
cursor: nwse-resize;
}
.mce-content-body div.mce-resizehandle:nth-of-type(4) {
cursor: nesw-resize;
}
.mce-content-body .mce-resize-backdrop {
z-index: 10000;
}
.mce-content-body .mce-clonedresizable {
cursor: default;
opacity: 0.5;
outline: 1px dashed black;
position: absolute;
z-index: 10001;
}
.mce-content-body .mce-clonedresizable.mce-resizetable-columns th,
.mce-content-body .mce-clonedresizable.mce-resizetable-columns td {
border: 0;
}
.mce-content-body .mce-resize-helper {
background: #555;
background: rgba(0, 0, 0, 0.75);
border: 1px;
border-radius: 3px;
color: white;
display: none;
font-family: sans-serif;
font-size: 12px;
line-height: 14px;
margin: 5px 10px;
padding: 5px;
position: absolute;
white-space: nowrap;
z-index: 10002;
}
.tox-rtc-user-selection {
position: relative;
}
.tox-rtc-user-cursor {
bottom: 0;
cursor: default;
position: absolute;
top: 0;
width: 2px;
}
.tox-rtc-user-cursor::before {
background-color: inherit;
border-radius: 50%;
content: '';
display: block;
height: 8px;
position: absolute;
right: -3px;
top: -3px;
width: 8px;
}
.tox-rtc-user-cursor:hover::after {
background-color: inherit;
border-radius: 100px;
box-sizing: border-box;
color: #fff;
content: attr(data-user);
display: block;
font-size: 12px;
font-weight: bold;
left: -5px;
min-height: 8px;
min-width: 8px;
padding: 0 12px;
position: absolute;
top: -11px;
white-space: nowrap;
z-index: 1000;
}
.tox-rtc-user-selection--1 .tox-rtc-user-cursor {
background-color: #2dc26b;
}
.tox-rtc-user-selection--2 .tox-rtc-user-cursor {
background-color: #e03e2d;
}
.tox-rtc-user-selection--3 .tox-rtc-user-cursor {
background-color: #f1c40f;
}
.tox-rtc-user-selection--4 .tox-rtc-user-cursor {
background-color: #3598db;
}
.tox-rtc-user-selection--5 .tox-rtc-user-cursor {
background-color: #b96ad9;
}
.tox-rtc-user-selection--6 .tox-rtc-user-cursor {
background-color: #e67e23;
}
.tox-rtc-user-selection--7 .tox-rtc-user-cursor {
background-color: #aaa69d;
}
.tox-rtc-user-selection--8 .tox-rtc-user-cursor {
background-color: #f368e0;
}
.tox-rtc-remote-image {
background: #eaeaea url("data:image/svg+xml;charset=UTF-8,%3Csvg%20width%3D%2236%22%20height%3D%2212%22%20viewBox%3D%220%200%2036%2012%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%0A%20%20%3Ccircle%20cx%3D%226%22%20cy%3D%226%22%20r%3D%223%22%20fill%3D%22rgba(0%2C%200%2C%200%2C%20.2)%22%3E%0A%20%20%20%20%3Canimate%20attributeName%3D%22r%22%20values%3D%223%3B5%3B3%22%20calcMode%3D%22linear%22%20dur%3D%221s%22%20repeatCount%3D%22indefinite%22%20%2F%3E%0A%20%20%3C%2Fcircle%3E%0A%20%20%3Ccircle%20cx%3D%2218%22%20cy%3D%226%22%20r%3D%223%22%20fill%3D%22rgba(0%2C%200%2C%200%2C%20.2)%22%3E%0A%20%20%20%20%3Canimate%20attributeName%3D%22r%22%20values%3D%223%3B5%3B3%22%20calcMode%3D%22linear%22%20begin%3D%22.33s%22%20dur%3D%221s%22%20repeatCount%3D%22indefinite%22%20%2F%3E%0A%20%20%3C%2Fcircle%3E%0A%20%20%3Ccircle%20cx%3D%2230%22%20cy%3D%226%22%20r%3D%223%22%20fill%3D%22rgba(0%2C%200%2C%200%2C%20.2)%22%3E%0A%20%20%20%20%3Canimate%20attributeName%3D%22r%22%20values%3D%223%3B5%3B3%22%20calcMode%3D%22linear%22%20begin%3D%22.66s%22%20dur%3D%221s%22%20repeatCount%3D%22indefinite%22%20%2F%3E%0A%20%20%3C%2Fcircle%3E%0A%3C%2Fsvg%3E%0A") no-repeat center center;
border: 1px solid #ccc;
min-height: 240px;
min-width: 320px;
}
.mce-match-marker {
background: #aaa;
color: #fff;
}
.mce-match-marker-selected {
background: #39f;
color: #fff;
}
.mce-match-marker-selected::-moz-selection {
background: #39f;
color: #fff;
}
.mce-match-marker-selected::selection {
background: #39f;
color: #fff;
}
.mce-content-body img[data-mce-selected],
.mce-content-body video[data-mce-selected],
.mce-content-body audio[data-mce-selected],
.mce-content-body object[data-mce-selected],
.mce-content-body embed[data-mce-selected],
.mce-content-body table[data-mce-selected] {
outline: 3px solid #b4d7ff;
}
.mce-content-body hr[data-mce-selected] {
outline: 3px solid #b4d7ff;
outline-offset: 1px;
}
.mce-content-body *[contentEditable=false] *[contentEditable=true]:focus {
outline: 3px solid #b4d7ff;
}
.mce-content-body *[contentEditable=false] *[contentEditable=true]:hover {
outline: 3px solid #b4d7ff;
}
.mce-content-body *[contentEditable=false][data-mce-selected] {
cursor: not-allowed;
outline: 3px solid #b4d7ff;
}
.mce-content-body.mce-content-readonly *[contentEditable=true]:focus,
.mce-content-body.mce-content-readonly *[contentEditable=true]:hover {
outline: none;
}
.mce-content-body *[data-mce-selected="inline-boundary"] {
background-color: #b4d7ff;
}
.mce-content-body .mce-edit-focus {
outline: 3px solid #b4d7ff;
}
.mce-content-body td[data-mce-selected],
.mce-content-body th[data-mce-selected] {
position: relative;
}
.mce-content-body td[data-mce-selected]::-moz-selection,
.mce-content-body th[data-mce-selected]::-moz-selection {
background: none;
}
.mce-content-body td[data-mce-selected]::selection,
.mce-content-body th[data-mce-selected]::selection {
background: none;
}
.mce-content-body td[data-mce-selected] *,
.mce-content-body th[data-mce-selected] * {
outline: none;
-webkit-touch-callout: none;
-webkit-user-select: none;
-moz-user-select: none;
-ms-user-select: none;
user-select: none;
}
.mce-content-body td[data-mce-selected]::after,
.mce-content-body th[data-mce-selected]::after {
background-color: rgba(180, 215, 255, 0.7);
border: 1px solid rgba(180, 215, 255, 0.7);
bottom: -1px;
content: '';
left: -1px;
mix-blend-mode: multiply;
position: absolute;
right: -1px;
top: -1px;
}
@media screen and (-ms-high-contrast: active), (-ms-high-contrast: none) {
.mce-content-body td[data-mce-selected]::after,
.mce-content-body th[data-mce-selected]::after {
border-color: rgba(0, 84, 180, 0.7);
}
}
.mce-content-body img::-moz-selection {
background: none;
}
.mce-content-body img::selection {
background: none;
}
.ephox-snooker-resizer-bar {
background-color: #b4d7ff;
opacity: 0;
-webkit-user-select: none;
-moz-user-select: none;
-ms-user-select: none;
user-select: none;
}
.ephox-snooker-resizer-cols {
cursor: col-resize;
}
.ephox-snooker-resizer-rows {
cursor: row-resize;
}
.ephox-snooker-resizer-bar.ephox-snooker-resizer-bar-dragging {
opacity: 1;
}
.mce-spellchecker-word {
background-image: url("data:image/svg+xml;charset=UTF-8,%3Csvg%20width%3D'4'%20height%3D'4'%20xmlns%3D'http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg'%3E%3Cpath%20stroke%3D'%23ff0000'%20fill%3D'none'%20stroke-linecap%3D'round'%20stroke-opacity%3D'.75'%20d%3D'M0%203L2%201%204%203'%2F%3E%3C%2Fsvg%3E%0A");
background-position: 0 calc(100% + 1px);
background-repeat: repeat-x;
background-size: auto 6px;
cursor: default;
height: 2rem;
}
.mce-spellchecker-grammar {
background-image: url("data:image/svg+xml;charset=UTF-8,%3Csvg%20width%3D'4'%20height%3D'4'%20xmlns%3D'http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg'%3E%3Cpath%20stroke%3D'%2300A835'%20fill%3D'none'%20stroke-linecap%3D'round'%20d%3D'M0%203L2%201%204%203'%2F%3E%3C%2Fsvg%3E%0A");
background-position: 0 calc(100% + 1px);
background-repeat: repeat-x;
background-size: auto 6px;
cursor: default;
}
.mce-toc {
border: 1px solid gray;
}
.mce-toc h2 {
margin: 4px;
}
.mce-toc li {
list-style-type: none;
}
table[style*="border-width: 0px"],
.mce-item-table:not([border]),
.mce-item-table[border="0"],
table[style*="border-width: 0px"] td,
.mce-item-table:not([border]) td,
.mce-item-table[border="0"] td,
table[style*="border-width: 0px"] th,
.mce-item-table:not([border]) th,
.mce-item-table[border="0"] th,
table[style*="border-width: 0px"] caption,
.mce-item-table:not([border]) caption,
.mce-item-table[border="0"] caption {
border: 1px dashed #bbb;
}
.mce-visualblocks p,
.mce-visualblocks h1,
.mce-visualblocks h2,
.mce-visualblocks h3,
.mce-visualblocks h4,
.mce-visualblocks h5,
.mce-visualblocks h6,
.mce-visualblocks div:not([data-mce-bogus]),
.mce-visualblocks section,
.mce-visualblocks article,
.mce-visualblocks blockquote,
.mce-visualblocks address,
.mce-visualblocks pre,
.mce-visualblocks figure,
.mce-visualblocks figcaption,
.mce-visualblocks hgroup,
.mce-visualblocks aside,
.mce-visualblocks ul,
.mce-visualblocks ol,
.mce-visualblocks dl {
background-repeat: no-repeat;
border: 1px dashed #bbb;
margin-left: 3px;
padding-top: 10px;
}
.mce-visualblocks p {
background-image: url(data:image/gif;base64,R0lGODlhCQAJAJEAAAAAAP///7u7u////yH5BAEAAAMALAAAAAAJAAkAAAIQnG+CqCN/mlyvsRUpThG6AgA7);
}
.mce-visualblocks h1 {
background-image: url(data:image/gif;base64,R0lGODlhDQAKAIABALu7u////yH5BAEAAAEALAAAAAANAAoAAAIXjI8GybGu1JuxHoAfRNRW3TWXyF2YiRUAOw==);
}
.mce-visualblocks h2 {
background-image: url(data:image/gif;base64,R0lGODlhDgAKAIABALu7u////yH5BAEAAAEALAAAAAAOAAoAAAIajI8Hybbx4oOuqgTynJd6bGlWg3DkJzoaUAAAOw==);
}
.mce-visualblocks h3 {
background-image: url(data:image/gif;base64,R0lGODlhDgAKAIABALu7u////yH5BAEAAAEALAAAAAAOAAoAAAIZjI8Hybbx4oOuqgTynJf2Ln2NOHpQpmhAAQA7);
}
.mce-visualblocks h4 {
background-image: url(data:image/gif;base64,R0lGODlhDgAKAIABALu7u////yH5BAEAAAEALAAAAAAOAAoAAAIajI8HybbxInR0zqeAdhtJlXwV1oCll2HaWgAAOw==);
}
.mce-visualblocks h5 {
background-image: url(data:image/gif;base64,R0lGODlhDgAKAIABALu7u////yH5BAEAAAEALAAAAAAOAAoAAAIajI8HybbxIoiuwjane4iq5GlW05GgIkIZUAAAOw==);
}
.mce-visualblocks h6 {
background-image: url(data:image/gif;base64,R0lGODlhDgAKAIABALu7u////yH5BAEAAAEALAAAAAAOAAoAAAIajI8HybbxIoiuwjan04jep1iZ1XRlAo5bVgAAOw==);
}
.mce-visualblocks div:not([data-mce-bogus]) {
background-image: url(data:image/gif;base64,R0lGODlhEgAKAIABALu7u////yH5BAEAAAEALAAAAAASAAoAAAIfjI9poI0cgDywrhuxfbrzDEbQM2Ei5aRjmoySW4pAAQA7);
}
.mce-visualblocks section {
background-image: url(data:image/gif;base64,R0lGODlhKAAKAIABALu7u////yH5BAEAAAEALAAAAAAoAAoAAAI5jI+pywcNY3sBWHdNrplytD2ellDeSVbp+GmWqaDqDMepc8t17Y4vBsK5hDyJMcI6KkuYU+jpjLoKADs=);
}
.mce-visualblocks article {
background-image: url(data:image/gif;base64,R0lGODlhKgAKAIABALu7u////yH5BAEAAAEALAAAAAAqAAoAAAI6jI+pywkNY3wG0GBvrsd2tXGYSGnfiF7ikpXemTpOiJScasYoDJJrjsG9gkCJ0ag6KhmaIe3pjDYBBQA7);
}
.mce-visualblocks blockquote {
background-image: url(data:image/gif;base64,R0lGODlhPgAKAIABALu7u////yH5BAEAAAEALAAAAAA+AAoAAAJPjI+py+0Knpz0xQDyuUhvfoGgIX5iSKZYgq5uNL5q69asZ8s5rrf0yZmpNkJZzFesBTu8TOlDVAabUyatguVhWduud3EyiUk45xhTTgMBBQA7);
}
.mce-visualblocks address {
background-image: url(data:image/gif;base64,R0lGODlhLQAKAIABALu7u////yH5BAEAAAEALAAAAAAtAAoAAAI/jI+pywwNozSP1gDyyZcjb3UaRpXkWaXmZW4OqKLhBmLs+K263DkJK7OJeifh7FicKD9A1/IpGdKkyFpNmCkAADs=);
}
.mce-visualblocks pre {
background-image: url(data:image/gif;base64,R0lGODlhFQAKAIABALu7uwAAACH5BAEAAAEALAAAAAAVAAoAAAIjjI+ZoN0cgDwSmnpz1NCueYERhnibZVKLNnbOq8IvKpJtVQAAOw==);
}
.mce-visualblocks figure {
background-image: url(data:image/gif;base64,R0lGODlhJAAKAIAAALu7u////yH5BAEAAAEALAAAAAAkAAoAAAI0jI+py+2fwAHUSFvD3RlvG4HIp4nX5JFSpnZUJ6LlrM52OE7uSWosBHScgkSZj7dDKnWAAgA7);
}
.mce-visualblocks figcaption {
border: 1px dashed #bbb;
}
.mce-visualblocks hgroup {
background-image: url(data:image/gif;base64,R0lGODlhJwAKAIABALu7uwAAACH5BAEAAAEALAAAAAAnAAoAAAI3jI+pywYNI3uB0gpsRtt5fFnfNZaVSYJil4Wo03Hv6Z62uOCgiXH1kZIIJ8NiIxRrAZNMZAtQAAA7);
}
.mce-visualblocks aside {
background-image: url(data:image/gif;base64,R0lGODlhHgAKAIABAKqqqv///yH5BAEAAAEALAAAAAAeAAoAAAItjI+pG8APjZOTzgtqy7I3f1yehmQcFY4WKZbqByutmW4aHUd6vfcVbgudgpYCADs=);
}
.mce-visualblocks ul {
background-image: url(data:image/gif;base64,R0lGODlhDQAKAIAAALu7u////yH5BAEAAAEALAAAAAANAAoAAAIXjI8GybGuYnqUVSjvw26DzzXiqIDlVwAAOw==);
}
.mce-visualblocks ol {
background-image: url(data:image/gif;base64,R0lGODlhDQAKAIABALu7u////yH5BAEAAAEALAAAAAANAAoAAAIXjI8GybH6HHt0qourxC6CvzXieHyeWQAAOw==);
}
.mce-visualblocks dl {
background-image: url(data:image/gif;base64,R0lGODlhDQAKAIABALu7u////yH5BAEAAAEALAAAAAANAAoAAAIXjI8GybEOnmOvUoWznTqeuEjNSCqeGRUAOw==);
}
.mce-visualblocks:not([dir=rtl]) p,
.mce-visualblocks:not([dir=rtl]) h1,
.mce-visualblocks:not([dir=rtl]) h2,
.mce-visualblocks:not([dir=rtl]) h3,
.mce-visualblocks:not([dir=rtl]) h4,
.mce-visualblocks:not([dir=rtl]) h5,
.mce-visualblocks:not([dir=rtl]) h6,
.mce-visualblocks:not([dir=rtl]) div:not([data-mce-bogus]),
.mce-visualblocks:not([dir=rtl]) section,
.mce-visualblocks:not([dir=rtl]) article,
.mce-visualblocks:not([dir=rtl]) blockquote,
.mce-visualblocks:not([dir=rtl]) address,
.mce-visualblocks:not([dir=rtl]) pre,
.mce-visualblocks:not([dir=rtl]) figure,
.mce-visualblocks:not([dir=rtl]) figcaption,
.mce-visualblocks:not([dir=rtl]) hgroup,
.mce-visualblocks:not([dir=rtl]) aside,
.mce-visualblocks:not([dir=rtl]) ul,
.mce-visualblocks:not([dir=rtl]) ol,
.mce-visualblocks:not([dir=rtl]) dl {
margin-left: 3px;
}
.mce-visualblocks[dir=rtl] p,
.mce-visualblocks[dir=rtl] h1,
.mce-visualblocks[dir=rtl] h2,
.mce-visualblocks[dir=rtl] h3,
.mce-visualblocks[dir=rtl] h4,
.mce-visualblocks[dir=rtl] h5,
.mce-visualblocks[dir=rtl] h6,
.mce-visualblocks[dir=rtl] div:not([data-mce-bogus]),
.mce-visualblocks[dir=rtl] section,
.mce-visualblocks[dir=rtl] article,
.mce-visualblocks[dir=rtl] blockquote,
.mce-visualblocks[dir=rtl] address,
.mce-visualblocks[dir=rtl] pre,
.mce-visualblocks[dir=rtl] figure,
.mce-visualblocks[dir=rtl] figcaption,
.mce-visualblocks[dir=rtl] hgroup,
.mce-visualblocks[dir=rtl] aside,
.mce-visualblocks[dir=rtl] ul,
.mce-visualblocks[dir=rtl] ol,
.mce-visualblocks[dir=rtl] dl {
background-position-x: right;
margin-right: 3px;
}
.mce-nbsp,
.mce-shy {
background: #aaa;
}
.mce-shy::after {
content: '-';
}
body {
font-family: sans-serif;
}
table {
border-collapse: collapse;
}

View File

@ -0,0 +1,726 @@
/**
* Copyright (c) Tiny Technologies, Inc. All rights reserved.
* Licensed under the LGPL or a commercial license.
* For LGPL see License.txt in the project root for license information.
* For commercial licenses see https://www.tiny.cloud/
*/
.mce-content-body .mce-item-anchor {
background: transparent url("data:image/svg+xml;charset=UTF-8,%3Csvg%20width%3D'8'%20height%3D'12'%20xmlns%3D'http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg'%3E%3Cpath%20d%3D'M0%200L8%200%208%2012%204.09117821%209%200%2012z'%2F%3E%3C%2Fsvg%3E%0A") no-repeat center;
cursor: default;
display: inline-block;
height: 12px !important;
padding: 0 2px;
-webkit-user-modify: read-only;
-moz-user-modify: read-only;
-webkit-user-select: all;
-moz-user-select: all;
-ms-user-select: all;
user-select: all;
width: 8px !important;
}
.mce-content-body .mce-item-anchor[data-mce-selected] {
outline-offset: 1px;
}
.tox-comments-visible .tox-comment {
background-color: #fff0b7;
}
.tox-comments-visible .tox-comment--active {
background-color: #ffe168;
}
.tox-checklist > li:not(.tox-checklist--hidden) {
list-style: none;
margin: 0.25em 0;
}
.tox-checklist > li:not(.tox-checklist--hidden)::before {
content: url("data:image/svg+xml;charset=UTF-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%2216%22%20height%3D%2216%22%20viewBox%3D%220%200%2016%2016%22%3E%3Cg%20id%3D%22checklist-unchecked%22%20fill%3D%22none%22%20fill-rule%3D%22evenodd%22%3E%3Crect%20id%3D%22Rectangle%22%20width%3D%2215%22%20height%3D%2215%22%20x%3D%22.5%22%20y%3D%22.5%22%20fill-rule%3D%22nonzero%22%20stroke%3D%22%234C4C4C%22%20rx%3D%222%22%2F%3E%3C%2Fg%3E%3C%2Fsvg%3E%0A");
cursor: pointer;
height: 1em;
margin-left: -1.5em;
margin-top: 0.125em;
position: absolute;
width: 1em;
}
.tox-checklist li:not(.tox-checklist--hidden).tox-checklist--checked::before {
content: url("data:image/svg+xml;charset=UTF-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%2216%22%20height%3D%2216%22%20viewBox%3D%220%200%2016%2016%22%3E%3Cg%20id%3D%22checklist-checked%22%20fill%3D%22none%22%20fill-rule%3D%22evenodd%22%3E%3Crect%20id%3D%22Rectangle%22%20width%3D%2216%22%20height%3D%2216%22%20fill%3D%22%234099FF%22%20fill-rule%3D%22nonzero%22%20rx%3D%222%22%2F%3E%3Cpath%20id%3D%22Path%22%20fill%3D%22%23FFF%22%20fill-rule%3D%22nonzero%22%20d%3D%22M11.5703186%2C3.14417309%20C11.8516238%2C2.73724603%2012.4164781%2C2.62829933%2012.83558%2C2.89774797%20C13.260121%2C3.17069355%2013.3759736%2C3.72932262%2013.0909105%2C4.14168582%20L7.7580587%2C11.8560195%20C7.43776896%2C12.3193404%206.76483983%2C12.3852142%206.35607322%2C11.9948725%20L3.02491697%2C8.8138662%20C2.66090143%2C8.46625845%202.65798871%2C7.89594698%203.01850234%2C7.54483354%20C3.373942%2C7.19866177%203.94940006%2C7.19592841%204.30829608%2C7.5386474%20L6.85276923%2C9.9684299%20L11.5703186%2C3.14417309%20Z%22%2F%3E%3C%2Fg%3E%3C%2Fsvg%3E%0A");
}
[dir=rtl] .tox-checklist > li:not(.tox-checklist--hidden)::before {
margin-left: 0;
margin-right: -1.5em;
}
/* stylelint-disable */
/* http://prismjs.com/ */
/**
* prism.js default theme for JavaScript, CSS and HTML
* Based on dabblet (http://dabblet.com)
* @author Lea Verou
*/
code[class*="language-"],
pre[class*="language-"] {
color: black;
background: none;
text-shadow: 0 1px white;
font-family: Consolas, Monaco, 'Andale Mono', 'Ubuntu Mono', monospace;
font-size: 1em;
text-align: left;
white-space: pre;
word-spacing: normal;
word-break: normal;
word-wrap: normal;
line-height: 1.5;
-moz-tab-size: 4;
tab-size: 4;
-webkit-hyphens: none;
-ms-hyphens: none;
hyphens: none;
}
pre[class*="language-"]::-moz-selection,
pre[class*="language-"] ::-moz-selection,
code[class*="language-"]::-moz-selection,
code[class*="language-"] ::-moz-selection {
text-shadow: none;
background: #b3d4fc;
}
pre[class*="language-"]::selection,
pre[class*="language-"] ::selection,
code[class*="language-"]::selection,
code[class*="language-"] ::selection {
text-shadow: none;
background: #b3d4fc;
}
@media print {
code[class*="language-"],
pre[class*="language-"] {
text-shadow: none;
}
}
/* Code blocks */
pre[class*="language-"] {
padding: 1em;
margin: 0.5em 0;
overflow: auto;
}
:not(pre) > code[class*="language-"],
pre[class*="language-"] {
background: #f5f2f0;
}
/* Inline code */
:not(pre) > code[class*="language-"] {
padding: 0.1em;
border-radius: 0.3em;
white-space: normal;
}
.token.comment,
.token.prolog,
.token.doctype,
.token.cdata {
color: slategray;
}
.token.punctuation {
color: #999;
}
.namespace {
opacity: 0.7;
}
.token.property,
.token.tag,
.token.boolean,
.token.number,
.token.constant,
.token.symbol,
.token.deleted {
color: #905;
}
.token.selector,
.token.attr-name,
.token.string,
.token.char,
.token.builtin,
.token.inserted {
color: #690;
}
.token.operator,
.token.entity,
.token.url,
.language-css .token.string,
.style .token.string {
color: #9a6e3a;
background: hsla(0, 0%, 100%, 0.5);
}
.token.atrule,
.token.attr-value,
.token.keyword {
color: #07a;
}
.token.function,
.token.class-name {
color: #DD4A68;
}
.token.regex,
.token.important,
.token.variable {
color: #e90;
}
.token.important,
.token.bold {
font-weight: bold;
}
.token.italic {
font-style: italic;
}
.token.entity {
cursor: help;
}
/* stylelint-enable */
.mce-content-body {
overflow-wrap: break-word;
word-wrap: break-word;
}
.mce-content-body .mce-visual-caret {
background-color: black;
background-color: currentColor;
position: absolute;
}
.mce-content-body .mce-visual-caret-hidden {
display: none;
}
.mce-content-body *[data-mce-caret] {
left: -1000px;
margin: 0;
padding: 0;
position: absolute;
right: auto;
top: 0;
}
.mce-content-body .mce-offscreen-selection {
left: -2000000px;
max-width: 1000000px;
position: absolute;
}
.mce-content-body *[contentEditable=false] {
cursor: default;
}
.mce-content-body *[contentEditable=true] {
cursor: text;
}
.tox-cursor-format-painter {
cursor: url("data:image/svg+xml;charset=UTF-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%2224%22%20height%3D%2224%22%20viewBox%3D%220%200%2024%2024%22%3E%0A%20%20%3Cg%20fill%3D%22none%22%20fill-rule%3D%22evenodd%22%3E%0A%20%20%20%20%3Cpath%20fill%3D%22%23000%22%20fill-rule%3D%22nonzero%22%20d%3D%22M15%2C6%20C15%2C5.45%2014.55%2C5%2014%2C5%20L6%2C5%20C5.45%2C5%205%2C5.45%205%2C6%20L5%2C10%20C5%2C10.55%205.45%2C11%206%2C11%20L14%2C11%20C14.55%2C11%2015%2C10.55%2015%2C10%20L15%2C9%20L16%2C9%20L16%2C12%20L9%2C12%20L9%2C19%20C9%2C19.55%209.45%2C20%2010%2C20%20L11%2C20%20C11.55%2C20%2012%2C19.55%2012%2C19%20L12%2C14%20L18%2C14%20L18%2C7%20L15%2C7%20L15%2C6%20Z%22%2F%3E%0A%20%20%20%20%3Cpath%20fill%3D%22%23000%22%20fill-rule%3D%22nonzero%22%20d%3D%22M1%2C1%20L8.25%2C1%20C8.66421356%2C1%209%2C1.33578644%209%2C1.75%20L9%2C1.75%20C9%2C2.16421356%208.66421356%2C2.5%208.25%2C2.5%20L2.5%2C2.5%20L2.5%2C8.25%20C2.5%2C8.66421356%202.16421356%2C9%201.75%2C9%20L1.75%2C9%20C1.33578644%2C9%201%2C8.66421356%201%2C8.25%20L1%2C1%20Z%22%2F%3E%0A%20%20%3C%2Fg%3E%0A%3C%2Fsvg%3E%0A"), default;
}
.mce-content-body figure.align-left {
float: left;
}
.mce-content-body figure.align-right {
float: right;
}
.mce-content-body figure.image.align-center {
display: table;
margin-left: auto;
margin-right: auto;
}
.mce-preview-object {
border: 1px solid gray;
display: inline-block;
line-height: 0;
margin: 0 2px 0 2px;
position: relative;
}
.mce-preview-object .mce-shim {
background: url(data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7);
height: 100%;
left: 0;
position: absolute;
top: 0;
width: 100%;
}
.mce-preview-object[data-mce-selected="2"] .mce-shim {
display: none;
}
.mce-object {
background: transparent url("data:image/svg+xml;charset=UTF-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%2224%22%20height%3D%2224%22%3E%3Cpath%20d%3D%22M4%203h16a1%201%200%200%201%201%201v16a1%201%200%200%201-1%201H4a1%201%200%200%201-1-1V4a1%201%200%200%201%201-1zm1%202v14h14V5H5zm4.79%202.565l5.64%204.028a.5.5%200%200%201%200%20.814l-5.64%204.028a.5.5%200%200%201-.79-.407V7.972a.5.5%200%200%201%20.79-.407z%22%2F%3E%3C%2Fsvg%3E%0A") no-repeat center;
border: 1px dashed #aaa;
}
.mce-pagebreak {
border: 1px dashed #aaa;
cursor: default;
display: block;
height: 5px;
margin-top: 15px;
page-break-before: always;
width: 100%;
}
@media print {
.mce-pagebreak {
border: 0;
}
}
.tiny-pageembed .mce-shim {
background: url(data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7);
height: 100%;
left: 0;
position: absolute;
top: 0;
width: 100%;
}
.tiny-pageembed[data-mce-selected="2"] .mce-shim {
display: none;
}
.tiny-pageembed {
display: inline-block;
position: relative;
}
.tiny-pageembed--21by9,
.tiny-pageembed--16by9,
.tiny-pageembed--4by3,
.tiny-pageembed--1by1 {
display: block;
overflow: hidden;
padding: 0;
position: relative;
width: 100%;
}
.tiny-pageembed--21by9 {
padding-top: 42.857143%;
}
.tiny-pageembed--16by9 {
padding-top: 56.25%;
}
.tiny-pageembed--4by3 {
padding-top: 75%;
}
.tiny-pageembed--1by1 {
padding-top: 100%;
}
.tiny-pageembed--21by9 iframe,
.tiny-pageembed--16by9 iframe,
.tiny-pageembed--4by3 iframe,
.tiny-pageembed--1by1 iframe {
border: 0;
height: 100%;
left: 0;
position: absolute;
top: 0;
width: 100%;
}
.mce-content-body[data-mce-placeholder] {
position: relative;
}
.mce-content-body[data-mce-placeholder]:not(.mce-visualblocks)::before {
color: rgba(34, 47, 62, 0.7);
content: attr(data-mce-placeholder);
position: absolute;
}
.mce-content-body:not([dir=rtl])[data-mce-placeholder]:not(.mce-visualblocks)::before {
left: 1px;
}
.mce-content-body[dir=rtl][data-mce-placeholder]:not(.mce-visualblocks)::before {
right: 1px;
}
.mce-content-body div.mce-resizehandle {
background-color: #4099ff;
border-color: #4099ff;
border-style: solid;
border-width: 1px;
box-sizing: border-box;
height: 10px;
position: absolute;
width: 10px;
z-index: 1298;
}
.mce-content-body div.mce-resizehandle:hover {
background-color: #4099ff;
}
.mce-content-body div.mce-resizehandle:nth-of-type(1) {
cursor: nwse-resize;
}
.mce-content-body div.mce-resizehandle:nth-of-type(2) {
cursor: nesw-resize;
}
.mce-content-body div.mce-resizehandle:nth-of-type(3) {
cursor: nwse-resize;
}
.mce-content-body div.mce-resizehandle:nth-of-type(4) {
cursor: nesw-resize;
}
.mce-content-body .mce-resize-backdrop {
z-index: 10000;
}
.mce-content-body .mce-clonedresizable {
cursor: default;
opacity: 0.5;
outline: 1px dashed black;
position: absolute;
z-index: 10001;
}
.mce-content-body .mce-clonedresizable.mce-resizetable-columns th,
.mce-content-body .mce-clonedresizable.mce-resizetable-columns td {
border: 0;
}
.mce-content-body .mce-resize-helper {
background: #555;
background: rgba(0, 0, 0, 0.75);
border: 1px;
border-radius: 3px;
color: white;
display: none;
font-family: sans-serif;
font-size: 12px;
line-height: 14px;
margin: 5px 10px;
padding: 5px;
position: absolute;
white-space: nowrap;
z-index: 10002;
}
.tox-rtc-user-selection {
position: relative;
}
.tox-rtc-user-cursor {
bottom: 0;
cursor: default;
position: absolute;
top: 0;
width: 2px;
}
.tox-rtc-user-cursor::before {
background-color: inherit;
border-radius: 50%;
content: '';
display: block;
height: 8px;
position: absolute;
right: -3px;
top: -3px;
width: 8px;
}
.tox-rtc-user-cursor:hover::after {
background-color: inherit;
border-radius: 100px;
box-sizing: border-box;
color: #fff;
content: attr(data-user);
display: block;
font-size: 12px;
font-weight: bold;
left: -5px;
min-height: 8px;
min-width: 8px;
padding: 0 12px;
position: absolute;
top: -11px;
white-space: nowrap;
z-index: 1000;
}
.tox-rtc-user-selection--1 .tox-rtc-user-cursor {
background-color: #2dc26b;
}
.tox-rtc-user-selection--2 .tox-rtc-user-cursor {
background-color: #e03e2d;
}
.tox-rtc-user-selection--3 .tox-rtc-user-cursor {
background-color: #f1c40f;
}
.tox-rtc-user-selection--4 .tox-rtc-user-cursor {
background-color: #3598db;
}
.tox-rtc-user-selection--5 .tox-rtc-user-cursor {
background-color: #b96ad9;
}
.tox-rtc-user-selection--6 .tox-rtc-user-cursor {
background-color: #e67e23;
}
.tox-rtc-user-selection--7 .tox-rtc-user-cursor {
background-color: #aaa69d;
}
.tox-rtc-user-selection--8 .tox-rtc-user-cursor {
background-color: #f368e0;
}
.tox-rtc-remote-image {
background: #eaeaea url("data:image/svg+xml;charset=UTF-8,%3Csvg%20width%3D%2236%22%20height%3D%2212%22%20viewBox%3D%220%200%2036%2012%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%0A%20%20%3Ccircle%20cx%3D%226%22%20cy%3D%226%22%20r%3D%223%22%20fill%3D%22rgba(0%2C%200%2C%200%2C%20.2)%22%3E%0A%20%20%20%20%3Canimate%20attributeName%3D%22r%22%20values%3D%223%3B5%3B3%22%20calcMode%3D%22linear%22%20dur%3D%221s%22%20repeatCount%3D%22indefinite%22%20%2F%3E%0A%20%20%3C%2Fcircle%3E%0A%20%20%3Ccircle%20cx%3D%2218%22%20cy%3D%226%22%20r%3D%223%22%20fill%3D%22rgba(0%2C%200%2C%200%2C%20.2)%22%3E%0A%20%20%20%20%3Canimate%20attributeName%3D%22r%22%20values%3D%223%3B5%3B3%22%20calcMode%3D%22linear%22%20begin%3D%22.33s%22%20dur%3D%221s%22%20repeatCount%3D%22indefinite%22%20%2F%3E%0A%20%20%3C%2Fcircle%3E%0A%20%20%3Ccircle%20cx%3D%2230%22%20cy%3D%226%22%20r%3D%223%22%20fill%3D%22rgba(0%2C%200%2C%200%2C%20.2)%22%3E%0A%20%20%20%20%3Canimate%20attributeName%3D%22r%22%20values%3D%223%3B5%3B3%22%20calcMode%3D%22linear%22%20begin%3D%22.66s%22%20dur%3D%221s%22%20repeatCount%3D%22indefinite%22%20%2F%3E%0A%20%20%3C%2Fcircle%3E%0A%3C%2Fsvg%3E%0A") no-repeat center center;
border: 1px solid #ccc;
min-height: 240px;
min-width: 320px;
}
.mce-match-marker {
background: #aaa;
color: #fff;
}
.mce-match-marker-selected {
background: #39f;
color: #fff;
}
.mce-match-marker-selected::-moz-selection {
background: #39f;
color: #fff;
}
.mce-match-marker-selected::selection {
background: #39f;
color: #fff;
}
.mce-content-body img[data-mce-selected],
.mce-content-body video[data-mce-selected],
.mce-content-body audio[data-mce-selected],
.mce-content-body object[data-mce-selected],
.mce-content-body embed[data-mce-selected],
.mce-content-body table[data-mce-selected] {
outline: 3px solid #b4d7ff;
}
.mce-content-body hr[data-mce-selected] {
outline: 3px solid #b4d7ff;
outline-offset: 1px;
}
.mce-content-body *[contentEditable=false] *[contentEditable=true]:focus {
outline: 3px solid #b4d7ff;
}
.mce-content-body *[contentEditable=false] *[contentEditable=true]:hover {
outline: 3px solid #b4d7ff;
}
.mce-content-body *[contentEditable=false][data-mce-selected] {
cursor: not-allowed;
outline: 3px solid #b4d7ff;
}
.mce-content-body.mce-content-readonly *[contentEditable=true]:focus,
.mce-content-body.mce-content-readonly *[contentEditable=true]:hover {
outline: none;
}
.mce-content-body *[data-mce-selected="inline-boundary"] {
background-color: #b4d7ff;
}
.mce-content-body .mce-edit-focus {
outline: 3px solid #b4d7ff;
}
.mce-content-body td[data-mce-selected],
.mce-content-body th[data-mce-selected] {
position: relative;
}
.mce-content-body td[data-mce-selected]::-moz-selection,
.mce-content-body th[data-mce-selected]::-moz-selection {
background: none;
}
.mce-content-body td[data-mce-selected]::selection,
.mce-content-body th[data-mce-selected]::selection {
background: none;
}
.mce-content-body td[data-mce-selected] *,
.mce-content-body th[data-mce-selected] * {
outline: none;
-webkit-touch-callout: none;
-webkit-user-select: none;
-moz-user-select: none;
-ms-user-select: none;
user-select: none;
}
.mce-content-body td[data-mce-selected]::after,
.mce-content-body th[data-mce-selected]::after {
background-color: rgba(180, 215, 255, 0.7);
border: 1px solid rgba(180, 215, 255, 0.7);
bottom: -1px;
content: '';
left: -1px;
mix-blend-mode: multiply;
position: absolute;
right: -1px;
top: -1px;
}
@media screen and (-ms-high-contrast: active), (-ms-high-contrast: none) {
.mce-content-body td[data-mce-selected]::after,
.mce-content-body th[data-mce-selected]::after {
border-color: rgba(0, 84, 180, 0.7);
}
}
.mce-content-body img::-moz-selection {
background: none;
}
.mce-content-body img::selection {
background: none;
}
.ephox-snooker-resizer-bar {
background-color: #b4d7ff;
opacity: 0;
-webkit-user-select: none;
-moz-user-select: none;
-ms-user-select: none;
user-select: none;
}
.ephox-snooker-resizer-cols {
cursor: col-resize;
}
.ephox-snooker-resizer-rows {
cursor: row-resize;
}
.ephox-snooker-resizer-bar.ephox-snooker-resizer-bar-dragging {
opacity: 1;
}
.mce-spellchecker-word {
background-image: url("data:image/svg+xml;charset=UTF-8,%3Csvg%20width%3D'4'%20height%3D'4'%20xmlns%3D'http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg'%3E%3Cpath%20stroke%3D'%23ff0000'%20fill%3D'none'%20stroke-linecap%3D'round'%20stroke-opacity%3D'.75'%20d%3D'M0%203L2%201%204%203'%2F%3E%3C%2Fsvg%3E%0A");
background-position: 0 calc(100% + 1px);
background-repeat: repeat-x;
background-size: auto 6px;
cursor: default;
height: 2rem;
}
.mce-spellchecker-grammar {
background-image: url("data:image/svg+xml;charset=UTF-8,%3Csvg%20width%3D'4'%20height%3D'4'%20xmlns%3D'http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg'%3E%3Cpath%20stroke%3D'%2300A835'%20fill%3D'none'%20stroke-linecap%3D'round'%20d%3D'M0%203L2%201%204%203'%2F%3E%3C%2Fsvg%3E%0A");
background-position: 0 calc(100% + 1px);
background-repeat: repeat-x;
background-size: auto 6px;
cursor: default;
}
.mce-toc {
border: 1px solid gray;
}
.mce-toc h2 {
margin: 4px;
}
.mce-toc li {
list-style-type: none;
}
table[style*="border-width: 0px"],
.mce-item-table:not([border]),
.mce-item-table[border="0"],
table[style*="border-width: 0px"] td,
.mce-item-table:not([border]) td,
.mce-item-table[border="0"] td,
table[style*="border-width: 0px"] th,
.mce-item-table:not([border]) th,
.mce-item-table[border="0"] th,
table[style*="border-width: 0px"] caption,
.mce-item-table:not([border]) caption,
.mce-item-table[border="0"] caption {
border: 1px dashed #bbb;
}
.mce-visualblocks p,
.mce-visualblocks h1,
.mce-visualblocks h2,
.mce-visualblocks h3,
.mce-visualblocks h4,
.mce-visualblocks h5,
.mce-visualblocks h6,
.mce-visualblocks div:not([data-mce-bogus]),
.mce-visualblocks section,
.mce-visualblocks article,
.mce-visualblocks blockquote,
.mce-visualblocks address,
.mce-visualblocks pre,
.mce-visualblocks figure,
.mce-visualblocks figcaption,
.mce-visualblocks hgroup,
.mce-visualblocks aside,
.mce-visualblocks ul,
.mce-visualblocks ol,
.mce-visualblocks dl {
background-repeat: no-repeat;
border: 1px dashed #bbb;
margin-left: 3px;
padding-top: 10px;
}
.mce-visualblocks p {
background-image: url(data:image/gif;base64,R0lGODlhCQAJAJEAAAAAAP///7u7u////yH5BAEAAAMALAAAAAAJAAkAAAIQnG+CqCN/mlyvsRUpThG6AgA7);
}
.mce-visualblocks h1 {
background-image: url(data:image/gif;base64,R0lGODlhDQAKAIABALu7u////yH5BAEAAAEALAAAAAANAAoAAAIXjI8GybGu1JuxHoAfRNRW3TWXyF2YiRUAOw==);
}
.mce-visualblocks h2 {
background-image: url(data:image/gif;base64,R0lGODlhDgAKAIABALu7u////yH5BAEAAAEALAAAAAAOAAoAAAIajI8Hybbx4oOuqgTynJd6bGlWg3DkJzoaUAAAOw==);
}
.mce-visualblocks h3 {
background-image: url(data:image/gif;base64,R0lGODlhDgAKAIABALu7u////yH5BAEAAAEALAAAAAAOAAoAAAIZjI8Hybbx4oOuqgTynJf2Ln2NOHpQpmhAAQA7);
}
.mce-visualblocks h4 {
background-image: url(data:image/gif;base64,R0lGODlhDgAKAIABALu7u////yH5BAEAAAEALAAAAAAOAAoAAAIajI8HybbxInR0zqeAdhtJlXwV1oCll2HaWgAAOw==);
}
.mce-visualblocks h5 {
background-image: url(data:image/gif;base64,R0lGODlhDgAKAIABALu7u////yH5BAEAAAEALAAAAAAOAAoAAAIajI8HybbxIoiuwjane4iq5GlW05GgIkIZUAAAOw==);
}
.mce-visualblocks h6 {
background-image: url(data:image/gif;base64,R0lGODlhDgAKAIABALu7u////yH5BAEAAAEALAAAAAAOAAoAAAIajI8HybbxIoiuwjan04jep1iZ1XRlAo5bVgAAOw==);
}
.mce-visualblocks div:not([data-mce-bogus]) {
background-image: url(data:image/gif;base64,R0lGODlhEgAKAIABALu7u////yH5BAEAAAEALAAAAAASAAoAAAIfjI9poI0cgDywrhuxfbrzDEbQM2Ei5aRjmoySW4pAAQA7);
}
.mce-visualblocks section {
background-image: url(data:image/gif;base64,R0lGODlhKAAKAIABALu7u////yH5BAEAAAEALAAAAAAoAAoAAAI5jI+pywcNY3sBWHdNrplytD2ellDeSVbp+GmWqaDqDMepc8t17Y4vBsK5hDyJMcI6KkuYU+jpjLoKADs=);
}
.mce-visualblocks article {
background-image: url(data:image/gif;base64,R0lGODlhKgAKAIABALu7u////yH5BAEAAAEALAAAAAAqAAoAAAI6jI+pywkNY3wG0GBvrsd2tXGYSGnfiF7ikpXemTpOiJScasYoDJJrjsG9gkCJ0ag6KhmaIe3pjDYBBQA7);
}
.mce-visualblocks blockquote {
background-image: url(data:image/gif;base64,R0lGODlhPgAKAIABALu7u////yH5BAEAAAEALAAAAAA+AAoAAAJPjI+py+0Knpz0xQDyuUhvfoGgIX5iSKZYgq5uNL5q69asZ8s5rrf0yZmpNkJZzFesBTu8TOlDVAabUyatguVhWduud3EyiUk45xhTTgMBBQA7);
}
.mce-visualblocks address {
background-image: url(data:image/gif;base64,R0lGODlhLQAKAIABALu7u////yH5BAEAAAEALAAAAAAtAAoAAAI/jI+pywwNozSP1gDyyZcjb3UaRpXkWaXmZW4OqKLhBmLs+K263DkJK7OJeifh7FicKD9A1/IpGdKkyFpNmCkAADs=);
}
.mce-visualblocks pre {
background-image: url(data:image/gif;base64,R0lGODlhFQAKAIABALu7uwAAACH5BAEAAAEALAAAAAAVAAoAAAIjjI+ZoN0cgDwSmnpz1NCueYERhnibZVKLNnbOq8IvKpJtVQAAOw==);
}
.mce-visualblocks figure {
background-image: url(data:image/gif;base64,R0lGODlhJAAKAIAAALu7u////yH5BAEAAAEALAAAAAAkAAoAAAI0jI+py+2fwAHUSFvD3RlvG4HIp4nX5JFSpnZUJ6LlrM52OE7uSWosBHScgkSZj7dDKnWAAgA7);
}
.mce-visualblocks figcaption {
border: 1px dashed #bbb;
}
.mce-visualblocks hgroup {
background-image: url(data:image/gif;base64,R0lGODlhJwAKAIABALu7uwAAACH5BAEAAAEALAAAAAAnAAoAAAI3jI+pywYNI3uB0gpsRtt5fFnfNZaVSYJil4Wo03Hv6Z62uOCgiXH1kZIIJ8NiIxRrAZNMZAtQAAA7);
}
.mce-visualblocks aside {
background-image: url(data:image/gif;base64,R0lGODlhHgAKAIABAKqqqv///yH5BAEAAAEALAAAAAAeAAoAAAItjI+pG8APjZOTzgtqy7I3f1yehmQcFY4WKZbqByutmW4aHUd6vfcVbgudgpYCADs=);
}
.mce-visualblocks ul {
background-image: url(data:image/gif;base64,R0lGODlhDQAKAIAAALu7u////yH5BAEAAAEALAAAAAANAAoAAAIXjI8GybGuYnqUVSjvw26DzzXiqIDlVwAAOw==);
}
.mce-visualblocks ol {
background-image: url(data:image/gif;base64,R0lGODlhDQAKAIABALu7u////yH5BAEAAAEALAAAAAANAAoAAAIXjI8GybH6HHt0qourxC6CvzXieHyeWQAAOw==);
}
.mce-visualblocks dl {
background-image: url(data:image/gif;base64,R0lGODlhDQAKAIABALu7u////yH5BAEAAAEALAAAAAANAAoAAAIXjI8GybEOnmOvUoWznTqeuEjNSCqeGRUAOw==);
}
.mce-visualblocks:not([dir=rtl]) p,
.mce-visualblocks:not([dir=rtl]) h1,
.mce-visualblocks:not([dir=rtl]) h2,
.mce-visualblocks:not([dir=rtl]) h3,
.mce-visualblocks:not([dir=rtl]) h4,
.mce-visualblocks:not([dir=rtl]) h5,
.mce-visualblocks:not([dir=rtl]) h6,
.mce-visualblocks:not([dir=rtl]) div:not([data-mce-bogus]),
.mce-visualblocks:not([dir=rtl]) section,
.mce-visualblocks:not([dir=rtl]) article,
.mce-visualblocks:not([dir=rtl]) blockquote,
.mce-visualblocks:not([dir=rtl]) address,
.mce-visualblocks:not([dir=rtl]) pre,
.mce-visualblocks:not([dir=rtl]) figure,
.mce-visualblocks:not([dir=rtl]) figcaption,
.mce-visualblocks:not([dir=rtl]) hgroup,
.mce-visualblocks:not([dir=rtl]) aside,
.mce-visualblocks:not([dir=rtl]) ul,
.mce-visualblocks:not([dir=rtl]) ol,
.mce-visualblocks:not([dir=rtl]) dl {
margin-left: 3px;
}
.mce-visualblocks[dir=rtl] p,
.mce-visualblocks[dir=rtl] h1,
.mce-visualblocks[dir=rtl] h2,
.mce-visualblocks[dir=rtl] h3,
.mce-visualblocks[dir=rtl] h4,
.mce-visualblocks[dir=rtl] h5,
.mce-visualblocks[dir=rtl] h6,
.mce-visualblocks[dir=rtl] div:not([data-mce-bogus]),
.mce-visualblocks[dir=rtl] section,
.mce-visualblocks[dir=rtl] article,
.mce-visualblocks[dir=rtl] blockquote,
.mce-visualblocks[dir=rtl] address,
.mce-visualblocks[dir=rtl] pre,
.mce-visualblocks[dir=rtl] figure,
.mce-visualblocks[dir=rtl] figcaption,
.mce-visualblocks[dir=rtl] hgroup,
.mce-visualblocks[dir=rtl] aside,
.mce-visualblocks[dir=rtl] ul,
.mce-visualblocks[dir=rtl] ol,
.mce-visualblocks[dir=rtl] dl {
background-position-x: right;
margin-right: 3px;
}
.mce-nbsp,
.mce-shy {
background: #aaa;
}
.mce-shy::after {
content: '-';
}

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@ -0,0 +1,29 @@
/**
* Copyright (c) Tiny Technologies, Inc. All rights reserved.
* Licensed under the LGPL or a commercial license.
* For LGPL see License.txt in the project root for license information.
* For commercial licenses see https://www.tiny.cloud/
*/
.tinymce-mobile-unfocused-selections .tinymce-mobile-unfocused-selection {
/* Note: this file is used inside the content, so isn't part of theming */
background-color: green;
display: inline-block;
opacity: 0.5;
position: absolute;
}
body {
-webkit-text-size-adjust: none;
}
body img {
/* this is related to the content margin */
max-width: 96vw;
}
body table img {
max-width: 95%;
}
body {
font-family: sans-serif;
}
table {
border-collapse: collapse;
}

View File

@ -0,0 +1,7 @@
/**
* Copyright (c) Tiny Technologies, Inc. All rights reserved.
* Licensed under the LGPL or a commercial license.
* For LGPL see License.txt in the project root for license information.
* For commercial licenses see https://www.tiny.cloud/
*/
.tinymce-mobile-unfocused-selections .tinymce-mobile-unfocused-selection{background-color:green;display:inline-block;opacity:.5;position:absolute}body{-webkit-text-size-adjust:none}body img{max-width:96vw}body table img{max-width:95%}body{font-family:sans-serif}table{border-collapse:collapse}

File diff suppressed because it is too large Load Diff

File diff suppressed because one or more lines are too long

View File

@ -0,0 +1,673 @@
/**
* Copyright (c) Tiny Technologies, Inc. All rights reserved.
* Licensed under the LGPL or a commercial license.
* For LGPL see License.txt in the project root for license information.
* For commercial licenses see https://www.tiny.cloud/
*/
/* RESET all the things! */
.tinymce-mobile-outer-container {
all: initial;
display: block;
}
.tinymce-mobile-outer-container * {
border: 0;
box-sizing: initial;
cursor: inherit;
float: none;
line-height: 1;
margin: 0;
outline: 0;
padding: 0;
-webkit-tap-highlight-color: transparent;
/* TBIO-3691, stop the gray flicker on touch. */
text-shadow: none;
white-space: nowrap;
}
.tinymce-mobile-icon-arrow-back::before {
content: "\e5cd";
}
.tinymce-mobile-icon-image::before {
content: "\e412";
}
.tinymce-mobile-icon-cancel-circle::before {
content: "\e5c9";
}
.tinymce-mobile-icon-full-dot::before {
content: "\e061";
}
.tinymce-mobile-icon-align-center::before {
content: "\e234";
}
.tinymce-mobile-icon-align-left::before {
content: "\e236";
}
.tinymce-mobile-icon-align-right::before {
content: "\e237";
}
.tinymce-mobile-icon-bold::before {
content: "\e238";
}
.tinymce-mobile-icon-italic::before {
content: "\e23f";
}
.tinymce-mobile-icon-unordered-list::before {
content: "\e241";
}
.tinymce-mobile-icon-ordered-list::before {
content: "\e242";
}
.tinymce-mobile-icon-font-size::before {
content: "\e245";
}
.tinymce-mobile-icon-underline::before {
content: "\e249";
}
.tinymce-mobile-icon-link::before {
content: "\e157";
}
.tinymce-mobile-icon-unlink::before {
content: "\eca2";
}
.tinymce-mobile-icon-color::before {
content: "\e891";
}
.tinymce-mobile-icon-previous::before {
content: "\e314";
}
.tinymce-mobile-icon-next::before {
content: "\e315";
}
.tinymce-mobile-icon-large-font::before,
.tinymce-mobile-icon-style-formats::before {
content: "\e264";
}
.tinymce-mobile-icon-undo::before {
content: "\e166";
}
.tinymce-mobile-icon-redo::before {
content: "\e15a";
}
.tinymce-mobile-icon-removeformat::before {
content: "\e239";
}
.tinymce-mobile-icon-small-font::before {
content: "\e906";
}
.tinymce-mobile-icon-readonly-back::before,
.tinymce-mobile-format-matches::after {
content: "\e5ca";
}
.tinymce-mobile-icon-small-heading::before {
content: "small";
}
.tinymce-mobile-icon-large-heading::before {
content: "large";
}
.tinymce-mobile-icon-small-heading::before,
.tinymce-mobile-icon-large-heading::before {
font-family: sans-serif;
font-size: 80%;
}
.tinymce-mobile-mask-edit-icon::before {
content: "\e254";
}
.tinymce-mobile-icon-back::before {
content: "\e5c4";
}
.tinymce-mobile-icon-heading::before {
/* TODO: Translate */
content: "Headings";
font-family: sans-serif;
font-size: 80%;
font-weight: bold;
}
.tinymce-mobile-icon-h1::before {
content: "H1";
font-weight: bold;
}
.tinymce-mobile-icon-h2::before {
content: "H2";
font-weight: bold;
}
.tinymce-mobile-icon-h3::before {
content: "H3";
font-weight: bold;
}
.tinymce-mobile-outer-container .tinymce-mobile-disabled-mask {
align-items: center;
display: flex;
justify-content: center;
background: rgba(51, 51, 51, 0.5);
height: 100%;
position: absolute;
top: 0;
width: 100%;
}
.tinymce-mobile-outer-container .tinymce-mobile-disabled-mask .tinymce-mobile-content-container {
align-items: center;
border-radius: 50%;
display: flex;
flex-direction: column;
font-family: sans-serif;
font-size: 1em;
justify-content: space-between;
}
.tinymce-mobile-outer-container .tinymce-mobile-disabled-mask .tinymce-mobile-content-container .mixin-menu-item {
align-items: center;
display: flex;
justify-content: center;
border-radius: 50%;
height: 2.1em;
width: 2.1em;
}
.tinymce-mobile-outer-container .tinymce-mobile-disabled-mask .tinymce-mobile-content-container .tinymce-mobile-content-tap-section {
align-items: center;
display: flex;
justify-content: center;
flex-direction: column;
font-size: 1em;
}
@media only screen and (min-device-width:700px) {
.tinymce-mobile-outer-container .tinymce-mobile-disabled-mask .tinymce-mobile-content-container .tinymce-mobile-content-tap-section {
font-size: 1.2em;
}
}
.tinymce-mobile-outer-container .tinymce-mobile-disabled-mask .tinymce-mobile-content-container .tinymce-mobile-content-tap-section .tinymce-mobile-mask-tap-icon {
align-items: center;
display: flex;
justify-content: center;
border-radius: 50%;
height: 2.1em;
width: 2.1em;
background-color: white;
color: #207ab7;
}
.tinymce-mobile-outer-container .tinymce-mobile-disabled-mask .tinymce-mobile-content-container .tinymce-mobile-content-tap-section .tinymce-mobile-mask-tap-icon::before {
content: "\e900";
font-family: 'tinymce-mobile', sans-serif;
}
.tinymce-mobile-outer-container .tinymce-mobile-disabled-mask .tinymce-mobile-content-container .tinymce-mobile-content-tap-section:not(.tinymce-mobile-mask-tap-icon-selected) .tinymce-mobile-mask-tap-icon {
z-index: 2;
}
.tinymce-mobile-android-container.tinymce-mobile-android-maximized {
background: #ffffff;
border: none;
bottom: 0;
display: flex;
flex-direction: column;
left: 0;
position: fixed;
right: 0;
top: 0;
}
.tinymce-mobile-android-container:not(.tinymce-mobile-android-maximized) {
position: relative;
}
.tinymce-mobile-android-container .tinymce-mobile-editor-socket {
display: flex;
flex-grow: 1;
}
.tinymce-mobile-android-container .tinymce-mobile-editor-socket iframe {
display: flex !important;
flex-grow: 1;
height: auto !important;
}
.tinymce-mobile-android-scroll-reload {
overflow: hidden;
}
:not(.tinymce-mobile-readonly-mode) > .tinymce-mobile-android-selection-context-toolbar {
margin-top: 23px;
}
.tinymce-mobile-toolstrip {
background: #fff;
display: flex;
flex: 0 0 auto;
z-index: 1;
}
.tinymce-mobile-toolstrip .tinymce-mobile-toolbar {
align-items: center;
background-color: #fff;
border-bottom: 1px solid #cccccc;
display: flex;
flex: 1;
height: 2.5em;
width: 100%;
/* Make it no larger than the toolstrip, so that it needs to scroll */
}
.tinymce-mobile-toolstrip .tinymce-mobile-toolbar:not(.tinymce-mobile-context-toolbar) .tinymce-mobile-toolbar-group {
align-items: center;
display: flex;
height: 100%;
flex-shrink: 1;
}
.tinymce-mobile-toolstrip .tinymce-mobile-toolbar:not(.tinymce-mobile-context-toolbar) .tinymce-mobile-toolbar-group > div {
align-items: center;
display: flex;
height: 100%;
flex: 1;
}
.tinymce-mobile-toolstrip .tinymce-mobile-toolbar:not(.tinymce-mobile-context-toolbar) .tinymce-mobile-toolbar-group.tinymce-mobile-exit-container {
background: #f44336;
}
.tinymce-mobile-toolstrip .tinymce-mobile-toolbar:not(.tinymce-mobile-context-toolbar) .tinymce-mobile-toolbar-group.tinymce-mobile-toolbar-scrollable-group {
flex-grow: 1;
}
.tinymce-mobile-toolstrip .tinymce-mobile-toolbar:not(.tinymce-mobile-context-toolbar) .tinymce-mobile-toolbar-group .tinymce-mobile-toolbar-group-item {
padding-left: 0.5em;
padding-right: 0.5em;
}
.tinymce-mobile-toolstrip .tinymce-mobile-toolbar:not(.tinymce-mobile-context-toolbar) .tinymce-mobile-toolbar-group .tinymce-mobile-toolbar-group-item.tinymce-mobile-toolbar-button {
align-items: center;
display: flex;
height: 80%;
margin-left: 2px;
margin-right: 2px;
}
.tinymce-mobile-toolstrip .tinymce-mobile-toolbar:not(.tinymce-mobile-context-toolbar) .tinymce-mobile-toolbar-group .tinymce-mobile-toolbar-group-item.tinymce-mobile-toolbar-button.tinymce-mobile-toolbar-button-selected {
background: #c8cbcf;
color: #cccccc;
}
.tinymce-mobile-toolstrip .tinymce-mobile-toolbar:not(.tinymce-mobile-context-toolbar) .tinymce-mobile-toolbar-group:first-of-type,
.tinymce-mobile-toolstrip .tinymce-mobile-toolbar:not(.tinymce-mobile-context-toolbar) .tinymce-mobile-toolbar-group:last-of-type {
background: #207ab7;
color: #eceff1;
}
.tinymce-mobile-toolstrip .tinymce-mobile-toolbar.tinymce-mobile-context-toolbar {
/* Note, this file is imported inside .tinymce-mobile-context-toolbar, so that prefix is on everything here. */
}
.tinymce-mobile-toolstrip .tinymce-mobile-toolbar.tinymce-mobile-context-toolbar .tinymce-mobile-toolbar-group {
align-items: center;
display: flex;
height: 100%;
flex: 1;
padding-bottom: 0.4em;
padding-top: 0.4em;
/* Make any buttons appearing on the left and right display in the centre (e.g. color edges) */
/* For widgets like the colour picker, use the whole height */
}
.tinymce-mobile-toolstrip .tinymce-mobile-toolbar.tinymce-mobile-context-toolbar .tinymce-mobile-toolbar-group .tinymce-mobile-serialised-dialog {
display: flex;
min-height: 1.5em;
overflow: hidden;
padding-left: 0;
padding-right: 0;
position: relative;
width: 100%;
}
.tinymce-mobile-toolstrip .tinymce-mobile-toolbar.tinymce-mobile-context-toolbar .tinymce-mobile-toolbar-group .tinymce-mobile-serialised-dialog .tinymce-mobile-serialised-dialog-chain {
display: flex;
height: 100%;
transition: left cubic-bezier(0.4, 0, 1, 1) 0.15s;
width: 100%;
}
.tinymce-mobile-toolstrip .tinymce-mobile-toolbar.tinymce-mobile-context-toolbar .tinymce-mobile-toolbar-group .tinymce-mobile-serialised-dialog .tinymce-mobile-serialised-dialog-chain .tinymce-mobile-serialised-dialog-screen {
display: flex;
flex: 0 0 auto;
justify-content: space-between;
width: 100%;
}
.tinymce-mobile-toolstrip .tinymce-mobile-toolbar.tinymce-mobile-context-toolbar .tinymce-mobile-toolbar-group .tinymce-mobile-serialised-dialog .tinymce-mobile-serialised-dialog-chain .tinymce-mobile-serialised-dialog-screen input {
font-family: Sans-serif;
}
.tinymce-mobile-toolstrip .tinymce-mobile-toolbar.tinymce-mobile-context-toolbar .tinymce-mobile-toolbar-group .tinymce-mobile-serialised-dialog .tinymce-mobile-serialised-dialog-chain .tinymce-mobile-serialised-dialog-screen .tinymce-mobile-input-container {
display: flex;
flex-grow: 1;
position: relative;
}
.tinymce-mobile-toolstrip .tinymce-mobile-toolbar.tinymce-mobile-context-toolbar .tinymce-mobile-toolbar-group .tinymce-mobile-serialised-dialog .tinymce-mobile-serialised-dialog-chain .tinymce-mobile-serialised-dialog-screen .tinymce-mobile-input-container .tinymce-mobile-input-container-x {
-ms-grid-row-align: center;
align-self: center;
background: inherit;
border: none;
border-radius: 50%;
color: #888;
font-size: 0.6em;
font-weight: bold;
height: 100%;
padding-right: 2px;
position: absolute;
right: 0;
}
.tinymce-mobile-toolstrip .tinymce-mobile-toolbar.tinymce-mobile-context-toolbar .tinymce-mobile-toolbar-group .tinymce-mobile-serialised-dialog .tinymce-mobile-serialised-dialog-chain .tinymce-mobile-serialised-dialog-screen .tinymce-mobile-input-container.tinymce-mobile-input-container-empty .tinymce-mobile-input-container-x {
display: none;
}
.tinymce-mobile-toolstrip .tinymce-mobile-toolbar.tinymce-mobile-context-toolbar .tinymce-mobile-toolbar-group .tinymce-mobile-serialised-dialog .tinymce-mobile-serialised-dialog-chain .tinymce-mobile-serialised-dialog-screen .tinymce-mobile-icon-previous,
.tinymce-mobile-toolstrip .tinymce-mobile-toolbar.tinymce-mobile-context-toolbar .tinymce-mobile-toolbar-group .tinymce-mobile-serialised-dialog .tinymce-mobile-serialised-dialog-chain .tinymce-mobile-serialised-dialog-screen .tinymce-mobile-icon-next {
align-items: center;
display: flex;
}
.tinymce-mobile-toolstrip .tinymce-mobile-toolbar.tinymce-mobile-context-toolbar .tinymce-mobile-toolbar-group .tinymce-mobile-serialised-dialog .tinymce-mobile-serialised-dialog-chain .tinymce-mobile-serialised-dialog-screen .tinymce-mobile-icon-previous::before,
.tinymce-mobile-toolstrip .tinymce-mobile-toolbar.tinymce-mobile-context-toolbar .tinymce-mobile-toolbar-group .tinymce-mobile-serialised-dialog .tinymce-mobile-serialised-dialog-chain .tinymce-mobile-serialised-dialog-screen .tinymce-mobile-icon-next::before {
align-items: center;
display: flex;
font-weight: bold;
height: 100%;
padding-left: 0.5em;
padding-right: 0.5em;
}
.tinymce-mobile-toolstrip .tinymce-mobile-toolbar.tinymce-mobile-context-toolbar .tinymce-mobile-toolbar-group .tinymce-mobile-serialised-dialog .tinymce-mobile-serialised-dialog-chain .tinymce-mobile-serialised-dialog-screen .tinymce-mobile-icon-previous.tinymce-mobile-toolbar-navigation-disabled::before,
.tinymce-mobile-toolstrip .tinymce-mobile-toolbar.tinymce-mobile-context-toolbar .tinymce-mobile-toolbar-group .tinymce-mobile-serialised-dialog .tinymce-mobile-serialised-dialog-chain .tinymce-mobile-serialised-dialog-screen .tinymce-mobile-icon-next.tinymce-mobile-toolbar-navigation-disabled::before {
visibility: hidden;
}
.tinymce-mobile-toolstrip .tinymce-mobile-toolbar.tinymce-mobile-context-toolbar .tinymce-mobile-toolbar-group .tinymce-mobile-dot-item {
color: #cccccc;
font-size: 10px;
line-height: 10px;
margin: 0 2px;
padding-top: 3px;
}
.tinymce-mobile-toolstrip .tinymce-mobile-toolbar.tinymce-mobile-context-toolbar .tinymce-mobile-toolbar-group .tinymce-mobile-dot-item.tinymce-mobile-dot-active {
color: #c8cbcf;
}
.tinymce-mobile-toolstrip .tinymce-mobile-toolbar.tinymce-mobile-context-toolbar .tinymce-mobile-toolbar-group .tinymce-mobile-icon-large-font::before,
.tinymce-mobile-toolstrip .tinymce-mobile-toolbar.tinymce-mobile-context-toolbar .tinymce-mobile-toolbar-group .tinymce-mobile-icon-large-heading::before {
margin-left: 0.5em;
margin-right: 0.9em;
}
.tinymce-mobile-toolstrip .tinymce-mobile-toolbar.tinymce-mobile-context-toolbar .tinymce-mobile-toolbar-group .tinymce-mobile-icon-small-font::before,
.tinymce-mobile-toolstrip .tinymce-mobile-toolbar.tinymce-mobile-context-toolbar .tinymce-mobile-toolbar-group .tinymce-mobile-icon-small-heading::before {
margin-left: 0.9em;
margin-right: 0.5em;
}
.tinymce-mobile-toolstrip .tinymce-mobile-toolbar.tinymce-mobile-context-toolbar .tinymce-mobile-toolbar-group .tinymce-mobile-slider {
display: flex;
flex: 1;
margin-left: 0;
margin-right: 0;
padding: 0.28em 0;
position: relative;
}
.tinymce-mobile-toolstrip .tinymce-mobile-toolbar.tinymce-mobile-context-toolbar .tinymce-mobile-toolbar-group .tinymce-mobile-slider .tinymce-mobile-slider-size-container {
align-items: center;
display: flex;
flex-grow: 1;
height: 100%;
}
.tinymce-mobile-toolstrip .tinymce-mobile-toolbar.tinymce-mobile-context-toolbar .tinymce-mobile-toolbar-group .tinymce-mobile-slider .tinymce-mobile-slider-size-container .tinymce-mobile-slider-size-line {
background: #cccccc;
display: flex;
flex: 1;
height: 0.2em;
margin-bottom: 0.3em;
margin-top: 0.3em;
}
.tinymce-mobile-toolstrip .tinymce-mobile-toolbar.tinymce-mobile-context-toolbar .tinymce-mobile-toolbar-group .tinymce-mobile-slider.tinymce-mobile-hue-slider-container {
padding-left: 2em;
padding-right: 2em;
}
.tinymce-mobile-toolstrip .tinymce-mobile-toolbar.tinymce-mobile-context-toolbar .tinymce-mobile-toolbar-group .tinymce-mobile-slider.tinymce-mobile-hue-slider-container .tinymce-mobile-slider-gradient-container {
align-items: center;
display: flex;
flex-grow: 1;
height: 100%;
}
.tinymce-mobile-toolstrip .tinymce-mobile-toolbar.tinymce-mobile-context-toolbar .tinymce-mobile-toolbar-group .tinymce-mobile-slider.tinymce-mobile-hue-slider-container .tinymce-mobile-slider-gradient-container .tinymce-mobile-slider-gradient {
background: linear-gradient(to right, hsl(0, 100%, 50%) 0%, hsl(60, 100%, 50%) 17%, hsl(120, 100%, 50%) 33%, hsl(180, 100%, 50%) 50%, hsl(240, 100%, 50%) 67%, hsl(300, 100%, 50%) 83%, hsl(0, 100%, 50%) 100%);
display: flex;
flex: 1;
height: 0.2em;
margin-bottom: 0.3em;
margin-top: 0.3em;
}
.tinymce-mobile-toolstrip .tinymce-mobile-toolbar.tinymce-mobile-context-toolbar .tinymce-mobile-toolbar-group .tinymce-mobile-slider.tinymce-mobile-hue-slider-container .tinymce-mobile-hue-slider-black {
/* Not part of theming */
background: black;
height: 0.2em;
margin-bottom: 0.3em;
margin-top: 0.3em;
width: 1.2em;
}
.tinymce-mobile-toolstrip .tinymce-mobile-toolbar.tinymce-mobile-context-toolbar .tinymce-mobile-toolbar-group .tinymce-mobile-slider.tinymce-mobile-hue-slider-container .tinymce-mobile-hue-slider-white {
/* Not part of theming */
background: white;
height: 0.2em;
margin-bottom: 0.3em;
margin-top: 0.3em;
width: 1.2em;
}
.tinymce-mobile-toolstrip .tinymce-mobile-toolbar.tinymce-mobile-context-toolbar .tinymce-mobile-toolbar-group .tinymce-mobile-slider .tinymce-mobile-slider-thumb {
/* vertically centering trick (margin: auto, top: 0, bottom: 0). On iOS and Safari, if you leave
* out these values, then it shows the thumb at the top of the spectrum. This is probably because it is
* absolutely positioned with only a left value, and not a top. Note, on Chrome it seems to be fine without
* this approach.
*/
align-items: center;
background-clip: padding-box;
background-color: #455a64;
border: 0.5em solid rgba(136, 136, 136, 0);
border-radius: 3em;
bottom: 0;
color: #fff;
display: flex;
height: 0.5em;
justify-content: center;
left: -10px;
margin: auto;
position: absolute;
top: 0;
transition: border 120ms cubic-bezier(0.39, 0.58, 0.57, 1);
width: 0.5em;
}
.tinymce-mobile-toolstrip .tinymce-mobile-toolbar.tinymce-mobile-context-toolbar .tinymce-mobile-toolbar-group .tinymce-mobile-slider .tinymce-mobile-slider-thumb.tinymce-mobile-thumb-active {
border: 0.5em solid rgba(136, 136, 136, 0.39);
}
.tinymce-mobile-toolstrip .tinymce-mobile-toolbar.tinymce-mobile-context-toolbar .tinymce-mobile-toolbar-group .tinymce-mobile-serializer-wrapper,
.tinymce-mobile-toolstrip .tinymce-mobile-toolbar.tinymce-mobile-context-toolbar .tinymce-mobile-toolbar-group > div {
align-items: center;
display: flex;
height: 100%;
flex: 1;
}
.tinymce-mobile-toolstrip .tinymce-mobile-toolbar.tinymce-mobile-context-toolbar .tinymce-mobile-toolbar-group .tinymce-mobile-serializer-wrapper {
flex-direction: column;
justify-content: center;
}
.tinymce-mobile-toolstrip .tinymce-mobile-toolbar.tinymce-mobile-context-toolbar .tinymce-mobile-toolbar-group .tinymce-mobile-toolbar-group-item {
align-items: center;
display: flex;
}
.tinymce-mobile-toolstrip .tinymce-mobile-toolbar.tinymce-mobile-context-toolbar .tinymce-mobile-toolbar-group .tinymce-mobile-toolbar-group-item:not(.tinymce-mobile-serialised-dialog) {
height: 100%;
}
.tinymce-mobile-toolstrip .tinymce-mobile-toolbar.tinymce-mobile-context-toolbar .tinymce-mobile-toolbar-group .tinymce-mobile-dot-container {
display: flex;
}
.tinymce-mobile-toolstrip .tinymce-mobile-toolbar.tinymce-mobile-context-toolbar .tinymce-mobile-toolbar-group input {
background: #ffffff;
border: none;
border-radius: 0;
color: #455a64;
flex-grow: 1;
font-size: 0.85em;
padding-bottom: 0.1em;
padding-left: 5px;
padding-top: 0.1em;
}
.tinymce-mobile-toolstrip .tinymce-mobile-toolbar.tinymce-mobile-context-toolbar .tinymce-mobile-toolbar-group input::-webkit-input-placeholder {
/* WebKit, Blink, Edge */
color: #888;
}
.tinymce-mobile-toolstrip .tinymce-mobile-toolbar.tinymce-mobile-context-toolbar .tinymce-mobile-toolbar-group input::placeholder {
/* WebKit, Blink, Edge */
color: #888;
}
/* dropup */
.tinymce-mobile-dropup {
background: white;
display: flex;
overflow: hidden;
width: 100%;
}
.tinymce-mobile-dropup.tinymce-mobile-dropup-shrinking {
transition: height 0.3s ease-out;
}
.tinymce-mobile-dropup.tinymce-mobile-dropup-growing {
transition: height 0.3s ease-in;
}
.tinymce-mobile-dropup.tinymce-mobile-dropup-closed {
flex-grow: 0;
}
.tinymce-mobile-dropup.tinymce-mobile-dropup-open:not(.tinymce-mobile-dropup-growing) {
flex-grow: 1;
}
/* TODO min-height for device size and orientation */
.tinymce-mobile-ios-container .tinymce-mobile-dropup:not(.tinymce-mobile-dropup-closed) {
min-height: 200px;
}
@media only screen and (orientation: landscape) {
.tinymce-mobile-dropup:not(.tinymce-mobile-dropup-closed) {
min-height: 200px;
}
}
@media only screen and (min-device-width : 320px) and (max-device-width : 568px) and (orientation : landscape) {
.tinymce-mobile-ios-container .tinymce-mobile-dropup:not(.tinymce-mobile-dropup-closed) {
min-height: 150px;
}
}
/* styles menu */
.tinymce-mobile-styles-menu {
font-family: sans-serif;
outline: 4px solid black;
overflow: hidden;
position: relative;
width: 100%;
}
.tinymce-mobile-styles-menu [role="menu"] {
display: flex;
flex-direction: column;
height: 100%;
position: absolute;
width: 100%;
}
.tinymce-mobile-styles-menu [role="menu"].transitioning {
transition: transform 0.5s ease-in-out;
}
.tinymce-mobile-styles-menu .tinymce-mobile-styles-item {
border-bottom: 1px solid #ddd;
color: #455a64;
cursor: pointer;
display: flex;
padding: 1em 1em;
position: relative;
}
.tinymce-mobile-styles-menu .tinymce-mobile-styles-collapser .tinymce-mobile-styles-collapse-icon::before {
color: #455a64;
content: "\e314";
font-family: 'tinymce-mobile', sans-serif;
}
.tinymce-mobile-styles-menu .tinymce-mobile-styles-item.tinymce-mobile-styles-item-is-menu::after {
color: #455a64;
content: "\e315";
font-family: 'tinymce-mobile', sans-serif;
padding-left: 1em;
padding-right: 1em;
position: absolute;
right: 0;
}
.tinymce-mobile-styles-menu .tinymce-mobile-styles-item.tinymce-mobile-format-matches::after {
font-family: 'tinymce-mobile', sans-serif;
padding-left: 1em;
padding-right: 1em;
position: absolute;
right: 0;
}
.tinymce-mobile-styles-menu .tinymce-mobile-styles-separator,
.tinymce-mobile-styles-menu .tinymce-mobile-styles-collapser {
align-items: center;
background: #fff;
border-top: #455a64;
color: #455a64;
display: flex;
min-height: 2.5em;
padding-left: 1em;
padding-right: 1em;
}
.tinymce-mobile-styles-menu [data-transitioning-destination="before"][data-transitioning-state],
.tinymce-mobile-styles-menu [data-transitioning-state="before"] {
transform: translate(-100%);
}
.tinymce-mobile-styles-menu [data-transitioning-destination="current"][data-transitioning-state],
.tinymce-mobile-styles-menu [data-transitioning-state="current"] {
transform: translate(0%);
}
.tinymce-mobile-styles-menu [data-transitioning-destination="after"][data-transitioning-state],
.tinymce-mobile-styles-menu [data-transitioning-state="after"] {
transform: translate(100%);
}
@font-face {
font-family: 'tinymce-mobile';
font-style: normal;
font-weight: normal;
src: url('fonts/tinymce-mobile.woff?8x92w3') format('woff');
}
@media (min-device-width: 700px) {
.tinymce-mobile-outer-container,
.tinymce-mobile-outer-container input {
font-size: 25px;
}
}
@media (max-device-width: 700px) {
.tinymce-mobile-outer-container,
.tinymce-mobile-outer-container input {
font-size: 18px;
}
}
.tinymce-mobile-icon {
font-family: 'tinymce-mobile', sans-serif;
}
.mixin-flex-and-centre {
align-items: center;
display: flex;
justify-content: center;
}
.mixin-flex-bar {
align-items: center;
display: flex;
height: 100%;
}
.tinymce-mobile-outer-container .tinymce-mobile-editor-socket iframe {
background-color: #fff;
width: 100%;
}
.tinymce-mobile-editor-socket .tinymce-mobile-mask-edit-icon {
/* Note, on the iPod touch in landscape, this isn't visible when the navbar appears */
background-color: #207ab7;
border-radius: 50%;
bottom: 1em;
color: white;
font-size: 1em;
height: 2.1em;
position: fixed;
right: 2em;
width: 2.1em;
align-items: center;
display: flex;
justify-content: center;
}
@media only screen and (min-device-width:700px) {
.tinymce-mobile-editor-socket .tinymce-mobile-mask-edit-icon {
font-size: 1.2em;
}
}
.tinymce-mobile-outer-container:not(.tinymce-mobile-fullscreen-maximized) .tinymce-mobile-editor-socket {
height: 300px;
overflow: hidden;
}
.tinymce-mobile-outer-container:not(.tinymce-mobile-fullscreen-maximized) .tinymce-mobile-editor-socket iframe {
height: 100%;
}
.tinymce-mobile-outer-container:not(.tinymce-mobile-fullscreen-maximized) .tinymce-mobile-toolstrip {
display: none;
}
/*
Note, that if you don't include this (::-webkit-file-upload-button), the toolbar width gets
increased and the whole body becomes scrollable. It's important!
*/
input[type="file"]::-webkit-file-upload-button {
display: none;
}
@media only screen and (min-device-width : 320px) and (max-device-width : 568px) and (orientation : landscape) {
.tinymce-mobile-ios-container .tinymce-mobile-editor-socket .tinymce-mobile-mask-edit-icon {
bottom: 50%;
}
}

File diff suppressed because one or more lines are too long

View File

@ -0,0 +1,37 @@
/**
* Copyright (c) Tiny Technologies, Inc. All rights reserved.
* Licensed under the LGPL or a commercial license.
* For LGPL see License.txt in the project root for license information.
* For commercial licenses see https://www.tiny.cloud/
*/
body.tox-dialog__disable-scroll {
overflow: hidden;
}
.tox-fullscreen {
border: 0;
height: 100%;
margin: 0;
overflow: hidden;
-ms-scroll-chaining: none;
overscroll-behavior: none;
padding: 0;
touch-action: pinch-zoom;
width: 100%;
}
.tox.tox-tinymce.tox-fullscreen .tox-statusbar__resize-handle {
display: none;
}
.tox.tox-tinymce.tox-fullscreen,
.tox-shadowhost.tox-fullscreen {
left: 0;
position: fixed;
top: 0;
z-index: 1200;
}
.tox.tox-tinymce.tox-fullscreen {
background-color: transparent;
}
.tox-fullscreen .tox.tox-tinymce-aux,
.tox-fullscreen ~ .tox.tox-tinymce-aux {
z-index: 1201;
}

View File

@ -0,0 +1,7 @@
/**
* Copyright (c) Tiny Technologies, Inc. All rights reserved.
* Licensed under the LGPL or a commercial license.
* For LGPL see License.txt in the project root for license information.
* For commercial licenses see https://www.tiny.cloud/
*/
body.tox-dialog__disable-scroll{overflow:hidden}.tox-fullscreen{border:0;height:100%;margin:0;overflow:hidden;-ms-scroll-chaining:none;overscroll-behavior:none;padding:0;touch-action:pinch-zoom;width:100%}.tox.tox-tinymce.tox-fullscreen .tox-statusbar__resize-handle{display:none}.tox-shadowhost.tox-fullscreen,.tox.tox-tinymce.tox-fullscreen{left:0;position:fixed;top:0;z-index:1200}.tox.tox-tinymce.tox-fullscreen{background-color:transparent}.tox-fullscreen .tox.tox-tinymce-aux,.tox-fullscreen~.tox.tox-tinymce-aux{z-index:1201}

View File

@ -0,0 +1,59 @@
<template>
<layout-config-provider :locale="eleLocale" :request="request" :response="response" :keep-alive="keepAlive">
<a-config-provider :locale="antLocale">
<router-view />
</a-config-provider>
</layout-config-provider>
</template>
<script setup>
import { ref, onMounted, nextTick, computed, unref } from 'vue';
import { storeToRefs } from 'pinia';
import { useLocale } from '@/i18n/use-locale';
import { useThemeStore } from '@/store/modules/theme';
import { useSystemStore } from '@/store/modules/system';
import { useSetDocumentTitle } from '@/utils/document-title-util';
import { TAB_KEEP_ALIVE } from '@/config/setting';
import LayoutConfigProvider from '@/components/layout/layout-config-provider/index';
//
const themeStore = useThemeStore();
themeStore.recoverTheme();
const systemStore = useSystemStore();
//
useSetDocumentTitle();
//
const { antLocale, eleLocale } = useLocale();
// iframe KeepAlive
const { showTabs } = storeToRefs(themeStore);
const keepAlive = computed(() => TAB_KEEP_ALIVE && unref(showTabs));
// table
const request = ref({
sortName: 'orderBy', //
orderName: 'sortBy' //
});
// table
const response = ref({
dataName: 'rows', // result.list
countName: 'totalRows' //
});
onMounted(async () => {
let result = await systemStore.loadThemeInfo();
let faviconUrl = result.gunsMgrFavicon;
await nextTick();
let link = document.querySelector("link[rel*='icon']") || document.createElement('link');
link.type = 'image/x-icon';
link.rel = 'shortcut icon';
link.href = faviconUrl;
document.getElementsByTagName('head')[0].appendChild(link);
});
</script>
<style lang="less" scoped></style>

View File

@ -0,0 +1,16 @@
import Request from '@/utils/request/request-util';
/**
* api
*
*/
export class CommonApi {
/**
* DevOps
* @param {*} params
* @returns
*/
static getSystemCode(params) {
return Request.get('/devops/getSystemCode', params);
}
}

View File

@ -0,0 +1,46 @@
import Request from '@/utils/request/request-util';
export class CommonHrApi {
/**
*
*
* @author fengshuonan
* @date 2022/5/8 20:36
* orgIdList id
*/
static getOrgListName(params) {
return Request.post('/common/org/getOrgListName', params);
}
/**
*
*
* @author fengshuonan
* @date 2022/5/8 20:36
* userIdList id
*/
static getUserListName(params) {
return Request.post('/common/sysUser/batchGetName', params);
}
/**
*
*
* @author fengshuonan
* @date 2022/5/8 20:36
* positionIdList id
*/
static getPositionListName(params) {
return Request.post('/common/position/batchGetName', params);
}
/**
*
*
* @author fengshuonan
* @date 2022/5/8 20:36
*/
static getBusinessMaxSort(code) {
return Request.getAndLoadData('/common/getBusinessMaxSort', { code: code });
}
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 58 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.9 KiB

View File

@ -0,0 +1,699 @@
@font-face {
font-family: "iconfont"; /* Project id 4453133 */
src: url('iconfont.woff2?t=1710569016438') format('woff2'),
url('iconfont.woff?t=1710569016438') format('woff'),
url('iconfont.ttf?t=1710569016438') format('truetype');
}
.iconfont {
font-family: "iconfont" !important;
font-size: 16px;
font-style: normal;
-webkit-font-smoothing: antialiased;
-moz-osx-font-smoothing: grayscale;
}
.icon-menu-anquancaozuo-p:before {
content: "\e748";
}
.icon-menu-richangyunwei-p:before {
content: "\e749";
}
.icon-menu-linshimiyao-p:before {
content: "\e74a";
}
.icon-menu-shenjirizhi-p:before {
content: "\e74b";
}
.icon-menu-anquancaozuo:before {
content: "\e74c";
}
.icon-menu-richangyunwei:before {
content: "\e74d";
}
.icon-menu-linshimiyao:before {
content: "\e74e";
}
.icon-menu-shenjirizhi:before {
content: "\e74f";
}
.icon-menu-quanxian-p:before {
content: "\e701";
}
.icon-menu-quanxian:before {
content: "\e6ce";
}
.icon-menu-liuchengquanxian-p:before {
content: "\e6cf";
}
.icon-menu-shujubiao-p:before {
content: "\e6d3";
}
.icon-menu-biaodan-p:before {
content: "\e6d4";
}
.icon-menu-duoshujuyuan:before {
content: "\e6d5";
}
.icon-menu-jiankongguanli-p:before {
content: "\e6d8";
}
.icon-menu-rizhichakan-p:before {
content: "\e6d6";
}
.icon-menu-yewuliebiao-p:before {
content: "\e6f2";
}
.icon-menu-anquancelue-p:before {
content: "\e6f3";
}
.icon-menu-zhutipeizhi-p:before {
content: "\e6f4";
}
.icon-menu-wenjianguanli-p:before {
content: "\e6f5";
}
.icon-menu-dingshirenwu-p:before {
content: "\e6f6";
}
.icon-menu-zaixianyonghu-p:before {
content: "\e6f7";
}
.icon-menu-xitongpeizhi-p:before {
content: "\e6fb";
}
.icon-menu-ziyuan-p:before {
content: "\e6fe";
}
.icon-menu-yingyong-p:before {
content: "\e6fc";
}
.icon-menu-shouquan-p:before {
content: "\e747";
}
.icon-menu-zhiwei-p:before {
content: "\e745";
}
.icon-menu-zhiwei:before {
content: "\e746";
}
.icon-menu-jigou-p:before {
content: "\e744";
}
.icon-menu-wodexiaoxi-p:before {
content: "\eb89";
}
.icon-menu-liuchengrenwu-p:before {
content: "\e743";
}
.icon-menu-xiangmu-p:before {
content: "\e741";
}
.icon-menu-peizhi-p:before {
content: "\e714";
}
.icon-menu-jiekoushouquan:before {
content: "\e742";
}
.icon-menu-jiekoushouquan-p:before {
content: "\eb88";
}
.icon-menu-jiekou-p:before {
content: "\e73f";
}
.icon-menu-jiekou:before {
content: "\e740";
}
.icon-menu-yingyongjieru-p:before {
content: "\e73c";
}
.icon-menu-yingyongjieru:before {
content: "\e73b";
}
.icon-menu-zuhushenhe:before {
content: "\e739";
}
.icon-menu-zuhushenhe-p:before {
content: "\e73a";
}
.icon-menu-zuhuguanli-p:before {
content: "\e71f";
}
.icon-menu-zuhuguanli:before {
content: "\e72b";
}
.icon-menu-gongnengbao:before {
content: "\e733";
}
.icon-menu-gongnengbao-p:before {
content: "\e734";
}
.icon-menu-apirenzheng-p:before {
content: "\e735";
}
.icon-menu-apirenzheng:before {
content: "\e736";
}
.icon-menu-waibuyingyong-p:before {
content: "\e737";
}
.icon-menu-waibuyingyong:before {
content: "\e738";
}
.icon-menu-baobiaoguanli-p:before {
content: "\e73e";
}
.icon-menu-baobiaoguanli:before {
content: "\e73d";
}
.icon-menu-liuchengliebiao:before {
content: "\e72d";
}
.icon-menu-liuchengliebiao-p:before {
content: "\e72c";
}
.icon-menu-faqiliucheng-p:before {
content: "\e732";
}
.icon-menu-faqiliucheng:before {
content: "\e72a";
}
.icon-menu-moxingliebiao-p:before {
content: "\e721";
}
.icon-menu-moxingliebiao:before {
content: "\e720";
}
.icon-menu-flow-design:before {
content: "\e729";
}
.icon-menu-flow-design-p:before {
content: "\e728";
}
.icon-menu-yewuguanlian-p:before {
content: "\e731";
}
.icon-menu-yewuguanlian:before {
content: "\e730";
}
.icon-menu-liuchengquanxian:before {
content: "\e72e";
}
.icon-menu-yewuliebiao:before {
content: "\e71a";
}
.icon-menu-shujubiao:before {
content: "\e726";
}
.icon-menu-biaodan:before {
content: "\e725";
}
.icon-menu-shitu-p:before {
content: "\e723";
}
.icon-menu-shitu:before {
content: "\e722";
}
.icon-menu-xitongpeizhi:before {
content: "\e709";
}
.icon-menu-zidian-p:before {
content: "\e70c";
}
.icon-menu-zidian:before {
content: "\e70b";
}
.icon-menu-zaixianyonghu:before {
content: "\e712";
}
.icon-menu-dingshirenwu:before {
content: "\e710";
}
.icon-menu-wenjianguanli:before {
content: "\e70e";
}
.icon-menu-duoshujuyuan-p:before {
content: "\e713";
}
.icon-menu-rizhichakan:before {
content: "\e717";
}
.icon-menu-jiankongguanli:before {
content: "\e715";
}
.icon-menu-zhutipeizhi:before {
content: "\e71e";
}
.icon-menu-anquancelue:before {
content: "\e71d";
}
.icon-menu-yingyong:before {
content: "\e6fd";
}
.icon-menu-juese-p:before {
content: "\e703";
}
.icon-menu-juese:before {
content: "\e704";
}
.icon-menu-caidan:before {
content: "\e705";
}
.icon-menu-caidan-p:before {
content: "\e702";
}
.icon-menu-ziyuan:before {
content: "\e708";
}
.icon-menu-renyuan-p:before {
content: "\e6fa";
}
.icon-menu-renyuan:before {
content: "\e6f9";
}
.icon-menu-jigou:before {
content: "\e6f8";
}
.icon-menu-shouquan:before {
content: "\e6ff";
}
.icon-tree-gongsi:before {
content: "\e6f0";
}
.icon-tree-dept:before {
content: "\e6ef";
}
.icon-tree-table:before {
content: "\e6ee";
}
.icon-tree-chengyuan:before {
content: "\e6ed";
}
.icon-tree-wenjianjia:before {
content: "\e6ec";
}
.icon-tab-yewujuese:before {
content: "\e6e8";
}
.icon-tab-xitongjuese:before {
content: "\e6e6";
}
.icon-tab-gongsijuese:before {
content: "\e6dc";
}
.icon-opt-export-user:before {
content: "\e6e3";
}
.icon-opt-import-user:before {
content: "\e6e2";
}
.icon-tab-jichuxinxi:before {
content: "\e6e9";
}
.icon-tab-jiaosexinxi:before {
content: "\e6e5";
}
.icon-tab-yonghuzhengshu:before {
content: "\e6e1";
}
.icon-tab-zuzhijigou:before {
content: "\e6dd";
}
.icon-opt-tuihui:before {
content: "\e6eb";
}
.icon-nav-zhuye:before {
content: "\e6e4";
}
.icon-opt-yidu:before {
content: "\e6df";
}
.icon-opt-yulan:before {
content: "\e668";
}
.icon-menu-type-single-page:before {
content: "\e615";
}
.icon-menu-type-backend:before {
content: "\eb87";
}
.icon-menu-type-inner-link:before {
content: "\e8ae";
}
.icon-menu-type-waibulianjie:before {
content: "\e85f";
}
.icon-opt-zidingyilie:before {
content: "\e66b";
}
.icon-opt-search:before {
content: "\e65c";
}
.icon-opt-qiehuan:before {
content: "\e661";
}
.icon-opt-tianjia:before {
content: "\e66f";
}
.icon-opt-daoru:before {
content: "\e68c";
}
.icon-opt-daochu:before {
content: "\e689";
}
.icon-opt-shuaxin:before {
content: "\e685";
}
.icon-opt-fangda:before {
content: "\e6ba";
}
.icon-opt-suoxiao:before {
content: "\e6b9";
}
.icon-opt-jiaqian:before {
content: "\e6ab";
}
.icon-opt-tongyi:before {
content: "\e6a9";
}
.icon-opt-chehui:before {
content: "\e6a8";
}
.icon-opt-jujue:before {
content: "\e6a5";
}
.icon-opt-zhuanjiao:before {
content: "\e6a4";
}
.icon-xiala-xiugaitouxiang:before {
content: "\e68f";
}
.icon-xiala-xiugaimima:before {
content: "\e67d";
}
.icon-xiala-gerenxinxi:before {
content: "\e684";
}
.icon-xiala-tuichudenglu:before {
content: "\e6b8";
}
.icon-opt-fabu:before {
content: "\e691";
}
.icon-opt-shezhi:before {
content: "\e658";
}
.icon-opt-xiangqing:before {
content: "\e683";
}
.icon-opt-shangchuandaoshujuku:before {
content: "\e679";
}
.icon-opt-shangchuan:before {
content: "\e688";
}
.icon-opt-xiazai:before {
content: "\e687";
}
.icon-opt-tixiaxian:before {
content: "\e67f";
}
.icon-opt-shenpirenshezhi:before {
content: "\e675";
}
.icon-opt-liuchengqianyi:before {
content: "\e67a";
}
.icon-opt-liuchengsheji:before {
content: "\e6b7";
}
.icon-opt-bianji:before {
content: "\e662";
}
.icon-opt-shoucang:before {
content: "\e669";
}
.icon-opt-yishoucang:before {
content: "\e667";
}
.icon-opt-shanchu:before {
content: "\e66a";
}
.icon-opt-fenpeijuese:before {
content: "\e674";
}
.icon-opt-chongzhimima:before {
content: "\e67c";
}
.icon-opt-fuzhi:before {
content: "\e699";
}
.icon-nav-gongsi:before {
content: "\e65b";
}
.icon-nav-yingyong:before {
content: "\e656";
}
.icon-nav-tongzhi:before {
content: "\e655";
}
.icon-nav-duoyuyan:before {
content: "\e65e";
}
.icon-nav-gengduopeizhi:before {
content: "\e66c";
}
.icon-faqiliucheng:before {
content: "\e6a1";
}
.icon-daibanrenwu:before {
content: "\e6a0";
}
.icon-yibanshixiang:before {
content: "\e69d";
}
.icon-yiyueshixiang:before {
content: "\e69c";
}
.icon-daiyuerenwu:before {
content: "\e69b";
}
.icon-wodecaogao:before {
content: "\e6c5";
}
.icon-wofaqide:before {
content: "\e6cb";
}
.icon-quanbuxiangmu:before {
content: "\e69e";
}
.icon-woshoucangde:before {
content: "\e69f";
}
.icon-menu-yingyongguanli:before {
content: "\e68e";
}
.icon-menu-yingyongguanli-p:before {
content: "\e68d";
}
.icon-menu-liuchengsheji:before {
content: "\e6ae";
}
.icon-menu-liuchengsheji-p:before {
content: "\e6af";
}
.icon-menu-xiangmu:before {
content: "\e6b5";
}
.icon-menu-liuchengrenwu:before {
content: "\e6d0";
}
.icon-menu-zuzhijiagou:before {
content: "\e698";
}
.icon-menu-wodexiaoxi:before {
content: "\e6b2";
}
.icon-menu-peizhi:before {
content: "\e6b4";
}
.icon-menu-quanxiankongzhi-p:before {
content: "\e6d2";
}
.icon-menu-quanxiankongzhi:before {
content: "\e6d1";
}
.icon-menu-zuzhijiagou-p:before {
content: "\e6cc";
}

File diff suppressed because one or more lines are too long

File diff suppressed because it is too large Load Diff

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

After

Width:  |  Height:  |  Size: 23 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 106 KiB

View File

@ -0,0 +1,164 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" width="200px" height="195px" viewBox="0 0 200 195" enable-background="new 0 0 200 195" xml:space="preserve"> <image id="image0" width="200" height="195" x="0" y="0"
href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAMgAAADDCAYAAADHn15dAAAABGdBTUEAALGPC/xhBQAAACBjSFJN
AAB6JgAAgIQAAPoAAACA6AAAdTAAAOpgAAA6mAAAF3CculE8AAAABmJLR0QA/wD/AP+gvaeTAAAA
CXBIWXMAABYlAAAWJQFJUiTwAAAibklEQVR42u2deZhkVXn/v+977r1V1d3TszALMMCwzKJMBFnU
AQaHUXEjCEE0wQXFJUrUREXxSVyiQX5Go0FjEk0MKGKigisia2AWtkFFBcMyKwMMszBbT69V957z
vr8/enrsnumlqrqqTi338zzzPFO37j3ne0719579HFJVDEFESCmN/5t1YscxU6McU/uRQWLmcUgL
hTBfheYwSU4BqJoBgrsuu2H1LyoRZ3hNjLbrzrtIOo88XzJTjqUg06GZKQHCbIFUtmlmymZwsCnh
zGPR1t8+1nvPv+4Or4mt77xqRCg1SPEMLFp2LImeCOCFTLqYKZwnsPOgfJhAOzNEDBAcAMVgvhIA
wyGs2M+Fa1d8thI6wmtiANBi76d8d0LdW7uof/czKPT8Hv177ki6d97Cy/5mwHee1juBbwH1TM/x
Z8zOhuFiUrPUQpay0gthaHZIJgMlAAqDAAqFAIhVDxhj6K+XABgVONKi/6ArjWY7Q812zgIwC8Bp
AN7NLhbes+k56tu9UuL+G/WEZbcBcF4zvA5JDXIQPcefMZs5ONuweZVhnKWiiwPDbMCACJwqYnGQ
4l/gAAD2nbCDMRHLjOOPxozj3w7g7RT3FWjflgcIeq2b9YKbAMS+JdYDqUEAPLHozCnHqnlJwOZC
dfoaGJofUsBQgSVBwdkS7dB4aNSe0VmLlgNYDpu/lru33enAX6EZ81b51uaTljZI/7FnzIvC6A1Q
80YHtzSgwMAIrArykviWNz5iBRxUp2AKshmZcdz5BJxP/XueI5v/pnQe+TUAPb6TXWta0iC9C846
OUOZt4L0YkN8HAiAEPKueqYgrXAPiEtc1QwyDG2bMVeBq+DiT/LA3u9Jx5x/APBsteOtF1rKIPGi
5WcS3LtUzUWB4elQKas90ZKYKCsdc94DlXdR365fasfsjwDY6FtWtWkJg/S9cOnLIo3eR5CLDEVT
VR0KLqmpLequkV4uxKwds8+HynnUt+un2jH7YwA2+5ZVLZraIL3HLj85E+FyqF4SMHeqaFWrUeMh
gz2+zcOgUd4IcRdSoefbmpv2cQBdvmVVmqZ5sQ1n+3Evm1NY9PJ/iDK4KzDB+4xSZ94mKIj4ltZ8
sDGam/Ye2MKzyHd/GE320m2qxOhpp4Vxd/slxvAVhoKToIK8q4/ufBkcWawYg8OUdUSQ6UCQuYYK
PR/UzJTLANzrW1IlaJoSpO+Epacl3Z03hRxcb2BOKrgEeamfgeGmyegJ0MyUEwBdjYGu6wF0+tYz
WRr+d9NZyzrsonP+Lgqj28LAXOAgyEv9DOz9UUfDZ3UJEJCbdimSgU0AzvOtZjI09K8WH3/WUjcj
+Lnh4OoAmJV3Cay/KU8pBxPmDgNwCxW6f4IGLU0a0iDPHLUkFy9a/nEKMjcbplfEztZVdWpUVJqr
F6uUpGc6/wxJ/zoAZ/jWUioNZ5CBE5bNn9OW/WHI/CXDmJ53SUMM9AlafC1B2DYHKvdR3Pc5AMa3
nGJpKIP0zV96cRiY2yITnG+dQ6HeS41hNFRGVwti1qj9M1ToWQPgSN9yiqEhfrdnjlqSKyxc9vks
hf9tmOYXXIL6aYanlIpmppyOZOD/AJzpW8tE1L1BBhYsPf7w9uj7URB8khnRQINOPa/0SHoj5sEI
wtx0iF0Nl7zft5TxqGuD9C844+WhMT8NObogsQ4DKk02X6PF4cDAhN9Aofc7ACLfckaV6FvAWBQW
LXtThjI3GgpOKrgEDpqao1nJdLwDg+2Smb6lHEzdGUQByi9Y9nEj5r+ZzZx8g1apDqbSGd10L4vM
lFMoGfg9gAW+pQynruZiPXDUklyci67OmOAjgCIvzbRTTWXnYjUjGubmwiW/hQlfDeBB33qAOipB
nlh05pTT27P/EQXRR6w6DDRQF64PmqFUHRUTdkDsSgB/6lsKUCcG2THvJYcfr8H/hBy8PRELq83X
3pBKJ4moaT0CDiKo/BzA231L8V7F6j3m7COymeC7xphXFZyFNG1jvC7eRY0DMQN6PVRzIP5PXzK8
/mr9x591TDYbfN8EwasGt9ZpVnMAzOlirdIhAtF/QOWDvhR4M8iuBUvmRkHmu8YEy2IbH9iRMKVI
iBtmPtMkEwoQfR0qV/qI3UsVq2/BkrlZ5L7HgVlWsHFLWEOkwpMVTdQiBgH2m+SLAEIAV9cy5pqX
IFte8JLDMpS5joPgnLhFzAEAwk1be6wlnwfwiVpGWFOD7Jr/0s5Z2v4tY6JXF1yCVqqVe+8NaR6+
AOCdtYqsZgb5DU4LOzT7tYiDP4sbZA1HSl1CgF4L4A21iKxmBnnRgo6rMlH0TivN3JWbUhuIoe5G
AKdUO6aaGKRvwdkfjEzwCScOSYuuGRd16TuhkpDJQJLbABxVzWiqbpC+hWdfkKHoC6qKJJ2unlJJ
OJwDF/8SQFvVoqim/r4Tlp4WavANw+goaGvPrWKXjqRXBROdBJf8V7WCr9qvtv24l82JKPhmaMwR
zTUrtwyIAEboW0bTYsJLAHykGkFXxSCKZcG0KPflIApPL9T7QTRVgAAERMhygKwJARCEueUOn6kp
Kl8CsKTSwVale74wn67IcPA2W+MjBnwTEYOJACIUnBXAPSKC+yF2dRLTfb71NTXEAVz8Y5joRQD2
VCrYihukZ+E5rwyAT6sIkiactn4wBkDIBgAjgcs7Zx8zhDtZ+I7eRB+Z/vSqripFfQSAFwN4KWx8
FpjPAgftvvPDKyY6Eja+HkF0fqWCrOg56X1HLZkb5nK3hQG/KO+au92RIR6cL6gOVvGkiN4uKrdm
2jIP8KN39VUz7v3npB9MAOB06tl+EYDztWP2IhA3+/tpLN4D4NpKBFQxgyhA+YXLvpM10aWxi5ty
GgkDiNgAxEicdFl19xrCjbGN75yy6cHna6VjDIOMpHfn4dy7/XKEbW+TGccd11JmEZsHB3+CChwR
VzGD9C84+x2RCa6DKjfbYCCDEDEDRHBWNyu5H8dif9S+4f41PvQUZZBhmD/8ZDE6Zn9W5rzwPG07
LOdDc81JBtYgzJ2JSa5OrohB9r1g6cI2Cf83YD66mbp0CYQMG4AIVpLHVfV66/T7bRvv9XrKa6kG
GcJdf0ku8+ILPyZHnfYhOWz+LJ9pqAkqfwXib0wmiEkb5Dc4LTxpUccNIYd/XuuDMauBYrAqNWQM
5/QxwP3XQGK+P+Wpe3b41geUb5ARYfz2hsvd3FM/KXMWz/WdnqohyQA4PB7A9nKDmLRB+hcue3uO
zXcTFbgmqFpFxGBj4JzbIqLfLLjCt2rZviiGShjkQFiP3vghd8ySz8q0Y2b4Tlc1oEL3TzXTeVHZ
z0/GIP0nnH10YIJ7Qub5jV61YhAiY2BF8oB+26n+S3bdqid96xqNShpkKPlm3Z3/JPOWfEgznU02
4q8A6OUo88zESY2kG0NXhiaYHze4OTLMiDiAE7vaQi8M1678q3o1R5UQt/DVV0TPP3Ycb3v0oeba
dYtAhZ7rUOaYX9kG6V5w9ssN+DKntiG7dBWDU0KyJoQo7XWSfKbLDZyfW7vyDt/afFE4+ozn5IiT
lvDmB/+SCj1533oqhWamzEeh58PlPFtWFUtPPDGKkzk3R4F5Td413lwrBRASI2ADZ+2D/S65snPT
/Q0zFaQKVazROJy6nr1Dpx19ku/0VgQX98FEcwHsK+WxskqQ2B32JmNwrm3A0XIFkGODgAhW3b/0
U88bGskcNWS7Tjv6FOp65htNUeUyUTv6d3+61MdKLkG6jlk6vS0b3B2yOaURG+ZZE8A53evUfSKz
ftW3fOsphxqVIAfggT2XSDTlepiwsRvwLi7AREcB2FV02kuNoy1j3hqyOaXRGuaD7Y0ATvD4gCtc
1Kjm8IHkZnwfJjwbttDrW8ukMFGGenaUtK9WSQbpnr90FoAPAmiohjmDkDERnOr9Np9cPGXj/St9
a2pAHkKQOQ3JQF2NCZWKts+4DMDhxd5fkkEiCi4Ng3BRI5UeBCAyIWLn7tzbl39z9unVT/jW1MCs
Q5h7GWyh7JFp73AYUs/2q4q+vdgbtx1/xmxmvBuqDVN6GBAyJkRsk1t29bi3znr2ga2+NTUBmxFk
zoSLG7Yk0dz0twHoKObeog0yLYjeGLJ5YaOUHgQgNCFiK3cUqOeyudtWFd0wS5mQp2Ci5RC717eQ
sggyWd779EeLubUog2ybc257oPQuoDHaHgQgY0I4dfcnJrysc93DqTkqz+Pg4HVQV/AtpBw0N+3D
KGJ0vSiDTJ1aOI8MnWJdY2zdkzEhXJKs7YvtZR1P3rHNt54m5iGQuQwNOFCi2anTad+Wt05034QG
UbzJRGTeYsiYej9vVgFk2cA619XvkvdO3bR6vW9NLcD3AXzRt4iyIJ6wmjWhQfqP23GqU321NMCh
mhExnMJacld0PvVAWbM3U8riU1Bd5VtEqWjnES/Sri0njHfPhAYJIro4MiaXaH23PhiAYQPrkm/k
1q6+zreeFsOB6C1Qqdh2O7WByCR9455cNa5B5MQlM8jpBdD6PyAtMiEKYn89kPBnfGtpUbaC+D2+
RZSKTpnz5xjHB+MapM9Gr6LAzLd1XnpEzEic640lvqKK+1ClTMxPAXzPt4hS0Oy0qbx382vG+n48
g1AG9PqAjLF1vJSWADAZEORfOten7Y464G+gstu3iFLQZODysb4b0yC75r90LlTP0TovPTImQCLJ
o88D1/jWkgIA2APiK3yLKInOua/EGF4Y0yBTTO6M0Jh5idSvQQIiWHGukLh/nLsuHSmvI74LcQ/6
FlEsmu1s4x2PnTfad2MaREGvBnFdnyUYUAARd9dvjjY3+daSMgIFmw+jkQYQOXjHqJdHTd3Jy6aR
6lmo47ZHSASrtiCEf1q+alVjTBBrLX4FlYZ5cWnbYctGuz6qQXoH5FQiPlbq2CCGA5DKLb9Yd2/D
DVC1DMSfAeq8EbsfbZ85Ez07jjv4+qgGMYKXhsS5eu3eDYlhVfKJ6H++Gaj/If7WZS1EfuBbRLGY
3ucvPfjaIQa5EW8yAfNLQFS3M3cNG4h1D2Tn8j2+taRMAJsv+5ZQLBq1ve4Q+QdfeN3xWw4j4hPr
tWQ0RIOlNuM7lLY9GoHfQZKVvkUUg3bMWnzwtUMMIsYcJ3DH1es+uyExrLNrC+i9zbeWlCLh8B99
SygGzXR26Lb/e8EI6QfflCXzooiCTD22PwjAYNWPfpYugmoo7oQtPOVbRDGYIHr18M+jNdJfAOK6
7MAOiZCIDDjEt/rWklISCjb/6VtEUULZLB3+eRSD0MJ6Hf9gMhDFo1md+pBvLSklwsF3G6LLN8yd
PEL28A/r5r+000GOr9sBUCIQ6C7ecHtDroNucbYi31P3W7xq+8x5wB8PZx5hkMM5d6RRPqweS5CQ
GIm1iYuTu3xrSSmTqP2/fEuYEBNlABwz9HGEQQKV2WSovf7sMdi9y4wn9sT5x3xrSSkTNr+ANsDa
7Xz3iQckD7+uillQbXP1WMUihoj+5qitv26wZZ0pw+ii/L6HfYuYCC7se/GB/4/4hszMkNjUmz0M
CKqKRPQh1G0DKaUYVOQnvjVMqFGxaOj/I0sQkcMARr1NUgyI4NR2h6F71LeWlEnSftgtviVMBHFw
9ND/RxoEbhrKOyq9uoKJIJCt/f201reWlEnzGJKBkk55qjUaZA7s/j7CIIaDdqAOdzAhBtQ8Me2Z
+xpzL9iUEVChp77bISacPvTfEXuTKmk7QCCg6gUJFRnD0F0MSo8taBaC6G4Ar/AtYyw0yEw5IHX4
FyFRDiZERnXwL3PoKNiSipSJb1YApKPdOXbpJaSP+864lMqg2Wn3+9YwAQeOmhthEHFyYx4Dm1xi
8xyQsELBACwJM6kFwKQCQKGkAJRBChIFSAVQJpXBG0iNDm5YasQoGxaBqBMgBIkjUXFAGLA4iAJQ
I6QOpCCoAakj0f3CNI4H7vadaykVo75fdoODhQDKPAY6xS+1PsSzlUkNkpIyCkO+KOuc9JSUViE1
SErKOKQGSUkZh9QgKSnjkBokJWUcUoOkpIxDapCUlHFIDZKSMg6pQVJSxiE1SErKOKQGSUkZh9Qg
KSnjkBokJWUcSFURfTXxraNlSD4S+ZaQUgTpbN6UlCIIDvpcd/s1HMRsADt9i0hpHQ42SA+AKeUE
VCMWA1jpW0Q9IIvOnBIj8z5SPUYhBCUG6VCNgASDq98YKoP1BVYAIFJRqBJYoSQCUagqMwkriTBU
hJRJxUIQwAgTiRVRpyoBkQBwIHJQJyASgIQJzilJSOyEVFREQOwgKobUOWKBqgOp8OB1Z8Q4RyJg
dWDjjCQOYhxInWUjcE5ARvrtgAYcOJCRgnUSsZHQiCuwE8SsasRJ4BwKrJlQreYT6TGBuHybaw+t
22N6tSPb4YCdkCBQ7ACEQ3UmVGcymoTP6YIo0scALM7lFA8/bLG/sBhpEFsgBJmifyQPnIrUIACA
roLOaM/gyijMzIJYHLq7xtDqUMXIPWpG+3zQMzx4OSIFlAACAuZR6hdmRDghDV0lgMzg7UxQKAIA
Onj4kaoqQKrW2D8KcKJOjSoUUFVSq0oKgSAKjBJIVKy0hSwEK6okGUtCAQnEOHIsCEgg4jQTygyQ
ULt1RHAd2inqREhnO7Wq0skCgjME61RcQHOts+QWAEh6TV/vwqV/Px14FDjIIBT35jXIdPj+8cfh
DN8C6oU8gA5oAS5BoUb7QZeyIHucbZ1o//c04goN7qRDw54m4hEWJMP7v+WRYsywgMiMIdQAoywp
D4gPPGqIYZ0kWZivHPh+xN220AVgZvWzukzUnQMyJW9E1Ixkc1lAlFDDzCgtnhLu1smFoUU8Voy5
s8RQ0i4T64GdH0f2YsX99d0AJjMTg+2QlqfgLKsQp+8KHNjocLx/xQVEUEXeqekeujTCIGQLW30n
dkIKPa/3LaEeyAIASX0eJtnAWKe9ee7uGvo8sgSxAxt8C5wIcslf+NZQD8TiGMXv4JpSFARmfX76
pofHKEFc/IhviROhuWkvBnCYbx2+IXGsxJSWIBVksPtgCw2rt44wiG2bXf+nxxIT9Wxv+VIkExqG
SDoTokIM9Z4FbJ4dfn1kCTJr/iZK+ut/X0vVd/mW4JskHwxWsVIqhyoUsnn4pUPeQNS9dZtvnROm
Y8qcUwAc4VuHTxKTGAKnBqkQhgixs1Kw8brh1w81SP/eJ32LnRBior5df+Vbhk86NCQl4bQJUhkC
YhCw3SZm8/Drh9Zh477VvsUWRZh7D1p4NjIFhintw6ocRGCmjfHA7hFjgYf8gYW9W2/1rbUYNGo/
HMD5vnX4IlHHKqlBKoYSrOoTc3Y+3jv88iEG6fnOO/9A/bv7festCpv/lG8J3pIu1kDT8yoqgSEC
VOGs/Pbg7w4tQa6JHXU9u664oD0TZE8HsMS3DB+EQUAgSQ1SAQIQrLgeMB8yDjhqHZ66t93lW3TR
uPhvfUvwARlmELdsG6ySEBFUdfMABg45Gm70DO7beX3DTIIz0fkAXuZbRq2xGjPgqEF+pfqGGGBa
M3PDr7oP/mpUg7jTLn2M9z23x7fuYpMH6Bd9i6g5wjzqAoeUkjAgQAWstGK078csomnflno/qne4
2mUAWmqWb6jCmjbSJ01AjMS5rT1k14z2/ZgGkX3br/UtviTEfgkj14A2N8oMlXQ9yCQhZjDogWkn
3/vMaN+PaZBk9b/9kvp29flOQNFwsBjAh3zLqBW0v/hI7VE+BgRRRSL2TroJo65bHtMgwQfusrRr
w72+E1ESKlcBmOtbRi0IDLNy2os1GQIiWOu2gXH3WPeMm8Fs+7/uOxElQdwBdY1VNSwTq5rOVJwk
xAxiXZFbf9+mse4Z1yD2hFfcSj3bu3wnpLRUm9cAeLdvGdXGKTENbXaVUjIBEUQcRO2PxrtvwiKa
u579ge/ElIzYfwXwAt8yqkpagkyKgA0E+shA3LtivPsmNIgd6P4CJGmsFxUHWcT9NwPI+ZZSLQJN
J/OWC+/f68QBP5r+9CNd4987AbTwlc/w7k2/952okonaFqDQ+13fMqqGUU5HQcojJEYsbmecx48m
ureoXhCS5Eu+E1UWmY6LaWDvp33LqAakxKRpN285EDNU5BedT6+acHFgUQZxc/7kh9S7Y4fvhJWD
Zqd+jrq3Nt8mD2rTGlYZhMSwzg4URIrq7Sy2H12pd9c/+U5cWRCTdsz+HvftfJ1vKZWFOXVI6Rg2
EMitnRvvXVPM/UUPNMnhi79Ohe7GGVkfkcrAaNTxc969cblvKZVLU9oEKZWQGNbaOE7kmwRIMc+U
MhIbo+f5f/OdyHLRMBdq55F38LY/vMq3lkpg1DKQtkFKYX/pcdttTx2xothnSpqqoDPnX41kIO87
oeWiYS7UmfNvo2ceuti3lsmTDoOUQkgMJ5KPBV97M24q+ryIUufydFPfrn/3ndjJoGEu0Lmn/pA3
P3CFby2TIYAZPE0jLUKKwrBBoslPOzauXlnKcyVPdtNpR3+OkoHG2NRhLEzIMm/Jl81zD1+HBt2d
0FltSN0+yBAjlqRbWL9S6iulnNmg3Sj0Xu070ZOGGG7uaZfxzrW/Q9+uej6XcXTMUCdWWoSMBwEg
NhDR69qfvO/hUp8va7q0dsz6CsW99X3YTpHIrEUnk8qzwfq7GmpFomFO7VEEGQ5grd2sov9czvPl
ricoKJm/9p34SqEds6faE5bfYjbfdz0aZVUia7oWZALM/o7wWPWLbRvvfbacMMrP5DD3A8rvK7nI
qls4IHfs0ktp79PbzaM/vsC3nIlwmh59MBEhB4htcvfufOH6csOYVCZrduq7oVLUgEujoNPnzXQv
uvBn5ukHV4S//595vvWMSbqacFwyxEis67Fwnzpmy5qBcsOZbCY/gmSgYQcPx4QM3LwzzrEnXrDB
rL/rf9ruuar+Tv5NS5AxYQDEARzp19o33F/UlJLxwpocUfvfIck35ETGidCoPXALzr1k4KXvfy54
4pYfhjd/9Bjfmv5IOlA4FpEJUHDJmmelf9LzByvxFupFmL20mftTtGNWZF/4p2+2r/nsJrP29nsy
d37G/3QVTRvpoxGRgVPXHWvhEwtH2SmxVCqVyXciKdzgOW+qjmY6jVv02uWFc//+Lt76+2eDX3/7
/2Wvff1sH1pMWoIcAoPAxIgdvti5/sGKnHNTubdQmP0QXFz3x7dVBDKQI198lH3JZX9beNsPt5qn
H3w0/N1/f7LtpnfV7PRdSbt5DyEyAWK1t+/t7flqpcIkVUX01aRS4S0D9J7B3YBbkGRAeNf6TdS/
+3Z17gey8FWHbN+afCSqSFTxomXvD8l8oyCuiSu3xZPlAInTp4Xca7PrJl4pOBGqg7kaVFjnKoj7
Mji40kcmeSfMsRxx0nwAHwTwQYr7Cujb9SSpPCBT594NE/24YnHp4KF6KUBEDCcaJ9Z9rP2pyZtj
OJU2CMDBJ+HiZTBRyx1JcDAatWcQtZ+swMkALkdFJ0ambRBgsI3AbJB3yZfbn1o14SYM5YRfaSxM
9EaI3Vv97Glh0l4sEIDIhEji5Cc7+wufr0Yc1crk58DBnwPaVKPs9QSzUoPO1K8YGRPCSvJId6Hw
15MZLR+Par6F7gLo41UMv6Wxqo0xqbJKZE0A59z2vlj+cuaWNc9VK55qF9P/DJXvVTmOlqRV92xQ
AFk2sKL9FnL5tKfu/VU146t+PZb43RD7UNXjaTW0NetXGWJYiItVPp5dt+pn1Y6vFg29GBycD0k2
1yCuFqL1xpoMMZgNrHNXt69bWZO9EWqVyTvB4bkQ1ygHg9Y9rK21Jj0gQsgBCtb9+5r1fFWt4q3l
W2gD2LwS4nprGGfTIi1SgigG51gFHCCxyQ3R+sxHl2OVrVX8tc7k34PNG6DSsHtr1Q0tMo5uiBCZ
AIkkN+3j+AOM2wu1jN/HW2gFiM9LTTI5RKWpu3mHSo6IQziX/KTbDbxn1toHemqtw1cxfQ+IXwd1
rWMSSSr75qPmnmoSECEyIeKk8PPe/sJ7Z1ZgbUc5+KzHrgSZc6Et0ibR4jZLLiHApm2DmP0N8iQp
/PDpPflLp21Z461zx3cm3wcyyyC2y7OOhoO0OQcKQ2KEHCKJ7Xf27d3x3oV7/JQcQ/g2CAD8Fhyc
CZds9S2ksWiuXizF4LR1w4w4Sb4eUPb9s3avrXmb42AqP929PJ6ACU+Hje9CEC32LaYhUDTV+Tk5
NnCKZMDZq3IbVn2+Xrblrqe30DYE0RLY+G7fQqpDZX9vbqI2SNYEsCJ9ibgPtK1bdVW9mAOoL4MA
QC+C6LUQW/ZOeC2DUsMfoEMAsiaEFd1SEP2L3PpV3/Kt6WDqzSAAYMHBOwF8CtBG/v0PorL1oUbe
tEEx2FOVMSGc2F/F8cBFHRtW3eJb12jUcyZfDdCfQmyTdANXdu4Uq2vIFogCyBEPduOK/UHB6Rvb
n3rw1751jUU9GwQAbgUHp8LF630LqT8arxeLAORMACEtFFz82XXm+Xe0b1i1xbeu8aiXXqzxWA8T
nQqxN4CDC32LqRsEVPevt2EYEMLBVYDrC7BXtq+772e+NRVDo2RxLzi4CMCHoVKxTbwaGaHGKUEy
xAhNgMQmNyeC1zWKOYDGMQgwWH39GohPh403+BbjG0b9j6QzCFkTQsBdztlPbB8o/EVuw4qNvnWV
QiNUsQ7mUQTRyRB3Ddj8pW8xvhBT371YGWIQG7jE3RdDP9W2YeUq35rKoa4zeRz6weZ9AN4ASZ73
LcYLdbovltlfajjSfTa2n+/ND1zQqOYAGrMEGc4vwOHCwe1OzbvRQhtFqRDX02mKBCDDBiCCE/u/
ibir2jbeW5Ed1n1Sl2+hEtkHNu8FsBwufsq3mBpSNxvHZYiRMQEssDmx+qGdXXsubFvf+OYAGr8E
Gc4qmGgxgI9C3SdBJudb0AgqvMmCIfU+ZSkkguEQ1iV9ziU3FGzhn6dueqipxqyaoQQZzgCAq0Hm
BKh8G77/gqqIQrytSg9osJ1BgBPrfm5Jzs+uW315s5kDaD6DDLENxO8CcCYkWelbTFVQ4grPXpmQ
gAhZDgEicRLfnbdyEa93F+fWrl7hOzuqRbMaZIg14HA5gGWwhfsnHVodITV0R0SMrAnBIDh1d4u4
Sza5ree1b1x9M9VwCx4fNFMbZDxWI8gsBbActvBpBJlzUC8t3DJxYqrai/XHXimDxCX91sUrVHHt
3u6uO4/Y8Wif7/TXilYxyBArEGRWAFgMl3wMbN4C4sqciTYxlW2kG6r4ikLC4JpwZgYUsM5tdSq3
Ktsf5Nbd16QL2can1QwyxGMw4WUArgTwNtjC+xFkFlY1xiBTUSMqhFChIiQkgqHBMQzrkr7EyqMB
zI+dk5uzm1Y3XcO7FFrVIEPsBHANgsw1AJaQ2HeouDchyNTstNqyISmr/CAMLlYKQAAzAELsEgHJ
b9W5lRZy+8Zwz71/8vjjse8k1gOtbpDhrFEO1oCDDwBYgkLPW4jo9Rp1HOdb2GgYBBMahADwfjMQ
EQbnNxKcOliRHWL1CWazmp1d0dcb/2Hq1l/v9p2ueiM1yKEIgAeQmfLA/kGUwwGcS327XgsOztBs
5zwQe+/9c9D20ATIjjbUoxh0hwKqAivSR0zPsGCjVfcYBL9T0j98YcN9T34Old7QrrlIDTIx2wHc
oO0zb9j/uQ0uOZF6nz8d6k4mlQVqoqNhoukIonZwEGiQC6FOyeYFtuBooCuGyjqZuaBiopzil0lS
iFUkB0ikg2VEQkz9ougyzDtVsSMRt0WsbCQpPN8+U3ZnHn44XU9TAqSqiL6a5lmtiD8c+paQUgL/
H+3ebo56Mf1WAAAAJXRFWHRkYXRlOmNyZWF0ZQAyMDIxLTA1LTA0VDE0OjU2OjE4KzAwOjAwL7Xa
EwAAACV0RVh0ZGF0ZTptb2RpZnkAMjAyMS0wNS0wNFQxNDo1NjoxOCswMDowMF7oYq8AAAAASUVO
RK5CYII=" />
</svg>

After

Width:  |  Height:  |  Size: 12 KiB

View File

@ -0,0 +1,63 @@
<template>
<div ref="rootRef" class="guns-cropper-preview-group" :style="{ width: `${previewWidth + 14}px` }">
<div
class="guns-cropper-preview"
:style="{
width: `${previewWidth}px`,
height: `${previewWidth / (aspectRatio || 1)}px`,
marginTop: '0px'
}"
></div>
<div
v-if="aspectRatio === 1"
class="guns-cropper-preview guns-cropper-preview-circle"
:style="{
width: `${previewWidth}px`,
height: `${previewWidth / aspectRatio}px`
}"
></div>
<template v-else-if="aspectRatio">
<div
class="guns-cropper-preview"
:style="{
width: `${previewWidth}px`,
height: `${((previewWidth / 3) * 2 - 10) / aspectRatio}px`
}"
></div>
<div
class="guns-cropper-preview"
:style="{
width: `${previewWidth}px`,
height: `${previewWidth / 3 / aspectRatio}px`,
marginLeft: '10px'
}"
></div>
</template>
</div>
</template>
<script setup name="CropperPreview">
import { ref } from 'vue';
const props = defineProps({
//
previewWidth: {
type: Number,
required: true
},
//
aspectRatio: {
type: Number,
required: true
}
});
const rootRef = ref(null);
const getPreviews = () => {
return rootRef.value?.querySelectorAll('.guns-cropper-preview');
};
defineExpose({
getPreviews
});
</script>

View File

@ -0,0 +1,261 @@
<template>
<div class="guns-cropper-tool">
<a-button-group v-for="(buttons, i) in groups" :key="i + buttons.join(',')" class="guns-cropper-tool-item">
<template v-for="(name, j) in buttons">
<a-button
v-if="name === 'zoomIn'"
:key="i + '-' + j + 'zoomIn'"
type="primary"
class="guns-cropper-tool-btn"
title="放大"
@click="zoomIn"
>
<template #icon>
<ZoomInOutlined />
</template>
</a-button>
<a-button
v-else-if="name === 'zoomOut'"
:key="i + '-' + j + 'zoomOut'"
type="primary"
class="guns-cropper-tool-btn"
title="缩小"
@click="zoomOut"
>
<template #icon>
<ZoomOutOutlined />
</template>
</a-button>
<a-button
v-else-if="name === 'rotateL'"
:key="i + '-' + j + 'rotateL'"
type="primary"
class="guns-cropper-tool-btn"
title="向左旋转"
@click="rotateL"
>
<template #icon>
<RotateLeftOutlined />
</template>
</a-button>
<a-button
v-else-if="name === 'rotateR'"
:key="i + '-' + j + 'rotateR'"
type="primary"
class="guns-cropper-tool-btn"
title="向右旋转"
@click="rotateR"
>
<template #icon>
<RotateRightOutlined />
</template>
</a-button>
<a-button
v-else-if="name === 'moveL'"
:key="i + '-' + j + 'moveL'"
type="primary"
class="guns-cropper-tool-btn"
title="左移"
@click="moveL"
>
<template #icon>
<ArrowLeftOutlined />
</template>
</a-button>
<a-button
v-else-if="name === 'moveR'"
:key="i + '-' + j + 'moveR'"
type="primary"
class="guns-cropper-tool-btn"
title="右移"
@click="moveR"
>
<template #icon>
<ArrowRightOutlined />
</template>
</a-button>
<a-button
v-else-if="name === 'moveT'"
:key="i + '-' + j + 'moveT'"
type="primary"
class="guns-cropper-tool-btn"
title="上移"
@click="moveT"
>
<template #icon>
<ArrowUpOutlined />
</template>
</a-button>
<a-button
v-else-if="name === 'moveB'"
:key="i + '-' + j + 'moveB'"
type="primary"
class="guns-cropper-tool-btn"
title="下移"
@click="moveB"
>
<template #icon>
<ArrowDownOutlined />
</template>
</a-button>
<a-button
v-else-if="name === 'scaleX'"
:key="i + '-' + j + 'scaleX'"
type="primary"
class="guns-cropper-tool-btn"
title="左右翻转"
@click="scaleX"
>
<template #icon>
<SwapOutlined />
</template>
</a-button>
<a-button
v-else-if="name === 'scaleY'"
:key="i + '-' + j + 'scaleY'"
type="primary"
class="guns-cropper-tool-btn"
title="上下翻转"
@click="scaleY"
>
<template #icon>
<SwapOutlined style="transform: rotate(90deg)" />
</template>
</a-button>
<a-button
v-else-if="name === 'reset'"
:key="i + '-' + j + 'reset'"
type="primary"
class="guns-cropper-tool-btn"
title="重新开始"
@click="reset"
>
<template #icon>
<SyncOutlined />
</template>
</a-button>
<a-upload
v-else-if="name === 'upload'"
:key="i + '-' + j + 'upload'"
:accept="accept"
:custom-request="onUpload"
:show-upload-list="false"
>
<a-button
type="primary"
class="guns-cropper-tool-btn"
title="选择图片"
style="border-top-right-radius: 2px; border-bottom-right-radius: 2px"
>
<template #icon>
<UploadOutlined />
</template>
</a-button>
</a-upload>
<a-button v-else-if="name === 'crop'" :key="'crop' + j" type="primary" class="guns-cropper-tool-btn-ok" @click="crop">
<template #icon>
<CheckOutlined />
</template>
<span>{{ props.okText || '完成' }}</span>
</a-button>
</template>
</a-button-group>
</div>
</template>
<script setup name="CropperTools">
import { computed } from 'vue';
const props = defineProps({
//
tools: String,
//
accept: String,
//
okText: String
});
const emits = defineEmits([
'crop',
'move-b',
'move-l',
'move-r',
'move-t',
'reset',
'rotate-l',
'rotate-r',
'scale-x',
'scale-y',
'replace',
'zoom-in',
'zoom-out'
]);
//
const groups = computed(() => {
if (!props.tools) {
return [];
}
return props.tools.split('|').map(g => {
return g.split(',').map(t => t.trim());
});
});
const zoomIn = () => {
emits('zoom-in');
};
const zoomOut = () => {
emits('zoom-out');
};
const rotateL = () => {
emits('rotate-l');
};
const rotateR = () => {
emits('rotate-r');
};
const moveL = () => {
emits('move-l');
};
const moveR = () => {
emits('move-r');
};
const moveT = () => {
emits('move-t');
};
const moveB = () => {
emits('move-b');
};
const scaleX = () => {
emits('scale-x');
};
const scaleY = () => {
emits('scale-y');
};
const reset = () => {
emits('reset');
};
const crop = () => {
emits('crop');
};
/* 图片上传处理 */
const onUpload = ({ file }) => {
const reader = new FileReader();
reader.onload = e => {
emits('replace', {
data: e.target?.result,
type: file.type
});
};
reader.readAsDataURL(file);
return false;
};
</script>

View File

@ -0,0 +1,405 @@
<template>
<div :class="['guns-cropper', { 'guns-cropper-responsive': styleResponsive }]">
<div class="guns-cropper-group">
<!-- 裁剪区域 -->
<div class="guns-cropper-img-group">
<img :src="src" alt="cropper" ref="imageRef" :style="{ maxWidth: '100%', display: src ? 'block' : 'none' }" />
</div>
<!-- 预览区域 -->
<CropperPreview ref="previewRef" v-if="props.showPreview" :aspect-ratio="props.aspectRatio" :preview-width="props.previewWidth" />
</div>
<!-- 操作按钮 -->
<CropperTools
:tools="tools"
:ok-text="props.okText"
@crop="crop"
@move-b="moveB"
@move-l="moveL"
@move-r="moveR"
@move-t="moveT"
@reset="reset"
@rotate-l="rotateL"
@rotate-r="rotateR"
@scale-x="scaleX"
@scale-y="scaleY"
@replace="replace"
@zoom-in="zoomIn"
@zoom-out="zoomOut"
/>
</div>
</template>
<script setup name="GunsCropper">
import Cropper from 'cropperjs';
import 'cropperjs/dist/cropper.css';
import { inject, onMounted, ref, unref, watch, computed, nextTick, onBeforeUnmount } from 'vue';
import CropperPreview from './cropper-preview.vue';
import CropperTools from './cropper-tools.vue';
const props = defineProps({
//
src: String,
// , : 'image/jpeg'
imageType: {
type: String,
default: 'image/png'
},
//
accept: {
type: String,
default: 'image/*'
},
//
tools: {
type: String
},
//
showPreview: {
type: Boolean,
default: true
},
//
previewWidth: {
type: Number,
default: 120
},
//
okText: String,
// blob
toBlob: Boolean,
// cropperjs
options: Object,
// cropperjs
croppedOptions: Object,
//------------------------
//
aspectRatio: {
type: Number,
default: 1
},
//
viewMode: {
type: Number,
default: 0
},
//
dragMode: {
type: String,
default: 'crop'
},
//
initialAspectRatio: Number,
//
minContainerWidth: {
type: Number,
default: 200
},
//
minContainerHeight: {
type: Number,
default: 100
},
//
minCanvasWidth: {
type: Number,
default: 0
},
//
minCanvasHeight: {
type: Number,
default: 0
},
//
minCropBoxWidth: {
type: Number,
default: 0
},
//
minCropBoxHeight: {
type: Number,
default: 0
},
//
croppedWidth: Number,
//
croppedHeight: Number,
//
croppedMinWidth: {
type: Number,
default: 0
},
//
croppedMinHeight: {
type: Number,
default: 0
},
//
croppedMaxWidth: Number,
//
croppedMaxHeight: Number,
//
croppedFillColor: {
type: String,
default: 'transparent'
},
//
imageSmoothingEnabled: Boolean,
//
imageSmoothingQuality: String
});
const emits = defineEmits(['done']);
//
const layoutProvide = inject('GunsLayoutState');
// ref
const imageRef = ref(null);
// ref
const previewRef = ref(null);
//
const imageType = ref(props.imageType);
// cropper
let instance = null;
//
let scaleXValue = -1;
//
let scaleYValue = -1;
//
const styleResponsive = computed(() => {
return unref(layoutProvide)?.styleResponsive ?? true;
});
/* 渲染 */
const render = () => {
nextTick(() => {
destroy();
const options = {
aspectRatio: props.aspectRatio,
viewMode: props.viewMode,
dragMode: props.dragMode,
initialAspectRatio: props.initialAspectRatio,
minContainerWidth: props.minContainerWidth,
minContainerHeight: props.minContainerHeight,
minCanvasWidth: props.minCanvasWidth,
minCanvasHeight: props.minCanvasHeight,
minCropBoxWidth: props.minCropBoxWidth,
minCropBoxHeight: props.minCropBoxHeight,
...props.options
};
if (props.showPreview) {
options.preview = unref(previewRef.value)?.getPreviews();
}
const imageEl = unref(imageRef.value);
if (imageEl) {
instance = new Cropper(imageEl, options);
}
});
};
/* 放大 */
const zoomIn = () => {
instance && instance.zoom(0.1);
};
/* 缩小 */
const zoomOut = () => {
instance && instance.zoom(-0.1);
};
/* 左移 */
const moveL = () => {
instance && instance.move(-10, 0);
};
/* 右移 */
const moveR = () => {
instance && instance.move(10, 0);
};
/* 上移 */
const moveT = () => {
instance && instance.move(0, -10);
};
/* 下移 */
const moveB = () => {
instance && instance.move(0, 10);
};
/* 左旋 */
const rotateL = () => {
instance && instance.rotate(-45);
};
/* 右旋 */
const rotateR = () => {
instance && instance.rotate(45);
};
/* 左右镜像 */
const scaleX = () => {
instance && instance.scaleX(scaleXValue);
scaleXValue = -scaleXValue;
};
/* 上下镜像 */
const scaleY = () => {
instance && instance.scaleY(scaleYValue);
scaleYValue = -scaleYValue;
};
/* 重置 */
const reset = () => {
instance && instance.reset();
};
/* 裁剪 */
const crop = () => {
const result = instance?.getCroppedCanvas({
width: props.croppedWidth,
height: props.croppedHeight,
minWidth: props.croppedMinWidth,
minHeight: props.croppedMinHeight,
maxWidth: props.croppedMaxWidth,
maxHeight: props.croppedMaxHeight,
fillColor: props.croppedFillColor,
imageSmoothingEnabled: props.imageSmoothingEnabled,
imageSmoothingQuality: props.imageSmoothingQuality,
...props.croppedOptions
});
if (result) {
if (props.toBlob) {
result.toBlob(blob => {
emits('done', blob);
}, imageType.value);
} else {
emits('done', result.toDataURL(imageType.value));
}
} else {
emits('done');
}
};
/* 替换图片 */
const replace = ({ data, type }) => {
imageType.value = type;
if (instance) {
instance.replace(data);
} else {
const elem = unref(imageRef.value);
if (elem) {
elem.src = data;
elem.style.display = 'block';
}
render();
}
};
/* 销毁 */
const destroy = () => {
instance && instance.destroy();
instance = null;
};
watch(
() => props.src,
value => {
if (value) {
if (instance) {
instance.replace(value);
} else {
nextTick(() => {
render();
});
}
} else {
destroy();
}
}
);
watch(
() => props.imageType,
value => {
if (value) {
imageType.value = value;
}
}
);
onMounted(() => {
props.src && render();
});
onBeforeUnmount(() => {
destroy();
});
</script>
<style lang="less">
.guns-cropper {
.guns-cropper-group {
display: flex;
}
.guns-cropper-img-group {
flex: 1;
}
.guns-cropper-preview-group {
font-size: 0;
text-align: right;
}
.guns-cropper-preview {
margin-top: 16px;
display: inline-block;
border: 1px solid hsla(0, 0%, 80%, 0.6);
vertical-align: top;
overflow: hidden;
}
.guns-cropper-preview-circle {
margin-top: 16px;
border-radius: 50%;
}
}
@media screen and (max-width: 768px) {
.guns-cropper-responsive.guns-cropper .guns-cropper-preview-group {
display: none;
}
}
/* cropper tools */
.guns-cropper-tool {
margin-top: 6px;
}
.guns-cropper-tool-item {
margin: 10px 14px 0 0;
vertical-align: top;
&:last-child {
margin-right: 0 !important;
}
& > .ant-btn + span {
vertical-align: -1px;
}
}
.guns-cropper-tool-btn {
width: auto;
padding: 0 10px !important;
}
.guns-cropper-tool-btn-ok {
padding-left: 12px;
padding-right: 12px;
}
@media screen and (max-width: 768px) {
.guns-cropper-responsive .guns-cropper-tool .guns-cropper-tool-item {
margin-right: 6px;
}
}
</style>

View File

@ -0,0 +1,174 @@
<template>
<!-- 新增编辑 -->
<a-modal
:width="props.width"
:maskClosable="false"
:visible="props.visible"
:confirm-loading="loading"
:forceRender="true"
:title="props.title"
:body-style="{ padding: '16px 18px 18px 18px' }"
@update:visible="updateVisible"
footer=""
@close="updateVisible(false)"
>
<!-- 裁剪 -->
<guns-cropper v-bind="props" @done="done" :ok-text="props.okText" v-if="props.visible"/>
</a-modal>
</template>
<script setup name="CropperModal">
import { ref } from 'vue';
import GunsCropper from './components/cropper.vue';
const props = defineProps({
visible: Boolean,
//
title: {
type: String,
default: '裁剪图片'
},
//
width: {
type: String,
default: '660px'
},
//
src: String,
// , : 'image/jpeg'
imageType: {
type: String,
default: 'image/png'
},
//
accept: {
type: String,
default: 'image/*'
},
//
tools: {
type: String,
default: ['zoomIn,zoomOut', 'moveL,moveR,moveT,moveB', 'rotateL,rotateR', 'scaleX,scaleY', 'reset,upload', 'crop'].join(' | ')
},
//
showPreview: {
type: Boolean,
default: true
},
//
previewWidth: {
type: Number,
default: 120
},
//
okText: {
type: String,
defalut: '完成'
},
// blob
toBlob: {
type: Boolean,
defalut: false
},
// cropperjs
options: {
type: Object,
defalut: {}
},
// cropperjs
croppedOptions: {
type: Object,
defalut: {}
},
//------------------------
//
aspectRatio: {
type: Number,
default: 1
},
//
viewMode: {
type: Number,
default: 0
},
//
dragMode: {
type: String,
default: 'crop'
},
//
initialAspectRatio: Number,
//
minContainerWidth: {
type: Number,
default: 200
},
//
minContainerHeight: {
type: Number,
default: 100
},
//
minCanvasWidth: {
type: Number,
default: 0
},
//
minCanvasHeight: {
type: Number,
default: 0
},
//
minCropBoxWidth: {
type: Number,
default: 0
},
//
minCropBoxHeight: {
type: Number,
default: 0
},
//
croppedWidth: Number,
//
croppedHeight: Number,
//
croppedMinWidth: {
type: Number,
default: 0
},
//
croppedMinHeight: {
type: Number,
default: 0
},
//
croppedMaxWidth: Number,
//
croppedMaxHeight: Number,
//
croppedFillColor: {
type: String,
default: 'transparent'
},
//
imageSmoothingEnabled: Boolean,
//
imageSmoothingQuality: String
});
const emits = defineEmits(['update:visible', 'done']);
//
const loading = ref(false);
//
const updateVisible = value => {
emits('update:visible', value);
};
/* 裁剪完成 */
const done = result => {
emits('done', result);
};
</script>
<style></style>

View File

@ -0,0 +1,112 @@
<!--字典选择组件-->
<template>
<a-checkbox-group :disabled="disabled" v-model:value="modelValue" @change="changeOption">
<a-checkbox
v-for="dict in dictList"
:key="valueType === 'dictId' ? dict.dictId : dict.dictCode"
:value="valueType === 'dictId' ? dict.dictId : dict.dictCode"
>
{{ dict.dictName }}
</a-checkbox>
</a-checkbox-group>
</template>
<script>
import { onMounted, reactive, toRefs, watch } from 'vue';
import { SysDictTypeApi } from './api/SysDictTypeApi';
export default {
name: 'DictCheckbox',
emits: ['update:value', 'change'],
props: {
//
dictTypeCode: {
type: String,
required: false
},
// idid
dictTypeId: {
type: String,
required: false
},
//
value: {
required: true,
default: []
},
// id
valueType: {
type: String,
required: true,
default: 'dictCode'
},
disabled: {
type: Boolean,
required: false,
default: false
}
},
setup(props, context) {
const data = reactive({
dictList: null,
modelValue: []
});
onMounted(async () => {
if (props.value) {
data.modelValue = props.value;
} else {
data.modelValue = [];
}
//
if (props.dictTypeCode) {
data.dictList = await SysDictTypeApi.getDictListByParams({ dictTypeCode: props.dictTypeCode });
}
// idid
if (props.dictTypeId) {
data.dictList = await SysDictTypeApi.getDictListByParams({ dictTypeId: props.dictTypeId });
}
});
const changeOption = value => {
context.emit('update:value', value);
context.emit('change', value);
};
watch(
() => props.value,
val => {
data.modelValue = val;
},
{ deep: true }
);
watch(
() => props.dictTypeCode,
async () => {
//
if (props.dictTypeCode) {
data.dictList = await SysDictTypeApi.getDictListByParams({ dictTypeCode: props.dictTypeCode });
}
},
{ deep: true }
);
watch(
() => props.dictTypeId,
async () => {
// idid
if (props.dictTypeId) {
data.dictList = await SysDictTypeApi.getDictListByParams({ dictTypeId: props.dictTypeId });
}
},
{ deep: true }
);
return {
...toRefs(data),
changeOption
};
}
};
</script>

View File

@ -0,0 +1,105 @@
<!--字典选择组件-->
<template>
<a-radio-group :disabled="disabled" v-model:value="modelValue" @change="selectOption">
<a-radio
v-for="dict in dictList"
:key="valueType === 'dictId' ? dict.dictId : dict.dictCode"
:value="valueType === 'dictId' ? dict.dictId : dict.dictCode"
>
{{ dict.dictName }}
</a-radio>
</a-radio-group>
</template>
<script>
import { onMounted, reactive, toRefs, watch } from 'vue';
import { SysDictTypeApi } from './api/SysDictTypeApi';
export default {
name: 'DictRadio',
emits: ['update:value', 'change'],
props: {
//
dictTypeCode: {
type: String,
required: false
},
// idid
dictTypeId: {
type: String,
required: false
},
//
value: {
required: true
},
// id
valueType: {
type: String,
required: true,
default: 'dictCode'
},
disabled: {
type: Boolean,
required: false,
default: false
}
},
setup(props, context) {
const data = reactive({
dictList: null,
modelValue: null
});
onMounted(async () => {
data.modelValue = props.value;
//
if (props.dictTypeCode) {
data.dictList = await SysDictTypeApi.getDictListByParams({ dictTypeCode: props.dictTypeCode });
}
// idid
if (props.dictTypeId) {
data.dictList = await SysDictTypeApi.getDictListByParams({ dictTypeId: props.dictTypeId });
}
});
const selectOption = value => {
context.emit('update:value', value.target.value);
context.emit('change', value.target.value);
};
watch(
() => props.value,
val => {
data.modelValue = val;
},
{ deep: true }
);
watch(
() => props.dictTypeCode,
async () => {
//
if (props.dictTypeCode) {
data.dictList = await SysDictTypeApi.getDictListByParams({ dictTypeCode: props.dictTypeCode });
}
},{ deep: true }
);
watch(
() => props.dictTypeId,
async () => {
// idid
if (props.dictTypeId) {
data.dictList = await SysDictTypeApi.getDictListByParams({ dictTypeId: props.dictTypeId });
}
},{ deep: true }
);
return {
...toRefs(data),
selectOption
};
}
};
</script>

View File

@ -0,0 +1,142 @@
<!--字典选择组件-->
<template>
<!--带多选-->
<a-select
:disabled="disabled"
v-model:value="modelValue"
@change="changeOption"
:placeholder="placeholder"
mode="multiple"
v-if="multiple"
>
<a-select-option
v-for="dict in dictList"
:key="valueType === 'dictId' ? dict.dictId : dict.dictCode"
:value="valueType === 'dictId' ? dict.dictId : dict.dictCode"
>
{{ dict.dictName }}
</a-select-option>
</a-select>
<!--不带多选-->
<a-select :disabled="disabled" v-model:value="modelValue" @select="selectOption" :placeholder="placeholder" v-else>
<a-select-option
v-for="dict in dictList"
:key="valueType === 'dictId' ? dict.dictId : dict.dictCode"
:value="valueType === 'dictId' ? dict.dictId : dict.dictCode"
>
{{ dict.dictName }}
</a-select-option>
</a-select>
</template>
<script>
import { reactive, toRefs, onMounted, watch } from 'vue';
import { SysDictTypeApi } from './api/SysDictTypeApi';
export default {
name: 'DictSelect',
emits: ['update:value', 'change'],
props: {
//
dictTypeCode: {
type: String,
required: false
},
// idid
dictTypeId: {
type: String,
required: false
},
//
value: {
required: true
},
// id
valueType: {
type: String,
required: true,
default: 'dictCode'
},
//
multiple: {
type: Boolean,
required: false,
default: false
},
disabled: {
type: Boolean,
required: false,
default: false
},
placeholder: {
type: String,
required: true,
default: '请选择'
}
},
setup(props, context) {
const data = reactive({
dictList: null,
modelValue: null
});
onMounted(async () => {
data.modelValue = props.value;
//
if (props.dictTypeCode) {
data.dictList = await SysDictTypeApi.getDictListByParams({ dictTypeCode: props.dictTypeCode });
}
// idid
if (props.dictTypeId) {
data.dictList = await SysDictTypeApi.getDictListByParams({ dictTypeId: props.dictTypeId });
}
});
const selectOption = value => {
context.emit('update:value', value);
context.emit('change', value);
};
const changeOption = value => {
context.emit('update:value', value);
context.emit('change', value);
};
watch(
() => props.value,
val => {
data.modelValue = val;
},
{ deep: true }
);
watch(
() => props.dictTypeCode,
async () => {
//
if (props.dictTypeCode) {
data.dictList = await SysDictTypeApi.getDictListByParams({ dictTypeCode: props.dictTypeCode });
}
},
{ deep: true }
);
watch(
() => props.dictTypeId,
async () => {
// idid
if (props.dictTypeId) {
data.dictList = await SysDictTypeApi.getDictListByParams({ dictTypeId: props.dictTypeId });
}
},
{ deep: true }
);
return {
...toRefs(data),
selectOption,
changeOption
};
}
};
</script>

View File

@ -0,0 +1,52 @@
<!--字典类型选择组件-->
<template>
<a-select v-model:value="value" @select="selectOption">
<template v-if="valueType === 'dictTypeId'">
<a-select-option v-for="dictType in dictTypeList" :key="dictType.dictTypeId" :value="dictType.dictTypeId">
{{ dictType.dictTypeName }}
</a-select-option>
</template>
<template v-if="valueType === 'dictTypeCode'">
<a-select-option v-for="dictType in dictTypeList" :key="dictType.dictTypeId" :value="dictType.dictTypeCode">
{{ dictType.dictTypeName }}
</a-select-option>
</template>
</a-select>
</template>
<script>
import { reactive, toRefs, onMounted } from 'vue';
import { SysDictTypeApi } from './api/SysDictTypeApi';
export default {
name: 'DictTypeSelect',
props: {
value: {
type: String,
required: false
},
valueType: {
type: String,
required: true
}
},
setup(props, context) {
const data = reactive({
dictTypeList: null
});
onMounted(async () => {
data.dictTypeList = await SysDictTypeApi.getDictTypeList();
});
const selectOption = value => {
context.emit('update:value', value);
};
return {
...toRefs(data),
selectOption
};
}
};
</script>

View File

@ -0,0 +1,143 @@
import Request from '@/utils/request/request-util';
/**
* api
*
* @author fengshuonan
* @date 2021/4/9 11:56
*/
export class SysConfigApi {
/**
*
*
* @author fengshuonan
* @date 2021/4/1 16:07
*/
static findConfigGroupPage(params) {
return Request.getAndLoadData('/dict/getConfigGroupPage', params);
}
/**
*
*
* @author fengshuonan
* @date 2021/4/1 16:07
*/
static findConfigPage(params) {
return Request.getAndLoadData('/sysConfig/page', params);
}
/**
*
*
* @author fengshuonan
* @date 2021/4/9 12:05
*/
static getConfigDictTypeDetail(params) {
return Request.getAndLoadData('/dictType/getConfigDictTypeDetail', params);
}
/**
* ,
*
* @param {string} params.dictCode
* @param {string} params.dictName
* @param {string} params.dictShortCode
* @param {string} params.dictShortName
* @param {number} params.dictSort
* @param {string} params.dictTypeCode
* @param {string} params.dictTypeName
* @param {string} params.dictTypeId id
* @author fengshuonan
* @date 2021/4/9 12:05
*/
static addConfigType(params) {
return Request.post('/dict/add', params);
}
/**
*
*
* @param {String} params.dictId idid
* @author fengshuonan
* @date 2021/4/9 12:05
*/
static deleteConfigType(params) {
return Request.post('/dict/delete', params);
}
/**
*
*
* @param {string} params.configCode
* @param {string} params.configName
* @param {string} params.configValue
* @param {string} params.groupCode
* @param {string} params.remark
* @param {string} params.sysFlag
* @author fengshuonan
* @date 2021/4/9 13:24
*/
static addSysConfig(params) {
return Request.post('/sysConfig/add', params);
}
/**
*
*
* @param {string} params.configCode
* @param {string} params.configId id
* @param {string} params.configName
* @param {string} params.configValue
* @param {string} params.groupCode
* @param {string} params.remark
* @param {string} params.sysFlag
* @author fengshuonan
* @date 2021/4/9 13:24
*/
static editSysConfig(params) {
return Request.post('/sysConfig/edit', params);
}
/**
*
*
* @param {string} params.configId id
* @author fengshuonan
* @date 2021/4/9 13:24
*/
static deleteSysConfig(params) {
return Request.post('/sysConfig/delete', params);
}
/**
*
*
* @return {boolean} true-false-
* @author fengshuonan
* @date 2021/4/9 13:24
*/
static async getInitConfigFlag() {
return await Request.getAndLoadData('/sysConfig/getInitConfigFlag');
}
/**
*
*
* @author fengshuonan
* @date 2021/4/9 13:24
*/
static async getInitConfigList() {
return await Request.getAndLoadData('/sysConfig/getInitConfigList');
}
/**
*
*
* @author fengshuonan
* @date 2021/7/9 11:04
*/
static async initConfig(params) {
return await Request.post('/sysConfig/initConfig', params);
}
}

View File

@ -0,0 +1,59 @@
import Request from '@/utils/request/request-util';
/**
* api
*
* @author chenjinlong
* @date 2021/4/13 09:52
*/
export class SysDictDataApi {
/**
*
*
* @author fengshuonan
* @date 2021/4/1 16:07
*/
static findDictPage(params) {
return Request.getAndLoadData('/dict/page', params);
}
/**
*
*
* @author chenjinlong
* @date 2021/4/1 16:07
*/
static add(params) {
return Request.post('/dict/add', params);
}
/**
*
*
* @author chenjinlong
* @date 2021/4/1 16:07
*/
static del(params) {
return Request.post('/dict/delete', params);
}
/**
*
*
* @author chenjinlong
* @date 2021/4/1 16:07
*/
static batchDel(params) {
return Request.post('/dict/batchDelete', params);
}
/**
*
*
* @author chenjinlong
* @date 2021/4/1 16:07
*/
static edit(params) {
return Request.post('/dict/edit', params);
}
}

View File

@ -0,0 +1,79 @@
import Request from '@/utils/request/request-util';
/**
* api
*
* @author chenjinlong
* @date 2021/4/13 09:52
*/
export class SysDictTypeApi {
/**
*
*
* @author fengshuonan
* @date 2021/4/1 16:07
*/
static findDictTypePage(params) {
return Request.getAndLoadData('/dictType/page', params);
}
/**
*
*
* @author chenjinlong
* @date 2021/4/1 16:07
*/
static add(params) {
return Request.post('/dictType/add', params);
}
/**
*
*
* @author chenjinlong
* @date 2021/4/1 16:07
*/
static del(params) {
return Request.post('/dictType/delete', params);
}
/**
*
*
* @author chenjinlong
* @date 2021/4/1 16:07
*/
static batchDel(params) {
return Request.post('/dictType/batchDelete', params);
}
/**
*
*
* @author chenjinlong
* @date 2021/4/1 16:07
*/
static edit(params) {
return Request.post('/dictType/edit', params);
}
/**
*
*
* @author fengshuonan
* @date 2021/4/19 22:42
*/
static getDictListByParams(params) {
return Request.getAndLoadData('/dict/list', params);
}
/**
*
*
* @author fengshuonan
* @date 2021/4/20 10:41
*/
static getDictTypeList(params) {
return Request.getAndLoadData('/dictType/list', params);
}
}

View File

@ -0,0 +1,17 @@
<template>
<div style="padding-top: 80px">
<a-result status="403" title="403" sub-title=", 访.">
<template #extra>
<router-link to="/">
<a-button type="primary">返回首页</a-button>
</router-link>
</template>
</a-result>
</div>
</template>
<script>
export default {
name: 'Exception403'
};
</script>

View File

@ -0,0 +1,17 @@
<template>
<div style="padding-top: 80px">
<a-result status="404" title="404" sub-title=", 访.">
<template #extra>
<router-link to="/">
<a-button type="primary">返回首页</a-button>
</router-link>
</template>
</a-result>
</div>
</template>
<script>
export default {
name: 'Exception404'
};
</script>

View File

@ -0,0 +1,17 @@
<template>
<div style="padding-top: 80px">
<a-result status="500" title="500" sub-title=", .">
<template #extra>
<router-link to="/">
<a-button type="primary">返回首页</a-button>
</router-link>
</template>
</a-result>
</div>
</template>
<script>
export default {
name: 'Exception500'
};
</script>

View File

@ -0,0 +1,315 @@
<template>
<a-dropdown v-model:visible="visible" :placement="placement" :trigger="trigger" :disabled="props.disabled">
<div :class="['guns-icon-picker', { disabled: props.disabled }]">
<a-form-item-rest>
<a-input :value="props.value" :placeholder="placeholder" :disabled="disabled" :size="size" readonly>
<template #prefix>
<svg class="icon" aria-hidden="true"><use :xlink:href="'#' + props.value" v-if="props.value"></use></svg>
</template>
<template #suffix>
<div class="guns-text-placeholder guns-icon-picker-arrow">
<close-circle-filled v-if="props.allowClear && props.value && !props.disabled" @click.stop="onClear" />
<down-outlined />
</div>
</template>
</a-input>
</a-form-item-rest>
</div>
<template #overlay>
<div class="ant-dropdown-menu guns-icon-picker-popper">
<div @click.stop="">
<a-tabs v-model:active-key="activeKey">
<a-tab-pane v-for="(d, i) in result" :key="i" :tab="d.title" />
<template #rightExtra>
<div v-if="allowSearch" class="guns-icon-picker-search">
<a-input-search v-model:value="keywords" :placeholder="searchPlaceholder" @search="onSearch" />
</div>
</template>
</a-tabs>
<div class="guns-icon-picker-pane">
<div class="guns-icon-picker-list">
<div class="guns-icon-picker-item" v-for="(d, i) in currentList" :key="i">
<a-card hoverable>
<div class="guns-icon-picker-item-icon" :title="d" @click="onChoose(d)">
<svg class="icon" aria-hidden="true"><use :xlink:href="'#' + d"></use></svg>
</div>
</a-card>
</div>
</div>
</div>
</div>
</div>
</template>
</a-dropdown>
</template>
<script setup name="IconSelect">
import { computed, onMounted, ref } from 'vue';
import iconfontData from '@/assets/iconfont/iconfont.json';
const iconData = computed(() => {
let arr = [{ title: '默认风格', children: [iconfontData] }];
arr[0].children.forEach(item => {
item.title = '基础图标';
const glyphs = item.glyphs.filter(item => item.font_class.substr(item.font_class.length - 2).indexOf('-p') == '-1');
item.icons = glyphs.map(gItem => item.css_prefix_text + gItem.font_class);
});
return arr;
});
const props = defineProps({
// dropdown
trigger: {
type: Array,
default() {
return ['click'];
}
},
placement: {
type: String,
default: 'bottomLeft'
},
//
value: String,
//
placeholder: String,
//
size: String,
//
disabled: Boolean,
//
allowClear: {
type: Boolean,
default: true
},
//
allowSearch: {
type: Boolean,
default: true
},
//
searchPlaceholder: {
type: String,
default: '搜索..'
}
});
const emits = defineEmits(['update:value']);
// popper
const visible = ref(false);
// tab
const activeKey = ref(0);
// menu
const selectedKeys = ref([0]);
//
const keywords = ref('');
//
const result = ref(null);
onMounted(() => {
result.value = iconData.value;
});
/* 当前tab数据 */
const activeList = computed(() => {
if (!result.value.length) {
return [];
}
const temp = result.value[activeKey.value];
return temp ? temp.children : [];
});
/* 当前显示图标数据 */
const currentList = computed(() => {
if (!activeList.value.length) {
return [];
}
if (!selectedKeys.value.length) {
return [];
}
const temp = activeList.value[selectedKeys.value[0]];
return temp ? temp.icons : [];
});
/* 选择图标 */
const onChoose = value => {
visible.value = false;
emits('update:value', value);
};
/* 清除 */
const onClear = () => {
emits('update:value', '');
};
/* 搜索 */
const onSearch = () => {
if (!keywords.value) {
result.value = iconData.value;
return;
}
let results = [],
firstIndex = -1,
activeHave = true;
iconData.value.forEach((item, index) => {
let children = [],
haveIcon = false;
item.children.forEach(child => {
let icons = child.icons.filter(d => d.toLowerCase().indexOf(keywords.value.toLowerCase()) !== -1);
if (icons.length) {
haveIcon = true;
} else if (index === activeKey.value) {
activeHave = false;
}
children.push({ title: child.title, icons: icons });
});
if (firstIndex === -1 && haveIcon) {
firstIndex = index;
}
results.push({ title: item.title, children: children });
});
result.value = results;
if (!activeHave && firstIndex !== -1) {
activeKey.value = firstIndex;
}
};
</script>
<style lang="less">
/* iconfonts的图标css */
.icon {
width: 1em;
height: 1em;
vertical-align: -0.15em;
fill: currentColor;
overflow: hidden;
}
/* 图标选择器popper */
.guns-icon-picker-popper {
width: 520px;
max-width: 90vw;
padding: 0;
}
/* tab */
.guns-icon-picker-popper .ant-tabs-bar {
margin: 0;
}
.guns-icon-picker-popper .ant-tabs-tab {
padding: 10px 0 !important;
margin: 0 12px !important;
}
.guns-icon-picker-popper .ant-tabs-extra-content {
line-height: 41px;
}
/* 搜索框 */
.guns-icon-picker-popper .guns-icon-picker-search {
padding-top: 10px;
width: 200px;
display: flex;
align-items: center;
margin-right: 14px;
}
.ant-input-search-button {
height: 32px !important;
}
/* pane */
.guns-icon-picker-popper .guns-icon-picker-pane {
display: flex;
height: 360px;
}
.guns-icon-picker-popper .guns-icon-picker-pane > .ant-menu {
width: 120px;
height: 100%;
flex-shrink: 0;
overflow-x: hidden;
}
.guns-icon-picker-popper .guns-icon-picker-pane > .ant-menu .ant-menu-item {
padding: 0 12px !important;
margin: 12px 0 0 0 !important;
}
.guns-icon-picker-popper .guns-icon-picker-pane > .ant-menu .ant-menu-item-selected:after {
right: 1px;
}
.guns-icon-picker-popper .guns-icon-picker-list {
flex: 1;
height: 100%;
border-top: 6px solid transparent;
border-bottom: 6px solid transparent;
border-left: 2px solid transparent;
overflow-x: hidden;
overflow-y: scroll;
font-size: 0;
}
/* item */
.guns-icon-picker-popper .guns-icon-picker-item {
width: 25%;
display: inline-block;
padding: 6px 2px 6px 10px;
}
.guns-icon-picker-popper .ant-card-body {
padding: 0;
}
.guns-icon-picker-popper .guns-icon-picker-item-icon {
padding: 8px 0;
font-size: 40px;
height: 100%;
text-align: center;
transition: transform 0.1s;
}
.guns-icon-picker-popper .guns-icon-picker-item-icon:hover {
transform: scale(1.6);
}
/* 默认风格 */
.guns-icon-picker {
cursor: pointer;
}
.guns-icon-picker.disabled {
cursor: not-allowed;
}
.guns-icon-picker:not(.disabled) .ant-input {
cursor: pointer;
}
.guns-icon-picker.disabled .ant-input-prefix {
opacity: 0.6;
}
.guns-icon-picker .guns-icon-picker-arrow {
font-size: 12px;
}
.guns-icon-picker:not(:hover) .guns-icon-picker-arrow .anticon-close-circle {
display: none;
}
.guns-icon-picker:hover .guns-icon-picker-arrow .anticon-close-circle + .anticon-down {
display: none;
}
.ant-input-search > .ant-input-group > .ant-input-group-addon:last-child {
top: -1px;
}
/* 自适应 */
@media screen and (max-width: 520px) {
.guns-icon-picker-popper .guns-icon-picker-item {
width: 33.3%;
}
}
</style>

View File

@ -0,0 +1,21 @@
/** 用于刷新的路由组件 */
import { unref, h } from 'vue';
import { useRouter } from 'vue-router';
import { setRouteReload } from '@/utils/page-tab-util';
export default {
name: 'RedirectLayout',
setup() {
const { currentRoute, replace } = useRouter();
const { params, query } = unref(currentRoute);
const from = Array.isArray(params.path)
? params.path.join('/')
: params.path;
const path = '/' + from;
setTimeout(() => {
setRouteReload(null);
replace({ path, query });
}, 100);
return () => h('div');
}
};

View File

@ -0,0 +1,25 @@
<!-- router-view 结合 keep-alive 组件 -->
<template>
<router-view v-slot="{ Component }">
<transition :name="transitionName" mode="out-in" appear>
<keep-alive :include="keepAliveInclude">
<component :is="Component" />
</keep-alive>
</transition>
</router-view>
</template>
<script>
import { storeToRefs } from 'pinia';
import { useThemeStore } from '@/store/modules/theme';
export default {
name: 'RouterLayout',
setup() {
const themeStore = useThemeStore();
const { keepAliveInclude, transitionName } = storeToRefs(themeStore);
return { keepAliveInclude, transitionName };
}
};
</script>

View File

@ -0,0 +1,238 @@
<!-- 富文本编辑器 -->
<template>
<component v-if="inlineEditor" :is="tagName" :id="elementId" />
<textarea v-else :id="elementId"></textarea>
</template>
<script setup>
import {
watch,
onMounted,
onBeforeUnmount,
onActivated,
onDeactivated,
nextTick,
useAttrs
} from 'vue';
import tinymce from 'tinymce/tinymce';
import 'tinymce/themes/silver';
import 'tinymce/icons/default';
import 'tinymce/plugins/code';
import 'tinymce/plugins/preview';
import 'tinymce/plugins/fullscreen';
import 'tinymce/plugins/paste';
import 'tinymce/plugins/searchreplace';
import 'tinymce/plugins/save';
import 'tinymce/plugins/autosave';
import 'tinymce/plugins/link';
import 'tinymce/plugins/autolink';
import 'tinymce/plugins/image';
import 'tinymce/plugins/media';
import 'tinymce/plugins/table';
import 'tinymce/plugins/codesample';
import 'tinymce/plugins/lists';
import 'tinymce/plugins/advlist';
import 'tinymce/plugins/hr';
import 'tinymce/plugins/charmap';
import 'tinymce/plugins/emoticons';
import 'tinymce/plugins/anchor';
import 'tinymce/plugins/directionality';
import 'tinymce/plugins/pagebreak';
import 'tinymce/plugins/quickbars';
import 'tinymce/plugins/nonbreaking';
import 'tinymce/plugins/visualblocks';
import 'tinymce/plugins/visualchars';
import 'tinymce/plugins/wordcount';
import 'tinymce/plugins/emoticons/js/emojis';
import { storeToRefs } from 'pinia';
import { useThemeStore } from '@/store/modules/theme';
import {
DEFAULT_CONFIG,
DARK_CONFIG,
uuid,
bindHandlers,
openAlert
} from './util';
const props = defineProps({
// id
id: String,
// v-model
value: String,
//
init: Object,
//
inline: {
type: Boolean,
default: false
},
// model events
modelEvents: {
type: String,
default: 'change input undo redo'
},
//
tagName: {
type: String,
default: 'div'
},
//
disabled: Boolean,
//
autoTheme: {
type: Boolean,
default: true
},
// 使
darkTheme: Boolean
});
const emit = defineEmits(['update:value']);
const attrs = useAttrs();
const themeStore = useThemeStore();
const { darkMode } = storeToRefs(themeStore);
// id
const elementId = props.id || uuid('tiny-vue');
//
let editorIns = null;
//
const inlineEditor = props.init?.inline || props.inline;
/* 更新 value */
const updateValue = (value) => {
emit('update:value', value);
};
/* 修改内容 */
const setContent = (value) => {
if (
editorIns &&
typeof value === 'string' &&
value !== editorIns.getContent()
) {
editorIns.setContent(value);
}
};
/* 渲染编辑器 */
const render = () => {
const isDark = props.autoTheme ? darkMode.value : props.darkTheme;
tinymce.init({
...DEFAULT_CONFIG,
...(isDark ? DARK_CONFIG : {}),
...props.init,
selector: `#${elementId}`,
readonly: props.disabled,
inline: inlineEditor,
setup: (editor) => {
editorIns = editor;
editor.on('init', (e) => {
//
if (props.value) {
setContent(props.value);
}
// v-model
editor.on(props.modelEvents, () => {
updateValue(editor.getContent());
});
// valid events
bindHandlers(e, attrs, editor);
});
if (typeof props.init?.setup === 'function') {
props.init.setup(editor);
}
}
});
};
/* 销毁编辑器 */
const destory = () => {
if (tinymce != null && editorIns != null) {
tinymce.remove(editorIns);
editorIns = null;
}
};
/* 弹出提示框 */
const alert = (option) => {
openAlert(editorIns, option);
};
defineExpose({ editorIns, alert });
watch(
() => props.value,
(val, prevVal) => {
if (val !== prevVal) {
setContent(val);
}
}
);
watch(
() => props.disabled,
(disable) => {
if (editorIns !== null) {
if (typeof editorIns.mode?.set === 'function') {
editorIns.mode.set(disable ? 'readonly' : 'design');
} else {
editorIns.setMode(disable ? 'readonly' : 'design');
}
}
}
);
watch(
() => props.tagName,
() => {
destory();
nextTick(() => {
render();
});
}
);
watch(darkMode, () => {
if (props.autoTheme) {
destory();
nextTick(() => {
render();
});
}
});
onMounted(() => {
render();
});
onBeforeUnmount(() => {
destory();
});
onActivated(() => {
render();
});
onDeactivated(() => {
destory();
});
</script>
<style>
body .tox-tinymce-aux {
z-index: 19990000;
}
textarea[id^='tiny-vue'] {
width: 0;
height: 0;
margin: 0;
padding: 0;
opacity: 0;
box-sizing: border-box;
}
</style>

View File

@ -0,0 +1,229 @@
const BASE_URL = import.meta.env.BASE_URL;
// 默认加载插件
const PLUGINS = [
'code',
'preview',
'fullscreen',
'paste',
'searchreplace',
'save',
'autosave',
'link',
'autolink',
'image',
'media',
'table',
'codesample',
'lists',
'advlist',
'hr',
'charmap',
'emoticons',
'anchor',
'directionality',
'pagebreak',
'quickbars',
'nonbreaking',
'visualblocks',
'visualchars',
'wordcount'
].join(' ');
// 默认工具栏布局
const TOOLBAR = [
'fullscreen',
'preview',
'code',
'|',
'undo',
'redo',
'|',
'forecolor',
'backcolor',
'|',
'bold',
'italic',
'underline',
'strikethrough',
'|',
'alignleft',
'aligncenter',
'alignright',
'alignjustify',
'|',
'outdent',
'indent',
'|',
'numlist',
'bullist',
'|',
'formatselect',
'fontselect',
'fontsizeselect',
'|',
'link',
'image',
'media',
'emoticons',
'charmap',
'anchor',
'pagebreak',
'codesample',
'|',
'ltr',
'rtl'
].join(' ');
// 默认配置
export const DEFAULT_CONFIG = {
height: 300,
branding: false,
skin_url: BASE_URL + 'tinymce/skins/ui/oxide',
content_css: BASE_URL + 'tinymce/skins/content/default/content.min.css',
language_url: BASE_URL + 'tinymce/langs/zh_CN.js',
language: 'zh_CN',
plugins: PLUGINS,
toolbar: TOOLBAR,
draggable_modal: true,
toolbar_mode: 'sliding',
quickbars_insert_toolbar: '',
images_upload_handler: (blobInfo, success, error) => {
if (blobInfo.blob().size / 1024 > 400) {
error(' 400KB');
return;
}
success('data:image/jpeg;base64,' + blobInfo.base64());
},
file_picker_types: 'media',
file_picker_callback: () => {}
};
// 暗黑主题配置
export const DARK_CONFIG = {
skin_url: BASE_URL + 'tinymce/skins/ui/oxide-dark',
content_css: BASE_URL + 'tinymce/skins/content/dark/content.min.css'
};
// 支持监听的事件
export const VALID_EVENTS = [
'onActivate',
'onAddUndo',
'onBeforeAddUndo',
'onBeforeExecCommand',
'onBeforeGetContent',
'onBeforeRenderUI',
'onBeforeSetContent',
'onBeforePaste',
'onBlur',
'onChange',
'onClearUndos',
'onClick',
'onContextMenu',
'onCopy',
'onCut',
'onDblclick',
'onDeactivate',
'onDirty',
'onDrag',
'onDragDrop',
'onDragEnd',
'onDragGesture',
'onDragOver',
'onDrop',
'onExecCommand',
'onFocus',
'onFocusIn',
'onFocusOut',
'onGetContent',
'onHide',
'onInit',
'onKeyDown',
'onKeyPress',
'onKeyUp',
'onLoadContent',
'onMouseDown',
'onMouseEnter',
'onMouseLeave',
'onMouseMove',
'onMouseOut',
'onMouseOver',
'onMouseUp',
'onNodeChange',
'onObjectResizeStart',
'onObjectResized',
'onObjectSelected',
'onPaste',
'onPostProcess',
'onPostRender',
'onPreProcess',
'onProgressState',
'onRedo',
'onRemove',
'onReset',
'onSaveContent',
'onSelectionChange',
'onSetAttrib',
'onSetContent',
'onShow',
'onSubmit',
'onUndo',
'onVisualAid'
];
let unique = 0;
/**
* id
*/
export function uuid(prefix) {
const time = Date.now();
const random = Math.floor(Math.random() * 1000000000);
unique++;
return prefix + '_' + random + unique + String(time);
}
/**
*
*/
export function bindHandlers(initEvent, listeners, editor) {
const validEvents = VALID_EVENTS.map((event) => event.toLowerCase());
Object.keys(listeners)
.filter((key) => validEvents.includes(key.toLowerCase()))
.forEach((key) => {
const handler = listeners[key];
if (typeof handler === 'function') {
if (key === 'onInit') {
handler(initEvent, editor);
} else {
editor.on(key.substring(2), (e) => handler(e, editor));
}
}
});
}
/**
*
*/
export function openAlert(editor, option = {}) {
editor?.windowManager?.open({
title: option.title ?? '',
body: {
type: 'panel',
items: [
{
type: 'htmlpanel',
html: `<p>${option.content ?? ''}</p>`
}
]
},
buttons: [
{
type: 'cancel',
name: 'closeButton',
text: '',
primary: true
}
]
});
}

View File

@ -0,0 +1,119 @@
<!-- 透明度滑块 -->
<template>
<div class="guns-color-alpha-slider">
<div ref="barRef" class="guns-color-alpha-slider-bar" :style="{ background: background }" @click="handleClick"></div>
<div ref="thumbRef" class="guns-color-alpha-slider-thumb" :style="{ left: thumbLeft + 'px' }"></div>
</div>
</template>
<script setup name="AlphaSlider">
import { ref, unref, onMounted, watch } from 'vue';
import draggable from '../util/draggable';
const props = defineProps({
// rgb
rgb: {
type: Object,
required: true
},
//
alpha: {
type: Number,
default: 100
}
});
const emits = defineEmits(['update:alpha']);
//
const thumbRef = ref(null);
//
const barRef = ref(null);
//
const thumbLeft = ref(0);
//
const background = ref();
/* 滑轨点击事件 */
const handleClick = event => {
const thumb = unref(thumbRef);
if (event.target !== thumb) {
handleDrag(event);
}
};
/* 透明度选中改变事件 */
const handleDrag = event => {
const bar = unref(barRef);
const thumb = unref(thumbRef);
if (!bar || !thumb) {
return;
}
const rect = bar.getBoundingClientRect();
const left = (() => {
const temp = Math.max(thumb.offsetWidth / 2, event.clientX - rect.left);
return Math.min(temp, rect.width - thumb.offsetWidth / 2);
})();
const t1 = left - thumb.offsetWidth / 2;
const t2 = rect.width - thumb.offsetWidth;
const alpha = Math.round((t1 / t2) * 100);
emits('update:alpha', alpha);
};
/* 计算滑块位置 */
const getThumbLeft = () => {
const bar = unref(barRef);
const thumb = unref(thumbRef);
if (!bar || !thumb) {
return 0;
}
const barWidth = bar.offsetWidth || 280;
const thumbWidth = thumb.offsetWidth || 6;
const alpha = props.alpha ?? 0;
return Math.round((alpha * (barWidth - thumbWidth / 2)) / 100);
};
/* 获取滑轨背景 */
const getBackground = () => {
if (props.rgb == null) {
return;
}
const { r, g, b } = props.rgb;
return `linear-gradient(to right, rgba(${r}, ${g}, ${b}, 0) 0%, rgba(${r}, ${g}, ${b}, 1) 100%)`;
};
onMounted(() => {
//
thumbLeft.value = getThumbLeft();
background.value = getBackground();
//
const bar = unref(barRef);
const thumb = unref(thumbRef);
const dragConfig = {
drag: event => {
handleDrag(event);
},
end: event => {
handleDrag(event);
}
};
bar && draggable(bar, dragConfig);
thumb && draggable(thumb, dragConfig);
});
watch(
() => props.rgb,
() => {
background.value = getBackground();
}
);
watch(
() => props.alpha,
() => {
thumbLeft.value = getThumbLeft();
}
);
</script>

View File

@ -0,0 +1,94 @@
<!-- 色相滑块 -->
<template>
<div class="guns-color-hue-slider">
<div ref="barRef" class="guns-color-hue-slider-bar" @click="handleClick"></div>
<div ref="thumbRef" class="guns-color-hue-slider-thumb" :style="{ left: `${thumbLeft}px` }"></div>
</div>
</template>
<script setup name="HueSlider">
import { ref, unref, onMounted, watch } from 'vue';
import draggable from '../util/draggable';
const props = defineProps({
//
hue: {
type: Number,
default: 0
}
});
const emits = defineEmits(['update:hue']);
//
const thumbRef = ref(null);
//
const barRef = ref(null);
//
const thumbLeft = ref(0);
/* 滑轨点击事件 */
const handleClick = event => {
const thumb = unref(thumbRef);
if (event.target !== thumb) {
handleDrag(event);
}
};
/* 颜色选中改变事件 */
const handleDrag = event => {
const bar = unref(barRef);
const thumb = unref(thumbRef);
if (!bar || !thumb) {
return;
}
const rect = bar.getBoundingClientRect();
const left = (() => {
const temp = Math.max(thumb.offsetWidth / 2, event.clientX - rect.left);
return Math.min(temp, rect.width - thumb.offsetWidth / 2);
})();
const t1 = left - thumb.offsetWidth / 2;
const t2 = rect.width - thumb.offsetWidth;
const hue = Math.round((t1 / t2) * 360);
emits('update:hue', hue);
};
/* 计算滑块位置 */
const getThumbLeft = () => {
const bar = unref(barRef);
const thumb = unref(thumbRef);
if (!bar || !thumb) {
return 0;
}
const barWidth = bar.offsetWidth || 280;
const thumbWidth = thumb.offsetWidth || 6;
const hue = props.hue ?? 0;
return Math.round((hue * (barWidth - thumbWidth / 2)) / 360);
};
onMounted(() => {
//
thumbLeft.value = getThumbLeft();
//
const bar = unref(barRef);
const thumb = unref(thumbRef);
const dragConfig = {
drag: event => {
handleDrag(event);
},
end: event => {
handleDrag(event);
}
};
bar && draggable(bar, dragConfig);
thumb && draggable(thumb, dragConfig);
});
watch(
() => props.hue,
() => {
thumbLeft.value = getThumbLeft();
}
);
</script>

View File

@ -0,0 +1,26 @@
<!-- 预设颜色列表 -->
<template>
<div class="guns-color-predefine">
<div v-for="(item, index) in colors" :key="index + '-' + item" class="guns-color-predefine-item" @click="handleSelect(item)">
<div :style="{ backgroundColor: item }"></div>
<CheckOutlined v-if="color && color.toLowerCase() === item.toLowerCase()" />
</div>
</div>
</template>
<script setup name="PredefineList">
const props = defineProps({
//
colors: {
type: Array,
required: true
},
//
color: String
});
const emits = defineEmits(['update:color']);
/* 颜色选中事件 */
const handleSelect = color => {
emits('update:color', color);
};
</script>

View File

@ -0,0 +1,130 @@
<!-- 饱和度明度选择 -->
<template>
<div ref="panelRef" class="guns-color-svpanel" :style="{ backgroundColor: background }">
<div class="guns-color-svpanel-white"></div>
<div class="guns-color-svpanel-black"></div>
<div class="guns-color-svpanel-cursor" :style="{ top: cursorTop + 'px', left: cursorLeft + 'px' }"></div>
</div>
</template>
<script setup name="SvPanel">
import { ref, unref, onMounted, watch } from 'vue';
import draggable from '../util/draggable';
const props = defineProps({
//
hue: {
type: Number,
default: 0
},
//
saturation: {
type: Number,
default: 0
},
//
value: {
type: Number,
default: 0
}
});
const emits = defineEmits(['change']);
//
const panelRef = ref(null);
// top
const cursorTop = ref(0);
// left
const cursorLeft = ref(0);
//
const background = ref('hsl(0, 100%, 50%)');
/* 选中改变事件 */
const handleDrag = event => {
const panel = unref(panelRef);
if (!panel) {
return;
}
const rect = panel.getBoundingClientRect();
let left = event.clientX - rect.left;
left = Math.max(0, left);
left = Math.min(left, rect.width);
let top = event.clientY - rect.top;
top = Math.max(0, top);
top = Math.min(top, rect.height);
cursorLeft.value = left;
cursorTop.value = top;
emits('change', {
saturation: (left / rect.width) * 100,
value: 100 - (top / rect.height) * 100
});
};
/* 计算滑块位置 top */
const getCursorTop = () => {
const panel = unref(panelRef);
if (!panel) {
return 0;
}
const height = panel.clientHeight || 180;
return ((100 - (props.value ?? 0)) * height) / 100;
};
/* 计算滑块位置 left */
const getCursorLeft = () => {
const panel = unref(panelRef);
if (!panel) {
return 0;
}
const width = panel.clientWidth || 280;
return ((props.saturation ?? 0) * width) / 100;
};
/* 获取色板背景 */
const getBackground = () => {
return 'hsl(' + (props.hue ?? 0) + ', 100%, 50%)';
};
onMounted(() => {
//
background.value = getBackground();
cursorLeft.value = getCursorLeft();
cursorTop.value = getCursorTop();
//
const panel = unref(panelRef);
if (panel) {
draggable(panel, {
drag: event => {
handleDrag(event);
},
end: event => {
handleDrag(event);
}
});
}
});
watch(
() => props.hue,
() => {
background.value = getBackground();
}
);
watch(
() => props.saturation,
() => {
cursorLeft.value = getCursorLeft();
}
);
watch(
() => props.value,
() => {
cursorTop.value = getCursorTop();
}
);
</script>

View File

@ -0,0 +1,289 @@
<!-- 颜色选择器组件 -->
<template>
<a-dropdown :trigger="['click']" :disabled="isDisabled" v-model:visible="visible" @visibleChange="handleVisibleChange">
<div :class="triggerClass">
<div :class="innerClass">
<div :style="{ backgroundColor: displayValue }"></div>
</div>
<div class="guns-color-picker-trigger-arrow">
<DownOutlined v-if="displayValue" />
<CloseOutlined v-else />
</div>
</div>
<template #overlay>
<div :class="['ant-dropdown-menu guns-color-picker', popperClass]">
<div @click.stop="">
<SvPanel :hue="colorHue" :saturation="colorSaturation" :value="colorValue" @change="handleSVChange" />
<HueSlider :hue="colorHue" @update:hue="handleHChange" />
<AlphaSlider v-if="showAlpha" :rgb="colorRgb" :alpha="colorAlpha" @update:alpha="handleAChange" />
<PredefineList v-if="predefine" :color="displayValue" :colors="predefineColors" @update:color="handleColorChange" />
<div class="guns-color-picker-footer">
<div class="guns-color-picker-value">
<a-input size="small" v-model:value="inputValue" @pressEnter="handleInput" @blur="handleInput" />
</div>
<div class="guns-color-picker-button-group">
<a-button size="small" @click="clearValue" class="border-radius">
{{ cancelText }}
</a-button>
<a-button size="small" type="primary" @click="confirmValue" class="border-radius">
{{ okText }}
</a-button>
</div>
</div>
</div>
</div>
</template>
</a-dropdown>
</template>
<script setup name="ColorPicker">
import { ref, computed, watch } from 'vue';
import SvPanel from './components/sv-panel.vue';
import HueSlider from './components/hue-slider.vue';
import AlphaSlider from './components/alpha-slider.vue';
import PredefineList from './components/predefine-list.vue';
import Color from './util/color';
const props = defineProps({
// , v-model
value: String,
// , hsl / hsv / hex / rgb
colorFormat: {
type: String,
validator: value => {
return ['hsl', 'hsv', 'hex', 'rgb'].includes(value);
}
},
//
showAlpha: Boolean,
//
predefine: Array,
//
size: {
type: String,
validator: value => {
return ['large', 'default', 'small'].includes(value);
}
},
//
disabled: Boolean,
//
popperClass: String,
//
customClass: String,
//
cancelText: {
type: String,
default: '取消'
},
//
okText: {
type: String,
default: '确定'
}
});
const emits = defineEmits(['change', 'active-change', 'update:value']);
//
const color = new Color({
enableAlpha: props.showAlpha,
format: props.colorFormat
});
//
const initValue = (() => {
if (!props.value) {
return '';
}
color.fromString(props.value);
return color.value;
})();
//
const colorHue = ref(color._hue);
//
const colorSaturation = ref(color._saturation);
//
const colorValue = ref(color._value);
//
const colorAlpha = ref(color._alpha);
// rgb
const colorRgb = ref(color.toRgb());
//
const inputValue = ref(initValue);
//
const displayValue = ref(initValue);
// popper
const visible = ref(false);
//
const isDisabled = computed(() => {
return props.disabled;
});
// trigger class
const triggerClass = computed(() => {
return [
'guns-color-picker-trigger',
{ 'guns-color-picker-large': props.size === 'large' },
{ 'guns-color-picker-small': props.size === 'small' },
{ 'is-disabled': isDisabled.value },
props.customClass
];
});
// inner class
const innerClass = computed(() => {
return ['guns-color-picker-trigger-inner', { 'is-empty': !displayValue.value }];
});
//
const predefineColors = computed(() => {
return props.predefine
? props.predefine.map(value => {
const c = new Color({
enableAlpha: props.showAlpha,
format: props.colorFormat
});
c.fromString(value);
return c.value;
})
: [];
});
/* 确定 */
const confirmValue = () => {
emits('update:value', color.value);
emits('change', color.value);
emits('active-change', color.value);
visible.value = false;
};
/* 清空 */
const clearValue = () => {
emits('update:value', '');
emits('change', '');
emits('active-change', '');
inputValue.value = '';
displayValue.value = '';
visible.value = false;
};
/* 色相改变处理 */
const handleHChange = value => {
color.set({ _hue: value });
colorHue.value = color._hue;
colorRgb.value = color.toRgb();
inputValue.value = color.value;
displayValue.value = color.value;
emits('active-change', color.value);
};
/* 饱和度和明度改变处理 */
const handleSVChange = obj => {
color.set({
_saturation: obj.saturation,
_value: obj.value
});
colorSaturation.value = color._saturation;
colorValue.value = color._value;
colorRgb.value = color.toRgb();
inputValue.value = color.value;
displayValue.value = color.value;
emits('active-change', color.value);
};
/* 透明度改变处理 */
const handleAChange = value => {
color.set({ _alpha: value });
colorAlpha.value = color._alpha;
inputValue.value = color.value;
displayValue.value = color.value;
emits('active-change', color.value);
};
/* 颜色改变处理 */
const handleColorChange = value => {
if (value) {
if (value !== color.value) {
color.fromString(value);
colorHue.value = color._hue;
colorSaturation.value = color._saturation;
colorValue.value = color._value;
colorAlpha.value = color._alpha;
colorRgb.value = color.toRgb();
}
inputValue.value = color.value;
displayValue.value = color.value;
emits('active-change', color.value);
}
};
/* 颜色输入改变处理 */
const handleInput = () => {
if (inputValue.value) {
handleColorChange(inputValue.value);
} else {
inputValue.value = color.value;
displayValue.value = color.value;
emits('active-change', color.value);
}
};
/* picker 展开和关闭处理 */
const handleVisibleChange = visible => {
if (!visible) {
if (props.value) {
handleColorChange(props.value);
} else {
inputValue.value = '';
displayValue.value = '';
emits('active-change', '');
}
}
};
watch(
() => props.value,
value => {
if (value) {
handleColorChange(value);
} else {
inputValue.value = '';
displayValue.value = '';
emits('active-change', '');
}
}
);
watch(
() => props.colorFormat,
value => {
color.set({ format: value });
inputValue.value = color.value;
displayValue.value = color.value;
emits('active-change', color.value);
}
);
watch(
() => props.showAlpha,
value => {
color.set({ enableAlpha: value });
inputValue.value = color.value;
displayValue.value = color.value;
emits('active-change', color.value);
}
);
</script>
<style>
@import url('./style//index.less');
</style>

View File

@ -0,0 +1,242 @@
@import '../../../layout/style/themes/default.less';
/* trigger */
.guns-color-picker-trigger {
width: 32px;
height: 32px;
position: relative;
display: inline-block;
padding: 4px;
border-radius: 2px;
border: 1px solid @border-color-split;
background: @component-background;
box-sizing: border-box;
text-align: center;
cursor: pointer;
.guns-color-picker-trigger-inner {
height: 100%;
border-radius: 2px;
box-shadow: 0 0 0 1px @border-color-split;
overflow: hidden;
&:not(.is-empty) {
background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAwAAAAMCAIAAADZF8uwAAAAGUlEQVQYV2M4gwH+YwCGIasIUwhT25BVBADtzYNYrHvv4gAAAABJRU5ErkJggg==);
}
& > div {
height: 100%;
}
}
.guns-color-picker-trigger-arrow {
position: absolute;
top: 50%;
left: 50%;
margin: -6px auto auto -6px;
line-height: 0;
font-size: 12px;
color: @text-color-secondary;
& > .anticon:not(.anticon-close) {
color: #fff;
}
}
// 禁用状态
&.is-disabled {
cursor: not-allowed;
.guns-color-picker-trigger-inner {
opacity: 0.6;
}
}
// 尺寸控制
&.guns-color-picker-large {
width: 40px;
height: 40px;
}
&.guns-color-picker-small {
width: 24px;
height: 24px;
padding: 3px;
}
}
/* picker */
.guns-color-picker.ant-dropdown-menu {
width: 300px;
padding: 12px;
box-sizing: content-box;
}
/* footer */
.guns-color-picker .guns-color-picker-footer {
display: flex;
justify-content: space-between;
align-items: center;
margin-top: 12px;
.guns-color-picker-value {
width: 140px;
}
.guns-color-picker-value > .ant-input {
height: 36px;
line-height: 1;
padding: 0 4px;
font-size: 12px;
display: block;
}
.ant-btn + .ant-btn {
margin-left: 8px;
}
}
/* alpha slider */
.guns-color-picker .guns-color-alpha-slider {
height: 12px;
margin-top: 12px;
position: relative;
box-sizing: border-box;
background: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAwAAAAMCAIAAADZF8uwAAAAGUlEQVQYV2M4gwH+YwCGIasIUwhT25BVBADtzYNYrHvv4gAAAABJRU5ErkJggg==);
.guns-color-alpha-slider-bar {
height: 100%;
background: linear-gradient(
to right,
rgba(255, 255, 255, 0) 0%,
rgba(255, 255, 255, 1) 100%
);
position: relative;
cursor: pointer;
}
.guns-color-alpha-slider-thumb {
position: absolute;
top: 0;
left: 0;
width: 4px;
height: 100%;
background: #fff;
box-sizing: border-box;
box-shadow: 0 0 2px rgba(0, 0, 0, 0.6);
border: 1px solid #f0f0f0;
border-radius: 1px;
cursor: pointer;
z-index: 1;
}
}
/* hue slider */
.guns-color-picker .guns-color-hue-slider {
height: 12px;
padding: 0 2px;
margin-top: 12px;
position: relative;
box-sizing: border-box;
.guns-color-hue-slider-bar {
height: 100%;
background: linear-gradient(
to right,
#f00 0%,
#ff0 17%,
#0f0 33%,
#0ff 50%,
#00f 67%,
#f0f 83%,
#f00 100%
);
position: relative;
cursor: pointer;
}
.guns-color-hue-slider-thumb {
position: absolute;
top: 0;
left: 0;
width: 4px;
height: 100%;
background: #fff;
box-sizing: border-box;
box-shadow: 0 0 2px rgba(0, 0, 0, 0.6);
border: 1px solid #f0f0f0;
border-radius: 1px;
cursor: pointer;
z-index: 1;
}
}
/* predefine */
.guns-color-picker .guns-color-predefine {
display: flex;
flex-wrap: wrap;
margin-top: 4px;
.guns-color-predefine-item {
width: 20px;
height: 20px;
border-radius: 2px;
margin: 8px 0 0 8px;
background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAwAAAAMCAIAAADZF8uwAAAAGUlEQVQYV2M4gwH+YwCGIasIUwhT25BVBADtzYNYrHvv4gAAAABJRU5ErkJggg==);
position: relative;
overflow: hidden;
cursor: pointer;
& > div {
height: 100%;
}
&:nth-child(10n + 1) {
margin-left: 4px;
}
& > .anticon {
color: #fff;
font-size: 12px;
position: absolute;
top: 50%;
left: 50%;
margin: -6px auto auto -6px;
}
}
}
/* sv panel */
.guns-color-picker .guns-color-svpanel {
height: 180px;
position: relative;
cursor: pointer;
.guns-color-svpanel-white,
.guns-color-svpanel-black {
position: absolute;
top: 0;
left: 0;
right: 0;
bottom: 0;
}
.guns-color-svpanel-white {
background: linear-gradient(to right, #fff, rgba(255, 255, 255, 0));
}
.guns-color-svpanel-black {
background: linear-gradient(to top, #000, rgba(0, 0, 0, 0));
}
.guns-color-svpanel-cursor {
position: absolute;
width: 4px;
height: 4px;
border-radius: 50%;
box-shadow: 0 0 0 1.5px #fff, inset 0 0 1px 1px rgba(0, 0, 0, 0.3),
0 0 1px 2px rgba(0, 0, 0, 0.4);
transform: translate(-2px, -2px);
cursor: pointer;
}
}

View File

@ -0,0 +1,381 @@
/**
* 16
*/
const INT_HEX_MAP = {
10: 'A',
11: 'B',
12: 'C',
13: 'D',
14: 'E',
15: 'F'
};
/**
* 16
*/
const HEX_INT_MAP = { A: 10, B: 11, C: 12, D: 13, E: 14, F: 15 };
/**
*
*/
const isPercentage = function (n) {
return typeof n === 'string' && n.indexOf('%') !== -1;
};
/**
* 1.0
*/
const isOnePointZero = function (n) {
return typeof n === 'string' && n.indexOf('.') !== -1 && parseFloat(n) === 1;
};
/**
* Take input from [0, n] and return it as [0, 1]
*/
const bound01 = function (value, max) {
if (isOnePointZero(value)) {
value = '100%';
}
const processPercent = isPercentage(value);
value = Math.min(max, Math.max(0, parseFloat(String(value))));
// Automatically convert percentage into number
if (processPercent) {
value = parseInt(String(value * max), 10) / 100;
}
// Handle floating point rounding errors
if (Math.abs(value - max) < 0.000001) {
return 1;
}
// Convert into [0, 1] range if it isn't already
return (value % max) / parseFloat(String(max));
};
/**
* hsv hsl
* @param hue
* @param sat
* @param val
*/
const hsv2hsl = function (hue, sat, val) {
return [hue, (sat * val) / ((hue = (2 - sat) * val) < 1 ? hue : 2 - hue) || 0, hue / 2];
};
/**
* hsl hsv
* @param hue
* @param sat
* @param light
*/
const hsl2hsv = function (hue, sat, light) {
sat = sat / 100;
light = light / 100;
let smin = sat;
const lmin = Math.max(light, 0.01);
light *= 2;
sat *= light <= 1 ? light : 2 - light;
smin *= lmin <= 1 ? lmin : 2 - lmin;
const v = (light + sat) / 2;
const sv = light === 0 ? (2 * smin) / (lmin + smin) : (2 * sat) / (light + sat);
return {
h: hue,
s: sv * 100,
v: v * 100
};
};
/**
* rgb hsv
* Converts an RGB color value to HSV
* Assumes: r, g, and b are contained in the set [0, 255] or [0, 1]
* Returns: { h, s, v } in [0,1]
* @param r
* @param g
* @param b
*/
const rgb2hsv = function (r, g, b) {
r = bound01(r, 255);
g = bound01(g, 255);
b = bound01(b, 255);
const max = Math.max(r, g, b);
const min = Math.min(r, g, b);
let h = 0;
const v = max;
const d = max - min;
const s = max === 0 ? 0 : d / max;
if (max === min) {
h = 0; // achromatic
} else {
switch (max) {
case r:
h = (g - b) / d + (g < b ? 6 : 0);
break;
case g:
h = (b - r) / d + 2;
break;
case b:
h = (r - g) / d + 4;
break;
}
h /= 6;
}
return { h: h * 360, s: s * 100, v: v * 100 };
};
/**
* hsv rgb
* Converts an HSV color value to RGB
* Assumes: h is contained in [0, 1] or [0, 360] and s and v are contained in [0, 1] or [0, 100]
* Returns: { r, g, b } in the set [0, 255]
* @param h
* @param s
* @param v
*/
const hsv2rgb = function (h, s, v) {
h = bound01(h, 360) * 6;
s = bound01(s, 100);
v = bound01(v, 100);
const i = Math.floor(h);
const f = h - i;
const p = v * (1 - s);
const q = v * (1 - f * s);
const t = v * (1 - (1 - f) * s);
const mod = i % 6;
const r = [v, q, p, p, t, v][mod];
const g = [t, v, v, q, p, p][mod];
const b = [p, p, t, v, v, q][mod];
return {
r: Math.round(r * 255),
g: Math.round(g * 255),
b: Math.round(b * 255)
};
};
/**
* rgb 16
* @param
*/
const toHex = function ({ r, g, b }) {
const hexOne = function (value) {
value = Math.min(Math.round(value), 255);
const high = Math.floor(value / 16);
const low = value % 16;
return '' + (INT_HEX_MAP[high] || high) + (INT_HEX_MAP[low] || low);
};
if (isNaN(r) || isNaN(g) || isNaN(b)) {
return '';
}
return '#' + hexOne(r) + hexOne(g) + hexOne(b);
};
/**
*
* @param hex
*/
const parseHexChannel = function (hex) {
if (hex.length === 2) {
return (HEX_INT_MAP[hex[0].toUpperCase()] || +hex[0]) * 16 + (HEX_INT_MAP[hex[1].toUpperCase()] || +hex[1]);
}
return HEX_INT_MAP[hex[1].toUpperCase()] || +hex[1];
};
/**
*
*/
export default class Color {
// 色相
_hue;
// 饱和度
_saturation;
// 明度
_value;
// 透明度
_alpha;
// 是否开启透明度
enableAlpha;
// 颜色格式
format;
// 颜色值
value;
constructor(options = {}) {
this._hue = options._hue ?? 0;
this._saturation = options._saturation ?? 100;
this._value = options._value ?? 100;
this._alpha = options._alpha ?? 100;
this.enableAlpha = options.enableAlpha ?? false;
this.format = options.format ?? 'hex';
this.value = '';
this.doOnChange();
}
/**
*
* @param options
*/
set(options) {
Object.assign(this, options);
this.doOnChange();
}
/**
* rgb
*/
toRgb() {
return hsv2rgb(this._hue, this._saturation, this._value);
}
/**
*
* @param value
*/
fromString(value) {
if (!value) {
this._hue = 0;
this._saturation = 100;
this._value = 100;
this._alpha = 100;
this.doOnChange();
return;
}
const fromHSV = (h, s, v) => {
this._hue = Math.max(0, Math.min(360, h));
this._saturation = Math.max(0, Math.min(100, s));
this._value = Math.max(0, Math.min(100, v));
this.doOnChange();
};
if (value.indexOf('hsl') !== -1) {
const parts = value
.replace(/hsla|hsl|\(|\)/gm, '')
.split(/\s|,/g)
.filter(val => val !== '')
.map((val, index) => (index > 2 ? parseFloat(val) : parseInt(val, 10)));
if (parts.length === 4) {
this._alpha = Math.floor(parseFloat(String(parts[3])) * 100);
} else if (parts.length === 3) {
this._alpha = 100;
}
if (parts.length >= 3) {
const { h, s, v } = hsl2hsv(parts[0], parts[1], parts[2]);
fromHSV(h, s, v);
}
} else if (value.indexOf('hsv') !== -1) {
const parts = value
.replace(/hsva|hsv|\(|\)/gm, '')
.split(/\s|,/g)
.filter(val => val !== '')
.map((val, index) => (index > 2 ? parseFloat(val) : parseInt(val, 10)));
if (parts.length === 4) {
this._alpha = Math.floor(parseFloat(String(parts[3])) * 100);
} else if (parts.length === 3) {
this._alpha = 100;
}
if (parts.length >= 3) {
fromHSV(parts[0], parts[1], parts[2]);
}
} else if (value.indexOf('rgb') !== -1) {
const parts = value
.replace(/rgba|rgb|\(|\)/gm, '')
.split(/\s|,/g)
.filter(val => val !== '')
.map((val, index) => (index > 2 ? parseFloat(val) : parseInt(val, 10)));
if (parts.length === 4) {
this._alpha = Math.floor(parseFloat(String(parts[3])) * 100);
} else if (parts.length === 3) {
this._alpha = 100;
}
if (parts.length >= 3) {
const { h, s, v } = rgb2hsv(parts[0], parts[1], parts[2]);
fromHSV(h, s, v);
}
} else if (value.indexOf('#') !== -1) {
const hex = value.replace('#', '').trim();
if (!/^(?:[0-9a-fA-F]{3}){1,2}|[0-9a-fA-F]{8}$/.test(hex)) {
return;
}
let r, g, b;
if (hex.length === 3) {
r = parseHexChannel(hex[0] + hex[0]);
g = parseHexChannel(hex[1] + hex[1]);
b = parseHexChannel(hex[2] + hex[2]);
} else if (hex.length === 6 || hex.length === 8) {
r = parseHexChannel(hex.substring(0, 2));
g = parseHexChannel(hex.substring(2, 4));
b = parseHexChannel(hex.substring(4, 6));
}
if (hex.length === 8) {
this._alpha = Math.floor((parseHexChannel(hex.substring(6)) / 255) * 100);
} else if (hex.length === 3 || hex.length === 6) {
this._alpha = 100;
}
const { h, s, v } = rgb2hsv(r ?? 0, g ?? 0, b ?? 0);
fromHSV(h, s, v);
}
}
/**
*
* @param color
*/
compare(color) {
return (
Math.abs(color._hue - this._hue) < 2 &&
Math.abs(color._saturation - this._saturation) < 1 &&
Math.abs(color._value - this._value) < 1 &&
Math.abs(color._alpha - this._alpha) < 1
);
}
/**
*
*/
doOnChange() {
const { _hue, _saturation, _value, _alpha, format } = this;
if (this.enableAlpha) {
if (format === 'hsl') {
const hsl = hsv2hsl(_hue, _saturation / 100, _value / 100);
const _s = Math.round(hsl[1] * 100);
const _l = Math.round(hsl[2] * 100);
this.value = `hsla(${_hue}, ${_s}%, ${_l}%, ${_alpha / 100})`;
} else if (format === 'hsv') {
const _s = Math.round(_saturation);
const _v = Math.round(_value);
this.value = `hsva(${_hue}, ${_s}%, ${_v}%, ${_alpha / 100})`;
} else {
const { r, g, b } = hsv2rgb(_hue, _saturation, _value);
this.value = `rgba(${r}, ${g}, ${b}, ${_alpha / 100})`;
}
} else {
if (format === 'hsl') {
const hsl = hsv2hsl(_hue, _saturation / 100, _value / 100);
const _l = Math.round(hsl[2] * 100);
this.value = `hsl(${_hue}, ${Math.round(hsl[1] * 100)}%, ${_l}%)`;
} else if (format === 'hsv') {
const _v = Math.round(_value);
this.value = `hsv(${_hue}, ${Math.round(_saturation)}%, ${_v}%)`;
} else if (format === 'rgb') {
const { r, g, b } = hsv2rgb(_hue, _saturation, _value);
this.value = `rgb(${r}, ${g}, ${b})`;
} else {
this.value = toHex(hsv2rgb(_hue, _saturation, _value));
}
}
}
}

View File

@ -0,0 +1,41 @@
/** 拖动事件封装 */
let isDragging = false;
/**
*
* @param element
* @param options
*/
export default function (element, options) {
// 鼠标移动事件
const moveFn = function (event) {
options.drag && options.drag(event);
};
// 鼠标抬起事件
const upFn = function (event) {
document.removeEventListener('mousemove', moveFn);
document.removeEventListener('mouseup', upFn);
document.onselectstart = null;
document.ondragstart = null;
isDragging = false;
options.end && options.end(event);
};
// 鼠标按下事件
element.addEventListener('mousedown', function (event) {
if (isDragging) {
return;
}
document.onselectstart = function () {
return false;
};
document.ondragstart = function () {
return false;
};
document.addEventListener('mousemove', moveFn);
document.addEventListener('mouseup', upFn);
isDragging = true;
options.start && options.start(event);
});
}

View File

@ -0,0 +1,234 @@
<template>
<a-drawer v-bind="props" @close="close" @afterVisibleChange="afterVisibleChange">
<!-- 抽屉右上角的操作区域 -->
<template #extra v-if="slots.extra">
<slot name="extra"></slot>
</template>
<!-- 抽屉的页脚 -->
<template #footer v-if="slots.footer">
<slot name="footer"></slot>
</template>
<!-- 抽屉的标题 -->
<template #title v-if="slots.title">
<slot name="title"></slot>
</template>
<!-- 自定义关闭图标 -->
<template #closeIcon v-if="slots.closeIcon">
<slot name="closeIcon"></slot>
</template>
<slot name="top"></slot>
<a-tabs v-model:activeKey="currentActive" v-if="isShowTab" @change="tabChange">
<a-tab-pane :key="tabItem.key" v-for="tabItem in tabList">
<template #tab>
<div class="tab-item">
<i :class="'iconfont icons ' + tabItem.icon" v-if="tabItem.icon"></i>
<div>{{ tabItem.name }}</div>
</div>
</template>
</a-tab-pane>
</a-tabs>
<!-- 内容 -->
<slot></slot>
<!-- 关闭按钮 -->
<div class="close-button" @click="close" v-if="visible"><close-outlined /></div>
</a-drawer>
</template>
<script setup name="CommonDrawer">
import { useSlots, watch, ref } from 'vue';
const slots = useSlots();
const props = defineProps({
//
visible: {
type: Boolean,
default: false
},
class: {
type: String,
default: 'drawer'
},
// Dom
autofocus: {
type: Boolean,
default: true
},
// Drawer
bodyStyle: {
type: Object,
default: {}
},
//
closable: {
type: Boolean,
default: false
},
// Drawer
contentWrapperStyle: {
type: Object,
default: {}
},
// Drawer
destroyOnClose: {
type: Boolean,
default: false
},
// Drawer
drawerStyle: {
type: Object,
default: {}
},
//
footerStyle: {
type: Object,
default: {}
},
// Drawer
forceRender: {
type: Boolean,
default: false
},
// Drawer HTML
getContainer: {
type: [String, Boolean],
default: false
},
// Drawer
headerStyle: {
type: Object,
default: {}
},
// , placement top bottom 使
height: {
type: [String, Number],
default: 378
},
// esc
keyboard: {
type: Boolean,
default: true
},
//
mask: {
type: Boolean,
default: false
},
//
maskClosable: {
type: Boolean,
default: false
},
//
maskStyle: {
type: Object,
default: {}
},
//
placement: {
type: String,
default: 'right'
},
// Drawer
push: {
type: [Boolean, Object],
default: { distance: 180 }
},
// default 378px large 736px
size: {
type: String,
default: 'default'
},
// Drawer
style: {
type: Object,
default: {}
},
//
width: {
type: [String, Number],
default: 378
},
// Drawer z-index
zIndex: {
type: Number,
default: 1000
},
// tab
activeKey: {
type: [String, Number],
default: '1'
},
// tab
isShowTab: {
type: Boolean,
default: false
},
// tab
tabList: {
type: Array,
default: []
}
});
const emit = defineEmits(['close', 'afterVisibleChange', 'tabChange']);
//
const currentActive = ref('1');
//
const close = e => {
emit('close', e);
};
//
const afterVisibleChange = visible => {
emit('afterVisibleChange', visible);
};
// tab
const tabChange = key => {
emit('tabChange', key);
};
watch(
() => props.activeKey,
val => {
if (val) {
currentActive.value = val;
}
},
{ deep: true, immediate: true }
);
</script>
<style lang="less" scoped>
.close-button {
position: absolute;
left: -40px;
top: 180px;
width: 40px;
height: 40px;
font-size: 22px;
background: #7127de;
text-align: center;
line-height: 40px;
cursor: pointer;
color: #fff;
}
:deep(.ant-drawer-content) {
overflow: visible;
}
.tab-item {
display: flex;
justify-content: center;
align-items: center;
}
.icons {
font-size: 20px;
margin-right: 5px;
}
:deep(.ant-drawer-wrapper-body) {
height: 100%;
}
</style>

View File

@ -0,0 +1,369 @@
<template>
<a-row class="table-top">
<a-table
:data-source="list"
:row-key="rowId"
:size="size"
class="table"
:bordered="bordered"
style="width: 100%"
:columns="
columns.filter((col, num) => {
if (col.isShow) return col;
})
"
:loading="tableLoading"
:pagination="isPage ? pagination : false"
@change="tableChange"
:row-selection="
rowSelection
? {
type: isRadio ? 'radio' : 'checkbox',
selectedRowKeys: selectedRowList,
onChange: onSelectChange,
onSelect: onSelect,
checkStrictly: props.checkStrictly,
onSelectAll: onSelectAll
}
: null
"
:scroll="list?.length > 0 ? scroll : { y: '100%' }"
:customRow="customRow"
>
<template v-slot:[item]="scope" v-for="item in renderArr">
<template v-if="item == 'bodyCell'">
<slot :name="item" :scope="scope" v-bind="scope || {}">
<template v-if="scope.column.title == '序号'">{{ scope.index + 1 }}</template>
</slot>
</template>
<template v-else>
<slot :name="item" :scope="scope" v-bind="scope || {}"></slot>
</template>
</template>
</a-table>
</a-row>
</template>
<script setup name="CommonTable">
import { onMounted, reactive, ref, useSlots, watch } from 'vue';
import Request from '@/utils/request/request-util';
const props = defineProps({
//
columns: {
type: Array,
default: []
},
// id
rowId: {
type: String,
default: 'id'
},
//
url: {
type: String,
default: ''
},
//
methods: {
type: String,
default: 'get'
},
//
where: {
type: Object,
default: {}
},
//
isSort: {
type: Boolean,
default: false
},
// border
bordered: {
type: Boolean,
default: false
},
//
isPage: {
type: Boolean,
default: true
},
isRadio: {
type: Boolean,
default: false
},
pageSize: {
type: Number,
default: 20
},
//
scroll: {
type: Object,
default: { x: 'max-content', y: '100%' }
},
//
isInit: {
type: Boolean,
default: true
},
//
rowSelection: {
type: Boolean,
default: true
},
//
isShowRowSelect: {
type: Boolean,
default: false
},
//
size: {
type: String,
default: 'small'
},
// --
checkStrictly: {
type: Boolean,
default: false
},
//
customData: {
type: Function,
default: null
},
//
dataSource: {
type: Array,
default: []
}
});
const emits = defineEmits(['tableListChange', 'onSelect', 'onSelectAll']);
//
const list = ref([]);
//
const tableLoading = ref(false);
//
const pagination = reactive({
current: 1,
pageSize: props.pageSize, //
showSizeChanger: true, //
showLessItems: true, //
pageSizeOptions: ['10', '20', '50', '100'], //
showTotal: total => `${total}`, //
onShowSizeChange: (current, pageSize) => onSizeChange(current, pageSize), //
onChange: (page, pageSize) => onPageChange(page, pageSize), //
total: 0 //
});
//
const selectedRowList = ref([]);
//
const sortBy = ref('');
//
const orderBy = ref('');
//
const currentSelectedRows = ref([]);
const slots = useSlots();
const renderArr = Object.keys(slots);
onMounted(() => {
if (props.isInit) {
getTableList();
}
});
//
const getTableList = () => {
if (props.url) {
tableLoading.value = true;
let params = {
...props.where
};
//
if (props.isSort) {
params.sortBy = sortBy.value;
params.orderBy = orderBy.value;
}
//
if (props.isPage) {
params.pageNo = pagination.current || 1;
params.pageSize = pagination.pageSize || 20;
}
Request[props.methods](props.url, params)
.then(res => {
//
if (props.isPage) {
if (props.customData) {
res = props.customData(res);
}
list.value = res.data.rows;
pagination.total = res.data.totalRows;
} else {
if (props.customData) {
list.value = props.customData(res);
}
list.value = res.data;
}
emits('tableListChange', list.value);
})
.finally(() => (tableLoading.value = false));
}
};
//
const onSizeChange = (current, pageSize) => {
pagination.pageSize = pageSize;
getTableList();
};
//
const onSelectChange = selectedRowKeys => {
selectedRowList.value = selectedRowKeys;
};
// /
const onSelect = (record, selected, selectedRows) => {
currentSelectedRows.value = selectedRows;
emits('onSelect', record, selected, selectedRows);
};
// /
const onSelectAll = (selected, selectedRows, changeRows) => {
emits('onSelectAll', selected, selectedRows, changeRows);
};
//
const onPageChange = (page, pageSize) => {
if (page != pagination.current) {
pagination.current = page;
getTableList();
}
};
//
const tableChange = (pagination, filters, sorter) => {
if (sorter.order == 'ascend') {
sortBy.value = 'asc';
} else if (sorter.order == 'descend') {
sortBy.value = 'desc';
}
orderBy.value = sorter.field;
if (props.isSort) {
getTableList();
}
};
/**
* 重置
*/
const reload = () => {
pagination.current = 1;
getTableList();
};
//
const customRow = (record, index) => {
return {
onClick: () => {
if (props.isShowRowSelect) {
//
if (props.isRadio) {
selectedRowList.value = [record[props.rowId]];
emits('onSelect', record, true, [record]);
} else {
//
if (currentSelectedRows.value.find(item => item[props.rowId] == record[props.rowId])) {
selectedRowList.value.splice(
selectedRowList.value.findIndex(item => item === record[props.rowId]),
1
);
currentSelectedRows.value.splice(
currentSelectedRows.value.findIndex(item => item[props.rowId] === record[props.rowId]),
1
);
emits('onSelect', record, false, currentSelectedRows.value);
} else {
selectedRowList.value.push(record[props.rowId]);
currentSelectedRows.value.push(record);
emits('onSelect', record, true, currentSelectedRows.value);
}
}
}
}
};
};
watch(
() => props.dataSource,
val => {
if (!props.url) {
list.value = val;
}
},
{ deep: true }
);
defineExpose({
reload,
tableLoading,
selectedRowList
});
</script>
<style scoped lang="less">
.table-top {
position: relative;
height: 100%;
.table-bottom {
position: absolute;
bottom: 15px;
left: -20px;
}
}
:deep(.table) {
::-webkit-scrollbar {
width: 10px !important;
}
}
:deep(.ant-spin-nested-loading) {
height: 100%;
.ant-spin-container {
height: 100%;
display: flex;
flex-direction: column;
}
.ant-table-container {
height: 100%;
display: flex;
flex-direction: column;
.ant-table-body {
position: relative;
flex: 1;
table {
position: absolute;
left: 0;
top: 0;
right: 0;
bottom: 0;
}
}
}
.ant-table {
flex: 1;
}
}
:deep(.ant-table-body) {
overflow-y: auto;
}
:deep(.ant-table-bordered .ant-table-container::after) {
border-right: 1.5px solid var(--border-color-split);
border-bottom: 1.5px solid var(--border-color-split);
}
:deep(.ant-table-bordered div.ant-table-body:before) {
background: transparent;
}
</style>

View File

@ -0,0 +1,24 @@
import Request from '@/utils/request/request-util';
/**
* -api
*
*/
export class CustomApi {
/**
* table
* @param {*} params
* @returns
*/
static getUserConfig(params) {
return Request.getAndLoadData('/sysTableWidth/getUserConfig', params);
}
/**
* table
* @param {*} params
* @returns
*/
static setTableWidth(params) {
return Request.post('/sysTableWidth/setTableWidth', params);
}
}

View File

@ -0,0 +1,225 @@
<template>
<a-modal
:width="526"
:visible="props.visible"
:confirm-loading="loading"
:title="'自定义显示列'"
:body-style="{ padding: '16px 24px' }"
@ok="save"
wrapClassName="custom-modal"
:maskClosable="false"
@cancel="cancel"
>
<div class="box">
<draggable
tag="tbody"
item-key="id"
v-model="columns"
:component-data="{ class: 'ant-table-tbody' }"
handle=".icon-opt-zidingyilie"
style="width: 100px"
:animation="300"
>
<template #item="{ element }">
<tr class="row">
<!-- 拖动按钮 -->
<td style="text-align: left" class="outlined">
<icon-font iconClass="icon-opt-zidingyilie" color="#60666b" fontSize="20px"></icon-font>
</td>
<!-- 名称 -->
<td style="text-align: left; width: 260px" class="">
{{ element.title }}
</td>
<!-- 是否显示 -->
<td style="text-align: center; padding: 8px" class="">
<a-switch v-model:checked="element.isShow" :disabled="element.title == '序号'" />
</td>
<!-- 是否显示 -->
<td style="text-align: center; padding: 8px 8px 8px 32px" class="">
<a-input v-model:value="element.width"></a-input>
</td>
</tr>
</template>
</draggable>
</div>
<template #footer>
<div class="footer">
<div>
<vxe-switch v-model="fieldType" :open-value="1" :close-value="2" :disabled="isDisabled"></vxe-switch>是否同步全体员工
<a-tooltip>
<template #title>只有管理员才能操作</template>
<question-circle-outlined />
</a-tooltip>
</div>
<a-space>
<a-button @click="cancel" :loading="loading">取消</a-button>
<a-button type="primary" @click="save" :loading="loading">确定</a-button>
</a-space>
</div>
</template>
</a-modal>
</template>
<script setup name="Custom">
import draggable from 'vuedraggable';
import { CustomApi } from './api/CustomApi';
import { computed, onMounted, ref } from 'vue';
import { useUserStore } from '@/store/modules/user';
const props = defineProps({
//
visible: Boolean,
data: {
type: Array,
default: []
},
//
fieldBusinessCode: {
type: String,
default: 'PROJECT_TABLE'
}
});
const emits = defineEmits(['update:visible', 'done']);
// store
const userStore = useUserStore();
//
const isDisabled = computed(() => {
if (userStore.authorities && userStore.authorities.find(item => item == 'SYS_CONFIG')) {
return false;
}
return true;
});
//
const loading = ref(false);
//
const columns = ref([]);
//
const fieldType = ref(2);
onMounted(() => {
if (props.data) {
columns.value = deepClone(props.data);
}
});
const deepClone = obj => {
let result;
if (Array.isArray(obj)) {
result = [];
} else if (typeof obj === 'object' && obj !== null) {
result = {};
} else {
return obj;
}
Object.keys(obj).forEach(key => {
if (typeof obj[key] === 'object' && obj[key] !== null) {
result[key] = deepClone(obj[key]);
} else {
result[key] = obj[key];
}
});
return result;
};
/**
* 保存和编辑
*
* @author lipengteng
* @date 2021/11/05 14:55
*/
const save = () => {
//
loading.value = true;
columns.value.forEach(item => {
if (item.width) item.width = Number(item.width);
});
let params = {
fieldBusinessCode: props.fieldBusinessCode,
fieldType: fieldType.value,
tableWidthJson: JSON.stringify(columns.value)
};
CustomApi.setTableWidth(params)
.then(res => {
//
loading.value = false;
// visible
updateVisible(false);
// done
emits('done', columns.value);
})
.catch(() => {
loading.value = false;
});
};
const updateVisible = value => {
emits('update:visible', value);
};
//
const cancel = () => {
updateVisible(false);
};
</script>
<style scoped lang="less">
.box {
width: 100%;
max-height: 400px;
overflow: auto;
border-bottom: 1px solid #eee;
min-height: 200px;
.row:hover {
background: #eee;
}
.ant-input {
border-radius: 5px;
}
}
.footer {
display: flex;
justify-content: space-between;
}
:deep(.ant-input) {
background: rgba(197, 207, 209, 0.2) !important;
}
</style>
<style lang="less">
.custom-modal {
.ant-modal-title {
color: #262626;
font-size: 18px !important;
font-style: normal;
font-weight: 500;
}
.ant-modal-close-icon {
width: 20px;
height: 20px;
svg {
width: 20px;
height: 20px;
}
}
.ant-modal-header {
border-bottom: 0px !important;
padding: 16px 24px 0px 24px !important;
}
.ant-modal-footer {
padding: 0px 16px 16px 16px !important;
border-top: 0px !important;
}
}
.outlined {
.iconfont {
cursor: move !important;
}
}
</style>
<style scoped>
.ant-btn {
border-radius: 4px !important;
}
</style>

View File

@ -0,0 +1,101 @@
<template>
<div class="work-down">
<!-- dropdown类型 -->
<a-dropdown
:getPopupContainer="
triggerNode => {
return triggerNode.parentNode || document.body;
}
"
:trigger="['click']"
>
<a @click.prevent class="down-title">
{{ downName ? downName : dropName }}
<DownOutlined style="color: #898E91; margin-left: 8px;" />
</a>
<template #overlay>
<a-menu @click="dropClick" v-show="list?.length > 0">
<a-menu-item :key="item[keyValue]" v-for="item in list">{{ item[keyName] }}</a-menu-item>
</a-menu>
</template>
</a-dropdown>
</div>
</template>
<script>
import { defineComponent, reactive, toRefs } from 'vue';
export default defineComponent({
name: 'DropDown',
props: {
//
list: {
type: Array,
default: () => []
},
//
dropName: {
type: String,
default: ''
},
//key
keyValue: {
type: String,
default: ''
},
//
keyName: {
type: String,
default: ''
}
},
setup(props, context) {
const data = reactive({
downName: ''
});
//
const dropClick = ({ key }) => {
data.downName = props.list.filter(item => item[props.keyValue] == key)[0].name;
context.emit('dropClick', key);
};
//
const changeDropname = (val) => {
data.downName = val
}
return {
...toRefs(data),
changeDropname,
dropClick
};
}
});
</script>
<style lang="less" scoped>
.work-down {
display: inline-block;
}
.ant-dropdown-link {
color: #000 !important;
}
:deep(.tree-drop .ant-dropdown-menu-item:hover) {
background-color: #fff !important;
}
.down-title {
height: 36px;
display: flex;
align-items: center;
justify-content: center;
padding: 8px 16px;
border-radius: 4px;
color: #60666B;
font-size: 16px;
border: 1px solid rgba(197, 207, 209, 0.60);
}
:deep(.ant-dropdown-content) {
min-width: 240px;
border-radius: 4px;
}
</style>

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