Merge branch 'master' of github.com:kuaifan/dootask into develop
# Conflicts: # electron/package.json # package.json # public/css/app.css # public/js/app.js # public/js/build/146.js # public/js/build/169.js # public/js/build/631.js # public/js/build/679.js # public/js/build/700.js # public/js/build/728.js # public/js/build/802.js # public/js/build/823.js # public/js/build/954.js # resources/assets/js/pages/manage.vue
This commit is contained in:
commit
a9e71567fe
2
cmd
2
cmd
@ -188,7 +188,7 @@ env_set() {
|
||||
echo "$key=$val" >> $cur_path/.env
|
||||
else
|
||||
if [[ `uname` == 'Linux' ]]; then
|
||||
sed -i "/^${key}=/c\\${key}=${val}" /www/.env
|
||||
sed -i "/^${key}=/c\\${key}=${val}" ${cur_path}/.env
|
||||
else
|
||||
docker run -it --rm -v ${cur_path}:/www alpine sh -c "sed -i "/^${key}=/c\\${key}=${val}" /www/.env"
|
||||
fi
|
||||
|
@ -6,7 +6,6 @@ services:
|
||||
image: "kuaifan/php:swoole-8.0"
|
||||
shm_size: "1024m"
|
||||
volumes:
|
||||
- /var/run/docker.sock:/var/run/docker.sock
|
||||
- ./docker/crontab/crontab.conf:/etc/supervisor/conf.d/crontab.conf
|
||||
- ./docker/php/php.conf:/etc/supervisor/conf.d/php.conf
|
||||
- ./docker/php/php.ini:/usr/local/etc/php/php.ini
|
||||
|
@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "DooTask",
|
||||
"version": "0.6.41",
|
||||
"version": "0.6.45",
|
||||
"description": "DooTask is task management system.",
|
||||
"main": "main.js",
|
||||
"license": "MIT",
|
||||
|
@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "DooTask",
|
||||
"version": "0.6.41",
|
||||
"version": "0.6.45",
|
||||
"description": "DooTask is task management system.",
|
||||
"scripts": {
|
||||
"start": "./cmd dev",
|
||||
|
2
public/css/app.css
vendored
2
public/css/app.css
vendored
File diff suppressed because one or more lines are too long
2
public/js/app.js
vendored
2
public/js/app.js
vendored
File diff suppressed because one or more lines are too long
2
public/js/build/146.js
vendored
2
public/js/build/146.js
vendored
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
1
public/js/build/348.js
vendored
Normal file
1
public/js/build/348.js
vendored
Normal file
File diff suppressed because one or more lines are too long
1
public/js/build/428.js
vendored
Normal file
1
public/js/build/428.js
vendored
Normal file
File diff suppressed because one or more lines are too long
1
public/js/build/545.js
vendored
1
public/js/build/545.js
vendored
File diff suppressed because one or more lines are too long
1
public/js/build/62.js
vendored
1
public/js/build/62.js
vendored
File diff suppressed because one or more lines are too long
2
public/js/build/631.js
vendored
2
public/js/build/631.js
vendored
File diff suppressed because one or more lines are too long
2
public/js/build/700.js
vendored
2
public/js/build/700.js
vendored
File diff suppressed because one or more lines are too long
2
public/js/build/802.js
vendored
2
public/js/build/802.js
vendored
File diff suppressed because one or more lines are too long
@ -1 +1 @@
|
||||
"use strict";(self.webpackChunkDooTask=self.webpackChunkDooTask||[]).push([[668],{61381:(e,t,i)=>{i.d(t,{Z:()=>r});var n=i(1519),o=i.n(n)()((function(e){return e[1]}));o.push([e.id,".component-only-office[data-v-0136b8ca]{align-items:center;bottom:0;display:flex;justify-content:center;left:0;position:absolute;right:0;top:0}.component-only-office .placeholder[data-v-0136b8ca]{flex:1;height:100%;width:100%}.component-only-office .office-loading[data-v-0136b8ca]{align-items:center;bottom:0;display:flex;justify-content:center;left:0;position:absolute;right:0;top:0;z-index:2}",""]);const r=o},55668:(e,t,i)=>{i.r(t),i.d(t,{default:()=>f});var n=i(20629);function o(e,t){var i=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),i.push.apply(i,n)}return i}function r(e){for(var t=1;t<arguments.length;t++){var i=null!=arguments[t]?arguments[t]:{};t%2?o(Object(i),!0).forEach((function(t){a(e,t,i[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(i)):o(Object(i)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(i,t))}))}return e}function a(e,t,i){return t in e?Object.defineProperty(e,t,{value:i,enumerable:!0,configurable:!0,writable:!0}):e[t]=i,e}const c={name:"OnlyOffice",props:{id:{type:String,default:function(){return"office_"+Math.round(1e4*Math.random())}},code:{type:String,default:""},value:{type:[Object,Array],default:function(){return{}}},readOnly:{type:Boolean,default:!1}},data:function(){return{loadIng:0,docEditor:null}},mounted:function(){},beforeDestroy:function(){null!==this.docEditor&&(this.docEditor.destroyEditor(),this.docEditor=null)},computed:r(r({},(0,n.rn)(["userToken","userInfo"])),{},{fileType:function(){return this.getType(this.value.type)},fileName:function(){return this.value.name}}),watch:{"value.id":{handler:function(e){var t=this;e&&(this.loadIng++,$A.loadScript($A.apiUrl("../office/web-apps/apps/api/documents/api.js"),(function(e){t.loadIng--,null!==e?$A.modalAlert("组件加载失败!"):t.loadFile()})))},immediate:!0}},methods:{getType:function(e){switch(e){case"word":return"docx";case"excel":return"xlsx";case"ppt":return"pptx"}return""},loadFile:function(){var e=this;null!==this.docEditor&&(this.docEditor.destroyEditor(),this.docEditor=null);var t="zh";switch(this.getLanguage()){case"CN":case"TC":t="zh";break;default:t="en"}var i=this.code||this.value.id,n={document:{fileType:this.fileType,key:this.fileType+"-"+i,title:this.fileName+"."+this.fileType,url:"http://nginx/api/file/content/?id="+i+"&token="+this.userToken},editorConfig:{mode:"edit",lang:t,user:{id:this.userInfo.userid,name:this.userInfo.nickname},customization:{uiTheme:"theme-classic-light"},callbackUrl:"http://nginx/api/file/content/office?id="+i+"&token="+this.userToken}};if(this.readOnly&&(n.editorConfig.mode="view",n.editorConfig.callbackUrl=null,!n.editorConfig.user.id)){var o=$A.getStorageInt("viewer");o||(o=$A.randNum(1e3,99999),$A.setStorage("viewer",o)),n.editorConfig.user.id="viewer_"+o,n.editorConfig.user.name="Viewer_"+o}this.$nextTick((function(){e.docEditor=new DocsAPI.DocEditor(e.id,n)}))}}};var l=i(93379),s=i.n(l),d=i(61381),u={insert:"head",singleton:!1};s()(d.Z,u);d.Z.locals;const f=(0,i(51900).Z)(c,(function(){var e=this,t=e.$createElement,i=e._self._c||t;return i("div",{staticClass:"component-only-office"},[i("div",{staticClass:"placeholder",attrs:{id:this.id}}),e._v(" "),e.loadIng>0?i("div",{staticClass:"office-loading"},[i("Loading")],1):e._e()])}),[],!1,null,"0136b8ca",null).exports}}]);
|
||||
"use strict";(self.webpackChunkDooTask=self.webpackChunkDooTask||[]).push([[939],{95022:(e,t,i)=>{i.d(t,{Z:()=>r});var n=i(1519),o=i.n(n)()((function(e){return e[1]}));o.push([e.id,".component-only-office[data-v-a37da2e6]{align-items:center;bottom:0;display:flex;justify-content:center;left:0;position:absolute;right:0;top:0}.component-only-office .placeholder[data-v-a37da2e6]{flex:1;height:100%;width:100%}.component-only-office .office-loading[data-v-a37da2e6]{align-items:center;bottom:0;display:flex;justify-content:center;left:0;position:absolute;right:0;top:0;z-index:2}",""]);const r=o},18939:(e,t,i)=>{i.r(t),i.d(t,{default:()=>f});var n=i(20629);function o(e,t){var i=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),i.push.apply(i,n)}return i}function r(e){for(var t=1;t<arguments.length;t++){var i=null!=arguments[t]?arguments[t]:{};t%2?o(Object(i),!0).forEach((function(t){a(e,t,i[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(i)):o(Object(i)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(i,t))}))}return e}function a(e,t,i){return t in e?Object.defineProperty(e,t,{value:i,enumerable:!0,configurable:!0,writable:!0}):e[t]=i,e}const l={name:"OnlyOffice",props:{id:{type:String,default:function(){return"office_"+Math.round(1e4*Math.random())}},code:{type:String,default:""},value:{type:[Object,Array],default:function(){return{}}},readOnly:{type:Boolean,default:!1}},data:function(){return{loadIng:0,docEditor:null}},mounted:function(){},beforeDestroy:function(){null!==this.docEditor&&(this.docEditor.destroyEditor(),this.docEditor=null)},computed:r(r({},(0,n.rn)(["userToken","userInfo"])),{},{fileType:function(){return this.getType(this.value.type)},fileName:function(){return this.value.name}}),watch:{"value.id":{handler:function(e){var t=this;e&&(this.loadIng++,$A.loadScript($A.apiUrl("../office/web-apps/apps/api/documents/api.js"),(function(e){t.loadIng--,null!==e?$A.modalAlert("组件加载失败!"):t.loadFile()})))},immediate:!0}},methods:{getType:function(e){switch(e){case"word":return"docx";case"excel":return"xlsx";case"ppt":return"pptx"}return""},loadFile:function(){var e=this;null!==this.docEditor&&(this.docEditor.destroyEditor(),this.docEditor=null);var t="zh";switch(this.getLanguage()){case"CN":case"TC":t="zh";break;default:t="en"}var i=this.code||this.value.id,n={document:{fileType:this.fileType,key:this.fileType+"-"+i,title:this.fileName+"."+this.fileType,url:"http://nginx/api/file/content/?id="+i+"&token="+this.userToken},editorConfig:{mode:"edit",lang:t,user:{id:this.userInfo.userid,name:this.userInfo.nickname},customization:{uiTheme:$A.dark.isDarkEnabled()?"theme-dark":"theme-classic-light"},callbackUrl:"http://nginx/api/file/content/office?id="+i+"&token="+this.userToken}};if(this.readOnly&&(n.editorConfig.mode="view",n.editorConfig.callbackUrl=null,!n.editorConfig.user.id)){var o=$A.getStorageInt("viewer");o||(o=$A.randNum(1e3,99999),$A.setStorage("viewer",o)),n.editorConfig.user.id="viewer_"+o,n.editorConfig.user.name="Viewer_"+o}this.$nextTick((function(){e.docEditor=new DocsAPI.DocEditor(e.id,n)}))}}};var c=i(93379),s=i.n(c),d=i(95022),u={insert:"head",singleton:!1};s()(d.Z,u);d.Z.locals;const f=(0,i(51900).Z)(l,(function(){var e=this,t=e.$createElement,i=e._self._c||t;return i("div",{staticClass:"component-only-office"},[i("div",{staticClass:"placeholder",attrs:{id:this.id}}),e._v(" "),e.loadIng>0?i("div",{staticClass:"office-loading"},[i("Loading")],1):e._e()])}),[],!1,null,"a37da2e6",null).exports}}]);
|
2
public/js/build/954.js
vendored
2
public/js/build/954.js
vendored
File diff suppressed because one or more lines are too long
336
public/js/dark.js
vendored
Normal file
336
public/js/dark.js
vendored
Normal file
@ -0,0 +1,336 @@
|
||||
;(function () {
|
||||
'use strict';
|
||||
|
||||
let util = {
|
||||
getValue(name) {
|
||||
return GM_getValue(name);
|
||||
},
|
||||
|
||||
setValue(name, value) {
|
||||
GM_setValue(name, value);
|
||||
},
|
||||
|
||||
addStyle(id, tag, css) {
|
||||
tag = tag || 'style';
|
||||
let doc = document, styleDom = doc.getElementById(id);
|
||||
if (styleDom) return;
|
||||
let style = doc.createElement(tag);
|
||||
style.rel = 'stylesheet';
|
||||
style.id = id;
|
||||
tag === 'style' ? style.innerHTML = css : style.href = css;
|
||||
document.head.appendChild(style);
|
||||
},
|
||||
|
||||
removeElementById(eleId) {
|
||||
let ele = document.getElementById(eleId);
|
||||
ele && ele.parentNode.removeChild(ele);
|
||||
},
|
||||
|
||||
hasElementById(eleId) {
|
||||
return document.getElementById(eleId);
|
||||
},
|
||||
|
||||
filter: '-webkit-filter: url(#dark-mode-filter) !important; filter: url(#dark-mode-filter) !important;',
|
||||
reverseFilter: '-webkit-filter: url(#dark-mode-reverse-filter) !important; filter: url(#dark-mode-reverse-filter) !important;',
|
||||
noneFilter: '-webkit-filter: none !important; filter: none !important;',
|
||||
};
|
||||
|
||||
let main = {
|
||||
/**
|
||||
* 配置默认值
|
||||
*/
|
||||
initValue() {
|
||||
let value = [{
|
||||
name: 'dark_mode',
|
||||
value: 'light'
|
||||
}, {
|
||||
name: 'button_position',
|
||||
value: 'right'
|
||||
}, {
|
||||
name: 'button_size',
|
||||
value: 30
|
||||
}, {
|
||||
name: 'exclude_list',
|
||||
value: ['youku.com', 'v.youku.com', 'www.douyu.com', 'www.iqiyi.com', 'vip.iqiyi.com', 'mail.qq.com', 'live.kuaishou.com']
|
||||
}];
|
||||
|
||||
value.forEach((v) => {
|
||||
util.getValue(v.name) === undefined && util.setValue(v.name, v.value);
|
||||
});
|
||||
},
|
||||
|
||||
addExtraStyle() {
|
||||
try {
|
||||
return darkModeRule;
|
||||
} catch (e) {
|
||||
return '';
|
||||
}
|
||||
},
|
||||
|
||||
createDarkFilter() {
|
||||
if (util.hasElementById('dark-mode-svg')) return;
|
||||
let svgDom = '<svg id="dark-mode-svg" style="height: 0; width: 0;"><filter id="dark-mode-filter" x="0" y="0" width="99999" height="99999"><feColorMatrix type="matrix" values="0.283 -0.567 -0.567 0.000 0.925 -0.567 0.283 -0.567 0.000 0.925 -0.567 -0.567 0.283 0.000 0.925 0.000 0.000 0.000 1.000 0.000"></feColorMatrix></filter><filter id="dark-mode-reverse-filter" x="0" y="0" width="99999" height="99999"><feColorMatrix type="matrix" values="0.333 -0.667 -0.667 0.000 1.000 -0.667 0.333 -0.667 0.000 1.000 -0.667 -0.667 0.333 0.000 1.000 0.000 0.000 0.000 1.000 0.000"></feColorMatrix></filter></svg>';
|
||||
let div = document.createElementNS('http://www.w3.org/1999/xhtml', 'div');
|
||||
div.innerHTML = svgDom;
|
||||
let frag = document.createDocumentFragment();
|
||||
while (div.firstChild)
|
||||
frag.appendChild(div.firstChild);
|
||||
document.head.appendChild(frag);
|
||||
},
|
||||
|
||||
createDarkStyle() {
|
||||
util.addStyle('dark-mode-style', 'style', `
|
||||
@media screen {
|
||||
html {
|
||||
${util.filter}
|
||||
}
|
||||
|
||||
/* Default Reverse rule */
|
||||
img,
|
||||
video,
|
||||
iframe,
|
||||
canvas,
|
||||
:not(object):not(body) > embed,
|
||||
object,
|
||||
svg image,
|
||||
[style*="background:url"],
|
||||
[style*="background-image:url"],
|
||||
[style*="background: url"],
|
||||
[style*="background-image: url"],
|
||||
[background],
|
||||
twitterwidget,
|
||||
.sr-reader,
|
||||
.no-dark-mode,
|
||||
.sr-backdrop {
|
||||
${util.reverseFilter}
|
||||
}
|
||||
|
||||
[style*="background:url"] *,
|
||||
[style*="background-image:url"] *,
|
||||
[style*="background: url"] *,
|
||||
[style*="background-image: url"] *,
|
||||
input,
|
||||
[background] *,
|
||||
img[src^="https://s0.wp.com/latex.php"],
|
||||
twitterwidget .NaturalImage-image {
|
||||
${util.noneFilter}
|
||||
}
|
||||
|
||||
/* Text contrast */
|
||||
html {
|
||||
text-shadow: 0 0 0 !important;
|
||||
}
|
||||
|
||||
/* Full screen */
|
||||
.no-filter,
|
||||
:-webkit-full-screen,
|
||||
:-webkit-full-screen *,
|
||||
:-moz-full-screen,
|
||||
:-moz-full-screen *,
|
||||
:fullscreen,
|
||||
:fullscreen * {
|
||||
${util.noneFilter}
|
||||
}
|
||||
|
||||
::-webkit-scrollbar {
|
||||
background-color: #202324;
|
||||
color: #aba499;
|
||||
}
|
||||
::-webkit-scrollbar-thumb {
|
||||
background-color: #454a4d;
|
||||
}
|
||||
::-webkit-scrollbar-thumb:hover {
|
||||
background-color: #575e62;
|
||||
}
|
||||
::-webkit-scrollbar-thumb:active {
|
||||
background-color: #484e51;
|
||||
}
|
||||
::-webkit-scrollbar-corner {
|
||||
background-color: #181a1b;
|
||||
}
|
||||
|
||||
/* Page background */
|
||||
html {
|
||||
background: #fff !important;
|
||||
}
|
||||
${this.addExtraStyle()}
|
||||
}
|
||||
|
||||
@media print {
|
||||
.no-print {
|
||||
display: none !important;
|
||||
}
|
||||
}`);
|
||||
},
|
||||
|
||||
enableDarkMode() {
|
||||
if (this.isFullScreen()) return;
|
||||
this.createDarkFilter();
|
||||
this.createDarkStyle();
|
||||
},
|
||||
|
||||
disableDarkMode() {
|
||||
util.removeElementById('dark-mode-svg');
|
||||
util.removeElementById('dark-mode-style');
|
||||
},
|
||||
|
||||
addButton() {
|
||||
if (this.isTopWindow()) {
|
||||
let lightIcon = `<div style="background: #000;display: flex;align-items: center;justify-content: center;width: ${util.getValue('button_size')}px;height: ${util.getValue('button_size')}px;border-radius: 50%"><svg style="position: static;margin: 0;padding: 0;" viewBox="0 0 1024 1024" xmlns="http://www.w3.org/2000/svg" width="${util.getValue('button_size') / 1.5}" height="${util.getValue('button_size') / 1.5}"><path d="M522.88 874.667A21.333 21.333 0 0 1 544.213 896v85.333a21.333 21.333 0 0 1-21.333 21.334h-21.333a21.333 21.333 0 0 1-21.334-21.334V896a21.333 21.333 0 0 1 21.334-21.333h21.333zm268.416-107.52l60.352 60.352a21.333 21.333 0 0 1 0 30.165l-15.083 15.083a21.333 21.333 0 0 1-30.186 0l-60.331-60.352a21.333 21.333 0 0 1 0-30.166l15.083-15.082a21.333 21.333 0 0 1 30.165 0zm-527.957 0l15.082 15.082a21.333 21.333 0 0 1 0 30.166l-60.352 60.352a21.333 21.333 0 0 1-30.165 0l-15.083-15.083a21.333 21.333 0 0 1 0-30.165l60.331-60.352a21.333 21.333 0 0 1 30.187 0zM512 277.333c141.376 0 256 114.624 256 256s-114.624 256-256 256-256-114.624-256-256 114.624-256 256-256zm0 64a192 192 0 1 0 0 384 192 192 0 0 0 0-384zm448.213 160a21.333 21.333 0 0 1 21.334 21.334V544a21.333 21.333 0 0 1-21.334 21.333H874.88A21.333 21.333 0 0 1 853.547 544v-21.333a21.333 21.333 0 0 1 21.333-21.334h85.333zm-810.666 0a21.333 21.333 0 0 1 21.333 21.334V544a21.333 21.333 0 0 1-21.333 21.333H64.213A21.333 21.333 0 0 1 42.88 544v-21.333a21.333 21.333 0 0 1 21.333-21.334h85.334zm687.04-307.413l15.082 15.083a21.333 21.333 0 0 1 0 30.165l-60.352 60.352a21.333 21.333 0 0 1-30.165 0l-15.083-15.083a21.333 21.333 0 0 1 0-30.165L806.4 193.92a21.333 21.333 0 0 1 30.187 0zm-618.496 0l60.352 60.352a21.333 21.333 0 0 1 0 30.165L263.36 299.52a21.333 21.333 0 0 1-30.187 0l-60.352-60.373a21.333 21.333 0 0 1 0-30.166l15.083-15.082a21.333 21.333 0 0 1 30.165 0zM522.9 64a21.333 21.333 0 0 1 21.334 21.333v85.334A21.333 21.333 0 0 1 522.9 192h-21.333a21.333 21.333 0 0 1-21.333-21.333V85.333A21.333 21.333 0 0 1 501.568 64h21.333z" fill="#fff"/></svg></div>`,
|
||||
darkIcon = `<div style="background: #333;display: flex;align-items: center;justify-content: center;width: ${util.getValue('button_size')}px;height: ${util.getValue('button_size')}px;border-radius: 50%"><svg style="position: static;margin: 0;padding: 0;" viewBox="0 0 1024 1024" xmlns="http://www.w3.org/2000/svg" width="${util.getValue('button_size') / 1.5}" height="${util.getValue('button_size') / 1.5}"><path d="M513.173 128A255.061 255.061 0 0 0 448 298.667c0 141.376 114.624 256 256 256a255.36 255.36 0 0 0 189.803-84.203A392.855 392.855 0 0 1 896 512c0 212.075-171.925 384-384 384S128 724.075 128 512c0-209.707 168.107-380.16 376.96-383.936l8.192-.064zM395.35 213.93l-3.52 1.409C274.645 262.827 192 377.77 192 512c0 176.725 143.275 320 320 320 145.408 0 268.16-96.981 307.115-229.803l1.536-5.504-1.6.64a319.51 319.51 0 0 1-106.496 21.227l-8.555.107c-176.725 0-320-143.275-320-320 0-28.48 3.755-56.406 10.944-83.2l.405-1.536z" fill="#adbac7"/></svg></div>`;
|
||||
|
||||
let o = document.createElement('div'),
|
||||
buttonPostion = util.getValue('button_position');
|
||||
o.style.position = 'fixed';
|
||||
o.style[buttonPostion] = '25px';
|
||||
o.style.bottom = '25px';
|
||||
o.style.cursor = 'pointer';
|
||||
o.style.zIndex = '2147483999';
|
||||
o.style.userSelect = 'none';
|
||||
o.className = 'no-print';
|
||||
o.id = 'darkBtn';
|
||||
this.isDarkMode() ? o.innerHTML = lightIcon : o.innerHTML = darkIcon;
|
||||
document.body.appendChild(o);
|
||||
|
||||
o.addEventListener("click", () => {
|
||||
if (this.isDarkMode()) { //黑暗模式变为正常模式
|
||||
util.setValue('dark_mode', 'light');
|
||||
o.innerHTML = darkIcon;
|
||||
this.disableDarkMode();
|
||||
} else {
|
||||
util.setValue('dark_mode', 'dark');
|
||||
o.innerHTML = lightIcon;
|
||||
this.enableDarkMode();
|
||||
}
|
||||
});
|
||||
}
|
||||
},
|
||||
|
||||
registerMenuCommand() {
|
||||
if (this.isTopWindow()) {
|
||||
let whiteList = util.getValue('exclude_list');
|
||||
let host = location.host;
|
||||
if (whiteList.includes(host)) {
|
||||
GM_registerMenuCommand('💡 当前网站:❌', () => {
|
||||
let index = whiteList.indexOf(host);
|
||||
whiteList.splice(index, 1);
|
||||
util.setValue('exclude_list', whiteList);
|
||||
history.go(0);
|
||||
});
|
||||
} else {
|
||||
GM_registerMenuCommand('💡 当前网站:✔️', () => {
|
||||
whiteList.push(host);
|
||||
util.setValue('exclude_list', Array.from(new Set(whiteList)));
|
||||
history.go(0);
|
||||
});
|
||||
}
|
||||
|
||||
GM_registerMenuCommand('⚙️ 设置', () => {
|
||||
let style = `
|
||||
.darkmode-popup { font-size: 14px !important; }
|
||||
.darkmode-center { display: flex;align-items: center; }
|
||||
.darkmode-setting-label { display: flex;align-items: center;justify-content: space-between;padding-top: 15px; }
|
||||
.darkmode-setting-label-col { display: flex;align-items: flex-start;;padding-top: 15px;flex-direction:column }
|
||||
.darkmode-setting-radio { width: 16px;height: 16px; }
|
||||
.darkmode-setting-textarea { width: 100%; margin: 14px 0 0; height: 100px; resize: none; border: 1px solid #bbb; box-sizing: border-box; padding: 5px 10px; border-radius: 5px; color: #666; line-height: 1.2; }
|
||||
.darkmode-setting-input { border: 1px solid #bbb; box-sizing: border-box; padding: 5px 10px; border-radius: 5px; width: 100px}
|
||||
`;
|
||||
util.addStyle('darkmode-style', 'style', style);
|
||||
util.addStyle('swal-pub-style', 'style', GM_getResourceText('swalStyle'));
|
||||
let excludeListStr = util.getValue('exclude_list').join('\n');
|
||||
|
||||
let dom = `<div style="font-size: 1em;">
|
||||
<label class="darkmode-setting-label">按钮位置 <div id="S-Dark-Position" class="darkmode-center"><input type="radio" name="buttonPosition" ${util.getValue('button_position') === 'left' ? 'checked' : ''} class="darkmode-setting-radio" value="left">左 <input type="radio" name="buttonPosition" style="margin-left: 30px;" ${util.getValue('button_position') === 'right' ? 'checked' : ''} class="darkmode-setting-radio" value="right">右</div></label>
|
||||
<label class="darkmode-setting-label">按钮大小(默认:30)<small id="currentSize">当前:${util.getValue('button_size')}</small>
|
||||
<input id="S-Dark-Size" type="range" class="darkmode-setting-range" min="20" max="50" step="2" value="${util.getValue('button_size')}">
|
||||
</label>
|
||||
<label class="darkmode-setting-label-col">排除下列网址 <textarea placeholder="列表中的域名将不开启夜间模式,一行一个,例如:v.youku.com" id="S-Dark-Exclude" class="darkmode-setting-textarea">${excludeListStr}</textarea></label>
|
||||
</div>`;
|
||||
Swal.fire({
|
||||
title: '夜间模式配置',
|
||||
html: dom,
|
||||
icon: 'info',
|
||||
showCloseButton: true,
|
||||
confirmButtonText: '保存',
|
||||
footer: '<div style="text-align: center;font-size: 1em;">点击查看 <a href="https://www.youxiaohou.com/tool/install-darkmode.html" target="_blank">使用说明</a>,助手免费开源,<a href="https://www.youxiaohou.com/darkmode.user.js">检查更新</a><svg viewBox="0 0 1024 1024" xmlns="http://www.w3.org/2000/svg" width="14" height="14"><path d="M445.956 138.812L240.916 493.9c-11.329 19.528-12.066 44.214 0 65.123 12.067 20.909 33.898 32.607 56.465 32.607h89.716v275.044c0 31.963 25.976 57.938 57.938 57.938h134.022c32.055 0 57.938-25.975 57.938-57.938V591.63h83.453c24.685 0 48.634-12.803 61.806-35.739 13.172-22.844 12.343-50.016 0-71.386l-199.42-345.693c-13.633-23.58-39.24-39.516-68.44-39.516-29.198 0-54.897 15.935-68.438 39.516z" fill="#d81e06"/></svg></div>',
|
||||
customClass: {
|
||||
popup: 'darkmode-popup',
|
||||
},
|
||||
}).then((res) => {
|
||||
res.isConfirmed && history.go(0);
|
||||
});
|
||||
|
||||
document.getElementById('S-Dark-Position').addEventListener('click', (e) => {
|
||||
e.target.tagName === "INPUT" && util.setValue('button_position', e.target.value);
|
||||
});
|
||||
document.getElementById('S-Dark-Size').addEventListener('change', (e) => {
|
||||
util.setValue('button_size', e.currentTarget.value);
|
||||
document.getElementById('currentSize').innerText = '当前:' + e.currentTarget.value;
|
||||
});
|
||||
document.getElementById('S-Dark-Exclude').addEventListener('change', (e) => {
|
||||
util.setValue('exclude_list', Array.from(new Set(e.currentTarget.value.split('\n').filter(Boolean))));
|
||||
});
|
||||
});
|
||||
}
|
||||
},
|
||||
|
||||
isTopWindow() {
|
||||
return window.self === window.top;
|
||||
},
|
||||
|
||||
addListener() {
|
||||
document.addEventListener("fullscreenchange", (e) => {
|
||||
if (this.isFullScreen()) {
|
||||
//进入全屏
|
||||
this.disableDarkMode();
|
||||
} else {
|
||||
//退出全屏
|
||||
this.isDarkMode() && this.enableDarkMode();
|
||||
}
|
||||
});
|
||||
},
|
||||
|
||||
isDarkMode() {
|
||||
return util.getValue('dark_mode') === 'dark';
|
||||
},
|
||||
|
||||
isInExcludeList() {
|
||||
return util.getValue('exclude_list').includes(location.host);
|
||||
},
|
||||
|
||||
isFullScreen() {
|
||||
return document.fullscreenElement;
|
||||
},
|
||||
|
||||
firstEnableDarkMode() {
|
||||
if (document.head) {
|
||||
this.isDarkMode() && this.enableDarkMode();
|
||||
}
|
||||
const headObserver = new MutationObserver(() => {
|
||||
this.isDarkMode() && this.enableDarkMode();
|
||||
});
|
||||
headObserver.observe(document.head, {childList: true, subtree: true});
|
||||
|
||||
if (document.body) {
|
||||
this.addButton();
|
||||
} else {
|
||||
const bodyObserver = new MutationObserver(() => {
|
||||
if (document.body) {
|
||||
bodyObserver.disconnect();
|
||||
this.addButton();
|
||||
}
|
||||
});
|
||||
bodyObserver.observe(document, {childList: true, subtree: true});
|
||||
}
|
||||
},
|
||||
|
||||
init() {
|
||||
this.initValue();
|
||||
this.registerMenuCommand();
|
||||
if (this.isInExcludeList()) return;
|
||||
this.addListener();
|
||||
this.firstEnableDarkMode();
|
||||
}
|
||||
};
|
||||
main.init();
|
||||
})();
|
@ -44,6 +44,7 @@
|
||||
<script type="text/javascript" src="js/Dialogs.js"></script>
|
||||
</head>
|
||||
<body class="geEditor">
|
||||
<script type="text/javascript" src="js/Dark.js"></script>
|
||||
<script type="text/javascript">
|
||||
(function () {
|
||||
var editorUiInit = EditorUi.prototype.init;
|
||||
|
165
public/js/grapheditor/js/Dark.js
vendored
Normal file
165
public/js/grapheditor/js/Dark.js
vendored
Normal file
@ -0,0 +1,165 @@
|
||||
var Dark = {
|
||||
utils: {
|
||||
filter: '-webkit-filter: url(#dark-mode-filter) !important; filter: url(#dark-mode-filter) !important;',
|
||||
reverseFilter: '-webkit-filter: url(#dark-mode-reverse-filter) !important; filter: url(#dark-mode-reverse-filter) !important;',
|
||||
noneFilter: '-webkit-filter: none !important; filter: none !important;',
|
||||
|
||||
addExtraStyle() {
|
||||
try {
|
||||
return '';
|
||||
} catch (e) {
|
||||
return '';
|
||||
}
|
||||
},
|
||||
|
||||
addStyle(id, tag, css) {
|
||||
tag = tag || 'style';
|
||||
let doc = document, styleDom = doc.getElementById(id);
|
||||
if (styleDom) return;
|
||||
let style = doc.createElement(tag);
|
||||
style.rel = 'stylesheet';
|
||||
style.id = id;
|
||||
tag === 'style' ? style.innerHTML = css : style.href = css;
|
||||
document.head.appendChild(style);
|
||||
},
|
||||
|
||||
getClassList(node) {
|
||||
return node.classList || [];
|
||||
},
|
||||
|
||||
addClass(node, name) {
|
||||
this.getClassList(node).add(name);
|
||||
return this;
|
||||
},
|
||||
|
||||
removeClass(node, name) {
|
||||
this.getClassList(node).remove(name);
|
||||
return this;
|
||||
},
|
||||
|
||||
hasClass(node, name) {
|
||||
return this.getClassList(node).contains(name);
|
||||
},
|
||||
|
||||
hasElementById(eleId) {
|
||||
return document.getElementById(eleId);
|
||||
},
|
||||
|
||||
removeElementById(eleId) {
|
||||
let ele = document.getElementById(eleId);
|
||||
ele && ele.parentNode.removeChild(ele);
|
||||
},
|
||||
},
|
||||
|
||||
createDarkFilter() {
|
||||
if (this.utils.hasElementById('dark-mode-svg')) return;
|
||||
let svgDom = '<svg id="dark-mode-svg" style="height: 0; width: 0;"><filter id="dark-mode-filter" x="0" y="0" width="99999" height="99999"><feColorMatrix type="matrix" values="0.283 -0.567 -0.567 0.000 0.925 -0.567 0.283 -0.567 0.000 0.925 -0.567 -0.567 0.283 0.000 0.925 0.000 0.000 0.000 1.000 0.000"></feColorMatrix></filter><filter id="dark-mode-reverse-filter" x="0" y="0" width="99999" height="99999"><feColorMatrix type="matrix" values="0.333 -0.667 -0.667 0.000 1.000 -0.667 0.333 -0.667 0.000 1.000 -0.667 -0.667 0.333 0.000 1.000 0.000 0.000 0.000 1.000 0.000"></feColorMatrix></filter></svg>';
|
||||
let div = document.createElementNS('http://www.w3.org/1999/xhtml', 'div');
|
||||
div.innerHTML = svgDom;
|
||||
let frag = document.createDocumentFragment();
|
||||
while (div.firstChild)
|
||||
frag.appendChild(div.firstChild);
|
||||
document.head.appendChild(frag);
|
||||
},
|
||||
|
||||
createDarkStyle() {
|
||||
this.utils.addStyle('dark-mode-style', 'style', `
|
||||
@media screen {
|
||||
html {
|
||||
${this.utils.filter}
|
||||
}
|
||||
|
||||
/* Default Reverse rule */
|
||||
img,
|
||||
video,
|
||||
iframe,
|
||||
canvas,
|
||||
:not(object):not(body) > embed,
|
||||
object,
|
||||
svg image {
|
||||
${this.utils.reverseFilter}
|
||||
}
|
||||
|
||||
[style*="background:url"] *,
|
||||
[style*="background-image:url"] *,
|
||||
[style*="background: url"] *,
|
||||
[style*="background-image: url"] *,
|
||||
input,
|
||||
[background] *,
|
||||
twitterwidget .NaturalImage-image {
|
||||
${this.utils.noneFilter}
|
||||
}
|
||||
|
||||
/* Text contrast */
|
||||
html {
|
||||
text-shadow: 0 0 0 !important;
|
||||
}
|
||||
|
||||
/* Full screen */
|
||||
.no-filter,
|
||||
:-webkit-full-screen,
|
||||
:-webkit-full-screen *,
|
||||
:-moz-full-screen,
|
||||
:-moz-full-screen *,
|
||||
:fullscreen,
|
||||
:fullscreen * {
|
||||
${this.utils.noneFilter}
|
||||
}
|
||||
|
||||
/* Page background */
|
||||
html {
|
||||
background: #fff !important;
|
||||
}
|
||||
${this.utils.addExtraStyle()}
|
||||
}
|
||||
|
||||
@media print {
|
||||
.no-print {
|
||||
display: none !important;
|
||||
}
|
||||
}`);
|
||||
},
|
||||
|
||||
enableDarkMode() {
|
||||
if (this.isDarkEnabled()) {
|
||||
return
|
||||
}
|
||||
this.createDarkFilter();
|
||||
this.createDarkStyle();
|
||||
this.utils.addClass(document.body, "dark-mode-reverse")
|
||||
},
|
||||
|
||||
disableDarkMode() {
|
||||
if (!this.isDarkEnabled()) {
|
||||
return
|
||||
}
|
||||
this.utils.removeElementById('dark-mode-svg');
|
||||
this.utils.removeElementById('dark-mode-style');
|
||||
this.utils.removeClass(document.body, "dark-mode-reverse")
|
||||
},
|
||||
|
||||
autoDarkMode() {
|
||||
let darkScheme = window.matchMedia && window.matchMedia('(prefers-color-scheme: dark)').matches
|
||||
if (darkScheme) {
|
||||
this.enableDarkMode()
|
||||
} else {
|
||||
this.disableDarkMode()
|
||||
}
|
||||
},
|
||||
|
||||
isDarkEnabled() {
|
||||
return this.utils.hasClass(document.body, "dark-mode-reverse")
|
||||
},
|
||||
};
|
||||
|
||||
switch (window.mxTheme) {
|
||||
case 'dark':
|
||||
Dark.enableDarkMode();
|
||||
break;
|
||||
case 'light':
|
||||
Dark.disableDarkMode();
|
||||
break;
|
||||
default:
|
||||
Dark.autoDarkMode();
|
||||
break;
|
||||
}
|
1
public/js/grapheditor/js/Init.js
vendored
1
public/js/grapheditor/js/Init.js
vendored
@ -27,3 +27,4 @@ window.OPEN_FORM = window.OPEN_FORM || 'open.html';
|
||||
window.mxBasePath = window.mxBasePath || '../../../src';
|
||||
window.mxLanguage = window.mxLanguage || urlParams['lang'] || 'zh';
|
||||
window.mxLanguages = window.mxLanguages || ['zh'];
|
||||
window.mxTheme = window.mxTheme || urlParams['theme'] || 'light';
|
||||
|
18
public/js/tinymce/skins/content/dark/content.css
vendored
18
public/js/tinymce/skins/content/dark/content.css
vendored
@ -5,12 +5,28 @@
|
||||
* For commercial licenses see https://www.tiny.cloud/
|
||||
*/
|
||||
body {
|
||||
background-color: #2f3742;
|
||||
background-color: #131313;
|
||||
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;
|
||||
}
|
||||
::-webkit-scrollbar {
|
||||
background-color: #202324;
|
||||
color: #aba499;
|
||||
}
|
||||
::-webkit-scrollbar-thumb {
|
||||
background-color: #454a4d;
|
||||
}
|
||||
::-webkit-scrollbar-thumb:hover {
|
||||
background-color: #575e62;
|
||||
}
|
||||
::-webkit-scrollbar-thumb:active {
|
||||
background-color: #484e51;
|
||||
}
|
||||
::-webkit-scrollbar-corner {
|
||||
background-color: #181a1b;
|
||||
}
|
||||
a {
|
||||
color: #4099ff;
|
||||
}
|
||||
|
@ -4,4 +4,4 @@
|
||||
* For LGPL see License.txt in the project root for license information.
|
||||
* For commercial licenses see https://www.tiny.cloud/
|
||||
*/
|
||||
body{background-color:#2f3742;color:#dfe0e4;font-family:-apple-system,BlinkMacSystemFont,'Segoe UI',Roboto,Oxygen,Ubuntu,Cantarell,'Open Sans','Helvetica Neue',sans-serif;line-height:1.4;margin:1rem}a{color:#4099ff}table{border-collapse:collapse}table:not([cellpadding]) td,table:not([cellpadding]) th{padding:.4rem}table[border]:not([border="0"]):not([style*=border-width]) td,table[border]:not([border="0"]):not([style*=border-width]) th{border-width:1px}table[border]:not([border="0"]):not([style*=border-style]) td,table[border]:not([border="0"]):not([style*=border-style]) th{border-style:solid}table[border]:not([border="0"]):not([style*=border-color]) td,table[border]:not([border="0"]):not([style*=border-color]) th{border-color:#6d737b}figure{display:table;margin:1rem auto}figure figcaption{color:#8a8f97;display:block;margin-top:.25rem;text-align:center}hr{border-color:#6d737b;border-style:solid;border-width:1px 0 0 0}code{background-color:#6d737b;border-radius:3px;padding:.1rem .2rem}.mce-content-body:not([dir=rtl]) blockquote{border-left:2px solid #6d737b;margin-left:1.5rem;padding-left:1rem}.mce-content-body[dir=rtl] blockquote{border-right:2px solid #6d737b;margin-right:1.5rem;padding-right:1rem}
|
||||
body{background-color:#131313;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}::-webkit-scrollbar{background-color:#202324;color:#aba499}::-webkit-scrollbar-thumb{background-color:#454a4d}::-webkit-scrollbar-thumb:hover{background-color:#575e62}::-webkit-scrollbar-thumb:active{background-color:#484e51}::-webkit-scrollbar-corner{background-color:#181a1b}a{color:#4099ff}table{border-collapse:collapse}table:not([cellpadding]) td,table:not([cellpadding]) th{padding:.4rem}table[border]:not([border="0"]):not([style*=border-width]) td,table[border]:not([border="0"]):not([style*=border-width]) th{border-width:1px}table[border]:not([border="0"]):not([style*=border-style]) td,table[border]:not([border="0"]):not([style*=border-style]) th{border-style:solid}table[border]:not([border="0"]):not([style*=border-color]) td,table[border]:not([border="0"]):not([style*=border-color]) th{border-color:#6d737b}figure{display:table;margin:1rem auto}figure figcaption{color:#8a8f97;display:block;margin-top:.25rem;text-align:center}hr{border-color:#6d737b;border-style:solid;border-width:1px 0 0 0}code{background-color:#6d737b;border-radius:3px;padding:.1rem .2rem}.mce-content-body:not([dir=rtl]) blockquote{border-left:2px solid #6d737b;margin-left:1.5rem;padding-left:1rem}.mce-content-body[dir=rtl] blockquote{border-right:2px solid #6d737b;margin-right:1.5rem;padding-right:1rem}
|
||||
|
@ -114,7 +114,9 @@
|
||||
language = 'zh'
|
||||
break;
|
||||
}
|
||||
this.url = $A.originUrl('js/grapheditor/' + (this.readOnly ? 'viewer' : 'index') + '.html?lang=' + language);
|
||||
let route = this.readOnly ? 'viewer' : 'index';
|
||||
let theme = $A.dark.isDarkEnabled() ? 'dark' : 'light'
|
||||
this.url = $A.originUrl('js/grapheditor/' + route + '.html?lang=' + language + '&theme=' + theme);
|
||||
},
|
||||
mounted() {
|
||||
window.addEventListener('message', this.handleMessage)
|
||||
|
@ -159,7 +159,7 @@ export default {
|
||||
"name": this.userInfo.nickname
|
||||
},
|
||||
"customization": {
|
||||
"uiTheme": "theme-classic-light",
|
||||
"uiTheme": $A.dark.isDarkEnabled() ? "theme-dark" : "theme-classic-light",
|
||||
},
|
||||
"callbackUrl": 'http://nginx/api/file/content/office?id=' + fileKey + '&token=' + this.userToken,
|
||||
}
|
||||
|
@ -258,6 +258,7 @@
|
||||
resize: !isFull,
|
||||
convert_urls:false,
|
||||
toolbar_mode: 'sliding',
|
||||
content_css: $A.dark.isDarkEnabled() ? 'dark' : 'default',
|
||||
setup: (editor) => {
|
||||
editor.ui.registry.addMenuButton('uploadImages', {
|
||||
text: this.$L('图片'),
|
||||
|
171
resources/assets/js/functions/web.js
vendored
171
resources/assets/js/functions/web.js
vendored
@ -502,5 +502,176 @@
|
||||
},
|
||||
});
|
||||
|
||||
/**
|
||||
* =============================================================================
|
||||
* ********************************** dark *********************************
|
||||
* =============================================================================
|
||||
*/
|
||||
|
||||
$.extend({
|
||||
dark: {
|
||||
utils: {
|
||||
filter: '-webkit-filter: url(#dark-mode-filter) !important; filter: url(#dark-mode-filter) !important;',
|
||||
reverseFilter: '-webkit-filter: url(#dark-mode-reverse-filter) !important; filter: url(#dark-mode-reverse-filter) !important;',
|
||||
noneFilter: '-webkit-filter: none !important; filter: none !important;',
|
||||
|
||||
addExtraStyle() {
|
||||
try {
|
||||
return '';
|
||||
} catch (e) {
|
||||
return '';
|
||||
}
|
||||
},
|
||||
|
||||
addStyle(id, tag, css) {
|
||||
tag = tag || 'style';
|
||||
let doc = document, styleDom = doc.getElementById(id);
|
||||
if (styleDom) return;
|
||||
let style = doc.createElement(tag);
|
||||
style.rel = 'stylesheet';
|
||||
style.id = id;
|
||||
tag === 'style' ? style.innerHTML = css : style.href = css;
|
||||
document.head.appendChild(style);
|
||||
},
|
||||
|
||||
getClassList(node) {
|
||||
return node.classList || [];
|
||||
},
|
||||
|
||||
addClass(node, name) {
|
||||
this.getClassList(node).add(name);
|
||||
return this;
|
||||
},
|
||||
|
||||
removeClass(node, name) {
|
||||
this.getClassList(node).remove(name);
|
||||
return this;
|
||||
},
|
||||
|
||||
hasClass(node, name) {
|
||||
return this.getClassList(node).contains(name);
|
||||
},
|
||||
|
||||
hasElementById(eleId) {
|
||||
return document.getElementById(eleId);
|
||||
},
|
||||
|
||||
removeElementById(eleId) {
|
||||
let ele = document.getElementById(eleId);
|
||||
ele && ele.parentNode.removeChild(ele);
|
||||
},
|
||||
},
|
||||
|
||||
createDarkFilter() {
|
||||
if (this.utils.hasElementById('dark-mode-svg')) return;
|
||||
let svgDom = '<svg id="dark-mode-svg" style="height: 0; width: 0;"><filter id="dark-mode-filter" x="0" y="0" width="99999" height="99999"><feColorMatrix type="matrix" values="0.283 -0.567 -0.567 0.000 0.925 -0.567 0.283 -0.567 0.000 0.925 -0.567 -0.567 0.283 0.000 0.925 0.000 0.000 0.000 1.000 0.000"></feColorMatrix></filter><filter id="dark-mode-reverse-filter" x="0" y="0" width="99999" height="99999"><feColorMatrix type="matrix" values="0.333 -0.667 -0.667 0.000 1.000 -0.667 0.333 -0.667 0.000 1.000 -0.667 -0.667 0.333 0.000 1.000 0.000 0.000 0.000 1.000 0.000"></feColorMatrix></filter></svg>';
|
||||
let div = document.createElementNS('http://www.w3.org/1999/xhtml', 'div');
|
||||
div.innerHTML = svgDom;
|
||||
let frag = document.createDocumentFragment();
|
||||
while (div.firstChild)
|
||||
frag.appendChild(div.firstChild);
|
||||
document.head.appendChild(frag);
|
||||
},
|
||||
|
||||
createDarkStyle() {
|
||||
this.utils.addStyle('dark-mode-style', 'style', `
|
||||
@media screen {
|
||||
html {
|
||||
${this.utils.filter}
|
||||
}
|
||||
|
||||
/* Default Reverse rule */
|
||||
img,
|
||||
video,
|
||||
iframe,
|
||||
canvas,
|
||||
:not(object):not(body) > embed,
|
||||
object,
|
||||
svg image,
|
||||
[style*="background:url"],
|
||||
[style*="background-image:url"],
|
||||
[style*="background: url"],
|
||||
[style*="background-image: url"],
|
||||
[background],
|
||||
twitterwidget,
|
||||
.sr-reader,
|
||||
.no-dark-mode,
|
||||
.sr-backdrop {
|
||||
${this.utils.reverseFilter}
|
||||
}
|
||||
|
||||
[style*="background:url"] *,
|
||||
[style*="background-image:url"] *,
|
||||
[style*="background: url"] *,
|
||||
[style*="background-image: url"] *,
|
||||
input,
|
||||
[background] *,
|
||||
twitterwidget .NaturalImage-image {
|
||||
${this.utils.noneFilter}
|
||||
}
|
||||
|
||||
/* Text contrast */
|
||||
html {
|
||||
text-shadow: 0 0 0 !important;
|
||||
}
|
||||
|
||||
/* Full screen */
|
||||
.no-filter,
|
||||
:-webkit-full-screen,
|
||||
:-webkit-full-screen *,
|
||||
:-moz-full-screen,
|
||||
:-moz-full-screen *,
|
||||
:fullscreen,
|
||||
:fullscreen * {
|
||||
${this.utils.noneFilter}
|
||||
}
|
||||
|
||||
/* Page background */
|
||||
html {
|
||||
background: #fff !important;
|
||||
}
|
||||
${this.utils.addExtraStyle()}
|
||||
}
|
||||
|
||||
@media print {
|
||||
.no-print {
|
||||
display: none !important;
|
||||
}
|
||||
}`);
|
||||
},
|
||||
|
||||
enableDarkMode() {
|
||||
if (this.isDarkEnabled()) {
|
||||
return
|
||||
}
|
||||
this.createDarkFilter();
|
||||
this.createDarkStyle();
|
||||
this.utils.addClass(document.body, "dark-mode-reverse")
|
||||
},
|
||||
|
||||
disableDarkMode() {
|
||||
if (!this.isDarkEnabled()) {
|
||||
return
|
||||
}
|
||||
this.utils.removeElementById('dark-mode-svg');
|
||||
this.utils.removeElementById('dark-mode-style');
|
||||
this.utils.removeClass(document.body, "dark-mode-reverse")
|
||||
},
|
||||
|
||||
autoDarkMode() {
|
||||
let darkScheme = window.matchMedia && window.matchMedia('(prefers-color-scheme: dark)').matches
|
||||
if (darkScheme) {
|
||||
this.enableDarkMode()
|
||||
} else {
|
||||
this.disableDarkMode()
|
||||
}
|
||||
},
|
||||
|
||||
isDarkEnabled() {
|
||||
return this.utils.hasClass(document.body, "dark-mode-reverse")
|
||||
},
|
||||
}
|
||||
});
|
||||
|
||||
window.$A = $;
|
||||
})(window);
|
||||
|
@ -25,6 +25,17 @@
|
||||
{{$L(item.name)}}
|
||||
<Badge v-if="item.path === 'workReport'" class="manage-menu-report-badge" :count="reportUnreadNumber"/>
|
||||
</DropdownItem>
|
||||
<Dropdown placement="right-start" @on-click="setTheme">
|
||||
<DropdownItem divided>
|
||||
<div class="manage-menu-language">
|
||||
{{$L('主题皮肤')}}
|
||||
<Icon type="ios-arrow-forward"></Icon>
|
||||
</div>
|
||||
</DropdownItem>
|
||||
<DropdownMenu slot="list">
|
||||
<Dropdown-item v-for="(item, key) in themeList" :key="key" :name="item.value" :selected="themeMode === item.value">{{$L(item.name)}}</Dropdown-item>
|
||||
</DropdownMenu>
|
||||
</Dropdown>
|
||||
<Dropdown placement="right-start" @on-click="setLanguage">
|
||||
<DropdownItem divided>
|
||||
<div class="manage-menu-language">
|
||||
@ -319,7 +330,10 @@ export default {
|
||||
'cacheProjects',
|
||||
'projectTotal',
|
||||
'taskId',
|
||||
'wsOpenNum'
|
||||
'wsOpenNum',
|
||||
|
||||
'themeMode',
|
||||
'themeList'
|
||||
]),
|
||||
|
||||
...mapGetters(['taskData', 'dashboardTask']),
|
||||
@ -473,6 +487,22 @@ export default {
|
||||
}
|
||||
},
|
||||
|
||||
setTheme(mode) {
|
||||
switch (mode) {
|
||||
case 'dark':
|
||||
$A.dark.enableDarkMode()
|
||||
break;
|
||||
case 'light':
|
||||
$A.dark.disableDarkMode()
|
||||
break;
|
||||
default:
|
||||
$A.dark.autoDarkMode()
|
||||
break;
|
||||
}
|
||||
this.$store.state.themeMode = mode;
|
||||
$A.setStorage("cacheThemeMode", mode);
|
||||
},
|
||||
|
||||
toggleRoute(path) {
|
||||
this.show768Menu = false;
|
||||
this.goForward({path: '/manage/' + path});
|
||||
|
2
resources/assets/js/store/actions.js
vendored
2
resources/assets/js/store/actions.js
vendored
@ -386,6 +386,7 @@ export default {
|
||||
return new Promise(function (resolve) {
|
||||
try {
|
||||
const cacheLoginEmail = $A.getStorageString("cacheLoginEmail");
|
||||
const cacheThemeMode = $A.getStorageString("cacheThemeMode");
|
||||
//
|
||||
window.localStorage.clear();
|
||||
//
|
||||
@ -398,6 +399,7 @@ export default {
|
||||
$A.setStorage("cacheProjectParameter", state.cacheProjectParameter);
|
||||
$A.setStorage("cacheServerUrl", state.cacheServerUrl);
|
||||
$A.setStorage("cacheLoginEmail", cacheLoginEmail);
|
||||
$A.setStorage("cacheThemeMode", cacheThemeMode);
|
||||
dispatch("saveUserInfo", $A.isJson(userInfo) ? userInfo : state.userInfo);
|
||||
//
|
||||
resolve()
|
||||
|
19
resources/assets/js/store/state.js
vendored
19
resources/assets/js/store/state.js
vendored
@ -107,4 +107,23 @@ state.taskColorList = [
|
||||
{name: '灰色', color: '#f3f3f3'},
|
||||
];
|
||||
|
||||
// 主题皮肤
|
||||
state.themeMode = $A.getStorageString("cacheThemeMode", "auto");
|
||||
state.themeList = [
|
||||
{name: '跟随系统', value: 'auto'},
|
||||
{name: '明亮', value: 'light'},
|
||||
{name: '暗黑', value: 'dark'},
|
||||
];
|
||||
switch (state.themeMode) {
|
||||
case 'dark':
|
||||
$A.dark.enableDarkMode()
|
||||
break;
|
||||
case 'light':
|
||||
$A.dark.disableDarkMode()
|
||||
break;
|
||||
default:
|
||||
$A.dark.autoDarkMode()
|
||||
break;
|
||||
}
|
||||
|
||||
export default state
|
||||
|
2
resources/assets/sass/app.scss
vendored
2
resources/assets/sass/app.scss
vendored
@ -8,3 +8,5 @@
|
||||
@import "components/_";
|
||||
@import "pages/_";
|
||||
|
||||
@import "dark";
|
||||
|
||||
|
157
resources/assets/sass/dark.scss
vendored
Normal file
157
resources/assets/sass/dark.scss
vendored
Normal file
@ -0,0 +1,157 @@
|
||||
body.dark-mode-reverse {
|
||||
.ivu-btn-primary,
|
||||
.ivu-badge-count,
|
||||
.common-app-down-link {
|
||||
color: #000;
|
||||
}
|
||||
|
||||
.ivu-select-dropdown {
|
||||
box-shadow: rgba(255, 255, 255, 0.2) 0 1px 6px;
|
||||
}
|
||||
|
||||
.ivu-modal-mask {
|
||||
background-color: rgba(230, 230, 230, 0.6);
|
||||
}
|
||||
|
||||
.ivu-modal-content {
|
||||
box-shadow: 0 4px 12px rgba(255, 255, 255, 0.15);
|
||||
}
|
||||
|
||||
.ivu-tooltip-inner,
|
||||
.ivu-poptip-inner {
|
||||
border: 1px solid #e3e8ed;
|
||||
box-shadow: none;
|
||||
}
|
||||
|
||||
.el-dropdown-menu {
|
||||
border-color: #e3e8ed;
|
||||
box-shadow: 0 2px 12px 0 rgba(255, 255, 255, 0.1);
|
||||
}
|
||||
|
||||
.el-tooltip__popper {
|
||||
&.is-light {
|
||||
border: 1px solid #e3e8ed;
|
||||
box-shadow: 0 1px 6px rgba(255, 255, 255, 0.2);
|
||||
}
|
||||
}
|
||||
|
||||
.drawer-overlay {
|
||||
background: rgba(240, 240, 240, 0.76);
|
||||
.overlay-body {
|
||||
.overlay-close {
|
||||
> a {
|
||||
color: #323232;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.file-content,
|
||||
.file-preview {
|
||||
.content-body {
|
||||
.tox {
|
||||
.tox-edit-area__iframe {
|
||||
background-color: #000;
|
||||
}
|
||||
}
|
||||
.teditor-loadedstyle {
|
||||
.tox-sidebar-wrap {
|
||||
box-shadow: none
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.minder-editor-container {
|
||||
.quickbar {
|
||||
border: 1px solid #e3e8ed !important;
|
||||
box-shadow: 3px 3px 10px rgba(255, 255, 255, .2) !important;
|
||||
}
|
||||
}
|
||||
|
||||
.project-list {
|
||||
.project-head {
|
||||
.project-titbox {
|
||||
.project-icons {
|
||||
> li {
|
||||
&.project-icon {
|
||||
&.active {
|
||||
color: #000000;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.page-manage {
|
||||
.manage-box-menu {
|
||||
.manage-box-dropdown {
|
||||
.manage-box-title {
|
||||
&.menu-visible {
|
||||
box-shadow: 0 1px 6px rgba(255, 255, 255, 0.2);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.page-dashboard {
|
||||
.dashboard-wrapper {
|
||||
.dashboard-block {
|
||||
> li {
|
||||
.block-title {
|
||||
color: rgba(0, 0, 0, 0.6);
|
||||
font-size: 12px;
|
||||
}
|
||||
.block-data {
|
||||
.block-num {
|
||||
color: #000;
|
||||
}
|
||||
.taskfont {
|
||||
color: rgba(0, 0, 0, 0.7);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.page-messenger {
|
||||
.messenger-wrapper {
|
||||
.messenger-select {
|
||||
.messenger-list {
|
||||
> ul {
|
||||
&.dialog {
|
||||
> li {
|
||||
.icon-avatar {
|
||||
color: #1c1917;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.page-file {
|
||||
.file-wrapper {
|
||||
.file-list {
|
||||
> ul {
|
||||
> li {
|
||||
.file-icon {
|
||||
.share-icon,
|
||||
.share-avatar {
|
||||
.taskfont {
|
||||
color: #3a3a3a;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
@ -44,6 +44,7 @@
|
||||
<script type="text/javascript" src="js/Dialogs.js"></script>
|
||||
</head>
|
||||
<body class="geEditor">
|
||||
<script type="text/javascript" src="js/Dark.js"></script>
|
||||
<script type="text/javascript">
|
||||
(function () {
|
||||
var editorUiInit = EditorUi.prototype.init;
|
||||
|
165
resources/assets/statics/public/js/grapheditor/js/Dark.js
vendored
Normal file
165
resources/assets/statics/public/js/grapheditor/js/Dark.js
vendored
Normal file
@ -0,0 +1,165 @@
|
||||
var Dark = {
|
||||
utils: {
|
||||
filter: '-webkit-filter: url(#dark-mode-filter) !important; filter: url(#dark-mode-filter) !important;',
|
||||
reverseFilter: '-webkit-filter: url(#dark-mode-reverse-filter) !important; filter: url(#dark-mode-reverse-filter) !important;',
|
||||
noneFilter: '-webkit-filter: none !important; filter: none !important;',
|
||||
|
||||
addExtraStyle() {
|
||||
try {
|
||||
return '';
|
||||
} catch (e) {
|
||||
return '';
|
||||
}
|
||||
},
|
||||
|
||||
addStyle(id, tag, css) {
|
||||
tag = tag || 'style';
|
||||
let doc = document, styleDom = doc.getElementById(id);
|
||||
if (styleDom) return;
|
||||
let style = doc.createElement(tag);
|
||||
style.rel = 'stylesheet';
|
||||
style.id = id;
|
||||
tag === 'style' ? style.innerHTML = css : style.href = css;
|
||||
document.head.appendChild(style);
|
||||
},
|
||||
|
||||
getClassList(node) {
|
||||
return node.classList || [];
|
||||
},
|
||||
|
||||
addClass(node, name) {
|
||||
this.getClassList(node).add(name);
|
||||
return this;
|
||||
},
|
||||
|
||||
removeClass(node, name) {
|
||||
this.getClassList(node).remove(name);
|
||||
return this;
|
||||
},
|
||||
|
||||
hasClass(node, name) {
|
||||
return this.getClassList(node).contains(name);
|
||||
},
|
||||
|
||||
hasElementById(eleId) {
|
||||
return document.getElementById(eleId);
|
||||
},
|
||||
|
||||
removeElementById(eleId) {
|
||||
let ele = document.getElementById(eleId);
|
||||
ele && ele.parentNode.removeChild(ele);
|
||||
},
|
||||
},
|
||||
|
||||
createDarkFilter() {
|
||||
if (this.utils.hasElementById('dark-mode-svg')) return;
|
||||
let svgDom = '<svg id="dark-mode-svg" style="height: 0; width: 0;"><filter id="dark-mode-filter" x="0" y="0" width="99999" height="99999"><feColorMatrix type="matrix" values="0.283 -0.567 -0.567 0.000 0.925 -0.567 0.283 -0.567 0.000 0.925 -0.567 -0.567 0.283 0.000 0.925 0.000 0.000 0.000 1.000 0.000"></feColorMatrix></filter><filter id="dark-mode-reverse-filter" x="0" y="0" width="99999" height="99999"><feColorMatrix type="matrix" values="0.333 -0.667 -0.667 0.000 1.000 -0.667 0.333 -0.667 0.000 1.000 -0.667 -0.667 0.333 0.000 1.000 0.000 0.000 0.000 1.000 0.000"></feColorMatrix></filter></svg>';
|
||||
let div = document.createElementNS('http://www.w3.org/1999/xhtml', 'div');
|
||||
div.innerHTML = svgDom;
|
||||
let frag = document.createDocumentFragment();
|
||||
while (div.firstChild)
|
||||
frag.appendChild(div.firstChild);
|
||||
document.head.appendChild(frag);
|
||||
},
|
||||
|
||||
createDarkStyle() {
|
||||
this.utils.addStyle('dark-mode-style', 'style', `
|
||||
@media screen {
|
||||
html {
|
||||
${this.utils.filter}
|
||||
}
|
||||
|
||||
/* Default Reverse rule */
|
||||
img,
|
||||
video,
|
||||
iframe,
|
||||
canvas,
|
||||
:not(object):not(body) > embed,
|
||||
object,
|
||||
svg image {
|
||||
${this.utils.reverseFilter}
|
||||
}
|
||||
|
||||
[style*="background:url"] *,
|
||||
[style*="background-image:url"] *,
|
||||
[style*="background: url"] *,
|
||||
[style*="background-image: url"] *,
|
||||
input,
|
||||
[background] *,
|
||||
twitterwidget .NaturalImage-image {
|
||||
${this.utils.noneFilter}
|
||||
}
|
||||
|
||||
/* Text contrast */
|
||||
html {
|
||||
text-shadow: 0 0 0 !important;
|
||||
}
|
||||
|
||||
/* Full screen */
|
||||
.no-filter,
|
||||
:-webkit-full-screen,
|
||||
:-webkit-full-screen *,
|
||||
:-moz-full-screen,
|
||||
:-moz-full-screen *,
|
||||
:fullscreen,
|
||||
:fullscreen * {
|
||||
${this.utils.noneFilter}
|
||||
}
|
||||
|
||||
/* Page background */
|
||||
html {
|
||||
background: #fff !important;
|
||||
}
|
||||
${this.utils.addExtraStyle()}
|
||||
}
|
||||
|
||||
@media print {
|
||||
.no-print {
|
||||
display: none !important;
|
||||
}
|
||||
}`);
|
||||
},
|
||||
|
||||
enableDarkMode() {
|
||||
if (this.isDarkEnabled()) {
|
||||
return
|
||||
}
|
||||
this.createDarkFilter();
|
||||
this.createDarkStyle();
|
||||
this.utils.addClass(document.body, "dark-mode-reverse")
|
||||
},
|
||||
|
||||
disableDarkMode() {
|
||||
if (!this.isDarkEnabled()) {
|
||||
return
|
||||
}
|
||||
this.utils.removeElementById('dark-mode-svg');
|
||||
this.utils.removeElementById('dark-mode-style');
|
||||
this.utils.removeClass(document.body, "dark-mode-reverse")
|
||||
},
|
||||
|
||||
autoDarkMode() {
|
||||
let darkScheme = window.matchMedia && window.matchMedia('(prefers-color-scheme: dark)').matches
|
||||
if (darkScheme) {
|
||||
this.enableDarkMode()
|
||||
} else {
|
||||
this.disableDarkMode()
|
||||
}
|
||||
},
|
||||
|
||||
isDarkEnabled() {
|
||||
return this.utils.hasClass(document.body, "dark-mode-reverse")
|
||||
},
|
||||
};
|
||||
|
||||
switch (window.mxTheme) {
|
||||
case 'dark':
|
||||
Dark.enableDarkMode();
|
||||
break;
|
||||
case 'light':
|
||||
Dark.disableDarkMode();
|
||||
break;
|
||||
default:
|
||||
Dark.autoDarkMode();
|
||||
break;
|
||||
}
|
@ -27,3 +27,4 @@ window.OPEN_FORM = window.OPEN_FORM || 'open.html';
|
||||
window.mxBasePath = window.mxBasePath || '../../../src';
|
||||
window.mxLanguage = window.mxLanguage || urlParams['lang'] || 'zh';
|
||||
window.mxLanguages = window.mxLanguages || ['zh'];
|
||||
window.mxTheme = window.mxTheme || urlParams['theme'] || 'light';
|
||||
|
@ -5,12 +5,28 @@
|
||||
* For commercial licenses see https://www.tiny.cloud/
|
||||
*/
|
||||
body {
|
||||
background-color: #2f3742;
|
||||
background-color: #131313;
|
||||
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;
|
||||
}
|
||||
::-webkit-scrollbar {
|
||||
background-color: #202324;
|
||||
color: #aba499;
|
||||
}
|
||||
::-webkit-scrollbar-thumb {
|
||||
background-color: #454a4d;
|
||||
}
|
||||
::-webkit-scrollbar-thumb:hover {
|
||||
background-color: #575e62;
|
||||
}
|
||||
::-webkit-scrollbar-thumb:active {
|
||||
background-color: #484e51;
|
||||
}
|
||||
::-webkit-scrollbar-corner {
|
||||
background-color: #181a1b;
|
||||
}
|
||||
a {
|
||||
color: #4099ff;
|
||||
}
|
||||
|
@ -4,4 +4,4 @@
|
||||
* For LGPL see License.txt in the project root for license information.
|
||||
* For commercial licenses see https://www.tiny.cloud/
|
||||
*/
|
||||
body{background-color:#2f3742;color:#dfe0e4;font-family:-apple-system,BlinkMacSystemFont,'Segoe UI',Roboto,Oxygen,Ubuntu,Cantarell,'Open Sans','Helvetica Neue',sans-serif;line-height:1.4;margin:1rem}a{color:#4099ff}table{border-collapse:collapse}table:not([cellpadding]) td,table:not([cellpadding]) th{padding:.4rem}table[border]:not([border="0"]):not([style*=border-width]) td,table[border]:not([border="0"]):not([style*=border-width]) th{border-width:1px}table[border]:not([border="0"]):not([style*=border-style]) td,table[border]:not([border="0"]):not([style*=border-style]) th{border-style:solid}table[border]:not([border="0"]):not([style*=border-color]) td,table[border]:not([border="0"]):not([style*=border-color]) th{border-color:#6d737b}figure{display:table;margin:1rem auto}figure figcaption{color:#8a8f97;display:block;margin-top:.25rem;text-align:center}hr{border-color:#6d737b;border-style:solid;border-width:1px 0 0 0}code{background-color:#6d737b;border-radius:3px;padding:.1rem .2rem}.mce-content-body:not([dir=rtl]) blockquote{border-left:2px solid #6d737b;margin-left:1.5rem;padding-left:1rem}.mce-content-body[dir=rtl] blockquote{border-right:2px solid #6d737b;margin-right:1.5rem;padding-right:1rem}
|
||||
body{background-color:#131313;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}::-webkit-scrollbar{background-color:#202324;color:#aba499}::-webkit-scrollbar-thumb{background-color:#454a4d}::-webkit-scrollbar-thumb:hover{background-color:#575e62}::-webkit-scrollbar-thumb:active{background-color:#484e51}::-webkit-scrollbar-corner{background-color:#181a1b}a{color:#4099ff}table{border-collapse:collapse}table:not([cellpadding]) td,table:not([cellpadding]) th{padding:.4rem}table[border]:not([border="0"]):not([style*=border-width]) td,table[border]:not([border="0"]):not([style*=border-width]) th{border-width:1px}table[border]:not([border="0"]):not([style*=border-style]) td,table[border]:not([border="0"]):not([style*=border-style]) th{border-style:solid}table[border]:not([border="0"]):not([style*=border-color]) td,table[border]:not([border="0"]):not([style*=border-color]) th{border-color:#6d737b}figure{display:table;margin:1rem auto}figure figcaption{color:#8a8f97;display:block;margin-top:.25rem;text-align:center}hr{border-color:#6d737b;border-style:solid;border-width:1px 0 0 0}code{background-color:#6d737b;border-radius:3px;padding:.1rem .2rem}.mce-content-body:not([dir=rtl]) blockquote{border-left:2px solid #6d737b;margin-left:1.5rem;padding-left:1rem}.mce-content-body[dir=rtl] blockquote{border-right:2px solid #6d737b;margin-right:1.5rem;padding-right:1rem}
|
||||
|
Loading…
x
Reference in New Issue
Block a user