Fixed mobile layout issues and improved editor layout styles
This commit is contained in:
parent
b5d9d28f2e
commit
40f9206190
3 changed files with 47 additions and 34 deletions
|
@ -15,7 +15,7 @@ body {
|
|||
letter-spacing: 0.025em;
|
||||
line-height: 1.25;
|
||||
font-size: 18px;
|
||||
min-height: 100%;
|
||||
height: auto !important;
|
||||
overflow-y: hidden !important;
|
||||
-webkit-overflow-scrolling: touch;
|
||||
}
|
||||
|
|
|
@ -530,6 +530,7 @@ var ui = {
|
|||
edit: $(".ui-edit-area"),
|
||||
view: $(".ui-view-area"),
|
||||
codemirror: $(".ui-edit-area .CodeMirror"),
|
||||
codemirrorScroll: $(".ui-edit-area .CodeMirror .CodeMirror-scroll"),
|
||||
markdown: $(".ui-view-area .markdown-body")
|
||||
}
|
||||
};
|
||||
|
@ -703,7 +704,7 @@ function locationHashChanged(e) {
|
|||
var windowResizeDebounce = 200;
|
||||
var windowResize = _.debounce(windowResizeInner, windowResizeDebounce);
|
||||
|
||||
function windowResizeInner() {
|
||||
function windowResizeInner(callback) {
|
||||
checkLayout();
|
||||
checkResponsive();
|
||||
checkEditorStyle();
|
||||
|
@ -711,18 +712,29 @@ function windowResizeInner() {
|
|||
checkCursorMenu();
|
||||
//refresh editor
|
||||
if (loaded) {
|
||||
editor.setOption('viewportMargin', Infinity);
|
||||
setTimeout(function () {
|
||||
if (editor.getOption('scrollbarStyle') === 'native') {
|
||||
clearMap();
|
||||
syncScrollToView();
|
||||
editor.setOption('viewportMargin', viewportMargin);
|
||||
//add or update user cursors
|
||||
for (var i = 0; i < onlineUsers.length; i++) {
|
||||
if (onlineUsers[i].id != personalInfo.id)
|
||||
buildCursor(onlineUsers[i]);
|
||||
}
|
||||
updateScrollspy();
|
||||
}, 100);
|
||||
if (callback && typeof callback === 'function')
|
||||
callback();
|
||||
} else {
|
||||
// force it load all docs at once to prevent scroll knob blink
|
||||
editor.setOption('viewportMargin', Infinity);
|
||||
setTimeout(function () {
|
||||
clearMap();
|
||||
syncScrollToView();
|
||||
editor.setOption('viewportMargin', viewportMargin);
|
||||
//add or update user cursors
|
||||
for (var i = 0; i < onlineUsers.length; i++) {
|
||||
if (onlineUsers[i].id != personalInfo.id)
|
||||
buildCursor(onlineUsers[i]);
|
||||
}
|
||||
updateScrollspy();
|
||||
if (callback && typeof callback === 'function')
|
||||
callback();
|
||||
}, 1);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -754,25 +766,16 @@ function checkResponsive() {
|
|||
var lastEditorWidth = 0;
|
||||
|
||||
function checkEditorStyle() {
|
||||
var desireHeight = statusBar ? (ui.area.edit.height() - statusBar.outerHeight()) : ui.area.edit.height();
|
||||
// set editor height and min height based on scrollbar style and mode
|
||||
var scrollbarStyle = editor.getOption('scrollbarStyle');
|
||||
if (scrollbarStyle == 'overlay' || currentMode == modeType.both) {
|
||||
//save last editor scroll top
|
||||
var lastTop = editor.getScrollInfo().top;
|
||||
ui.area.codemirror.css('height', '');
|
||||
//set editor size to keep status bar on the bottom
|
||||
editor.setSize(null, ui.area.edit.height());
|
||||
//restore last editor scroll top
|
||||
editor.scrollTo(null, lastTop);
|
||||
ui.area.codemirrorScroll.css('height', desireHeight + 'px');
|
||||
ui.area.codemirrorScroll.css('min-height', '');
|
||||
} else if (scrollbarStyle == 'native') {
|
||||
ui.area.codemirror.css('height', 'auto');
|
||||
$('.CodeMirror-gutters').css('height', $('.CodeMirror-sizer').height());
|
||||
ui.area.codemirrorScroll.css('height', '');
|
||||
ui.area.codemirrorScroll.css('min-height', desireHeight + 'px');
|
||||
}
|
||||
//set editor parent height to fill status bar
|
||||
if (statusBar)
|
||||
statusBar.parent().css('height', ui.area.edit.height() - statusBar.outerHeight() + 'px');
|
||||
//set sizer height to make it at least height as editor
|
||||
var editorSizerHeight = ui.area.edit.height() - (statusBar ? statusBar.outerHeight() : 0);
|
||||
$('.CodeMirror-sizer').css('height', editorSizerHeight + 'px');
|
||||
//make editor resizable
|
||||
ui.area.edit.resizable({
|
||||
handles: 'e',
|
||||
|
@ -879,6 +882,7 @@ function toggleMode() {
|
|||
var lastMode = null;
|
||||
|
||||
function changeMode(type) {
|
||||
// lock navbar to prevent it hide after changeMode
|
||||
lockNavbar();
|
||||
saveInfo();
|
||||
if (type) {
|
||||
|
@ -953,12 +957,11 @@ function changeMode(type) {
|
|||
restoreInfo();
|
||||
|
||||
if (lastMode == modeType.view && currentMode == modeType.both) {
|
||||
if (!scrollMap || !lineHeightMap)
|
||||
buildMapInner();
|
||||
var scrollMapNearest = closestIndex(scrollMap, lastInfo.view.scroll.top);
|
||||
var lineHeightMapNearest = closestIndex(lineHeightMap, scrollMapNearest);
|
||||
var height = lineHeightMapNearest * defaultTextHeight;
|
||||
editor.scrollTo(null, height);
|
||||
syncScrollToEdit();
|
||||
}
|
||||
|
||||
if (lastMode != modeType.edit && currentMode == modeType.edit) {
|
||||
editor.refresh();
|
||||
}
|
||||
|
||||
ui.toolbar.both.removeClass("active");
|
||||
|
@ -987,6 +990,15 @@ var unlockNavbar = _.debounce(function () {
|
|||
$('.navbar').removeClass('locked');
|
||||
}, 200);
|
||||
|
||||
function syncScrollToEdit() {
|
||||
if (!scrollMap || !lineHeightMap)
|
||||
buildMapInner();
|
||||
var scrollMapNearest = closestIndex(scrollMap, lastInfo.view.scroll.top);
|
||||
var lineHeightMapNearest = closestIndex(lineHeightMap, scrollMapNearest);
|
||||
var height = lineHeightMapNearest * defaultTextHeight;
|
||||
editor.scrollTo(null, height);
|
||||
}
|
||||
|
||||
function closestIndex(arr, closestTo) {
|
||||
var closest = Math.max.apply(null, arr); //Get the highest number in arr in case it match nothing.
|
||||
var index = 0;
|
||||
|
|
|
@ -116,6 +116,7 @@ var viewScrollingTimer = null;
|
|||
|
||||
//editor.on('scroll', _.throttle(syncScrollToView, editorScrollThrottle));
|
||||
editor.on('scroll', syncScrollToView);
|
||||
ui.area.codemirrorScroll.on('scroll', syncScrollToView);
|
||||
ui.area.view.on('scroll', function () {
|
||||
viewScrolling = true;
|
||||
clearTimeout(viewScrollingTimer);
|
||||
|
|
Loading…
Reference in a new issue