mirror of
https://github.com/Ionaru/easy-markdown-editor
synced 2025-07-23 09:54:28 -06:00
handle fullscreen toggle consistently by adusting toggleSideBySide
This commit is contained in:
parent
abbec5bde1
commit
61e93a3d53
20
example/index_sideBySideFullscreenFalse.html
Normal file
20
example/index_sideBySideFullscreenFalse.html
Normal file
@ -0,0 +1,20 @@
|
|||||||
|
<!DOCTYPE html>
|
||||||
|
<html lang="en">
|
||||||
|
|
||||||
|
<head>
|
||||||
|
<meta charset="UTF-8">
|
||||||
|
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||||
|
<meta http-equiv="X-UA-Compatible" content="ie=edge">
|
||||||
|
<title>Example / Preview / sideBySideFullscreen : true</title>
|
||||||
|
<link rel="stylesheet" href="../dist/easymde.min.css">
|
||||||
|
<script src="../dist/easymde.min.js"></script>
|
||||||
|
</head>
|
||||||
|
|
||||||
|
<body>
|
||||||
|
<textarea></textarea>
|
||||||
|
<script>
|
||||||
|
var easyMDE = new EasyMDE({sideBySideFullscreen: false});
|
||||||
|
</script>
|
||||||
|
</body>
|
||||||
|
|
||||||
|
</html>
|
@ -323,7 +323,6 @@ function toggleFullScreen(editor) {
|
|||||||
var cm = editor.codemirror;
|
var cm = editor.codemirror;
|
||||||
cm.setOption('fullScreen', !cm.getOption('fullScreen'));
|
cm.setOption('fullScreen', !cm.getOption('fullScreen'));
|
||||||
|
|
||||||
|
|
||||||
// Prevent scrolling on body during fullscreen active
|
// Prevent scrolling on body during fullscreen active
|
||||||
if (cm.getOption('fullScreen')) {
|
if (cm.getOption('fullScreen')) {
|
||||||
saved_overflow = document.body.style.overflow;
|
saved_overflow = document.body.style.overflow;
|
||||||
@ -334,11 +333,9 @@ function toggleFullScreen(editor) {
|
|||||||
|
|
||||||
var sidebyside = cm.getWrapperElement().nextSibling;
|
var sidebyside = cm.getWrapperElement().nextSibling;
|
||||||
|
|
||||||
// Hide side by side if needed, retain current state if sideBySideFullscreen is disabled
|
// if (/editor-preview-active-side/.test(sidebyside.className)) {
|
||||||
if (editor.options.sideBySideFullscreen !== false) {
|
toggleSideBySide(editor, true);
|
||||||
if (/editor-preview-active-side/.test(sidebyside.className))
|
// }
|
||||||
toggleSideBySide(editor);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (editor.options.onToggleFullScreen) {
|
if (editor.options.onToggleFullScreen) {
|
||||||
editor.options.onToggleFullScreen(cm.getOption('fullScreen') || false);
|
editor.options.onToggleFullScreen(cm.getOption('fullScreen') || false);
|
||||||
@ -873,15 +870,22 @@ function redo(editor) {
|
|||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Toggle side by side preview
|
* Toggle side by side preview.
|
||||||
|
* Note: If triggered by fullscreen toggle and sideBySideFullscreen === false,
|
||||||
|
* `sideBySide` is not actually toggled, but classes are reapplied as needed.
|
||||||
|
* @param {EasyMDE} editor - The EasyMDE object
|
||||||
|
* @param {boolean} triggeredByFullscreenToggle If triggered by fullscreen toggle.
|
||||||
*/
|
*/
|
||||||
function toggleSideBySide(editor) {
|
function toggleSideBySide(editor, triggeredByFullscreenToggle) {
|
||||||
var cm = editor.codemirror;
|
var cm = editor.codemirror;
|
||||||
var wrapper = cm.getWrapperElement();
|
var wrapper = cm.getWrapperElement();
|
||||||
var preview = wrapper.nextSibling;
|
var preview = wrapper.nextSibling;
|
||||||
var toolbarButton = editor.toolbarElements && editor.toolbarElements['side-by-side'];
|
var toolbarButton = editor.toolbarElements && editor.toolbarElements['side-by-side'];
|
||||||
var useSideBySideListener = false;
|
var useSideBySideListener = false;
|
||||||
|
|
||||||
|
// if triggered by fullscreen toggle and sideBySideFullscreen === false, don't toggle
|
||||||
|
var dontToggle = editor.options.sideBySideFullscreen === false && triggeredByFullscreenToggle;
|
||||||
|
|
||||||
var noFullscreenItems = [
|
var noFullscreenItems = [
|
||||||
wrapper.parentNode, // easyMDEContainer
|
wrapper.parentNode, // easyMDEContainer
|
||||||
editor.gui.toolbar,
|
editor.gui.toolbar,
|
||||||
@ -891,56 +895,81 @@ function toggleSideBySide(editor) {
|
|||||||
];
|
];
|
||||||
|
|
||||||
function addNoFullscreenClass(el) {
|
function addNoFullscreenClass(el) {
|
||||||
el.className += ' sided--no-fullscreen';
|
if (el != null) {
|
||||||
|
el.className += ' sided--no-fullscreen';
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
function removeNoFullscreenClass(el) {
|
function removeNoFullscreenClass(el) {
|
||||||
if (el != null) {
|
if (el != null) {
|
||||||
el.className = el.className.replace(
|
el.className = el.className.replace(
|
||||||
/\s*sided--no-fullscreen\s*/g, ''
|
// retain spaces after the class
|
||||||
|
// in case there are subsequent classes
|
||||||
|
/\s*sided--no-fullscreen(\s*)/g, '$1'
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (/editor-preview-active-side/.test(preview.className)) {
|
// helper method to add/remove no-fullscreen classes as appropriate
|
||||||
if (cm.getOption('sideBySideNoFullscreen')) {
|
function setupNoFullscreenClasses(previewActive) {
|
||||||
cm.setOption('sideBySideNoFullscreen', false);
|
if (editor.options.sideBySideFullscreen === false) {
|
||||||
noFullscreenItems.forEach(function (el) {
|
if (!cm.getOption('fullScreen') && previewActive) {
|
||||||
removeNoFullscreenClass(el);
|
noFullscreenItems.forEach(function(el) {
|
||||||
});
|
addNoFullscreenClass(el);
|
||||||
}
|
});
|
||||||
preview.className = preview.className.replace(
|
} else {
|
||||||
/\s*editor-preview-active-side\s*/g, ''
|
noFullscreenItems.forEach(function (el) {
|
||||||
);
|
removeNoFullscreenClass(el);
|
||||||
if (toolbarButton) toolbarButton.className = toolbarButton.className.replace(/\s*active\s*/g, '');
|
});
|
||||||
wrapper.className = wrapper.className.replace(/\s*CodeMirror-sided\s*/g, ' ');
|
|
||||||
} else {
|
|
||||||
// When the preview button is clicked for the first time,
|
|
||||||
// give some time for the transition from editor.css to fire and the view to slide from right to left,
|
|
||||||
// instead of just appearing.
|
|
||||||
setTimeout(function () {
|
|
||||||
if (!cm.getOption('fullScreen')) {
|
|
||||||
if (editor.options.sideBySideFullscreen === false) {
|
|
||||||
cm.setOption('sideBySideNoFullscreen', true);
|
|
||||||
noFullscreenItems.forEach(function(el) {
|
|
||||||
if (el != null) {
|
|
||||||
addNoFullscreenClass(el);
|
|
||||||
}
|
|
||||||
});
|
|
||||||
} else {
|
|
||||||
toggleFullScreen(editor);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
preview.className += ' editor-preview-active-side';
|
}
|
||||||
}, 1);
|
|
||||||
if (toolbarButton) toolbarButton.className += ' active';
|
|
||||||
wrapper.className += ' CodeMirror-sided';
|
|
||||||
useSideBySideListener = true;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// Hide normal preview if active
|
if (/editor-preview-active-side/.test(preview.className)) {
|
||||||
|
// If side-by-side active...
|
||||||
|
if (dontToggle) {
|
||||||
|
// if not toggling, cleanup noFullscreen classes as needed
|
||||||
|
setupNoFullscreenClasses(true);
|
||||||
|
} else {
|
||||||
|
// otherwise close side-by-side, and cleanup noFullscreen classes as needed
|
||||||
|
setupNoFullscreenClasses(false);
|
||||||
|
preview.className = preview.className.replace(
|
||||||
|
/\s*editor-preview-active-side\s*/g, ''
|
||||||
|
);
|
||||||
|
if (toolbarButton) toolbarButton.className = toolbarButton.className.replace(/\s*active\s*/g, '');
|
||||||
|
wrapper.className = wrapper.className.replace(/\s*CodeMirror-sided\s*/g, ' ');
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
// If side-by-side not active...
|
||||||
|
if (dontToggle) {
|
||||||
|
// if not toggling, cleanup noFullscreen classes as needed
|
||||||
|
setupNoFullscreenClasses(false);
|
||||||
|
} else {
|
||||||
|
// otherwise open side-by-side, and setup noFullscreen classes as needed
|
||||||
|
setTimeout(function () {
|
||||||
|
// When the preview button is clicked for the first time,
|
||||||
|
// give some time for the transition from editor.css to
|
||||||
|
// fire and the view to slide from right to left,
|
||||||
|
// instead of just appearing.
|
||||||
|
if (!cm.getOption('fullScreen')) {
|
||||||
|
if (editor.options.sideBySideFullscreen === false) {
|
||||||
|
setupNoFullscreenClasses(true);
|
||||||
|
} else {
|
||||||
|
toggleFullScreen(editor);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
preview.className += ' editor-preview-active-side';
|
||||||
|
}, 1);
|
||||||
|
if (toolbarButton) toolbarButton.className += ' active';
|
||||||
|
wrapper.className += ' CodeMirror-sided';
|
||||||
|
useSideBySideListener = true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
// Hide normal (full-pane) preview if active
|
||||||
var previewNormal = wrapper.lastChild;
|
var previewNormal = wrapper.lastChild;
|
||||||
if (/editor-preview-active/.test(previewNormal.className)) {
|
if (!dontToggle && /editor-preview-active/.test(previewNormal.className)) {
|
||||||
previewNormal.className = previewNormal.className.replace(
|
previewNormal.className = previewNormal.className.replace(
|
||||||
/\s*editor-preview-active\s*/g, ''
|
/\s*editor-preview-active\s*/g, ''
|
||||||
);
|
);
|
||||||
@ -991,8 +1020,8 @@ function togglePreview(editor) {
|
|||||||
if (/editor-preview-active-side/.test(sidebyside.className))
|
if (/editor-preview-active-side/.test(sidebyside.className))
|
||||||
toggleSideBySide(editor);
|
toggleSideBySide(editor);
|
||||||
|
|
||||||
|
// Construct preview element if it doesn't exist
|
||||||
if (!preview || !/editor-preview-full/.test(preview.className)) {
|
if (!preview || !/editor-preview-full/.test(preview.className)) {
|
||||||
|
|
||||||
preview = document.createElement('div');
|
preview = document.createElement('div');
|
||||||
preview.className = 'editor-preview-full';
|
preview.className = 'editor-preview-full';
|
||||||
|
|
||||||
@ -1011,6 +1040,7 @@ function togglePreview(editor) {
|
|||||||
wrapper.appendChild(preview);
|
wrapper.appendChild(preview);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Toggle display of preview depending on current state
|
||||||
if (/editor-preview-active/.test(preview.className)) {
|
if (/editor-preview-active/.test(preview.className)) {
|
||||||
preview.className = preview.className.replace(
|
preview.className = preview.className.replace(
|
||||||
/\s*editor-preview-active\s*/g, ''
|
/\s*editor-preview-active\s*/g, ''
|
||||||
|
Loading…
x
Reference in New Issue
Block a user