-
Notifications
You must be signed in to change notification settings - Fork 1.8k
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Prune Editor State Management #9108
Changes from all commits
db68524
5419373
71c933c
c91a92d
afb8328
9269c12
daa4db5
f9bee00
810646c
601240c
460cf12
919208e
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,29 +1,9 @@ | ||
// this script is used in a variety of different contexts including: | ||
// this script is used wherever the legacy editor is used. | ||
// pages (wikis, questions, research notes) with multiple comments & editors for each comment | ||
// pages with JUST ONE form, and no other comments, eg. /wiki/new & /wiki/edit | ||
// /app/views/features/_form.html.erb | ||
// /app/views/map/edit.html.erb | ||
// the legacy editor: /app/views/editor/_editor.html.erb (if it's still in use live?) | ||
|
||
const getEditorParams = (targetDiv) => { | ||
const closestCommentFormWrapper = targetDiv.closest('div.comment-form-wrapper'); // this returns null if there is no match | ||
let params = {}; | ||
// there are no .comment-form-wrappers on /wiki/edit or /wiki/new | ||
// these pages just have a single text-input form. | ||
if (closestCommentFormWrapper) { | ||
params['dSelected'] = $(closestCommentFormWrapper); | ||
// assign the ID of the textarea within the closest comment-form-wrapper | ||
params['textarea'] = closestCommentFormWrapper.querySelector('textarea').id; | ||
params['preview'] = closestCommentFormWrapper.querySelector('.comment-preview').id; | ||
} else { | ||
// default to #text-input-main | ||
// #text-input-main ID should be unique, and the only comment form on /wiki/new & /wiki/edit | ||
params['textarea'] = 'text-input-main'; | ||
// #preview-main should be unique as well | ||
params['preview'] = 'comment-preview-main'; | ||
} | ||
return params; | ||
}; | ||
// and wherever /app/views/editor/editor.html.erb is still used in production | ||
|
||
const progressAll = (elem, data) => { | ||
var progress = parseInt(data.loaded / data.total * 100, 10); | ||
|
@@ -36,13 +16,8 @@ const progressAll = (elem, data) => { | |
// attach eventListeners on document.load for toolbar rich-text buttons & image upload .dropzones | ||
$(function() { | ||
// for rich-text buttons (bold, italic, header, and link): | ||
// click eventHandler that assigns $D.selected to the appropriate comment form | ||
// on pages with multiple comments, $D.selected needs to be accurate so that rich-text changes (bold, italic, etc.) go into the right comment form | ||
$('.rich-text-button').on('click', function(e) { | ||
const { textArea, preview, dSelected } = getEditorParams(e.target); | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. completely removed this |
||
// assign dSelected | ||
if (dSelected) { $D.selected = dSelected; } | ||
$E.setState(e.currentTarget.dataset.formId); | ||
$E.setState(e.currentTarget.dataset.formId); // string that is: "main", "reply-123", "edit-123" etc. | ||
const action = e.currentTarget.dataset.action // 'bold', 'italic', etc. | ||
$E[action](); // call the appropriate editor function | ||
}); | ||
|
@@ -65,10 +40,8 @@ $(function() { | |
|
||
// runs on drag & drop | ||
$(this).on('drop',function(e) { | ||
const { textArea, preview, dSelected } = getEditorParams(e.target); | ||
e.preventDefault(); | ||
if (dSelected) { $D.selected = dSelected; } | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more.
|
||
$E.setState(e.currentTarget.dataset.formId); | ||
$E.setState(e.currentTarget.dataset.formId); // string that is: "main", "reply-123", "edit-123" etc. | ||
}); | ||
|
||
$(this).fileupload({ | ||
|
@@ -84,22 +57,18 @@ $(function() { | |
// 1. when user drag-and-drops image | ||
// 2. when user clicks on upload button. | ||
start: function(e) { | ||
$E.setState(e.target.dataset.formId); // string that is: "main", "reply-123", "edit-123" etc. | ||
$(e.target).removeClass('hover'); | ||
// for click-upload-button scenarios, it's important to set $D.selected here, because the 'drop' listener above doesn't run in those: | ||
$D.selected = $(e.target).closest('div.comment-form-wrapper'); | ||
// the above line is redundant in drag & drop, because it's assigned in 'drop' listener too. | ||
// on /wiki/new & /wiki/edit, $D.selected will = undefined from this assignment | ||
elem = $($D.selected).closest('div.comment-form-wrapper').eq(0); | ||
elem.find('.progress-bar-container').eq(0).show(); | ||
elem.find('.uploading-text').eq(0).show(); | ||
elem.find('.choose-one-prompt-text').eq(0).hide(); | ||
console.log($("#image-upload-progress-container-" + $E.commentFormID)); | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Remove There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Thank you, yeah, I didn't catch this one! I think I remove this in a later PR, but just in case, adding it to my list. |
||
$("#image-upload-progress-container-" + $E.commentFormID).show(); | ||
$("#image-upload-text-" + $E.commentFormID).show(); | ||
$("#dropzone-choose-one-" + $E.commentFormID).hide(); | ||
}, | ||
done: function (e, data) { | ||
elem = $($D.selected).closest('div.comment-form-wrapper').eq(0); | ||
elem.find('.progress-bar-container').hide(); | ||
elem.find('.progress-bar').css('width', 0); | ||
elem.find('.uploading-text').hide(); | ||
elem.find('.choose-one-prompt-text').show(); | ||
$("#image-upload-progress-container-" + $E.commentFormID).hide(); | ||
$("#image-upload-text-" + $E.commentFormID).hide(); | ||
$("#dropzone-choose-one-" + $E.commentFormID).show(); | ||
$("#image-upload-progress-bar-" + $E.commentFormID).css('width', 0); | ||
var extension = data.result['filename'].split('.')[data.result['filename'].split('.').length - 1]; var file_url = data.result.url.split('?')[0]; var file_type; | ||
if (['gif', 'GIF', 'jpeg', 'JPEG', 'jpg', 'JPG', 'png', 'PNG'].includes(extension)) | ||
file_type = 'image' | ||
|
@@ -124,7 +93,7 @@ $(function() { | |
console.log(e); | ||
}, | ||
progressall: function (e, data) { | ||
const closestProgressBar = $($D.selected).closest('div.comment-form-wrapper').find('.progress-bar').eq(0); | ||
const closestProgressBar = $("#image-upload-progress-bar-" + $E.commentFormID); | ||
return progressAll(closestProgressBar, data); | ||
} | ||
}); | ||
|
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
This legacy code is not at all good, using
ids
everywhere is so awesome 💯There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I know right!!!