@@ -0,0 +1,14 @@ | |||
# https://editorconfig.org | |||
root = true | |||
[*] | |||
charset = utf-8 | |||
indent_style = space | |||
indent_size = 2 | |||
end_of_line = lf | |||
insert_final_newline = true | |||
trim_trailing_whitespace = true | |||
[*.md] | |||
insert_final_newline = false | |||
trim_trailing_whitespace = false |
@@ -0,0 +1,3 @@ | |||
VUE_APP_VERSION=1.0.0 | |||
VUE_APP_NAME=河湖长SaaS运营端 | |||
VUE_APP_API_BASE_URL=http://127.0.0.1:9057/api/ |
@@ -0,0 +1,3 @@ | |||
VUE_APP_VERSION=1.0.0 | |||
VUE_APP_NAME=河湖长SaaS运营端 | |||
VUE_APP_API_BASE_URL=http://192.168.11.11:9057/api/ |
@@ -0,0 +1,3 @@ | |||
VUE_APP_VERSION=1.0.0 | |||
VUE_APP_NAME=河湖长SaaS运营端 | |||
VUE_APP_API_BASE_URL=http://101.132.127.1:9057/api/ |
@@ -0,0 +1,3 @@ | |||
VUE_APP_VERSION=1.0.0 | |||
VUE_APP_NAME=河湖长SaaS运营端 | |||
VUE_APP_API_BASE_URL=http://192.168.11.241:9057/api/ |
@@ -0,0 +1,4 @@ | |||
public | |||
src/assets | |||
dist | |||
node_modules |
@@ -0,0 +1,14 @@ | |||
module.exports = { | |||
root: true, | |||
env: { | |||
node: true, | |||
}, | |||
extends: [ | |||
'plugin:vue/vue3-essential', | |||
'eslint:recommended' | |||
], | |||
parserOptions: { | |||
parser: 'babel-eslint' | |||
}, | |||
rules: {} | |||
} |
@@ -0,0 +1,23 @@ | |||
.DS_Store | |||
node_modules | |||
/dist | |||
# local env files | |||
.env.local | |||
.env.*.local | |||
# Log files | |||
npm-debug.log* | |||
yarn-debug.log* | |||
yarn-error.log* | |||
pnpm-debug.log* | |||
# Editor directories and files | |||
.idea | |||
.vscode | |||
*.suo | |||
*.ntvs* | |||
*.njsproj | |||
*.sln | |||
*.sw? |
@@ -0,0 +1,5 @@ | |||
module.exports = { | |||
presets: [ | |||
'@vue/cli-plugin-babel/preset' | |||
] | |||
} |
@@ -0,0 +1,14 @@ | |||
{ | |||
"compilerOptions": { | |||
"baseUrl": "./", | |||
"paths": { | |||
"@/*": [ | |||
"src/*" | |||
] | |||
} | |||
}, | |||
"exclude": [ | |||
"node_modules", | |||
"dist" | |||
] | |||
} |
@@ -0,0 +1,65 @@ | |||
{ | |||
"name": "tuoheng.hhz.tenant", | |||
"version": "1.5.0", | |||
"private": true, | |||
"scripts": { | |||
"serve": "vue-cli-service serve --mode local", | |||
"build": "vue-cli-service build", | |||
"build:dev": "vue-cli-service build --mode development", | |||
"build:test": "vue-cli-service build --mode test", | |||
"build:prod": "vue-cli-service build --mode preview", | |||
"build:preview": "vue-cli-service build --mode preview", | |||
"build:report": "vue-cli-service build --report", | |||
"lint": "vue-cli-service lint" | |||
}, | |||
"dependencies": { | |||
"@amap/amap-jsapi-loader": "~1.0.1", | |||
"@tinymce/tinymce-vue": "~4.0.4", | |||
"ant-design-vue": "~2.2.2", | |||
"axios": "~0.21.1", | |||
"core-js": "~3.15.2", | |||
"countup.js": "~2.0.7", | |||
"cropperjs": "~1.5.12", | |||
"echarts": "~5.1.2", | |||
"echarts-wordcloud": "~2.0.0", | |||
"ele-admin-pro": "~1.5.0", | |||
"html2canvas": "^1.3.2", | |||
"jspdf": "^2.4.0", | |||
"moment": "^2.29.1", | |||
"nprogress": "~0.2.0", | |||
"ol": "^6.6.1", | |||
"tinymce": "~5.8.2", | |||
"tui-image-editor": "^3.15.0", | |||
"video.js": "^7.14.3", | |||
"videojs-contrib-hls": "^5.15.0", | |||
"vue": "~3.1.5", | |||
"vue-axios": "~3.2.4", | |||
"vue-i18n": "~9.1.7", | |||
"vue-router": "~4.0.10", | |||
"vue-video-player": "^5.0.2", | |||
"vuedraggable": "~4.0.3", | |||
"vuex": "~4.0.2", | |||
"xgplayer-vue": "~1.1.5", | |||
"xlsx": "~0.17.0" | |||
}, | |||
"devDependencies": { | |||
"@vue/cli-plugin-babel": "~4.5.13", | |||
"@vue/cli-plugin-eslint": "~4.5.13", | |||
"@vue/cli-plugin-router": "~4.5.13", | |||
"@vue/cli-plugin-vuex": "~4.5.13", | |||
"@vue/cli-service": "~4.5.13", | |||
"@vue/compiler-sfc": "~3.1.5", | |||
"babel-eslint": "~10.1.0", | |||
"compression-webpack-plugin": "~6.1.1", | |||
"eslint": "~6.8.0", | |||
"eslint-plugin-vue": "~7.13.0", | |||
"less": "~4.1.1", | |||
"less-loader": "~7.3.0", | |||
"postcss": "~8.3.5" | |||
}, | |||
"browserslist": [ | |||
"> 1%", | |||
"last 2 versions", | |||
"not dead" | |||
] | |||
} |
@@ -0,0 +1,22 @@ | |||
<!DOCTYPE html> | |||
<html lang="zh-CN"> | |||
<head> | |||
<meta charset="utf-8"> | |||
<meta http-equiv="X-UA-Compatible" content="IE=edge"> | |||
<meta name="viewport" content="width=device-width,initial-scale=1.0"> | |||
<link rel="icon" href="<%= BASE_URL %>favicon.ico"> | |||
<title><%= process.env.VUE_APP_NAME %></title> | |||
</head> | |||
<body> | |||
<noscript> | |||
<strong>We're sorry but <%= htmlWebpackPlugin.options.title %> doesn't work properly without JavaScript enabled. Please enable it to continue.</strong> | |||
</noscript> | |||
<div id="app"> | |||
<div class="ele-admin-loading"></div> | |||
<style> | |||
.ele-admin-loading{position:fixed;top:50%;left:50%;transform:translate(-50%,-50%)}.ele-admin-loading:before{content:"";width:30px;height:30px;margin:0 auto;display:block;border-radius:50%;background:#1890ff;animation:loading-bounce .3s cubic-bezier(0.05,0,0.2,1) infinite alternate}.ele-admin-loading:after{content:"";width:10px;height:2px;margin:0 auto;display:block;border-radius:50%;background:#BBB;animation:loading-shadow .3s cubic-bezier(0.05,0,0.2,1) infinite alternate}@keyframes loading-bounce{from{transform:translateY(0)}to{transform:translateY(-40px)}}@keyframes loading-shadow{from{transform:scale(1,1);opacity:1}to{transform:scale(3,2);opacity:.3}} | |||
</style> | |||
</div> | |||
<!-- built files will be auto injected --> | |||
</body> | |||
</html> |
@@ -0,0 +1,389 @@ | |||
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 characters...": "\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\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", | |||
"Image description": "\u56fe\u7247\u63cf\u8ff0", | |||
"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", | |||
"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", | |||
"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", | |||
"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\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", | |||
"Spell check": "\u62fc\u5199\u68c0\u67e5", | |||
"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", | |||
"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", | |||
"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)", | |||
"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", | |||
"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", | |||
"permanent pen": "\u8bb0\u53f7\u7b14", | |||
"comments": "\u5907\u6ce8", | |||
"Anchor": "\u951a\u70b9", | |||
"Special character": "\u7279\u6b8a\u7b26\u53f7", | |||
"Code sample": "\u4ee3\u7801\u793a\u4f8b", | |||
"Color": "\u989c\u8272", | |||
"Emoticons": "\u8868\u60c5", | |||
"Document properties": "\u6587\u6863\u5c5e\u6027", | |||
"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", | |||
"Spellcheck": "\u62fc\u5199\u68c0\u67e5", | |||
"Caption": "\u6807\u9898", | |||
"Insert template": "\u63d2\u5165\u6a21\u677f" | |||
}); |
@@ -0,0 +1,59 @@ | |||
/** | |||
* 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 th, | |||
table td { | |||
border: 1px solid #6d737b; | |||
padding: 0.4rem; | |||
} | |||
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; | |||
} | |||
/* Make text in selected cells in tables dark and readable */ | |||
td[data-mce-selected], | |||
th[data-mce-selected] { | |||
color: #333; | |||
} | |||
.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; | |||
} |
@@ -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 td,table th{border:1px solid #6d737b;padding:.4rem}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}td[data-mce-selected],th[data-mce-selected]{color:#333}.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} |
@@ -0,0 +1,49 @@ | |||
/** | |||
* 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 th, | |||
table td { | |||
border: 1px solid #ccc; | |||
padding: 0.4rem; | |||
} | |||
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; | |||
} |
@@ -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 td,table th{border:1px solid #ccc;padding:.4rem}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} |
@@ -0,0 +1,54 @@ | |||
/** | |||
* 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; | |||
} | |||
table th, | |||
table td { | |||
border: 1px solid #ccc; | |||
padding: 0.4rem; | |||
} | |||
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; | |||
} |
@@ -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 td,table th{border:1px solid #ccc;padding:.4rem}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} |
@@ -0,0 +1,50 @@ | |||
/** | |||
* 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 th, | |||
table td { | |||
border: 1px solid #ccc; | |||
padding: 0.4rem; | |||
} | |||
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; | |||
} |
@@ -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 td,table th{border:1px solid #ccc;padding:.4rem}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} |
@@ -0,0 +1,677 @@ | |||
/** | |||
* 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 { | |||
background-image: 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"); | |||
background-size: 100%; | |||
content: ''; | |||
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 { | |||
background-image: 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: 10000; | |||
} | |||
.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-clonedresizable { | |||
opacity: 0.5; | |||
outline: 1px dashed black; | |||
position: absolute; | |||
z-index: 10000; | |||
} | |||
.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: 10001; | |||
} | |||
.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 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] { | |||
background-color: #b4d7ff !important; | |||
} | |||
.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] * { | |||
-webkit-touch-callout: none; | |||
-webkit-user-select: none; | |||
-moz-user-select: none; | |||
-ms-user-select: none; | |||
user-select: none; | |||
} | |||
.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; | |||
} | |||
.mce-item-table, | |||
.mce-item-table td, | |||
.mce-item-table th, | |||
.mce-item-table 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; | |||
} |
@@ -0,0 +1,689 @@ | |||
/** | |||
* 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 { | |||
background-image: 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"); | |||
background-size: 100%; | |||
content: ''; | |||
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 { | |||
background-image: 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: 10000; | |||
} | |||
.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-clonedresizable { | |||
opacity: 0.5; | |||
outline: 1px dashed black; | |||
position: absolute; | |||
z-index: 10000; | |||
} | |||
.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: 10001; | |||
} | |||
.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 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] { | |||
background-color: #b4d7ff !important; | |||
} | |||
.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] * { | |||
-webkit-touch-callout: none; | |||
-webkit-user-select: none; | |||
-moz-user-select: none; | |||
-ms-user-select: none; | |||
user-select: none; | |||
} | |||
.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; | |||
} | |||
.mce-item-table, | |||
.mce-item-table td, | |||
.mce-item-table th, | |||
.mce-item-table 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: '-'; | |||
} |
@@ -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; | |||
} |
@@ -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} |
@@ -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%; | |||
} | |||
} |
@@ -0,0 +1,695 @@ | |||
/** | |||
* 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 { | |||
background-image: 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"); | |||
background-size: 100%; | |||
content: ''; | |||
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 { | |||
background-image: 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: 10000; | |||
} | |||
.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-clonedresizable { | |||
opacity: 0.5; | |||
outline: 1px dashed black; | |||
position: absolute; | |||
z-index: 10000; | |||
} | |||
.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: 10001; | |||
} | |||
.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 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] { | |||
background-color: #b4d7ff !important; | |||
} | |||
.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] * { | |||
-webkit-touch-callout: none; | |||
-webkit-user-select: none; | |||
-moz-user-select: none; | |||
-ms-user-select: none; | |||
user-select: none; | |||
} | |||
.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; | |||
} | |||
.mce-item-table, | |||
.mce-item-table td, | |||
.mce-item-table th, | |||
.mce-item-table 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; | |||
} |
@@ -0,0 +1,689 @@ | |||
/** | |||
* 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 { | |||
background-image: 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"); | |||
background-size: 100%; | |||
content: ''; | |||
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 { | |||
background-image: 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: 10000; | |||
} | |||
.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-clonedresizable { | |||
opacity: 0.5; | |||
outline: 1px dashed black; | |||
position: absolute; | |||
z-index: 10000; | |||
} | |||
.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: 10001; | |||
} | |||
.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 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] { | |||
background-color: #b4d7ff !important; | |||
} | |||
.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] * { | |||
-webkit-touch-callout: none; | |||
-webkit-user-select: none; | |||
-moz-user-select: none; | |||
-ms-user-select: none; | |||
user-select: none; | |||
} | |||
.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; | |||
} | |||
.mce-item-table, | |||
.mce-item-table td, | |||
.mce-item-table th, | |||
.mce-item-table 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: '-'; | |||
} |
@@ -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; | |||
} |
@@ -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} |
@@ -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%; | |||
} | |||
} |
@@ -0,0 +1,31 @@ | |||
<template> | |||
<a-config-provider :locale="locale"> | |||
<router-view/> | |||
</a-config-provider> | |||
</template> | |||
<script> | |||
import zh_CN from 'ele-admin-pro/packages/lang/zh_CN'; | |||
import zh_TW from 'ele-admin-pro/packages/lang/zh_TW'; | |||
import en from 'ele-admin-pro/packages/lang/en_US'; | |||
const languages = {zh_CN, zh_TW, en}; | |||
export default { | |||
data() { | |||
return { | |||
locale: languages[this.$i18n.locale] | |||
}; | |||
}, | |||
computed: { | |||
language() { | |||
return this.$i18n.locale; | |||
} | |||
}, | |||
watch: { | |||
language() { | |||
this.locale = languages[this.language]; | |||
} | |||
} | |||
}; | |||
</script> |
@@ -0,0 +1,257 @@ | |||
<!-- tinymce富文本编辑器组件 --> | |||
<template> | |||
<editor | |||
:init="config" | |||
:disabled="disabled" | |||
:model-value="value" | |||
@update:model-value="updateValue"/> | |||
</template> | |||
<script> | |||
const BASE_URL = process.env.BASE_URL; | |||
import tinymce from 'tinymce/tinymce'; | |||
import 'tinymce/icons/default'; | |||
import 'tinymce/themes/silver'; | |||
import 'tinymce/plugins/code'; | |||
import 'tinymce/plugins/print'; | |||
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/imagetools'; | |||
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 Editor from '@tinymce/tinymce-vue'; | |||
// 默认配置 | |||
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: [ | |||
'code', | |||
'print', | |||
'preview', | |||
'fullscreen', | |||
'paste', | |||
'searchreplace', | |||
'save', | |||
'autosave', | |||
'link', | |||
'autolink', | |||
'image', | |||
'imagetools', | |||
'media', | |||
'table', | |||
'codesample', | |||
'lists', | |||
'advlist', | |||
'hr', | |||
'charmap', | |||
'emoticons', | |||
'anchor', | |||
'directionality', | |||
'pagebreak', | |||
'quickbars', | |||
'nonbreaking', | |||
'visualblocks', | |||
'visualchars', | |||
'wordcount' | |||
].join(' '), | |||
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(' '), | |||
draggable_modal: true, | |||
toolbar_mode: 'sliding', | |||
images_upload_handler: (blobInfo, success) => { | |||
success('data:image/jpeg;base64,' + blobInfo.base64()); | |||
}, | |||
file_picker_types: 'media', | |||
file_picker_callback: () => { | |||
} | |||
}; | |||
// 暗黑主题 | |||
const DARK_CONFIG = { | |||
skin_url: BASE_URL + 'tinymce/skins/ui/oxide-dark', | |||
content_css: BASE_URL + 'tinymce/skins/content/dark/content.min.css' | |||
}; | |||
export default { | |||
name: 'TinymceEditor', | |||
components: {Editor}, | |||
emits: ['update:value'], | |||
props: { | |||
// 值(v-model) | |||
value: String, | |||
// 编辑器配置 | |||
init: Object, | |||
// 是否禁用 | |||
disabled: Boolean, | |||
// 自动跟随框架主题 | |||
autoTheme: { | |||
type: Boolean, | |||
default: true | |||
}, | |||
// 是否使用暗黑主题 | |||
darkTheme: Boolean | |||
}, | |||
data() { | |||
const dark = this.autoTheme ? this.$store.state.theme.darkMode : this.darkTheme; | |||
return { | |||
// 编辑器配置 | |||
config: Object.assign({}, DEFAULT_CONFIG, dark ? DARK_CONFIG : {}, this.init) | |||
}; | |||
}, | |||
computed: { | |||
// 是否是暗黑模式 | |||
darkMode() { | |||
try { | |||
return this.$store.state.theme.darkMode; | |||
} catch (e) { | |||
return false; | |||
} | |||
} | |||
}, | |||
created() { | |||
tinymce.init({}); | |||
}, | |||
methods: { | |||
/* 更新value */ | |||
updateValue(value) { | |||
this.$emit('update:value', value); | |||
}, | |||
/* 切换编辑器主题 */ | |||
changeTheme(dark) { | |||
document.head.querySelectorAll('[id^="mce-"]').forEach((elem) => { | |||
let href = elem.getAttribute('href'); | |||
if (href.indexOf('/oxide-dark/') !== -1) { | |||
if (!dark) { | |||
href = href.replace('/oxide-dark/', '/oxide/'); | |||
elem.setAttribute('href', href); | |||
} | |||
} else { | |||
if (dark) { | |||
href = href.replace('/oxide/', '/oxide-dark/'); | |||
elem.setAttribute('href', href); | |||
} | |||
} | |||
}); | |||
this.changeContentTheme(dark); | |||
}, | |||
/* 切换编辑器内容区的主题 */ | |||
changeContentTheme(dark) { | |||
document.body.querySelectorAll('iframe[id^="tiny-vue_"]').forEach((frame) => { | |||
const win = frame.contentWindow; | |||
if (win) { | |||
const doc = win.document; | |||
if (doc) { | |||
[].forEach.call(doc.head.querySelectorAll('[id^="mce-"]'), (elem) => { | |||
let href = elem.getAttribute('href'); | |||
if (href.indexOf('/skins/ui/') !== -1) { | |||
if (href.indexOf('/oxide-dark/') !== -1) { | |||
if (!dark) { | |||
href = href.replace('/oxide-dark/', '/oxide/'); | |||
elem.setAttribute('href', href); | |||
} | |||
} else { | |||
if (dark) { | |||
href = href.replace('/oxide/', '/oxide-dark/'); | |||
elem.setAttribute('href', href); | |||
} | |||
} | |||
} else if (href.indexOf('/skins/content/') !== -1) { | |||
if (href.indexOf('/dark/') !== -1) { | |||
if (!dark) { | |||
href = href.replace('/dark/', '/default/'); | |||
elem.setAttribute('href', href); | |||
} | |||
} else { | |||
if (dark) { | |||
href = href.replace('/default/', '/dark/'); | |||
elem.setAttribute('href', href); | |||
} | |||
} | |||
} | |||
}); | |||
} | |||
} | |||
}); | |||
} | |||
}, | |||
watch: { | |||
darkMode() { | |||
if (this.autoTheme) { | |||
this.changeTheme(this.darkMode); | |||
} | |||
} | |||
} | |||
} | |||
</script> | |||
<style> | |||
body .tox-tinymce-aux { | |||
z-index: 19892000; | |||
} | |||
</style> |
@@ -0,0 +1,382 @@ | |||
<template ref="uploadImage"> | |||
<div class="finish_room"> | |||
<div class="finish_room2"> | |||
<div> | |||
<div :key="index" v-for="(item, index) in photo" class="room_img"> | |||
<img :src="typeof item == 'string' ? item : item.url" /> | |||
<div v-if="!disabled" @click="deleteImg(index)" class="im-button"> | |||
<div class="im-close"></div> | |||
<div class="im-close1"></div> | |||
</div> | |||
</div> | |||
</div> | |||
<div v-if="photo.length < limit" class="room_add_img"> | |||
<span style="margin-top: 35px"><img src="@/assets/add_img.png" /></span> | |||
<input :disabled="disabled" @change="add_img" type="file" /> | |||
</div> | |||
</div> | |||
</div> | |||
</template> | |||
<script> | |||
// import axios from "axios"; | |||
import { toRaw } from "vue"; | |||
export default { | |||
name: "upload", | |||
emits: ["update:file"], | |||
props: { | |||
limit: { | |||
type: Number, | |||
default() { | |||
return 1; | |||
}, | |||
}, | |||
disabled: { | |||
type: Boolean, | |||
default() { | |||
return false; | |||
}, | |||
}, | |||
file: { | |||
type: [String, File, Blob, Array], | |||
default() { | |||
return ""; | |||
}, | |||
}, | |||
}, | |||
data() { | |||
return { | |||
photo: [], // 图片列表 | |||
loading: false, | |||
}; | |||
}, | |||
watch: { | |||
file: { | |||
deep: true, | |||
handler(value) { | |||
if (value) { | |||
if (this.limit > 1) { | |||
if (Array.isArray(this.file)) { | |||
if (this.file.length) { | |||
this.photo=[]; | |||
this.file.forEach((item) => { | |||
if (typeof item == "string") { | |||
this.photo.push({ url: item }); | |||
} else { | |||
try { | |||
let fileReader = new FileReader(); | |||
fileReader.readAsDataURL(item); | |||
fileReader.onload = (e) => { | |||
this.photo.push({ url: e.target.result }); | |||
}; | |||
} catch (e) { | |||
console.log(e.message); | |||
} | |||
} | |||
}); | |||
} | |||
} | |||
} else { | |||
if (typeof this.file == "string") { | |||
if (this.file == "") { | |||
this.photo = []; | |||
} else { | |||
this.photo = [{ url: this.file }]; | |||
} | |||
} else { | |||
try { | |||
let fileReader = new FileReader(); | |||
fileReader.readAsDataURL(this.file); | |||
fileReader.onload = (e) => { | |||
this.photo = [{ url: e.target.result }]; | |||
}; | |||
} catch (e) { | |||
console.log(e.message); | |||
} | |||
} | |||
} | |||
} else { | |||
this.photo = []; | |||
} | |||
}, | |||
}, | |||
}, | |||
methods: { | |||
deleteImg(index) { | |||
this.photo.splice(index, 1) | |||
let fileList = toRaw(this.file) | |||
fileList.splice(index, 1); | |||
this.$emit("update:file", fileList); | |||
}, | |||
// 压缩图片 | |||
// compress(img) { | |||
// var url = null; | |||
// var canvas = document.createElement("canvas"); | |||
// var scale = img.height / img.width; | |||
// canvas.width = 720; | |||
// canvas.height = 720 * scale; | |||
// var ctx = canvas.getContext("2d"); | |||
// ctx.clearRect(0, 0, canvas.width, canvas.height); | |||
// ctx.drawImage(img, 0, 0, canvas.width, canvas.height); | |||
// url = canvas.toDataURL("image/jpeg"); | |||
// return url; | |||
// }, | |||
// dataURItoBlob(dataURI) { | |||
// let byteString = window.atob(dataURI.split(",")[1]); | |||
// let mimeString = dataURI.split(",")[0].split(":")[1].split(";")[0]; | |||
// let ab = new ArrayBuffer(byteString.length); | |||
// let ia = new Uint8Array(ab); | |||
// for (let i = 0; i < byteString.length; i++) { | |||
// ia[i] = byteString.charCodeAt(i); | |||
// } | |||
// return new window.Blob([ab], { type: mimeString }); | |||
// }, | |||
add_img(event) { | |||
let file = event.target.files[0]; | |||
if (/\.(gif|jpg|jpeg|png|GIF|JPG|PNG)$/.test(event.target.value)) { | |||
let MAXSIZE = 10 * 1024 * 1024; | |||
let size = file.size; | |||
if (size > MAXSIZE) { | |||
this.$notify.error({ | |||
title: "上传图片错误", | |||
message: "上传图片不能超过10M", | |||
}); | |||
return; | |||
} | |||
let reader = new FileReader(); | |||
let self = this; | |||
reader.readAsDataURL(file); | |||
let img = new Image(); | |||
reader.onload = function (e) { | |||
img.src = this.result; | |||
img.onload = function () { | |||
let base = e.target.result; | |||
let fileItem = file; | |||
// 判断是否压缩 | |||
// if (self.isCompress) { | |||
// base = self.compress(img); | |||
// fileItem = self.dataURItoBlob(base); | |||
// } | |||
let fileList = self.file; | |||
if (self.limit > 1) { | |||
fileList.push(fileItem); | |||
self.$emit("update:file", toRaw(fileList)); | |||
} else { | |||
self.$emit("update:file", fileItem); | |||
} | |||
}; | |||
}; | |||
} else { | |||
event.target.value = ""; | |||
this.$notify.error({ | |||
title: "上传图片错误", | |||
message: "请上传gif|jpg|jpeg|png|GIF|JPG|PNG格式图片", | |||
}); | |||
} | |||
event.target.value = ""; | |||
}, | |||
}, | |||
}; | |||
</script> | |||
<style> | |||
.finish_room { | |||
/*width: 140px;*/ | |||
/*height: 165px;*/ | |||
} | |||
img { | |||
height: 100%; | |||
} | |||
.finish_room2 { | |||
width: 100%; | |||
height: 100%; | |||
display: flex; | |||
align-items: center; | |||
flex-flow: wrap; | |||
} | |||
.finish_room2 > div { | |||
display: flex; | |||
flex-wrap: wrap; | |||
} | |||
.finish_room2 .margeImg { | |||
margin-left: 10px; | |||
} | |||
.finish_room2 .room_img { | |||
width: 100px; | |||
height: 100px; | |||
cursor: pointer; | |||
overflow: hidden; | |||
position: relative; | |||
text-align: center; | |||
background-color: rgba(0, 0, 0, 0.5); | |||
margin-left: 10px; | |||
margin-top: 10px; | |||
} | |||
.finish_room2 .room_img:before { | |||
/*content: "";*/ | |||
/*width: 0;*/ | |||
/*height: 100%;*/ | |||
/*!*background: #000;*!*/ | |||
/*padding: 14px 18px;*/ | |||
/*position: absolute;*/ | |||
/*top: 0;*/ | |||
/*left: 50%;*/ | |||
/*opacity: 0;*/ | |||
} | |||
.finish_room2 .room_img:hover:before { | |||
width: 100%; | |||
left: 0; | |||
opacity: 0.5; | |||
} | |||
.finish_room2 .room_img .box-content { | |||
width: 100%; | |||
padding: 14px 18px; | |||
color: #fff; | |||
position: absolute; | |||
top: 38%; | |||
left: 0; | |||
} | |||
.finish_room2 .room_img .icon { | |||
padding: 0; | |||
margin: 0; | |||
list-style: none; | |||
margin-top: -20px; | |||
} | |||
.finish_room2 .room_img .icon li { | |||
display: inline-block; | |||
} | |||
.finish_room2 .room_img .icon li i { | |||
display: block; | |||
width: 40px; | |||
height: 40px; | |||
line-height: 40px; | |||
border-radius: 50%; | |||
font-size: 20px; | |||
font-weight: 700; | |||
color: #fff; | |||
margin-right: 25px; | |||
opacity: 0; | |||
transform: translateY(50px); | |||
transition: all 0.5s ease 0s; | |||
} | |||
@media only screen and (max-width: 990px) { | |||
.finish_room2 .room_img { | |||
} | |||
} | |||
.finish_room2 .deleteImg { | |||
color: red; | |||
position: absolute; | |||
top: 0px; | |||
left: 80px; | |||
cursor: pointer; | |||
} | |||
.finish_room2 .room_img img { | |||
cursor: pointer; | |||
width: 100px; | |||
height: 100px; | |||
} | |||
.finish_room2 > .room_img span { | |||
position: absolute; | |||
width: auto; | |||
height: auto; | |||
right: 5px; | |||
bottom: 3px; | |||
} | |||
.finish_room2 .im-button { | |||
position: absolute; | |||
top: -14px; | |||
right: -18px; | |||
width: 40px; | |||
height: 40px; | |||
cursor: pointer; | |||
border-radius: 50%; | |||
background-color: rgba(0, 0, 0, 0.5); | |||
opacity: 0; | |||
} | |||
.finish_room2 .room_img:hover .icon li i { | |||
opacity: 0.5; | |||
} | |||
.finish_room2 .room_img:hover img { | |||
opacity: 0.5; | |||
} | |||
.finish_room2 .room_img:hover .im-button { | |||
opacity: 1; | |||
} | |||
.finish_room2 .im-close { | |||
transform: rotate(-45deg); | |||
line-height: 0px; | |||
left: 6px; | |||
bottom: 13px; | |||
display: inline-block; | |||
width: 15px; | |||
height: 2px; | |||
background: #fff; | |||
position: absolute; | |||
} | |||
.finish_room2 .im-close1 { | |||
left: 5px; | |||
bottom: 13px; | |||
display: inline-block; | |||
width: 15px; | |||
height: 2px; | |||
background: #fff; | |||
position: absolute; | |||
transform: rotate(45deg); | |||
} | |||
.room_add_img { | |||
margin-left: 10px; | |||
margin-top: 10px; | |||
width: 100px; | |||
height: 100px; | |||
cursor: pointer; | |||
border: 1px solid #e1e1e1; | |||
display: flex; | |||
flex-direction: column; | |||
align-items: center; | |||
justify-content: space-between; | |||
position: relative; | |||
z-index: 10; | |||
} | |||
.room_add_img > span:nth-child(1) { | |||
width: 30px; | |||
height: 30px; | |||
overflow: hidden; | |||
} | |||
.room_add_img > span:nth-child(2) { | |||
margin-bottom: 10px; | |||
} | |||
.room_add_img input { | |||
cursor: pointer; | |||
position: absolute; | |||
top: 0px; | |||
left: 0px; | |||
width: 100%; | |||
height: 100%; | |||
z-index: 99999; | |||
opacity: 0; | |||
} | |||
</style> |
@@ -0,0 +1,304 @@ | |||
<template> | |||
<div> | |||
<a-upload | |||
:action="uploadAction" | |||
list-type="picture-card" | |||
class="avatar-uploader" | |||
:disabled="disabled" | |||
:headers="headers" | |||
:file-list="fileList" | |||
:beforeUpload="beforeUpload" | |||
:data="{biz:bizPath}" | |||
:multiple="isMultiple" | |||
:showUploadList="isMultiple" | |||
@preview="handlePreview" | |||
@change="handleChange"> | |||
<img v-if="!isMultiple && picUrl" | |||
:src="getAvatarView()" | |||
style="height: 85px;width: 85px;" /> | |||
<div v-else-if="(isMultiple && fileList.length < limit && !disabled) || (!isMultiple && !picUrl)"> | |||
<loading-outlined v-if="loading"></loading-outlined> | |||
<plus-outlined v-else></plus-outlined> | |||
<div class="ant-upload-text">{{text}}</div> | |||
</div> | |||
</a-upload> | |||
<span class="delete-img" @click="deleteImg" v-if="picUrl && limit==1"> | |||
<img :src="require('@/assets/delete.png')"/> | |||
</span> | |||
<a-modal :visible="previewVisible" | |||
:footer="null" | |||
@cancel="previewHandleCancel"> | |||
<img alt="example" | |||
style="width: 100%" | |||
:src="previewImage" /> | |||
</a-modal> | |||
</div> | |||
</template> | |||
<script> | |||
import { | |||
PlusOutlined, | |||
LoadingOutlined | |||
} from '@ant-design/icons-vue'; | |||
import setting from "@/config/setting"; | |||
const getFileAccessHttpUrl = (avatar, subStr) => { | |||
if (!subStr) subStr = 'http' | |||
if (avatar && avatar.startsWith(subStr)) { | |||
return avatar; | |||
} else { | |||
if (avatar && avatar.length > 0 && avatar.indexOf('[') == -1) { | |||
return process.env.VUE_APP_API_BASE_URL + "/uploads/" + avatar; | |||
} | |||
} | |||
} | |||
const uidGenerator = () => { | |||
return '-' + parseInt(Math.random() * 10000 + 1, 10); | |||
} | |||
const getFileName = (path) => { | |||
if (path.lastIndexOf("\\") >= 0) { | |||
let reg = new RegExp("\\\\", "g"); | |||
path = path.replace(reg, "/"); | |||
} | |||
return path.substring(path.lastIndexOf("/") + 1); | |||
} | |||
export default { | |||
name: 'UploadImage', | |||
components: { | |||
PlusOutlined, | |||
LoadingOutlined, | |||
}, | |||
data() { | |||
return { | |||
uploadAction: process.env.VUE_APP_API_BASE_URL + '/upload/uploadImage/' + this.updDir, | |||
headers: {'Content-Type': 'multipart/form-data'}, | |||
fileList: [], | |||
previewImage: "", | |||
previewVisible: false, | |||
picUrl: false, | |||
// 上传组件是否可点击 | |||
canClick: true, | |||
loading: false, | |||
} | |||
}, | |||
props: { | |||
text: { | |||
type: String, | |||
default: '上传图片' | |||
}, | |||
// 父组件传进来的已有的图片数据 | |||
value: { | |||
type: [String, Array], | |||
required: false | |||
}, | |||
// 后端要求携带的其他参数 | |||
bizPath: { | |||
type: String, | |||
required: false, | |||
default: "temp" | |||
}, | |||
// 只能查看不可上传和删除时开启该属性 | |||
disabled: { | |||
type: Boolean, | |||
required: false, | |||
default: false | |||
}, | |||
// 是否多图 | |||
isMultiple: { | |||
type: Boolean, | |||
required: false, | |||
default: false | |||
}, | |||
// 多图情况下限制图片张数 | |||
limit: { | |||
type: Number, | |||
required: false, | |||
default: 1 | |||
}, | |||
// 文件存放目录 | |||
updDir: { | |||
type: String, | |||
default() { | |||
return "error"; | |||
}, | |||
}, | |||
}, | |||
watch: { | |||
value: { | |||
handler(val) { | |||
if (!val) { | |||
this.picUrl = false; | |||
} | |||
this.picUrl = false; | |||
if (val instanceof Array) { | |||
this.initFileList(val.join(',')) | |||
} else { | |||
this.initFileList(val) | |||
} | |||
}, | |||
deep: true, | |||
immediate: true | |||
} | |||
}, | |||
created() { | |||
const token = setting.takeToken(); | |||
this.headers = { "Authorization": token } | |||
}, | |||
methods: { | |||
// 显示已有图片 | |||
initFileList(paths) { | |||
// console.log('initFileList', paths) | |||
if (!paths || paths.length == 0) { | |||
this.fileList = []; | |||
return; | |||
} | |||
this.picUrl = true; | |||
let fileList = []; | |||
let item = paths.split(",") | |||
for (var i = 0; i < item.length; i++) { | |||
let url = getFileAccessHttpUrl(item[i]); | |||
fileList.push({ | |||
uid: uidGenerator(), | |||
name: getFileName(item[i]), | |||
status: 'done', | |||
url: url, | |||
response: { | |||
status: "history", | |||
data: item[i] | |||
} | |||
}) | |||
} | |||
this.fileList = fileList | |||
// console.log('fileList', this.fileList) | |||
}, | |||
beforeUpload: function (file) { | |||
var fileType = file.type; | |||
if (fileType.indexOf('image') < 0) { | |||
this.$message.warning('请上传图片'); | |||
return false; | |||
} | |||
const isJPG = file.type === 'image/jpeg' || file.type === 'image/jpg' || file.type === 'image/png' || file.type === 'image/bmp' || file.type === 'image/gif' | |||
if (!isJPG) { | |||
this.$message.error('上传图片的格式不正确,不是JPG、JPEG、GIF、PNG、BMP'); | |||
} | |||
const isLt2M = file.size / 1024 / 1024 < 2; | |||
if (!isLt2M) { | |||
this.$message.error('文件大小应在10KB~20KB之间'); | |||
} | |||
return isJPG && isLt2M | |||
}, | |||
/** | |||
* 删除图片 | |||
*/ | |||
deleteImg(e) { | |||
this.canClick = true; | |||
this.picUrl = false; | |||
this.fileList = []; | |||
// 绑定空值 | |||
this.$emit('update:value', '') | |||
e.stopPropagation(); | |||
}, | |||
// 关闭弹框 | |||
previewHandleCancel() { | |||
this.previewVisible = false; | |||
}, | |||
// 预览 | |||
handlePreview(file) { | |||
this.previewImage = file.url || file.preview; | |||
this.previewVisible = true; | |||
}, | |||
// 上传 | |||
handleChange(info) { | |||
// console.log('info----handleChange', info) | |||
this.picUrl = false; | |||
let fileList = info.fileList | |||
if (info.file.status === 'done') { | |||
if (info.file.response.success) { | |||
this.picUrl = true; | |||
fileList = fileList.map((file) => { | |||
if (file.response) { | |||
file.url = getFileAccessHttpUrl(file.response.data); | |||
} | |||
return file; | |||
}); | |||
} | |||
} else if (info.file.status === 'error') { | |||
this.$message.error(`${info.file.name} 上传失败.`); | |||
} else if (info.file.status === 'removed') { | |||
this.handleDelete(info.file) | |||
} | |||
console.log('info----handleChange', info.file.status) | |||
this.fileList = fileList | |||
if (info.file.status === 'done' || info.file.status === 'removed') { | |||
this.handlePathChange() | |||
} | |||
}, | |||
// 回传父组件 | |||
handlePathChange() { | |||
let uploadFiles = this.fileList | |||
let item = []; | |||
if (!this.isMultiple) { | |||
item = uploadFiles[uploadFiles.length - 1].response.data; | |||
} else { | |||
for (var i = 0; i < uploadFiles.length; i++) { | |||
item.push(uploadFiles[i].response.data) | |||
} | |||
} | |||
this.$emit('update:value', item) | |||
this.$emit('change', item); | |||
}, | |||
// 删除 | |||
handleDelete(file) { | |||
console.log(file) | |||
}, | |||
// 单图上传显示最新的一张 | |||
getAvatarView() { | |||
if (this.fileList.length > 0) { | |||
let url = this.fileList[this.fileList.length - 1].url | |||
return getFileAccessHttpUrl(url) | |||
} | |||
}, | |||
}, | |||
model: { | |||
prop: 'value', | |||
event: 'change' | |||
} | |||
} | |||
</script> | |||
<style scoped> | |||
.avatar-uploader > .ant-upload { | |||
width: 128px; | |||
height: 128px; | |||
} | |||
.ant-upload-select-picture-card i { | |||
font-size: 32px; | |||
color: #999; | |||
} | |||
.ant-upload-select-picture-card .ant-upload-text { | |||
margin-top: 8px; | |||
color: #666; | |||
} | |||
.delete-img { | |||
display: inline-block; | |||
position: absolute; | |||
left: 105px; | |||
top: 10px; | |||
font-size: 20px; | |||
z-index: 999; | |||
} | |||
.delete-img img{ | |||
position: absolute; | |||
right: -10px; | |||
top: -10px; | |||
width: 25px; | |||
height: 25px; | |||
display: inline-block; | |||
} | |||
.delete-img:hover { | |||
color: #FFF; | |||
} | |||
</style> |
@@ -0,0 +1,69 @@ | |||
/** | |||
* axios配置 | |||
*/ | |||
import axios from 'axios'; | |||
import store from '../store'; | |||
import router from '../router'; | |||
import setting from './setting'; | |||
import {Modal} from 'ant-design-vue'; | |||
// 设置统一的url | |||
axios.defaults.baseURL = '/api'; | |||
/* 请求拦截器 */ | |||
axios.interceptors.request.use((config) => { | |||
// 添加token到header | |||
const token = setting.takeToken(); | |||
if (token) { | |||
config.headers[setting.tokenHeaderName] = token; | |||
} | |||
return config; | |||
}, (error) => { | |||
return Promise.reject(error); | |||
}); | |||
/* 响应拦截器 */ | |||
axios.interceptors.response.use((res) => { | |||
// 登录过期处理 | |||
if (res.data.code === 401) { | |||
if (res.config.url === setting.menuUrl) { | |||
goLogin(); | |||
} else { | |||
Modal.destroyAll(); | |||
Modal.info({ | |||
title: '系统提示', | |||
content: '登录状态已过期, 请退出重新登录!', | |||
okText: '重新登录', | |||
onOk: () => { | |||
goLogin(true); | |||
} | |||
}); | |||
} | |||
return Promise.reject(new Error(res.data.msg)); | |||
} | |||
// token自动续期 | |||
const access_token = res.headers[setting.tokenHeaderName]; | |||
if (access_token) { | |||
setting.cacheToken(access_token); | |||
} | |||
return res; | |||
}, (error) => { | |||
return Promise.reject(error); | |||
}); | |||
/** | |||
* 跳转到登录页面 | |||
*/ | |||
function goLogin(reload) { | |||
store.dispatch('user/removeToken').then(() => { | |||
if (reload) { | |||
location.replace('/login'); // 这样跳转避免再次登录重复注册动态路由 | |||
} else { | |||
const path = router.currentRoute.path; | |||
return router.push({ | |||
path: '/login', | |||
query: path && path !== '/' ? {form: path} : null | |||
}); | |||
} | |||
}); | |||
} |
@@ -0,0 +1,141 @@ | |||
/** | |||
* 框架全局配置 | |||
*/ | |||
export default { | |||
// 不显示侧栏的路由 | |||
hideSidebars: [], | |||
// 不显示全局页脚的路由 | |||
hideFooters: ['/system/dictionary', '/system/organization'], | |||
// 页签可重复打开的路由 | |||
repeatableTabs: ['/system/user/info'], | |||
// 不需要登录的路由 | |||
whiteList: ['/login', '/forget'], | |||
// 菜单数据接口 | |||
menuUrl: '/index/getMenuList', | |||
// 自定义解析菜单接口数据 | |||
parseMenu: null, | |||
// 自定义解析菜单接口单个数据格式 | |||
parseMenuItem: null, | |||
// 直接指定菜单数据 | |||
menus: null, | |||
// 用户信息接口 | |||
userUrl: '/index/getUserInfo', | |||
// 自定义解析接口用户信息 | |||
parseUser(res) { | |||
// code为0是成功, 不一样可以处理如: {code: res.code === 200 ? 0 : res.code, msg: res.message} | |||
let result = {code: res.code, msg: res.msg}; | |||
if (res.data) { | |||
result.data = Object.assign({}, res.data, { | |||
// 姓名和头像会显示在顶栏, 字段不一样可以在这处理, 如: | |||
//avatar: res.data.avatarUrl, | |||
//nickname: res.data.userName, | |||
// 角色和权限信息, 需要为string数组类型 | |||
roles: res.data.roles ? res.data.roles.map(d => d.code) : [], | |||
authorities: res.data.authorities ? res.data.authorities.map(d => d.permission) : [] | |||
}); | |||
} | |||
return result; | |||
}, | |||
// token传递的header名称 | |||
tokenHeaderName: 'Authorization', | |||
// token存储的名称 | |||
tokenStoreName: 'access_token', | |||
// 用户信息存储的名称 | |||
userStoreName: 'user', | |||
// 主题配置存储的名称 | |||
themeStoreName: 'theme', | |||
// 首页标题, 为空会自动获取 | |||
homeTitle: '主页', | |||
// 首页路径, 为空会自动获取 | |||
homePath: null, | |||
// 顶栏是否显示主题设置按钮 | |||
showSetting: true, | |||
// 开启多页签是否缓存组件 | |||
tabKeepAlive: true, | |||
// 是否折叠侧边栏 | |||
collapse: false, | |||
// 侧边栏风格: light(亮色), dark(暗色) | |||
sideStyle: 'dark', | |||
// 顶栏风格: light(亮色), dark(暗色), primary(主色) | |||
headStyle: 'light', | |||
// 标签页风格: default(默认), dot(圆点), card(卡片) | |||
tabStyle: 'default', | |||
// 布局风格: side(默认), top(顶栏菜单), mix(混合菜单) | |||
layoutStyle: 'side', | |||
// 侧边栏菜单风格: default(默认), mix(双排菜单) | |||
sideMenuStyle: 'default', | |||
// 是否固定侧栏 | |||
fixedSidebar: true, | |||
// 是否固定顶栏 | |||
fixedHeader: false, | |||
// 是否固定主体 | |||
fixedBody: true, | |||
// logo是否自适应宽度 | |||
logoAutoSize: false, | |||
// 内容区域宽度是否铺满 | |||
bodyFull: true, | |||
// 是否开启多标签 | |||
showTabs: true, | |||
// 侧栏是否多彩图标 | |||
colorfulIcon: false, | |||
// 侧边栏是否只保持一个子菜单展开 | |||
sideUniqueOpen: true, | |||
// 是否开启页脚 | |||
showFooter: true, | |||
// 是否是色弱模式 | |||
weakMode: false, | |||
// 是否是暗黑模式 | |||
darkMode: false, | |||
// 默认主题色 | |||
color: null, | |||
/** | |||
* 获取缓存的token的方法 | |||
* @returns {string} | |||
*/ | |||
takeToken() { | |||
let token = localStorage.getItem(this.tokenStoreName); | |||
if (!token) { | |||
token = sessionStorage.getItem(this.tokenStoreName); | |||
} | |||
return token; | |||
}, | |||
/** | |||
* 缓存token的方法 | |||
* @param token | |||
* @param remember 是否永久存储 | |||
*/ | |||
cacheToken(token, remember) { | |||
localStorage.removeItem(this.tokenStoreName); | |||
sessionStorage.removeItem(this.tokenStoreName); | |||
if (token) { | |||
if (remember) { | |||
localStorage.setItem(this.tokenStoreName, token); | |||
} else { | |||
sessionStorage.setItem(this.tokenStoreName, token); | |||
} | |||
} | |||
}, | |||
/** | |||
* 获取缓存的用户信息 | |||
* @returns {object} | |||
*/ | |||
takeUser() { | |||
try { | |||
return JSON.parse(localStorage.getItem(this.userStoreName)) || {}; | |||
} catch (e) { | |||
console.error(e); | |||
} | |||
return {}; | |||
}, | |||
/** | |||
* 缓存用户信息 | |||
* @param user | |||
*/ | |||
cacheUser(user) { | |||
if (user) { | |||
localStorage.setItem(this.userStoreName, JSON.stringify(user)); | |||
} else { | |||
localStorage.removeItem(this.userStoreName); | |||
} | |||
} | |||
} |
@@ -0,0 +1,105 @@ | |||
/** | |||
* 英语 | |||
*/ | |||
export default { | |||
route: { | |||
dashboard: { | |||
_name: 'Dashboard', | |||
workplace: {_name: 'Workplace'}, | |||
analysis: {_name: 'Analysis'}, | |||
monitor: {_name: 'Monitor'} | |||
}, | |||
system: { | |||
_name: 'System', | |||
user: { | |||
_name: 'User', | |||
info: {_name: ''} | |||
}, | |||
role: {_name: 'Role'}, | |||
menu: {_name: 'Menu'}, | |||
dictionary: {_name: 'Dictionary'}, | |||
organization: {_name: 'Organization'}, | |||
loginRecord: {_name: 'Login Record'}, | |||
operRecord: {_name: 'Operation Log'} | |||
}, | |||
form: { | |||
_name: 'Form', | |||
basic: {_name: 'Basic Form'}, | |||
advanced: {_name: 'Advanced Form'}, | |||
step: {_name: 'Step Form'} | |||
}, | |||
list: { | |||
_name: 'List', | |||
basic: {_name: 'Basic List'}, | |||
advanced: {_name: 'Advanced List'}, | |||
card: { | |||
_name: 'Card List', | |||
project: {_name: 'Project'}, | |||
application: {_name: 'Application'}, | |||
article: {_name: 'Article'} | |||
} | |||
}, | |||
result: { | |||
_name: 'Result', | |||
success: {_name: 'Success'}, | |||
fail: {_name: 'Fail'} | |||
}, | |||
exception: { | |||
_name: 'Exception', | |||
'403': {_name: '403'}, | |||
'404': {_name: '404'}, | |||
'500': {_name: '500'} | |||
}, | |||
user: { | |||
_name: 'User', | |||
profile: {_name: 'Profile'}, | |||
message: {_name: 'Message'} | |||
}, | |||
extension: { | |||
_name: 'Extension', | |||
icon: {_name: 'Icon'}, | |||
file: {_name: 'File'}, | |||
printer: {_name: 'Printer'}, | |||
excel: {_name: 'Excel'}, | |||
dragsort: {_name: 'Drag Sort'}, | |||
map: {_name: 'Map'}, | |||
player: {_name: 'Player'}, | |||
editor: {_name: 'Editor'}, | |||
more: {_name: 'More'} | |||
}, | |||
example: { | |||
_name: 'Example', | |||
document: {_name: 'Document'}, | |||
choose: {_name: 'Choose'}, | |||
}, | |||
'#': {_name: 'Authorization'} | |||
}, | |||
layout: { | |||
home: 'Home', | |||
header: { | |||
profile: 'Profile', | |||
password: 'Password', | |||
logout: 'SignOut' | |||
}, | |||
footer: { | |||
website: 'Website', | |||
document: 'Document', | |||
authorization: 'Authorization', | |||
copyright: 'Copyright © 2021 Nanjing TuoHeng R & D Center' | |||
}, | |||
logout: { | |||
title: 'Confirm', | |||
message: 'Are you sure you want to logout?' | |||
} | |||
}, | |||
login: { | |||
title: 'User Login', | |||
username: 'please input username', | |||
password: 'please input password', | |||
captcha: 'please input captcha', | |||
remember: 'remember', | |||
forget: 'forget', | |||
login: 'login', | |||
loading: 'loading' | |||
} | |||
} |
@@ -0,0 +1,22 @@ | |||
/** | |||
* 国际化配置 | |||
*/ | |||
import {createI18n} from 'vue-i18n'; | |||
import enLocale from './en'; | |||
import zhCNLocale from './zh_CN'; | |||
import zhTWLocale from './zh_TW'; | |||
const messages = { | |||
en: enLocale, | |||
zh_CN: zhCNLocale, | |||
zh_TW: zhTWLocale | |||
}; | |||
const i18n = createI18n({ | |||
messages: messages, | |||
silentTranslationWarn: true, | |||
// 默认语言 | |||
locale: localStorage.getItem('i18n-lang') || 'zh_CN' | |||
}); | |||
export default i18n; |
@@ -0,0 +1,104 @@ | |||
/** | |||
* 简体中文 | |||
*/ | |||
export default { | |||
route: { | |||
dashboard: { | |||
_name: '系统首页', | |||
workplace: {_name: '工作台'}, | |||
analysis: {_name: '分析页'}, | |||
monitor: {_name: '监控页'} | |||
}, | |||
system: { | |||
_name: '系统管理', | |||
user: { | |||
_name: '用户管理', | |||
info: {_name: ''} | |||
}, | |||
role: {_name: '角色管理'}, | |||
menu: {_name: '菜单管理'}, | |||
dictionary: {_name: '字典管理'}, | |||
organization: {_name: '机构管理'}, | |||
loginRecord: {_name: '登录日志'}, | |||
operRecord: {_name: '操作日志'} | |||
}, | |||
form: { | |||
_name: '表单页面', | |||
basic: {_name: '基础表单'}, | |||
advanced: {_name: '复杂表单'}, | |||
step: {_name: '分步表单'} | |||
}, | |||
list: { | |||
_name: '列表页面', | |||
basic: {_name: '基础列表'}, | |||
advanced: {_name: '复杂列表'}, | |||
card: { | |||
_name: '卡片列表', | |||
project: {_name: '项目列表'}, | |||
application: {_name: '应用列表'}, | |||
article: {_name: '文章列表'} | |||
} | |||
}, | |||
result: { | |||
_name: '结果页面', | |||
success: {_name: '成功页'}, | |||
fail: {_name: '失败页'} | |||
}, | |||
exception: { | |||
_name: '异常页面', | |||
'403': {_name: '403'}, | |||
'404': {_name: '404'}, | |||
'500': {_name: '500'} | |||
}, | |||
user: { | |||
_name: '个人中心', | |||
profile: {_name: '个人资料'}, | |||
message: {_name: '我的消息'} | |||
}, | |||
extension: { | |||
_name: '扩展组件', | |||
icon: {_name: '字体图标'}, | |||
file: {_name: '文件列表'}, | |||
printer: {_name: '打印插件'}, | |||
excel: {_name: 'excel插件'}, | |||
dragsort: {_name: '拖拽排序'}, | |||
map: {_name: '地图组件'}, | |||
player: {_name: '视频播放'}, | |||
editor: {_name: '富文本框'}, | |||
more: {_name: '更多组件'} | |||
}, | |||
example: { | |||
_name: '经典实例', | |||
document: {_name: '案卷调整'}, | |||
choose: {_name: '批量选择'}, | |||
}, | |||
}, | |||
layout: { | |||
home: '主页', | |||
header: { | |||
profile: '个人中心', | |||
password: '修改密码', | |||
logout: '退出登录' | |||
}, | |||
footer: { | |||
website: '官网', | |||
document: '操作手册', | |||
authorization: '产品介绍', | |||
copyright: 'Copyright © 2021 拓恒技术' | |||
}, | |||
logout: { | |||
title: '提示', | |||
message: '确定要退出登录吗?' | |||
} | |||
}, | |||
login: { | |||
title: '河湖长SaaS运营端', | |||
username: '请输入登录账号', | |||
password: '请输入登录密码', | |||
captcha: '请输入验证码', | |||
remember: '记住密码', | |||
forget: '忘记密码', | |||
login: '登录', | |||
loading: '登录中' | |||
} | |||
} |
@@ -0,0 +1,104 @@ | |||
/** | |||
* 繁体中文 | |||
*/ | |||
export default { | |||
route: { | |||
dashboard: { | |||
_name: 'Dashboard', | |||
workplace: {_name: '工作臺'}, | |||
analysis: {_name: '分析頁'}, | |||
monitor: {_name: '監控頁'} | |||
}, | |||
system: { | |||
_name: '系統管理', | |||
user: { | |||
_name: '用戶管理', | |||
info: {_name: ''} | |||
}, | |||
role: {_name: '角色管理'}, | |||
menu: {_name: '選單管理'}, | |||
dictionary: {_name: '字典管理'}, | |||
organization: {_name: '機构管理'}, | |||
loginRecord: {_name: '登入日誌'}, | |||
operRecord: {_name: '操作日誌'} | |||
}, | |||
form: { | |||
_name: '表單頁面', | |||
basic: {_name: '基礎表單'}, | |||
advanced: {_name: '複雜表單'}, | |||
step: {_name: '分步表單'} | |||
}, | |||
list: { | |||
_name: '清單頁面', | |||
basic: {_name: '基礎清單'}, | |||
advanced: {_name: '複雜清單'}, | |||
card: { | |||
_name: '卡片清單', | |||
project: {_name: '項目清單'}, | |||
application: {_name: '應用清單'}, | |||
article: {_name: '文章清單'} | |||
} | |||
}, | |||
result: { | |||
_name: '結果頁面', | |||
success: {_name: '成功頁'}, | |||
fail: {_name: '失敗頁'} | |||
}, | |||
exception: { | |||
_name: '异常頁面', | |||
'403': {_name: '403'}, | |||
'404': {_name: '404'}, | |||
'500': {_name: '500'} | |||
}, | |||
user: { | |||
_name: '個人中心', | |||
profile: {_name: '個人資料'}, | |||
message: {_name: '我的消息'} | |||
}, | |||
extension: { | |||
_name: '擴展組件', | |||
icon: {_name: '字體圖標'}, | |||
file: {_name: '檔案清單'}, | |||
printer: {_name: '列印挿件'}, | |||
excel: {_name: 'excel挿件'}, | |||
dragsort: {_name: '拖拽排序'}, | |||
map: {_name: '地圖組件'}, | |||
player: {_name: '視頻播放'}, | |||
editor: {_name: '富文本框'}, | |||
more: {_name: '更多組件'} | |||
}, | |||
example: { | |||
_name: '經典實例', | |||
document: {_name: '案卷調整'}, | |||
choose: {_name: '批量選擇'}, | |||
}, | |||
}, | |||
layout: { | |||
home: '主頁', | |||
header: { | |||
profile: '個人中心', | |||
password: '修改密碼', | |||
logout: '安全登出' | |||
}, | |||
footer: { | |||
website: '官網', | |||
document: '操作手册', | |||
authorization: '产品介绍', | |||
copyright: 'Copyright © 2021 拓恒技术' | |||
}, | |||
logout: { | |||
title: '詢問', | |||
message: '確定要登出嗎?' | |||
} | |||
}, | |||
login: { | |||
title: '河湖长SaaS运营端', | |||
username: '請輸入登入帳號', | |||
password: '請輸入登入密碼', | |||
captcha: '請輸入驗證碼', | |||
remember: '記住密碼', | |||
forget: '忘記密碼', | |||
login: '登入', | |||
loading: '登入中' | |||
} | |||
} |
@@ -0,0 +1,34 @@ | |||
<!-- 页脚 --> | |||
<template> | |||
<div class="ele-text-center" style="padding: 16px 0;"> | |||
<a-space size="large"> | |||
<a | |||
class="ele-text-secondary" | |||
href="#" | |||
target="_blank"> | |||
{{ $t('layout.footer.website') }} | |||
</a> | |||
<a | |||
class="ele-text-secondary" | |||
href="#" | |||
target="_blank"> | |||
{{ $t('layout.footer.document') }} | |||
</a> | |||
<a | |||
class="ele-text-secondary" | |||
href="#" | |||
target="_blank"> | |||
{{ $t('layout.footer.authorization') }} | |||
</a> | |||
</a-space> | |||
<div class="ele-text-secondary" style="margin-top: 8px;"> | |||
{{ $t('layout.footer.copyright') }} | |||
</div> | |||
</div> | |||
</template> | |||
<script> | |||
export default { | |||
name: 'EleFooter' | |||
} | |||
</script> |
@@ -0,0 +1,172 @@ | |||
<!-- 顶栏右侧区域按钮 --> | |||
<template> | |||
<div class="ele-admin-header-tool"> | |||
<div class="ele-admin-header-tool-item hidden-sm-and-down" @click="changeFullscreen"> | |||
<fullscreen-exit-outlined v-if="fullscreen"/> | |||
<fullscreen-outlined v-else/> | |||
</div> | |||
<!-- 语言切换 --> | |||
<!-- <div class="ele-admin-header-tool-item"> | |||
<a-dropdown placement="bottomCenter" :overlay-style="{minWidth: '120px', paddingTop: '17px'}"> | |||
<global-outlined style="transform: scale(1.08);"/> | |||
<template #overlay> | |||
<a-menu :selected-keys="language" @click="changeLanguage"> | |||
<a-menu-item key="en">English</a-menu-item> | |||
<a-menu-item key="zh_CN">简体中文</a-menu-item> | |||
<a-menu-item key="zh_TW">繁體中文</a-menu-item> | |||
</a-menu> | |||
</template> | |||
</a-dropdown> | |||
</div> --> | |||
<!-- 消息通知 --> | |||
<!-- <div class="ele-admin-header-tool-item"> | |||
<ele-notice/> | |||
</div> --> | |||
<!-- 用户信息 --> | |||
<div class="ele-admin-header-tool-item"> | |||
<a-dropdown placement="bottomCenter" :overlay-style="{minWidth: '120px'}"> | |||
<div class="ele-admin-header-avatar"> | |||
<a-avatar :src="loginUser.avatar"/> | |||
<span>{{ loginUser.nickname }} </span> | |||
<down-outlined/> | |||
</div> | |||
<template #overlay> | |||
<a-menu @click="onUserDropClick"> | |||
<!-- <a-menu-item key="profile"> | |||
<div class="ele-cell"> | |||
<user-outlined/> | |||
<div class="ele-cell-content">{{ $t('layout.header.profile') }}</div> | |||
</div> | |||
</a-menu-item> --> | |||
<a-menu-item key="password"> | |||
<div class="ele-cell"> | |||
<key-outlined/> | |||
<div class="ele-cell-content">{{ $t('layout.header.password') }}</div> | |||
</div> | |||
</a-menu-item> | |||
<a-menu-divider/> | |||
<a-menu-item key="logout"> | |||
<div class="ele-cell"> | |||
<logout-outlined/> | |||
<div class="ele-cell-content">{{ $t('layout.header.logout') }}</div> | |||
</div> | |||
</a-menu-item> | |||
</a-menu> | |||
</template> | |||
</a-dropdown> | |||
</div> | |||
<!-- 主题设置 --> | |||
<div v-if="showSetting" class="ele-admin-header-tool-item" @click="openSetting"> | |||
<MoreOutlined/> | |||
</div> | |||
</div> | |||
</template> | |||
<script> | |||
import {createVNode} from 'vue'; | |||
import { | |||
DownOutlined, | |||
MoreOutlined, | |||
UserOutlined, | |||
KeyOutlined, | |||
LogoutOutlined, | |||
ExclamationCircleOutlined, | |||
FullscreenOutlined, | |||
FullscreenExitOutlined, | |||
// GlobalOutlined | |||
} from '@ant-design/icons-vue'; | |||
import {toggleFullscreen, isFullscreen} from 'ele-admin-pro/packages/util.js'; | |||
// import EleNotice from './notice'; | |||
export default { | |||
name: 'EleHeaderRight', | |||
components: { | |||
DownOutlined, | |||
MoreOutlined, | |||
UserOutlined, | |||
KeyOutlined, | |||
LogoutOutlined, | |||
FullscreenOutlined, | |||
FullscreenExitOutlined, | |||
// GlobalOutlined, | |||
// EleNotice | |||
}, | |||
emits: ['item-click', 'change-language'], | |||
props: { | |||
// 是否显示打开设置抽屉按钮 | |||
showSetting: { | |||
type: Boolean, | |||
default: true | |||
} | |||
}, | |||
computed: { | |||
// 当前登录用户信息 | |||
loginUser() { | |||
return this.$store.state.user.user; | |||
}, | |||
// 当前语言 | |||
language() { | |||
return [this.$i18n.locale]; | |||
} | |||
}, | |||
data() { | |||
return { | |||
// 是否全屏状态 | |||
fullscreen: false | |||
}; | |||
}, | |||
methods: { | |||
/* 个人信息下拉菜单点击 */ | |||
onUserDropClick({key}) { | |||
if (key === 'logout') { | |||
// 退出登录 | |||
this.$confirm({ | |||
title: this.$t('layout.logout.title'), | |||
content: this.$t('layout.logout.message'), | |||
icon: createVNode(ExclamationCircleOutlined), | |||
maskClosable: true, | |||
onOk: () => { | |||
// 调用接口退出登录 | |||
this.$http.get('/login/logout').then(res => { | |||
if (res.data.code === 0) { | |||
// 清除缓存的token | |||
this.$store.dispatch('user/removeToken').then(() => { | |||
location.replace('/login'); // 这样跳转避免再次登录重复注册动态路由 | |||
}); | |||
} else { | |||
this.$message.error(res.data.msg); | |||
} | |||
}).catch((e) => { | |||
this.$message.error(e.message); | |||
}); | |||
} | |||
}); | |||
} else if (key === 'profile') { | |||
this.$router.push('/user/profile'); | |||
} else if (key === 'password') { | |||
this.$emit('item-click', 'password'); | |||
} | |||
}, | |||
/* 打开设置抽屉 */ | |||
openSetting() { | |||
this.$emit('item-click', 'setting'); | |||
}, | |||
/* 全屏切换 */ | |||
changeFullscreen() { | |||
try { | |||
this.fullscreen = toggleFullscreen(); | |||
} catch (e) { | |||
this.$message.error('您的浏览器不支持全屏模式'); | |||
} | |||
}, | |||
/* 检查全屏状态 */ | |||
checkFullscreen() { | |||
this.fullscreen = isFullscreen(); | |||
}, | |||
/* 切换语言 */ | |||
changeLanguage({key}) { | |||
this.$emit('change-language', key); | |||
} | |||
} | |||
} | |||
</script> |
@@ -0,0 +1,242 @@ | |||
<!-- 框架布局 --> | |||
<template> | |||
<ele-pro-layout | |||
ref="layout" | |||
:i18n="i18n" | |||
:menus="user.menus" | |||
:home-title="homeTitle" | |||
:project-name="projectName" | |||
:show-content="showContent" | |||
v-model:show-setting="showSetting" | |||
:need-setting="setting.needSetting" | |||
:hide-footers="setting.hideFooters" | |||
:hide-sidebars="setting.hideSidebars" | |||
:repeatable-tabs="setting.repeatableTabs" | |||
:tabs="theme.tabs" | |||
:color="theme.color" | |||
:collapse="theme.collapse" | |||
:head-style="theme.headStyle" | |||
:side-style="theme.sideStyle" | |||
:layout-style="theme.layoutStyle" | |||
:side-menu-style="theme.sideMenuStyle" | |||
:fixed-body="theme.fixedBody" | |||
:fixed-header="theme.fixedHeader" | |||
:fixed-sidebar="theme.fixedSidebar" | |||
:body-full="theme.bodyFull" | |||
:show-footer="theme.showFooter" | |||
:colorful-icon="theme.colorfulIcon" | |||
:logo-auto-size="theme.logoAutoSize" | |||
:side-unique-open="theme.sideUniqueOpen" | |||
:show-tabs="theme.showTabs" | |||
:tab-style="theme.tabStyle" | |||
:dark-mode="theme.darkMode" | |||
:weak-mode="theme.weakMode" | |||
@logo-click="onLogoClick" | |||
@reload-page="reloadPage" | |||
@update-screen="updateScreen" | |||
@update-collapse="updateCollapse" | |||
@tab-add="tabAdd" | |||
@tab-remove="tabRemove" | |||
@tab-remove-all="tabRemoveAll" | |||
@tab-remove-left="tabRemoveLeft" | |||
@tab-remove-right="tabRemoveRight" | |||
@tab-remove-other="tabRemoveOther" | |||
@change-style="changeStyle" | |||
@change-color="changeColor" | |||
@change-dark-mode="changeDarkMode" | |||
@change-weak-mode="changeWeakMode" | |||
@set-home-components="setHomeComponents"> | |||
<!-- logo图标 --> | |||
<template #logo> | |||
<img src="@/assets/logo.png" alt="logo"/> | |||
</template> | |||
<!-- 顶栏右侧区域 --> | |||
<template #right> | |||
<ele-header-right | |||
ref="header" | |||
:show-setting="setting.needSetting" | |||
@change-language="changeLanguage" | |||
@item-click="onItemClick"/> | |||
</template> | |||
<!-- 全局页脚 --> | |||
<template #footer> | |||
<ele-footer v-if="$route.path.indexOf('/dashboard')==-1" /> | |||
</template> | |||
<!-- 修改密码弹窗 --> | |||
<ele-password v-model:visible="showPassword"/> | |||
</ele-pro-layout> | |||
</template> | |||
<script> | |||
import {mapGetters} from 'vuex'; | |||
import EleHeaderRight from './header-right'; | |||
import ElePassword from './password'; | |||
import EleFooter from './footer'; | |||
import setting from '@/config/setting'; | |||
import { | |||
reloadPageTab, | |||
addPageTab, | |||
removePageTab, | |||
removeAllPageTab, | |||
removeLeftPageTab, | |||
removeRightPageTab, | |||
removeOtherPageTab | |||
} from '@/utils/page-tab-util'; | |||
export default { | |||
name: 'EleLayout', | |||
components: { | |||
EleHeaderRight, | |||
ElePassword, | |||
EleFooter | |||
}, | |||
computed: { | |||
// 主页标题, 移除国际化上面template中使用:home-title="setting.homeTitle" | |||
homeTitle() { | |||
return this.$t('layout.home'); | |||
}, | |||
...mapGetters(['theme', 'user']) | |||
}, | |||
data() { | |||
return { | |||
// 全局配置 | |||
setting: setting, | |||
// 是否显示修改密码弹窗 | |||
showPassword: false, | |||
// 是否显示主题设置抽屉 | |||
showSetting: false, | |||
// 是否显示主体部分 | |||
showContent: true, | |||
// 项目名 | |||
projectName: process.env.VUE_APP_NAME | |||
}; | |||
}, | |||
created() { | |||
// 获取用户信息 | |||
this.getUserInfo(); | |||
}, | |||
methods: { | |||
/* 获取当前用户信息 */ | |||
getUserInfo() { | |||
if (setting.userUrl) { | |||
this.$http.get(setting.userUrl).then((res) => { | |||
const result = setting.parseUser ? setting.parseUser(res.data) : res.data; | |||
if (result.code === 0) { | |||
const user = result.data; | |||
this.$store.dispatch('user/setUser', user); | |||
this.$store.dispatch('user/setRoles', user ? user.roles : null); | |||
this.$store.dispatch('user/setAuthorities', user ? user.authorities : null); | |||
// 设置节点权限 | |||
this.$store.dispatch('user/setPermission', user ? user.permissionList : null); | |||
} else if (result.msg) { | |||
this.$message.error(result.msg); | |||
} | |||
// 在用户权限信息请求完成后再渲染主体部分, 以免权限控制指令不生效 | |||
this.showContent = true; | |||
}).catch((e) => { | |||
console.error(e); | |||
this.showContent = true; | |||
this.$message.error(e.message); | |||
}); | |||
} | |||
}, | |||
/* 顶栏右侧点击 */ | |||
onItemClick(key) { | |||
if (key === 'password') { | |||
this.showPassword = true; | |||
} else if (key === 'setting') { | |||
this.showSetting = true; | |||
} | |||
}, | |||
/* 刷新页签 */ | |||
reloadPage() { | |||
reloadPageTab(); | |||
}, | |||
/* logo点击事件 */ | |||
onLogoClick(isHome) { | |||
if (!isHome) { | |||
this.$router.push('/'); | |||
} | |||
}, | |||
/* 更新collapse */ | |||
updateCollapse(value) { | |||
this.$store.dispatch('theme/set', {key: 'collapse', value: value}); | |||
}, | |||
/* 更新屏幕尺寸 */ | |||
updateScreen() { | |||
this.$store.dispatch('theme/updateScreen'); | |||
const checkFullscreen = this.$refs.header.checkFullscreen; | |||
checkFullscreen && checkFullscreen(); | |||
}, | |||
/* 切换主题风格 */ | |||
changeStyle(value) { | |||
this.$store.dispatch('theme/set', value); | |||
}, | |||
/* 切换主题色 */ | |||
changeColor(value) { | |||
const hide = this.$message.loading({content: '正在加载主题...'}); | |||
this.$store.dispatch('theme/setColor', value).then(() => { | |||
hide(); | |||
}).catch((e) => { | |||
console.error(e); | |||
hide(); | |||
this.$message.error('主题加载失败'); | |||
}); | |||
}, | |||
changeDarkMode(value) { | |||
this.$store.dispatch('theme/setDarkMode', value); | |||
}, | |||
changeWeakMode(value) { | |||
this.$store.dispatch('theme/setWeakMode', value); | |||
}, | |||
setHomeComponents(components) { | |||
this.$store.dispatch('theme/setHomeComponents', components); | |||
}, | |||
/* 添加tab */ | |||
tabAdd(value) { | |||
addPageTab(value); | |||
}, | |||
/* 移除tab */ | |||
tabRemove(obj) { | |||
removePageTab(obj.name).then(({lastPath}) => { | |||
if (obj.active === obj.name) { | |||
this.$router.push(lastPath || '/'); | |||
} | |||
}); | |||
}, | |||
/* 移除全部tab */ | |||
tabRemoveAll(active) { | |||
removeAllPageTab(); | |||
if (active !== '/') { | |||
this.$router.push('/'); | |||
} | |||
}, | |||
/* 移除左边tab */ | |||
tabRemoveLeft(value) { | |||
removeLeftPageTab(value); | |||
}, | |||
/* 移除右边tab */ | |||
tabRemoveRight(value) { | |||
removeRightPageTab(value); | |||
}, | |||
/* 移除其它tab */ | |||
tabRemoveOther(value) { | |||
removeOtherPageTab(value); | |||
}, | |||
/* 菜单路由国际化对应的名称 */ | |||
i18n(path, key/*, menu*/) { | |||
// 参数三menu即原始菜单数据, 如果需要菜单标题多语言数据从接口返回可用此参数获取对应的多语言标题 | |||
// 例如下面这样写, 接口的菜单数据为{path: '/system/user', titles: {zh: '用户管理', en: 'User'}} | |||
// return menu ? menu.titles[this.$i18n.locale] : null; | |||
const k = 'route.' + key + '._name', title = this.$t(k); | |||
return title === k ? null : title; | |||
}, | |||
/* 切换语言 */ | |||
changeLanguage(lang) { | |||
this.$i18n.locale = lang; | |||
this.$refs.layout.changeLanguage(); | |||
localStorage.setItem('i18n-lang', lang); | |||
} | |||
} | |||
} | |||
</script> |
@@ -0,0 +1,278 @@ | |||
<!-- 顶栏消息通知图标 --> | |||
<template> | |||
<a-dropdown v-model:visible="visible" :trigger="['click']"> | |||
<a-badge :count="allNum" class="ele-notice-trigger"> | |||
<bell-outlined style="padding: 6px;"/> | |||
</a-badge> | |||
<template #overlay> | |||
<div class="ant-dropdown-menu ele-notice-pop"> | |||
<div @click.stop=""> | |||
<a-tabs v-model:active-key="active"> | |||
<a-tab-pane key="notice" :tab="noticeTitle" force-render> | |||
<a-list item-layout="horizontal" :data-source="notice"> | |||
<template #renderItem="{item}"> | |||
<a-list-item> | |||
<a-list-item-meta :title="item.title" :description="item.time"> | |||
<template #avatar> | |||
<a-avatar :style="{background: item.color}"> | |||
<template #icon> | |||
<component :is="item.icon"/> | |||
</template> | |||
</a-avatar> | |||
</template> | |||
</a-list-item-meta> | |||
</a-list-item> | |||
</template> | |||
</a-list> | |||
<div v-if="notice.length" class="ele-cell ele-notice-actions"> | |||
<div class="ele-cell-content" @click="clear('notice')">清空通知</div> | |||
<a-divider type="vertical"/> | |||
<div class="ele-cell-content" @click="more('notice')">查看更多</div> | |||
</div> | |||
</a-tab-pane> | |||
<a-tab-pane key="message" :tab="messageTitle" force-render> | |||
<a-list item-layout="horizontal" :data-source="message"> | |||
<template #renderItem="{item}"> | |||
<a-list-item> | |||
<a-list-item-meta :title="item.title"> | |||
<template #avatar> | |||
<a-avatar :src="item.avatar"/> | |||
</template> | |||
<template #description> | |||
<div>{{ item.content }}</div> | |||
<div>{{ item.time }}</div> | |||
</template> | |||
</a-list-item-meta> | |||
</a-list-item> | |||
</template> | |||
</a-list> | |||
<div v-if="message.length" class="ele-cell ele-notice-actions"> | |||
<div class="ele-cell-content" @click="clear('message')">清空私信</div> | |||
<a-divider type="vertical"/> | |||
<div class="ele-cell-content" @click="more('message')">查看更多</div> | |||
</div> | |||
</a-tab-pane> | |||
<a-tab-pane key="todo" :tab="todoTitle" force-render> | |||
<a-list item-layout="horizontal" :data-source="todo"> | |||
<template #renderItem="{item}"> | |||
<a-list-item> | |||
<a-list-item-meta :description="item.desc"> | |||
<template #title> | |||
<div class="ele-cell"> | |||
<div class="ele-cell-content">{{ item.title }}</div> | |||
<a-tag :color="['', 'red', 'blue'][item.state]"> | |||
{{ ['未开始', '即将到期', '进行中'][item.state] }} | |||
</a-tag> | |||
</div> | |||
</template> | |||
</a-list-item-meta> | |||
</a-list-item> | |||
</template> | |||
</a-list> | |||
<div v-if="todo.length" class="ele-cell ele-notice-actions"> | |||
<div class="ele-cell-content" @click="clear('todo')">清空待办</div> | |||
<a-divider type="vertical"/> | |||
<div class="ele-cell-content" @click="more('todo')">查看更多</div> | |||
</div> | |||
</a-tab-pane> | |||
</a-tabs> | |||
</div> | |||
</div> | |||
</template> | |||
</a-dropdown> | |||
</template> | |||
<script> | |||
import { | |||
BellOutlined, | |||
NotificationFilled, | |||
PushpinFilled, | |||
VideoCameraFilled, | |||
CarryOutFilled, | |||
BellFilled | |||
} from '@ant-design/icons-vue'; | |||
export default { | |||
name: 'EleNotice', | |||
components: { | |||
BellOutlined, | |||
NotificationFilled, | |||
PushpinFilled, | |||
VideoCameraFilled, | |||
CarryOutFilled, | |||
BellFilled | |||
}, | |||
data() { | |||
return { | |||
visible: false, | |||
active: 'notice', | |||
notice: [ | |||
{ | |||
color: '#60B2FC', | |||
icon: 'NotificationFilled', | |||
title: '你收到了一封8份新邮件', | |||
time: '2020-07-27 18:30:18' | |||
}, | |||
{ | |||
color: '#F5686F', | |||
icon: 'PushpinFilled', | |||
title: '烈酒烫心同意了你的调休申请', | |||
time: '2020-07-27 09:08:36' | |||
}, | |||
{ | |||
color: '#7CD734', | |||
icon: 'VideoCameraFilled', | |||
title: '盈笑凝眸邀请你参加立项视频会议', | |||
time: '2020-07-26 18:30:01' | |||
}, | |||
{ | |||
color: '#FAAD14', | |||
icon: 'CarryOutFilled', | |||
title: '你推荐的离殇荡情已通过PUA考核', | |||
time: '2020-07-25 16:38:46' | |||
}, | |||
{ | |||
color: '#2BCACD', | |||
icon: 'BellFilled', | |||
title: '你的8月季度奖金已发放', | |||
time: '2020-07-25 11:03:31' | |||
} | |||
], | |||
message: [ | |||
{ | |||
avatar: require('@/assets/logo.png'), | |||
title: '离殇荡情 评论了你的日志', | |||
content: '写的不错, 以后多多向你学习~', | |||
time: '2020-07-27 18:30:18' | |||
}, | |||
{ | |||
avatar: require('@/assets/logo.png'), | |||
title: '耀世天下 点赞了你的日志', | |||
content: '写的不错, 以后多多向你学习~', | |||
time: '2020-07-27 09:08:36' | |||
}, | |||
{ | |||
avatar: require('@/assets/logo.png'), | |||
title: '风吻一斩 评论了你的周报', | |||
content: '写的不错, 以后多多向你学习~', | |||
time: '2020-07-26 18:30:01' | |||
}, | |||
{ | |||
avatar: require('@/assets/logo.png'), | |||
title: '笑饮孤鸿 点赞了你的周报', | |||
content: '写的不错, 以后多多向你学习~', | |||
time: '2020-07-25 11:03:31' | |||
} | |||
], | |||
todo: [ | |||
{ | |||
state: 0, | |||
title: '离殇荡情的请假审批', | |||
desc: '离殇荡情在 07-27 18:30 提交的请假申请' | |||
}, | |||
{ | |||
state: 1, | |||
title: '核心代码紧急变更', | |||
desc: '需要在 2020-07-27 之前完成' | |||
}, | |||
{ | |||
state: 2, | |||
title: '年度总结会议', | |||
desc: '需要在 2020-07-26 18:30 前完成' | |||
}, | |||
{ | |||
state: 2, | |||
title: '河湖长巡检平台发布', | |||
desc: '需要在 2021-08-15 11:03 前完成' | |||
} | |||
] | |||
}; | |||
}, | |||
computed: { | |||
// 通知标题 | |||
noticeTitle() { | |||
return this.notice.length ? `通知(${this.notice.length})` : '通知'; | |||
}, | |||
// 私信标题 | |||
messageTitle() { | |||
return this.message.length ? `私信(${this.message.length})` : '私信'; | |||
}, | |||
// 待办标题 | |||
todoTitle() { | |||
return this.todo.length ? `待办(${this.todo.length})` : '待办'; | |||
}, | |||
// 所有消息数量 | |||
allNum() { | |||
return this.notice.length + this.message.length + this.todo.length; | |||
} | |||
}, | |||
methods: { | |||
/* 清空消息 */ | |||
clear(type) { | |||
if (type === 'notice') { | |||
this.notice = []; | |||
} else if (type === 'message') { | |||
this.message = []; | |||
} else if (type === 'todo') { | |||
this.todo = []; | |||
} | |||
}, | |||
/* 查看更多 */ | |||
more(type) { | |||
this.visible = false; | |||
if (this.$route.path !== '/user/message' || this.$route.query.type !== type) { | |||
this.$router.push({path: '/user/message', query: {type: type}}); | |||
} | |||
} | |||
} | |||
} | |||
</script> | |||
<style> | |||
.ele-notice-trigger.ant-badge { | |||
color: inherit; | |||
} | |||
.ele-notice-pop.ant-dropdown-menu { | |||
padding: 0; | |||
width: 336px; | |||
max-width: 100%; | |||
margin-top: 11px; | |||
} | |||
/* 内容 */ | |||
.ele-notice-pop .ant-tabs-nav-wrap { | |||
text-align: center; | |||
} | |||
.ele-notice-pop .ant-list-item { | |||
padding-left: 24px; | |||
padding-right: 24px; | |||
transition: background-color .3s; | |||
cursor: pointer; | |||
} | |||
.ele-notice-pop .ant-list-item:hover { | |||
background: hsla(0, 0%, 60%, .05); | |||
} | |||
.ele-notice-pop .ant-tag { | |||
margin: 0; | |||
} | |||
/* 操作按钮 */ | |||
.ele-notice-pop .ele-notice-actions { | |||
border-top: 1px solid hsla(0, 0%, 60%, .15); | |||
} | |||
.ele-notice-pop .ele-notice-actions > .ele-cell-content { | |||
line-height: 46px; | |||
text-align: center; | |||
transition: background-color .3s; | |||
cursor: pointer; | |||
} | |||
.ele-notice-pop .ele-notice-actions > .ele-cell-content:hover { | |||
background: hsla(0, 0%, 60%, .05); | |||
} | |||
</style> |
@@ -0,0 +1,107 @@ | |||
<!-- 修改密码弹窗 --> | |||
<template> | |||
<a-modal | |||
:width="420" | |||
title="修改密码" | |||
:visible="visible" | |||
:confirm-loading="loading" | |||
:body-style="{paddingBottom: '16px'}" | |||
@update:visible="onUpdateVisible" | |||
@cancel="onCancel" | |||
@ok="onOk"> | |||
<a-form | |||
ref="form" | |||
:model="form" | |||
:rules="rules" | |||
:label-col="{sm: {span: 6}}" | |||
:wrapper-col="{sm: {span: 18}}"> | |||
<a-form-item label="旧密码" name="oldPassword"> | |||
<a-input-password v-model:value="form.oldPassword" placeholder="请输入旧密码"/> | |||
</a-form-item> | |||
<a-form-item label="新密码" name="newPassword"> | |||
<a-input-password v-model:value="form.newPassword" placeholder="请输入新密码"/> | |||
</a-form-item> | |||
<a-form-item label="确认密码" name="rePassword"> | |||
<a-input-password v-model:value="form.rePassword" placeholder="请再次输入新密码"/> | |||
</a-form-item> | |||
</a-form> | |||
</a-modal> | |||
</template> | |||
<script> | |||
export default { | |||
name: 'UpdatePwd', | |||
emits: ['update:visible'], | |||
props: { | |||
visible: Boolean | |||
}, | |||
data() { | |||
return { | |||
// 表单数据 | |||
form: { | |||
oldPassword: '', | |||
newPassword: '', | |||
rePassword: '' | |||
}, | |||
// 表单验证 | |||
rules: { | |||
oldPassword: [ | |||
{required: true, message: '请输入旧密码', type: 'string', trigger: 'blur'} | |||
], | |||
newPassword: [ | |||
{required: true, message: '请输入新密码', type: 'string', trigger: 'blur'} | |||
], | |||
rePassword: [ | |||
{ | |||
required: true, | |||
type: 'string', | |||
trigger: 'blur', | |||
validator: async (rule, value) => { | |||
if (!value) { | |||
return Promise.reject('请再次输入新密码'); | |||
} | |||
if (value === this.form.newPassword) { | |||
return Promise.resolve(); | |||
} | |||
return Promise.reject('两次输入密码不一致'); | |||
} | |||
} | |||
] | |||
}, | |||
// 按钮loading | |||
loading: false | |||
}; | |||
}, | |||
methods: { | |||
/* 保存修改 */ | |||
onOk() { | |||
this.$refs.form.validate().then(() => { | |||
this.loading = true; | |||
this.$http.put('/updatePwd', this.form).then(res => { | |||
this.loading = false; | |||
if (res.data.code === 0) { | |||
this.$message.success(res.data.msg); | |||
this.onUpdateVisible(false); | |||
} else { | |||
this.$message.error(res.data.msg); | |||
} | |||
}).catch(e => { | |||
this.loading = false; | |||
this.$message.error(e.message); | |||
}); | |||
}).catch(() => { | |||
}); | |||
}, | |||
/* 关闭回调 */ | |||
onCancel() { | |||
this.form = {}; | |||
this.loading = false; | |||
this.$refs.form.resetFields(); | |||
}, | |||
/* 修改visible */ | |||
onUpdateVisible(value) { | |||
this.$emit('update:visible', value); | |||
} | |||
} | |||
} | |||
</script> |
@@ -0,0 +1,43 @@ | |||
/** 主入口js */ | |||
import {createApp} from 'vue'; | |||
import App from './App.vue'; | |||
import store from './store'; | |||
import router from './router'; | |||
import axios from 'axios'; | |||
import VueAxios from 'vue-axios'; | |||
import './config/axios-config'; | |||
import permission from './utils/permission'; | |||
import './styles/index.less'; | |||
import EleAdminPro from 'ele-admin-pro'; | |||
import ModalUtil from 'ele-admin-pro/packages/modal-util'; | |||
import i18n from './lang'; | |||
import VideoPlayer from 'vue-video-player' | |||
import 'vue-video-player/src/custom-theme.css' | |||
import 'video.js/dist/video-js.css' // css 一定要引入 | |||
const app = createApp(App); | |||
app.config.productionTip = false; | |||
app.use(store); | |||
app.use(router); | |||
app.use(VueAxios, axios); | |||
app.use(EleAdminPro, { | |||
response: { | |||
statusName: 'code', | |||
statusCode: 0, | |||
msgName: 'msg', // 信息的字段名称,支持嵌套 | |||
dataName: 'data.records', // 数据列表的字段名称,支持嵌套,例如:result.list | |||
countName: 'data.total' // 数据总数的字段名称,支持嵌套 | |||
}, | |||
request: { | |||
pageName: 'page', // 页码的参数名称 | |||
limitName: 'limit', // 每页数据量的参数名 | |||
sortName: 'sort', // 排序字段参数名称 | |||
orderName: 'order' // 排序方式的参数名称 | |||
} | |||
}); | |||
app.use(permission); | |||
app.use(EleAdminPro); | |||
app.use(ModalUtil); | |||
app.use(i18n); | |||
app.use(VideoPlayer) | |||
app.mount('#app'); |
@@ -0,0 +1,89 @@ | |||
/** | |||
* 路由配置 | |||
*/ | |||
import {createRouter, createWebHistory} from 'vue-router'; | |||
import store from '@/store'; | |||
import setting from '@/config/setting'; | |||
import EleLayout from '@/layout'; | |||
import {menuToRoutes} from 'ele-admin-pro'; | |||
import NProgress from 'nprogress'; | |||
// 静态路由 | |||
const routes = [ | |||
{ | |||
path: '/login', | |||
component: () => import('@/views/login/login'), | |||
meta: {title: '登录'} | |||
}, | |||
// { | |||
// path: '/forget', | |||
// component: () => import('@/views/login/forget'), | |||
// meta: {title: '忘记密码'} | |||
// }, | |||
{ | |||
path: '/:pathMatch(.*)*', | |||
component: () => import('@/views/exception/404') | |||
} | |||
]; | |||
const router = createRouter({ | |||
routes, | |||
history: createWebHistory() | |||
}); | |||
// 路由守卫 | |||
router.beforeEach((to, from, next) => { | |||
NProgress.start(); | |||
updateTitle(to); | |||
// 判断是否登录 | |||
if (setting.takeToken()) { | |||
// 判断是否已经注册动态路由 | |||
if (!store.state.user.menus) { | |||
// 获取动态路由 | |||
store.dispatch('user/getMenus').then(({menus, home}) => { | |||
// menuToRoutes方法是把菜单数据转成路由数据格式 | |||
router.addRoute({ | |||
path: '/', | |||
component: EleLayout, | |||
redirect: setting.homePath || home, | |||
children: menuToRoutes(menus, (component) => require('@/views' + component)) | |||
}); | |||
next({...to, replace: true}); | |||
}).catch(() => { | |||
next(); | |||
}); | |||
} else { | |||
next(); | |||
} | |||
} else if (setting.whiteList.includes(to.path)) { | |||
next(); | |||
} else { | |||
next({path: '/login', query: to.path === '/' ? {} : {from: to.path}}); | |||
} | |||
}); | |||
router.afterEach(() => { | |||
setTimeout(() => { | |||
NProgress.done(true); | |||
}, 300); | |||
}); | |||
export default router; | |||
/** | |||
* 更新浏览器标题 | |||
* @param route 路由 | |||
*/ | |||
function updateTitle(route) { | |||
if (!route.path.startsWith('/redirect/')) { | |||
let names = []; | |||
if (route && route.meta && route.meta.title) { | |||
names.push(route.meta.title); | |||
} | |||
const appName = process.env.VUE_APP_NAME; | |||
if (appName) { | |||
names.push(appName); | |||
} | |||
document.title = names.join(' - '); | |||
} | |||
} |
@@ -0,0 +1,5 @@ | |||
export default { | |||
user: state => state.user, | |||
theme: state => state.theme, | |||
permission: state => state.user.permission | |||
} |
@@ -0,0 +1,18 @@ | |||
/** | |||
* vuex状态管理 | |||
*/ | |||
import {createStore} from 'vuex'; | |||
import getters from './getters'; | |||
import user from './modules/user'; | |||
import theme from './modules/theme'; | |||
export default createStore({ | |||
state: {}, | |||
mutations: {}, | |||
actions: {}, | |||
modules: { | |||
user, | |||
theme | |||
}, | |||
getters | |||
}); |
@@ -0,0 +1,454 @@ | |||
/** | |||
* 主题状态管理 | |||
*/ | |||
import {changeColor} from 'ele-admin-pro/packages/style/util.js'; | |||
import setting from '@/config/setting'; | |||
// 不需要本地缓存的state | |||
const NO_CACHE_STATE = [ | |||
'collapse', | |||
'tabs', | |||
'homeComponents', | |||
'keepAliveInclude', | |||
'keepAliveExclude', | |||
'tabKeepAlive', | |||
'screenWidth', | |||
'screenHeight' | |||
]; | |||
/** | |||
* 读取缓存的配置 | |||
* @param keyName 缓存的键名 | |||
* @returns {Object} | |||
*/ | |||
function getCacheSetting(keyName) { | |||
let cache = {}; | |||
try { | |||
const value = localStorage.getItem(keyName); | |||
if (value) { | |||
const temp = JSON.parse(value); | |||
if (typeof temp === 'object') { | |||
cache = temp; | |||
} | |||
} | |||
} catch (e) { | |||
console.error(e); | |||
} | |||
return cache; | |||
} | |||
/** | |||
* 缓存配置 | |||
* @param keyName 缓存的键名 | |||
* @param key 缓存的配置名 | |||
* @param value 缓存的配置名对应的值 | |||
*/ | |||
function cacheSetting(keyName, key, value) { | |||
if (NO_CACHE_STATE.includes(key)) { | |||
return; | |||
} | |||
const cache = getCacheSetting(keyName); | |||
if (cache[key] !== value) { | |||
cache[key] = value; | |||
localStorage.setItem(keyName, JSON.stringify(cache)); | |||
} | |||
} | |||
/** | |||
* 检查state值以兼容旧版本 | |||
* @param key | |||
* @param value | |||
* @returns | |||
*/ | |||
function checkStateValue(key, value) { | |||
if (typeof value === 'number') { | |||
if (key === 'sideStyle') { | |||
return ['light', 'dark'][value < 2 ? value : 1]; | |||
} | |||
if (key === 'headStyle') { | |||
return ['light', 'dark', 'primary'][value < 3 ? value : 2]; | |||
} | |||
if (key === 'tabStyle') { | |||
return ['default', 'dot', 'card'][value < 3 ? value : 2]; | |||
} | |||
if (key === 'layoutStyle') { | |||
return ['side', 'top', 'mix'][value < 3 ? value : 2]; | |||
} | |||
} | |||
return value; | |||
} | |||
/** | |||
* 获取state | |||
* @param setting 默认配置 | |||
* @returns {Object} | |||
*/ | |||
function getState(setting) { | |||
const state = { | |||
// 侧边栏风格: light(亮色), dark(暗色) | |||
sideStyle: 'dark', | |||
// 顶栏风格: light(亮色), dark(暗色), primary(主色) | |||
headStyle: 'light', | |||
// 标签页风格: default(默认), dot(圆点), card(卡片) | |||
tabStyle: 'default', | |||
// 布局风格: side(默认), top(顶栏菜单), mix(混合菜单) | |||
layoutStyle: 'side', | |||
// 侧边栏菜单风格: default(默认), mix(双排菜单) | |||
sideMenuStyle: 'default', | |||
// 是否固定侧栏 | |||
fixedSidebar: true, | |||
// 是否固定顶栏 | |||
fixedHeader: false, | |||
// 是否固定主体 | |||
fixedBody: false, | |||
// 内容区域宽度铺满 | |||
bodyFull: true, | |||
// 是否开启多标签 | |||
showTabs: true, | |||
// logo是否自适应宽度 | |||
logoAutoSize: false, | |||
// 侧栏是否多彩图标 | |||
colorfulIcon: false, | |||
// 侧边栏是否只保持一个子菜单展开 | |||
sideUniqueOpen: true, | |||
// 是否开启页脚 | |||
showFooter: true, | |||
// 是否是色弱模式 | |||
weakMode: false, | |||
// 是否是暗黑模式 | |||
darkMode: false, | |||
// 主题色 | |||
color: null, | |||
// 是否折叠侧边栏 | |||
collapse: false, | |||
// 当前打开的选项卡 | |||
tabs: [], | |||
// 主页的组件 | |||
homeComponents: [], | |||
// 需要keep-alive的组件 | |||
keepAliveInclude: [], | |||
// 不需要keep-alive的组件 | |||
keepAliveExclude: [], | |||
// 开启多页签是否缓存组件 | |||
tabKeepAlive: true, | |||
// 屏幕宽度 | |||
screenWidth: document.documentElement.clientWidth || document.body.clientWidth, | |||
// 屏幕高度 | |||
screenHeight: document.documentElement.clientHeight || document.body.clientHeight | |||
}; | |||
// 读取缓存的配置及默认配置 | |||
for (let key in state) { | |||
if (!Object.prototype.hasOwnProperty.call(state, key)) { | |||
continue; | |||
} | |||
const cache = getCacheSetting(setting.themeStoreName); | |||
if (cache[key] !== undefined) { | |||
state[key] = checkStateValue(key, cache[key]); | |||
} else if (setting[key] !== undefined) { | |||
state[key] = checkStateValue(key, setting[key]); | |||
} | |||
} | |||
// 恢复色弱模式 | |||
if (state.weakMode) { | |||
changeWeakMode(true); | |||
} | |||
// 恢复上次主题色 | |||
if (state.color || state.darkMode) { | |||
window.addEventListener('load', () => { | |||
doChangeTheme(state.color, state.darkMode).catch((e) => { | |||
console.error(e); | |||
}); | |||
}); | |||
} | |||
return state; | |||
} | |||
/** | |||
* 切换主题 | |||
* @param value 主题 | |||
* @param dark 是否是暗黑模式 | |||
* @returns {Promise<>} | |||
*/ | |||
function doChangeTheme(value, dark) { | |||
return new Promise((resolve, reject) => { | |||
try { | |||
changeColor(value, dark); | |||
resolve(); | |||
} catch (e) { | |||
reject(e); | |||
} | |||
}); | |||
} | |||
/** | |||
* 开关色弱模式 | |||
* @param weakMode 是否开启色弱模式 | |||
*/ | |||
function changeWeakMode(weakMode) { | |||
const weakClass = 'ele-admin-weak'; | |||
if (weakMode) { | |||
document.body.classList.add(weakClass); | |||
} else { | |||
document.body.classList.remove(weakClass); | |||
} | |||
} | |||
/** | |||
* 获取需要keep-alive的组件 | |||
* @param tabs 页签数据 | |||
* @param homeComponents 主页组件 | |||
* @returns {any[]} | |||
*/ | |||
function getKeepAliveInclude(tabs, homeComponents) { | |||
const components = new Set(); | |||
if (tabs) { | |||
tabs.forEach((t) => { | |||
if (t && t.components && t.components.length) { | |||
t.components.forEach((c) => { | |||
if (typeof c === 'string' && c) { | |||
components.add(c); | |||
} | |||
}); | |||
} | |||
}); | |||
} | |||
if (homeComponents) { | |||
homeComponents.forEach((c) => { | |||
components.add(c); | |||
}); | |||
} | |||
return Array.from(components); | |||
} | |||
export default { | |||
namespaced: true, | |||
state: getState(setting), | |||
mutations: { | |||
// 修改state值 | |||
SET: function (state, obj) { | |||
state[obj.key] = obj.value; | |||
// 缓存修改的配置 | |||
cacheSetting(setting.themeStoreName, obj.key, obj.value); | |||
}, | |||
// 更新keepAliveInclude | |||
UPDATE_KEEP_ALIVE_INCLUDE: function (state) { | |||
if (state.showTabs && state.tabKeepAlive) { | |||
state.keepAliveInclude = getKeepAliveInclude(state.tabs, state.homeComponents); | |||
} else { | |||
state.keepAliveInclude = []; | |||
} | |||
} | |||
}, | |||
actions: { | |||
/** | |||
* 修改配置 | |||
* @param {commit} | |||
* @param obj | |||
*/ | |||
set({commit}, obj) { | |||
commit('SET', obj); | |||
if (obj.key === 'showTabs' || obj.key === 'tabKeepAlive') { | |||
commit('UPDATE_KEEP_ALIVE_INCLUDE'); | |||
} | |||
}, | |||
/** | |||
* 切换配置(boolean类型的配置) | |||
* @param {commit, state} | |||
* @param key 配置名称 | |||
*/ | |||
toggle({commit, state}, key) { | |||
commit('SET', {key: key, value: !state[key]}); | |||
}, | |||
/** | |||
* 切换主题色 | |||
* @param {commit, state} | |||
* @param value 颜色值 | |||
* @returns {Promise<>} | |||
*/ | |||
setColor({commit, state}, value) { | |||
return new Promise((resolve, reject) => { | |||
doChangeTheme(value, state.darkMode).then(() => { | |||
commit('SET', {key: 'color', value: value}); | |||
return resolve(); | |||
}).catch((e) => { | |||
reject(e); | |||
}); | |||
}); | |||
}, | |||
/** | |||
* 切换暗黑模式 | |||
* @param {commit, state} | |||
* @param value 是否开启暗黑模式 | |||
* @returns {Promise<>} | |||
*/ | |||
setDarkMode({commit, state}, value) { | |||
return new Promise((resolve, reject) => { | |||
doChangeTheme(state.color, value).then(() => { | |||
commit('SET', {key: 'darkMode', value: value}); | |||
return resolve(); | |||
}).catch((e) => { | |||
reject(e); | |||
}); | |||
}); | |||
}, | |||
/** | |||
* 切换色弱模式 | |||
* @param {commit} | |||
* @param value 是否开启色弱模式 | |||
* @returns {Promise<>} | |||
*/ | |||
setWeakMode({commit}, value) { | |||
return new Promise((resolve) => { | |||
changeWeakMode(value); | |||
commit('SET', {key: 'weakMode', value: value}); | |||
resolve(); | |||
}); | |||
}, | |||
/** | |||
* 添加tab | |||
* @param {commit, state} | |||
* @param obj {{key: String, path: String, fullPath: String, title: String}} | |||
*/ | |||
tabAdd({commit, state}, obj) { | |||
if (!obj.key) { | |||
obj.key = obj.fullPath || obj.path; | |||
} | |||
const i = state.tabs.findIndex((d) => d.key === obj.key); | |||
if (i === -1) { | |||
commit('SET', {key: 'tabs', value: state.tabs.concat([obj])}); | |||
} else if (obj.fullPath !== state.tabs[i].fullPath) { | |||
commit('SET', {key: 'tabs', value: state.tabs.slice(0, i).concat([obj]).concat(state.tabs.slice(i + 1))}); | |||
} | |||
commit('UPDATE_KEEP_ALIVE_INCLUDE'); | |||
}, | |||
/** | |||
* 移除指定tab | |||
* @param commit | |||
* @param state | |||
* @param key {String} | |||
* @returns {Promise<Object>} | |||
*/ | |||
tabRemove({commit, state}, key) { | |||
return new Promise((resolve) => { | |||
let index = -1, lastIndex = -1, lastPath, last; | |||
for (let i = 0; i < state.tabs.length; i++) { | |||
if (state.tabs[i].key === key || state.tabs[i].fullPath === key) { | |||
index = i; | |||
break; | |||
} | |||
lastIndex = i; | |||
last = state.tabs[i]; | |||
lastPath = last.fullPath; | |||
} | |||
commit('SET', {key: 'tabs', value: state.tabs.filter((d, i) => i !== index)}); | |||
commit('UPDATE_KEEP_ALIVE_INCLUDE'); | |||
resolve({lastIndex: lastIndex, lastPath: lastPath, last: last}); | |||
}); | |||
}, | |||
/** | |||
* 移除所有tab | |||
* @param commit | |||
*/ | |||
tabRemoveAll({commit}) { | |||
commit('SET', {key: 'tabs', value: []}); | |||
commit('UPDATE_KEEP_ALIVE_INCLUDE'); | |||
}, | |||
/** | |||
* 移除左侧tab | |||
* @param commit | |||
* @param state | |||
* @param key {String} | |||
*/ | |||
tabRemoveLeft({commit, state}, key) { | |||
for (let i = 0; i < state.tabs.length; i++) { | |||
if (state.tabs[i].key === key) { | |||
commit('SET', {key: 'tabs', value: state.tabs.slice(i)}); | |||
commit('UPDATE_KEEP_ALIVE_INCLUDE'); | |||
break; | |||
} | |||
} | |||
}, | |||
/** | |||
* 移除右侧tab | |||
* @param commit | |||
* @param state | |||
* @param key {String} | |||
*/ | |||
tabRemoveRight({commit, state}, key) { | |||
for (let i = 0; i < state.tabs.length; i++) { | |||
if (state.tabs[i].key === key) { | |||
commit('SET', {key: 'tabs', value: state.tabs.slice(0, i + 1)}); | |||
commit('UPDATE_KEEP_ALIVE_INCLUDE'); | |||
break; | |||
} | |||
} | |||
}, | |||
/** | |||
* 移除其他tab | |||
* @param commit | |||
* @param state | |||
* @param key {String} | |||
*/ | |||
tabRemoveOther({commit, state}, key) { | |||
commit('SET', {key: 'tabs', value: state.tabs.filter((d) => d.key === key)}); | |||
commit('UPDATE_KEEP_ALIVE_INCLUDE'); | |||
}, | |||
/** | |||
* 修改指定tab | |||
* @param commit | |||
* @param state | |||
* @param obj {{path: String, title: String, fullPath: String, closable: Boolean}} | |||
*/ | |||
tabSetTitle({commit, state}, obj) { | |||
let i = -1; | |||
if (obj.fullPath) { | |||
i = state.tabs.findIndex((d) => d.fullPath === obj.fullPath); | |||
} else if (obj.path) { | |||
i = state.tabs.findIndex((d) => d.path === obj.path); | |||
} | |||
if (i !== -1) { | |||
const data = Object.assign({}, state.tabs[i]); | |||
if (typeof obj.title === 'string' && obj.title) { | |||
data.title = obj.title; | |||
} | |||
if (typeof obj.closable === 'boolean') { | |||
data.closable = obj.closable; | |||
} | |||
const tabs = state.tabs.slice(0, i).concat([data]).concat(state.tabs.slice(i + 1)); | |||
commit('SET', {key: 'tabs', value: tabs}); | |||
} | |||
}, | |||
/** | |||
* 设置主页的组件名称 | |||
* @param {commit, state} | |||
* @param components {Array} | |||
*/ | |||
setHomeComponents({commit}, components) { | |||
commit('SET', {key: 'homeComponents', value: components}); | |||
commit('UPDATE_KEEP_ALIVE_INCLUDE'); | |||
}, | |||
/** | |||
* 设置不需要keep-alive的组件 | |||
* @param commit | |||
* @param value {Array} | |||
*/ | |||
setKeepAliveExclude({commit}, value) { | |||
commit('SET', {key: 'keepAliveExclude', value: value}); | |||
}, | |||
/** | |||
* 更新屏幕尺寸 | |||
* @param {commit, state} | |||
*/ | |||
updateScreen({commit, state}) { | |||
const w = document.documentElement.clientWidth || document.body.clientWidth, | |||
h = document.documentElement.clientHeight || document.body.clientHeight; | |||
if (w !== state.screenWidth) { | |||
commit('SET', {key: 'screenWidth', value: w}); | |||
} | |||
if (h !== state.screenHeight) { | |||
commit('SET', {key: 'screenHeight', value: h}); | |||
} | |||
} | |||
} | |||
}; |
@@ -0,0 +1,141 @@ | |||
/** | |||
* 登录状态管理 | |||
*/ | |||
import axios from 'axios'; | |||
import setting from '@/config/setting'; | |||
import {formatMenus} from 'ele-admin-pro'; | |||
export default { | |||
namespaced: true, | |||
state: { | |||
// 当前用户信息 | |||
user: setting.takeUser(), | |||
// 当前用户权限 | |||
authorities: [], | |||
// 当前用户角色 | |||
roles: [], | |||
// 当前用户的菜单 | |||
menus: null, | |||
// 当前登录用户所拥有的权限节点 | |||
permission:[] | |||
}, | |||
mutations: { | |||
// 修改值 | |||
SET(state, obj) { | |||
state[obj.key] = obj.value; | |||
}, | |||
// 修改token | |||
SET_TOKEN(state, obj) { | |||
setting.cacheToken(obj.token, obj.remember); | |||
state.token = obj.token; | |||
if (!obj.token) { | |||
state.user = {}; | |||
state.menus = null; | |||
setting.cacheUser(); | |||
} | |||
}, | |||
// 设置权限 | |||
SET_PERMISSION(state,data){ | |||
state.permission = data | |||
} | |||
}, | |||
actions: { | |||
/** | |||
* 设置节点权限 | |||
* @param {*} commit | |||
* @param {*} data | |||
*/ | |||
setPermission({commit},data){ | |||
commit('SET_PERMISSION',data) | |||
}, | |||
/** | |||
* 缓存token | |||
* @param commit | |||
* @param token {String, {token: String, remember: String}} | |||
*/ | |||
setToken({commit}, token) { | |||
let remember = true; | |||
if (typeof token === 'object') { | |||
remember = token.remember; | |||
token = token.token; | |||
} | |||
commit('SET_TOKEN', {token: token, remember: remember}); | |||
}, | |||
/** | |||
* 移除token | |||
* @param commit | |||
*/ | |||
removeToken({commit}) { | |||
commit('SET_TOKEN', {}); | |||
}, | |||
/** | |||
* 设置用户信息 | |||
* @param commit | |||
* @param user {Object} 用户信息 | |||
*/ | |||
setUser({commit}, user) { | |||
setting.cacheUser(user); | |||
commit('SET', {key: 'user', value: user}); | |||
}, | |||
/** | |||
* 设置用户权限 | |||
* @param commit | |||
* @param authorities {Array<String>} 权限 | |||
*/ | |||
setAuthorities({commit}, authorities) { | |||
commit('SET', {key: 'authorities', value: authorities}); | |||
}, | |||
/** | |||
* 设置用户角色 | |||
* @param commit | |||
* @param roles {Array<String>} 角色 | |||
*/ | |||
setRoles({commit}, roles) { | |||
commit('SET', {key: 'roles', value: roles}); | |||
}, | |||
/** | |||
* 设置用户菜单 | |||
* @param commit | |||
* @param menus {Array} 菜单 | |||
*/ | |||
setMenus({commit}, menus) { | |||
commit('SET', {key: 'menus', value: menus}); | |||
}, | |||
/** | |||
* 获取用户菜单路由 | |||
* @param commit | |||
* @returns {Promise} {Array} | |||
*/ | |||
getMenus({commit}) { | |||
return new Promise((resolve, reject) => { | |||
if (!setting.menuUrl) { | |||
const {menus, homePath} = formatMenus(setting.menus); | |||
commit('SET', {key: 'menus', value: menus}); | |||
return resolve({menus: menus, home: homePath}); | |||
} | |||
// 请求接口获取用户菜单 | |||
axios.get(setting.menuUrl).then((res) => { | |||
const result = typeof setting.parseMenu === 'function' ? setting.parseMenu(res.data) : res.data; | |||
// 获取用户的信息、角色、权限 | |||
if (result.user) { | |||
setting.cacheUser(result.user); | |||
commit('SET', {key: 'user', value: result.user}); | |||
commit('SET', {key: 'roles', value: result.user.roles}); | |||
commit('SET', {key: 'authorities', value: result.user.authorities}); | |||
} | |||
// 获取用户的菜单 | |||
if (!result.data) { | |||
console.error('get menus error: ', result); | |||
return reject(new Error(result.msg)); | |||
} | |||
// 处理菜单数据格式 | |||
const {menus, homePath} = formatMenus(result.data, setting.parseMenuItem); | |||
commit('SET', {key: 'menus', value: menus}); | |||
resolve({menus: menus, home: homePath}); | |||
}).catch(e => { | |||
reject(e); | |||
}); | |||
}); | |||
} | |||
} | |||
} |