Don't use simpleMDE editor on mobile devices for 1.13 (#14029)

* Don't use simpleMDE editor on mobile devices

simpleMDE doesn't work properly on mobile devices -- We've replaced it with the slightly more working easyMDE in 1.14 but since that change can't be backported to 1.13 we will just disable the editor on mobile here.

* make isMobile function per code review -- disable simpleMDE for code review and replies

* Fix issue with plain text and wiki

Co-authored-by: silverwind <me@silverwind.io>
This commit is contained in:
mrsdizzie 2020-12-17 11:39:12 -05:00 committed by GitHub
parent 78b9ef3586
commit 4f296f7436
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 37 additions and 11 deletions

View File

@ -25,6 +25,7 @@ import ActivityTopAuthors from './components/ActivityTopAuthors.vue';
import {initNotificationsTable, initNotificationCount} from './features/notification.js'; import {initNotificationsTable, initNotificationCount} from './features/notification.js';
import {createCodeEditor} from './features/codeeditor.js'; import {createCodeEditor} from './features/codeeditor.js';
import {svg, svgs} from './svg.js'; import {svg, svgs} from './svg.js';
import {isMobile} from './utils.js';
const {AppSubUrl, StaticUrlPrefix, csrf} = window.config; const {AppSubUrl, StaticUrlPrefix, csrf} = window.config;
@ -385,8 +386,14 @@ function initCommentForm() {
if ($('.comment.form').length === 0) { if ($('.comment.form').length === 0) {
return; return;
} }
autoSimpleMDE = setCommentSimpleMDE($('.comment.form textarea:not(.review-textarea)')); autoSimpleMDE = setCommentSimpleMDE($('.comment.form textarea:not(.review-textarea)'));
// Don't use simpleMDE on mobile due to multiple bug reports which go unfixed
// Other sections rely on it being initialized so just set it back to text area here
if (isMobile()) {
autoSimpleMDE.toTextArea();
}
initBranchSelector(); initBranchSelector();
initCommentPreviewTab($('.comment.form')); initCommentPreviewTab($('.comment.form'));
initImagePaste($('.comment.form textarea')); initImagePaste($('.comment.form textarea'));
@ -1214,16 +1221,21 @@ function initPullRequestReview() {
const form = $(this).parent().find('.comment-form'); const form = $(this).parent().find('.comment-form');
form.removeClass('hide'); form.removeClass('hide');
const $textarea = form.find('textarea'); const $textarea = form.find('textarea');
let $simplemde; if (!isMobile()) {
if ($textarea.data('simplemde')) { let $simplemde;
$simplemde = $textarea.data('simplemde'); if ($textarea.data('simplemde')) {
$simplemde = $textarea.data('simplemde');
} else {
attachTribute($textarea.get(), {mentions: true, emoji: true});
$simplemde = setCommentSimpleMDE($textarea);
$textarea.data('simplemde', $simplemde);
}
$textarea.focus();
$simplemde.codemirror.focus();
} else { } else {
attachTribute($textarea.get(), {mentions: true, emoji: true}); attachTribute($textarea.get(), {mentions: true, emoji: true});
$simplemde = setCommentSimpleMDE($textarea); $textarea.focus();
$textarea.data('simplemde', $simplemde);
} }
$textarea.focus();
$simplemde.codemirror.focus();
assingMenuAttributes(form.find('.menu')); assingMenuAttributes(form.find('.menu'));
}); });
// The following part is only for diff views // The following part is only for diff views
@ -1290,9 +1302,13 @@ function initPullRequestReview() {
const $textarea = commentCloud.find('textarea'); const $textarea = commentCloud.find('textarea');
attachTribute($textarea.get(), {mentions: true, emoji: true}); attachTribute($textarea.get(), {mentions: true, emoji: true});
const $simplemde = setCommentSimpleMDE($textarea); if (!isMobile()) {
$textarea.focus(); const $simplemde = setCommentSimpleMDE($textarea);
$simplemde.codemirror.focus(); $textarea.focus();
$simplemde.codemirror.focus();
} else {
$textarea.focus();
}
}); });
} }
@ -1338,6 +1354,10 @@ function initWikiForm() {
const $editArea = $('.repository.wiki textarea#edit_area'); const $editArea = $('.repository.wiki textarea#edit_area');
let sideBySideChanges = 0; let sideBySideChanges = 0;
let sideBySideTimeout = null; let sideBySideTimeout = null;
if ($editArea.length > 0 && isMobile) {
$editArea.css('display', 'inline-block');
return;
}
if ($editArea.length > 0) { if ($editArea.length > 0) {
const simplemde = new SimpleMDE({ const simplemde = new SimpleMDE({
autoDownloadFontAwesome: false, autoDownloadFontAwesome: false,
@ -1433,6 +1453,7 @@ function initWikiForm() {
name: 'revert-to-textarea', name: 'revert-to-textarea',
action(e) { action(e) {
e.toTextArea(); e.toTextArea();
$editArea.css('display', 'inline-block');
}, },
className: 'fa fa-file', className: 'fa fa-file',
title: 'Revert to simple textarea', title: 'Revert to simple textarea',

View File

@ -19,6 +19,11 @@ export function isDarkTheme() {
return document.documentElement.classList.contains('theme-arc-green'); return document.documentElement.classList.contains('theme-arc-green');
} }
// returns if mobile device
export function isMobile() {
return /Mobi/.test(navigator.userAgent);
}
// removes duplicate elements in an array // removes duplicate elements in an array
export function uniq(arr) { export function uniq(arr) {
return Array.from(new Set(arr)); return Array.from(new Set(arr));