Skip to content

Commit f61cc01

Browse files
author
春秋一语
authored
Merge pull request #14 from Coding/tencent
Tencent
2 parents 5abdd43 + 6a56afa commit f61cc01

File tree

5 files changed

+60
-12
lines changed

5 files changed

+60
-12
lines changed

app/commands/commandBindings/tab.js

Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -35,4 +35,36 @@ export default {
3535
Tab.moveTabToPane(c.context.id, newPaneId)
3636
)
3737
},
38+
39+
'tab:zenmode': () => {
40+
const tab = document.querySelector('.tab-content-item.active');
41+
const datasetExt = tab.dataset.ext;
42+
const ext = datasetExt && datasetExt.toLowerCase();
43+
if (['md', 'markdown', 'html'].includes(ext)) {
44+
tab.classList.add('zenmode_preview');
45+
} else {
46+
tab.classList.add('zenmode');
47+
}
48+
if (tab.requestFullscreen) {
49+
tab.requestFullscreen();
50+
} else if (tab.webkitRequestFullscreen) {
51+
tab.webkitRequestFullscreen();
52+
} else if (tab.mozRequestFullScreen) {
53+
tab.mozRequestFullScreen();
54+
} else if (tab.msRequestFullscreen) {
55+
tab.msRequestFullscreen();
56+
}
57+
}
58+
}
59+
60+
function exitFullScreen() {
61+
const isFull = document.fullscreenElement || document.webkitFullscreenElement || document.mozFullScreenElement;
62+
if (!isFull) {
63+
const tab = document.querySelector('.tab-content-item.active');
64+
tab.classList.remove('zenmode', 'zenmode_preview');
65+
}
3866
}
67+
document.addEventListener('fullscreenchange', () => exitFullScreen());
68+
document.addEventListener('webkitfullscreenchange', () => exitFullScreen());
69+
document.addEventListener('mozfullscreenchange', () => exitFullScreen());
70+
document.addEventListener('msfullscreenchang', () => exitFullScreen());

app/commands/keymaps.js

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,7 @@ if (isMac) {
2424
'ctrl+g': 'editor:goto',
2525
'alt+l': 'edit:toggle_format',
2626
'cmd+/': 'edit:toggle_comment',
27+
'cmd+f11': 'tab:zenmode',
2728
}
2829
modifierKeysMap = {
2930
ctrl: '⌃',
@@ -51,6 +52,7 @@ if (isMac) {
5152
'ctrl+g': 'editor:goto',
5253
'alt+l': 'edit:toggle_format',
5354
'ctrl+/': 'edit:toggle_comment',
55+
'ctrl+f11': 'tab:zenmode',
5456
}
5557
modifierKeysMap = {
5658
ctrl: 'Ctrl',

app/commons/Tab/TabContent.jsx

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,11 +10,12 @@ export const TabContent = ({ children }) => (
1010
)
1111

1212
export const TabContentItem = observer(({ tab, children }) => {
13+
const ext = tab.title && tab.title.split('.')[1];
1314
if (tab.isActive && tab.onActive) {
1415
tab.onActive()
1516
}
1617
return (
17-
<div className={cx('tab-content-item', { active: tab.isActive })}>
18+
<div className={cx('tab-content-item', { active: tab.isActive })} data-ext={ext}>
1819
{children}
1920
</div>
2021
)

app/components/MonacoEditor/Editors/scrollMixin.js

Lines changed: 12 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -14,8 +14,10 @@ function buildScrollMap($lines) {
1414
}
1515

1616
function scrollMixin(monaco, previewDOM) {
17+
let mousedown = false;
1718
let active = 'editor';
1819
const $lines = previewDOM.getElementsByClassName('line');
20+
const editorDOM = monaco.getDomNode();
1921
const map = buildScrollMap($lines);
2022
const array = Object.keys(map);
2123
const length = array.length;
@@ -24,15 +26,21 @@ function scrollMixin(monaco, previewDOM) {
2426
let preMap = { top: 0, current: 0, next: 0 };
2527
let nextMap = { top: 0, current: 0, next: 0 };
2628
let areaStep = 1;
27-
previewDOM.addEventListener('mouseover', () => active = 'preview');
28-
monaco.getDomNode().addEventListener('mouseover', () => active = 'editor');
29+
document.addEventListener('mousedown', () => mousedown = true);
30+
document.addEventListener('mouseup', () => mousedown = false);
31+
previewDOM.addEventListener('mouseover', () => {
32+
if (!mousedown) {
33+
active = 'preview';
34+
}
35+
});
36+
editorDOM.addEventListener('mouseover', () => active = 'editor');
2937
monaco.onDidScrollChange((event) => {
3038
if (active === 'preview') {
3139
return;
3240
}
3341
let mapItem;
3442
const line = Math.ceil(event.scrollTop / 20); // 20px each line
35-
if (line > array[length - 1]) {
43+
if (line > (array[length - 1] - editorDOM.offsetHeight / 20)) {
3644
previewDOM.scrollTop = lastMap.top;
3745
return;
3846
}
@@ -41,7 +49,7 @@ function scrollMixin(monaco, previewDOM) {
4149
const next = array[i + 1];
4250
if (line == cur) {
4351
mapItem = map[line];
44-
} else if (line - cur > 0 && line - cur < 6 && next - line > 0 && next - line < 6) {
52+
} else if (line - cur > 0 && line - cur < 6 && next - line > 0 && next - line < 6) { // 6 line range
4553
mapItem = map[next];
4654
}
4755
}

app/styles/core-ui/Tab.styl

Lines changed: 12 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,18 @@ $tab-control-width = $tab-height*0.5;
3535
.tab-content-item {
3636
width: 100%;
3737
height: 100%;
38+
display: none;
39+
&.active {
40+
display: block;
41+
}
42+
&.zenmode {
43+
padding-left: calc(50% - 600px);
44+
padding-right: calc(50% - 600px);
45+
background-color: #000;
46+
}
47+
&.zenmode_preview {
48+
background-color: #000;
49+
}
3850
}
3951

4052
.tab-bar {
@@ -193,10 +205,3 @@ $tab-control-width = $tab-height*0.5;
193205
}
194206

195207
}
196-
197-
.tab-content-item {
198-
display: none;
199-
&.active {
200-
display: block;
201-
}
202-
}

0 commit comments

Comments
 (0)