Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
G
gitlab-ce
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
0
Merge Requests
0
Analytics
Analytics
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Commits
Issue Boards
Open sidebar
Jérome Perrin
gitlab-ce
Commits
61064006
Commit
61064006
authored
Jun 23, 2017
by
Tim Zallmann
Browse files
Options
Browse Files
Download
Plain Diff
Merge branch 'notes-es-class-syntax' into 'master'
Refactor Notes into ES class syntax See merge request !12254
parents
a625e0e4
ca25ad26
Changes
1
Show whitespace changes
Inline
Side-by-side
Showing
1 changed file
with
1356 additions
and
1374 deletions
+1356
-1374
app/assets/javascripts/notes.js
app/assets/javascripts/notes.js
+1356
-1374
No files found.
app/assets/javascripts/notes.js
View file @
61064006
...
...
@@ -4,7 +4,7 @@ no-unused-expressions, quotes, max-len, one-var, one-var-declaration-per-line,
default-case, prefer-template, consistent-return, no-alert, no-return-assign,
no-param-reassign, prefer-arrow-callback, no-else-return, comma-dangle, no-new,
brace-style, no-lonely-if, vars-on-top, no-unused-vars, no-sequences, no-shadow,
newline-per-chained-call, no-useless-escape */
newline-per-chained-call, no-useless-escape
, class-methods-use-this
*/
/* global Flash */
/* global Autosave */
/* global ResolveService */
...
...
@@ -25,18 +25,15 @@ import './task_list';
window
.
autosize
=
autosize
;
window
.
Dropzone
=
Dropzone
;
const
normalizeNewlines
=
function
(
str
)
{
function
normalizeNewlines
(
str
)
{
return
str
.
replace
(
/
\r\n
/g
,
'
\n
'
);
}
;
}
(
function
()
{
this
.
Notes
=
(
function
()
{
const
MAX_VISIBLE_COMMIT_LIST_COUNT
=
3
;
const
REGEX_QUICK_ACTIONS
=
/^
\/\w
+.*$/gm
;
const
MAX_VISIBLE_COMMIT_LIST_COUNT
=
3
;
const
REGEX_QUICK_ACTIONS
=
/^
\/\w
+.*$/gm
;
Notes
.
interval
=
null
;
function
Notes
(
notes_url
,
note_ids
,
last_fetched_at
,
view
,
enableGFM
=
true
)
{
export
default
class
Notes
{
constructor
(
notes_url
,
note_ids
,
last_fetched_at
,
view
,
enableGFM
=
true
)
{
this
.
updateTargetButtons
=
this
.
updateTargetButtons
.
bind
(
this
);
this
.
updateComment
=
this
.
updateComment
.
bind
(
this
);
this
.
visibilityChange
=
this
.
visibilityChange
.
bind
(
this
);
...
...
@@ -88,11 +85,11 @@ const normalizeNewlines = function(str) {
}
}
Notes
.
prototype
.
setViewType
=
function
(
view
)
{
setViewType
(
view
)
{
this
.
view
=
Cookies
.
get
(
'
diff_view
'
)
||
view
;
};
}
Notes
.
prototype
.
addBinding
=
function
()
{
addBinding
()
{
// Edit note link
$
(
document
).
on
(
'
click
'
,
'
.js-note-edit
'
,
this
.
showEditForm
.
bind
(
this
));
$
(
document
).
on
(
'
click
'
,
'
.note-edit-cancel
'
,
this
.
cancelEdit
);
...
...
@@ -131,9 +128,9 @@ const normalizeNewlines = function(str) {
$
(
document
).
on
(
'
keydown
'
,
'
.js-note-text
'
,
this
.
keydownNoteText
);
// When the URL fragment/hash has changed, `#note_xxx`
return
$
(
window
).
on
(
'
hashchange
'
,
this
.
onHashChange
);
};
}
Notes
.
prototype
.
cleanBinding
=
function
()
{
cleanBinding
()
{
$
(
document
).
off
(
'
click
'
,
'
.js-note-edit
'
);
$
(
document
).
off
(
'
click
'
,
'
.note-edit-cancel
'
);
$
(
document
).
off
(
'
click
'
,
'
.js-note-delete
'
);
...
...
@@ -152,9 +149,9 @@ const normalizeNewlines = function(str) {
$
(
document
).
off
(
'
ajax:success
'
,
'
.js-discussion-note-form
'
);
$
(
document
).
off
(
'
ajax:complete
'
,
'
.js-main-target-form
'
);
$
(
window
).
off
(
'
hashchange
'
,
this
.
onHashChange
);
};
}
Notes
.
initCommentTypeToggle
=
function
(
form
)
{
static
initCommentTypeToggle
(
form
)
{
const
dropdownTrigger
=
form
.
querySelector
(
'
.js-comment-type-dropdown .dropdown-toggle
'
);
const
dropdownList
=
form
.
querySelector
(
'
.js-comment-type-dropdown .dropdown-menu
'
);
const
noteTypeInput
=
form
.
querySelector
(
'
#note_type
'
);
...
...
@@ -172,9 +169,9 @@ const normalizeNewlines = function(str) {
});
commentTypeToggle
.
initDroplab
();
};
}
Notes
.
prototype
.
keydownNoteText
=
function
(
e
)
{
keydownNoteText
(
e
)
{
var
$textarea
,
discussionNoteForm
,
editNote
,
myLastNote
,
myLastNoteEditBtn
,
newText
,
originalText
;
if
(
gl
.
utils
.
isMetaKey
(
e
))
{
return
;
...
...
@@ -217,24 +214,26 @@ const normalizeNewlines = function(str) {
return
this
.
removeNoteEditForm
(
editNote
);
}
}
};
}
Notes
.
prototype
.
initRefresh
=
function
()
{
initRefresh
()
{
if
(
Notes
.
interval
)
{
clearInterval
(
Notes
.
interval
);
}
return
Notes
.
interval
=
setInterval
((
function
(
_this
)
{
return
function
()
{
return
_this
.
refresh
();
};
})(
this
),
this
.
pollingInterval
);
};
}
Notes
.
prototype
.
refresh
=
function
()
{
refresh
()
{
if
(
!
document
.
hidden
)
{
return
this
.
getContent
();
}
};
}
Notes
.
prototype
.
getContent
=
function
()
{
getContent
()
{
if
(
this
.
refreshing
)
{
return
;
}
...
...
@@ -259,18 +258,17 @@ const normalizeNewlines = function(str) {
return
_this
.
refreshing
=
false
;
};
})(
this
));
};
/*
Increase @pollingInterval up to 120 seconds on every function call,
if `shouldReset` has a truthy value, 'null' or 'undefined' the variable
will reset to @basePollingInterval.
}
Note: this function is used to gradually increase the polling interval
if there aren't new notes coming from the server
/**
* Increase @pollingInterval up to 120 seconds on every function call,
* if `shouldReset` has a truthy value, 'null' or 'undefined' the variable
* will reset to @basePollingInterval.
*
* Note: this function is used to gradually increase the polling interval
* if there aren't new notes coming from the server
*/
Notes
.
prototype
.
setPollingInterval
=
function
(
shouldReset
)
{
setPollingInterval
(
shouldReset
)
{
var
nthInterval
;
if
(
shouldReset
==
null
)
{
shouldReset
=
true
;
...
...
@@ -282,9 +280,9 @@ const normalizeNewlines = function(str) {
this
.
pollingInterval
*=
2
;
}
return
this
.
initRefresh
();
};
}
Notes
.
prototype
.
handleQuickActions
=
function
(
noteEntity
)
{
handleQuickActions
(
noteEntity
)
{
var
votesBlock
;
if
(
noteEntity
.
commands_changes
)
{
if
(
'
merge
'
in
noteEntity
.
commands_changes
)
{
...
...
@@ -297,9 +295,9 @@ const normalizeNewlines = function(str) {
return
gl
.
awardsHandler
.
scrollToAwards
();
}
}
};
}
Notes
.
prototype
.
setupNewNote
=
function
(
$note
)
{
setupNewNote
(
$note
)
{
// Update datetime format on the recent note
gl
.
utils
.
localTimeAgo
(
$note
.
find
(
'
.js-timeago
'
),
false
);
...
...
@@ -310,30 +308,29 @@ const normalizeNewlines = function(str) {
// The `:target` selector does not re-evaluate after we replace element in the DOM
Notes
.
updateNoteTargetSelector
(
$note
);
this
.
$noteToCleanHighlight
=
$note
;
};
}
Notes
.
prototype
.
onHashChange
=
function
()
{
onHashChange
()
{
if
(
this
.
$noteToCleanHighlight
)
{
Notes
.
updateNoteTargetSelector
(
this
.
$noteToCleanHighlight
);
}
this
.
$noteToCleanHighlight
=
null
;
};
}
Notes
.
updateNoteTargetSelector
=
function
(
$note
)
{
static
updateNoteTargetSelector
(
$note
)
{
const
hash
=
gl
.
utils
.
getLocationHash
();
// Needs to be an explicit true/false for the jQuery `toggleClass(force)`
const
addTargetClass
=
Boolean
(
hash
&&
$note
.
filter
(
`#
${
hash
}
`
).
length
>
0
);
$note
.
toggleClass
(
'
target
'
,
addTargetClass
);
};
/*
Render note in main comments area.
}
Note: for rendering inline notes use renderDiscussionNote
/**
* Render note in main comments area.
*
* Note: for rendering inline notes use renderDiscussionNote
*/
Notes
.
prototype
.
renderNote
=
function
(
noteEntity
,
$form
,
$notesList
=
$
(
'
.main-notes-list
'
))
{
renderNote
(
noteEntity
,
$form
,
$notesList
=
$
(
'
.main-notes-list
'
))
{
if
(
noteEntity
.
discussion_html
)
{
return
this
.
renderDiscussionNote
(
noteEntity
,
$form
);
}
...
...
@@ -384,19 +381,18 @@ const normalizeNewlines = function(str) {
this
.
setupNewNote
(
$updatedNote
);
}
}
};
}
Notes
.
prototype
.
isParallelView
=
function
()
{
isParallelView
()
{
return
Cookies
.
get
(
'
diff_view
'
)
===
'
parallel
'
;
};
/*
Render note in discussion area.
}
Note: for rendering inline notes use renderDiscussionNote
/**
* Render note in discussion area.
*
* Note: for rendering inline notes use renderDiscussionNote
*/
Notes
.
prototype
.
renderDiscussionNote
=
function
(
noteEntity
,
$form
)
{
renderDiscussionNote
(
noteEntity
,
$form
)
{
var
discussionContainer
,
form
,
row
,
lineType
,
diffAvatarContainer
;
if
(
!
Notes
.
isNewNote
(
noteEntity
,
this
.
note_ids
))
{
return
;
...
...
@@ -447,16 +443,16 @@ const normalizeNewlines = function(str) {
gl
.
utils
.
localTimeAgo
(
$
(
'
.js-timeago
'
),
false
);
Notes
.
checkMergeRequestStatus
();
return
this
.
updateNotesCount
(
1
);
};
}
Notes
.
prototype
.
getLineHolder
=
function
(
changesDiscussionContainer
)
{
getLineHolder
(
changesDiscussionContainer
)
{
return
$
(
changesDiscussionContainer
).
closest
(
'
.notes_holder
'
)
.
prevAll
(
'
.line_holder
'
)
.
first
()
.
get
(
0
);
};
}
Notes
.
prototype
.
renderDiscussionAvatar
=
function
(
diffAvatarContainer
,
noteEntity
)
{
renderDiscussionAvatar
(
diffAvatarContainer
,
noteEntity
)
{
var
commentButton
=
diffAvatarContainer
.
find
(
'
.js-add-diff-note-button
'
);
var
avatarHolder
=
diffAvatarContainer
.
find
(
'
.diff-comment-avatar-holders
'
);
...
...
@@ -472,17 +468,16 @@ const normalizeNewlines = function(str) {
if
(
commentButton
.
length
)
{
commentButton
.
remove
();
}
};
/*
Called in response the main target form has been successfully submitted.
}
Removes any errors.
Resets text and preview.
Resets buttons.
/**
* Called in response the main target form has been successfully submitted.
*
* Removes any errors.
* Resets text and preview.
* Resets buttons.
*/
Notes
.
prototype
.
resetMainTargetForm
=
function
(
e
)
{
resetMainTargetForm
(
e
)
{
var
form
;
form
=
$
(
'
.js-main-target-form
'
);
// remove validation errors
...
...
@@ -497,21 +492,20 @@ const normalizeNewlines = function(str) {
form
.
find
(
'
.js-autosize
'
)[
0
].
dispatchEvent
(
event
);
this
.
updateTargetButtons
(
e
);
};
}
Notes
.
prototype
.
reenableTargetFormSubmitButton
=
functi
on
()
{
reenableTargetFormSubmitButt
on
()
{
var
form
;
form
=
$
(
'
.js-main-target-form
'
);
return
form
.
find
(
'
.js-note-text
'
).
trigger
(
'
input
'
);
};
/*
Shows the main form and does some setup on it.
}
Sets some hidden fields in the form.
/**
* Shows the main form and does some setup on it.
*
* Sets some hidden fields in the form.
*/
Notes
.
prototype
.
setupMainTargetNoteForm
=
function
()
{
setupMainTargetNoteForm
()
{
var
form
;
// find the form
form
=
$
(
'
.js-new-note-form
'
);
...
...
@@ -532,18 +526,17 @@ const normalizeNewlines = function(str) {
if
(
form
.
length
)
{
Notes
.
initCommentTypeToggle
(
form
.
get
(
0
));
}
};
/*
General note form setup.
}
deactivates the submit button when text is empty
hides the preview button when text is empty
setup GFM auto complete
show the form
/**
* General note form setup.
*
* deactivates the submit button when text is empty
* hides the preview button when text is empty
* setup GFM auto complete
* show the form
*/
Notes
.
prototype
.
setupNoteForm
=
function
(
form
)
{
setupNoteForm
(
form
)
{
var
textarea
,
key
;
new
gl
.
GLForm
(
form
,
this
.
enableGFM
);
textarea
=
form
.
find
(
'
.js-note-text
'
);
...
...
@@ -562,19 +555,18 @@ const normalizeNewlines = function(str) {
form
.
find
(
'
#note_position
'
).
val
()
];
return
new
Autosave
(
textarea
,
key
);
};
/*
Called in response to the new note form being submitted
}
Adds new note to list.
/**
* Called in response to the new note form being submitted
*
* Adds new note to list.
*/
Notes
.
prototype
.
addNote
=
function
(
$form
,
note
)
{
addNote
(
$form
,
note
)
{
return
this
.
renderNote
(
note
);
};
}
Notes
.
prototype
.
addNoteError
=
function
(
$form
)
{
addNoteError
(
$form
)
{
let
formParentTimeline
;
if
(
$form
.
hasClass
(
'
js-main-target-form
'
))
{
formParentTimeline
=
$form
.
parents
(
'
.timeline
'
);
...
...
@@ -582,17 +574,18 @@ const normalizeNewlines = function(str) {
formParentTimeline
=
$form
.
closest
(
'
.discussion-notes
'
).
find
(
'
.notes
'
);
}
return
this
.
addFlash
(
'
Your comment could not be submitted! Please check your network connection and try again.
'
,
'
alert
'
,
formParentTimeline
);
};
Notes
.
prototype
.
updateNoteError
=
$parentTimeline
=>
new
Flash
(
'
Your comment could not be updated! Please check your network connection and try again.
'
);
}
/*
Called in response to the new note form being submitted
updateNoteError
(
$parentTimeline
)
{
new
Flash
(
'
Your comment could not be updated! Please check your network connection and try again.
'
);
}
Adds new note to list.
/**
* Called in response to the new note form being submitted
*
* Adds new note to list.
*/
Notes
.
prototype
.
addDiscussionNote
=
function
(
$form
,
note
,
isNewDiffComment
)
{
addDiscussionNote
(
$form
,
note
,
isNewDiffComment
)
{
if
(
$form
.
attr
(
'
data-resolve-all
'
)
!=
null
)
{
var
projectPath
=
$form
.
data
(
'
project-path
'
);
var
discussionId
=
$form
.
data
(
'
discussion-id
'
);
...
...
@@ -608,15 +601,14 @@ const normalizeNewlines = function(str) {
if
(
isNewDiffComment
)
{
this
.
removeDiscussionNoteForm
(
$form
);
}
};
/*
Called in response to the edit note form being submitted
}
Updates the current note field.
/**
* Called in response to the edit note form being submitted
*
* Updates the current note field.
*/
Notes
.
prototype
.
updateNote
=
function
(
noteEntity
,
$targetNote
)
{
updateNote
(
noteEntity
,
$targetNote
)
{
var
$noteEntityEl
,
$note_li
;
// Convert returned HTML to a jQuery object so we can modify it further
$noteEntityEl
=
$
(
noteEntity
.
html
);
...
...
@@ -632,9 +624,9 @@ const normalizeNewlines = function(str) {
if
(
typeof
gl
.
diffNotesCompileComponents
!==
'
undefined
'
)
{
gl
.
diffNotesCompileComponents
();
}
};
}
Notes
.
prototype
.
checkContentToAllowEditing
=
function
(
$el
)
{
checkContentToAllowEditing
(
$el
)
{
var
initialContent
=
$el
.
find
(
'
.original-note-content
'
).
text
().
trim
();
var
currentContent
=
$el
.
find
(
'
.js-note-text
'
).
val
();
var
isAllowed
=
true
;
...
...
@@ -655,15 +647,15 @@ const normalizeNewlines = function(str) {
}
return
isAllowed
;
};
/*
Called in response to clicking the edit note link
}
Replaces the note text with the note edit form
Adds a data attribute to the form with the original content of the note for cancellations
/**
* Called in response to clicking the edit note link
*
* Replaces the note text with the note edit form
* Adds a data attribute to the form with the original content of the note for cancellations
*/
Notes
.
prototype
.
showEditForm
=
function
(
e
,
scrollTo
,
myLastNote
)
{
showEditForm
(
e
,
scrollTo
,
myLastNote
)
{
e
.
preventDefault
();
var
$target
=
$
(
e
.
target
);
...
...
@@ -683,15 +675,14 @@ const normalizeNewlines = function(str) {
$editForm
.
addClass
(
'
current-note-edit-form
'
);
$note
.
addClass
(
'
is-editing
'
);
this
.
putEditFormInPlace
(
$target
);
};
/*
Called in response to clicking the edit note link
}
Hides edit form and restores the original note text to the editor textarea.
/**
* Called in response to clicking the edit note link
*
* Hides edit form and restores the original note text to the editor textarea.
*/
Notes
.
prototype
.
cancelEdit
=
function
(
e
)
{
cancelEdit
(
e
)
{
e
.
preventDefault
();
const
$target
=
$
(
e
.
target
);
const
$note
=
$target
.
closest
(
'
.note
'
);
...
...
@@ -710,9 +701,9 @@ const normalizeNewlines = function(str) {
$note
.
find
(
'
.js-finish-edit-warning
'
).
hide
();
this
.
removeNoteEditForm
(
$note
);
}
};
}
Notes
.
prototype
.
revertNoteEditForm
=
function
(
$target
)
{
revertNoteEditForm
(
$target
)
{
$target
=
$target
||
$
(
'
.note.is-editing:visible
'
);
var
selector
=
this
.
getEditFormSelector
(
$target
);
var
$editForm
=
$
(
selector
);
...
...
@@ -720,9 +711,9 @@ const normalizeNewlines = function(str) {
$editForm
.
insertBefore
(
'
.notes-form
'
);
$editForm
.
find
(
'
.js-comment-save-button
'
).
enable
();
$editForm
.
find
(
'
.js-finish-edit-warning
'
).
hide
();
};
}
Notes
.
prototype
.
getEditFormSelector
=
function
(
$el
)
{
getEditFormSelector
(
$el
)
{
var
selector
=
'
.note-edit-form:not(.mr-note-edit-form)
'
;
if
(
$el
.
parents
(
'
#diffs
'
).
length
)
{
...
...
@@ -730,25 +721,24 @@ const normalizeNewlines = function(str) {
}
return
selector
;
};
}
Notes
.
prototype
.
removeNoteEditForm
=
function
(
$note
)
{
removeNoteEditForm
(
$note
)
{
var
form
=
$note
.
find
(
'
.current-note-edit-form
'
);
$note
.
removeClass
(
'
is-editing
'
);
form
.
removeClass
(
'
current-note-edit-form
'
);
form
.
find
(
'
.js-finish-edit-warning
'
).
hide
();
// Replace markdown textarea text with original note text.
return
form
.
find
(
'
.js-note-text
'
).
val
(
form
.
find
(
'
form.edit-note
'
).
data
(
'
original-note
'
));
};
/*
Called in response to deleting a note of any kind.
}
Removes the actual note from view.
Removes the whole discussion if the last note is being removed.
/**
* Called in response to deleting a note of any kind.
*
* Removes the actual note from view.
* Removes the whole discussion if the last note is being removed.
*/
Notes
.
prototype
.
removeNote
=
function
(
e
)
{
removeNote
(
e
)
{
var
noteElId
,
noteId
,
dataNoteId
,
$note
,
lineHolder
;
$note
=
$
(
e
.
currentTarget
).
closest
(
'
.note
'
);
noteElId
=
$note
.
attr
(
'
id
'
);
...
...
@@ -792,34 +782,32 @@ const normalizeNewlines = function(str) {
Notes
.
checkMergeRequestStatus
();
return
this
.
updateNotesCount
(
-
1
);
};
/*
Called in response to clicking the delete attachment link
}
Removes the attachment wrapper view, including image tag if it exists
Resets the note editing form
/**
* Called in response to clicking the delete attachment link
*
* Removes the attachment wrapper view, including image tag if it exists
* Resets the note editing form
*/
Notes
.
prototype
.
removeAttachment
=
function
()
{
removeAttachment
()
{
const
$note
=
$
(
this
).
closest
(
'
.note
'
);
$note
.
find
(
'
.note-attachment
'
).
remove
();
$note
.
find
(
'
.note-body > .note-text
'
).
show
();
$note
.
find
(
'
.note-header
'
).
show
();
return
$note
.
find
(
'
.current-note-edit-form
'
).
remove
();
};
/*
Called when clicking on the "reply" button for a diff line.
}
Shows the note form below the notes.
/**
* Called when clicking on the "reply" button for a diff line.
*
* Shows the note form below the notes.
*/
Notes
.
prototype
.
onReplyToDiscussionNote
=
function
(
e
)
{
onReplyToDiscussionNote
(
e
)
{
this
.
replyToDiscussionNote
(
e
.
target
);
};
}
Notes
.
prototype
.
replyToDiscussionNote
=
function
(
target
)
{
replyToDiscussionNote
(
target
)
{
var
form
,
replyLink
;
form
=
this
.
cleanForm
(
this
.
formClone
.
clone
());
replyLink
=
$
(
target
).
closest
(
'
.js-discussion-reply-button
'
);
...
...
@@ -830,17 +818,16 @@ const normalizeNewlines = function(str) {
.
after
(
form
);
// show the form
return
this
.
setupDiscussionNoteForm
(
replyLink
,
form
);
};
/*
Shows the diff or discussion form and does some setup on it.
Sets some hidden fields in the form.
}
Note: dataHolder must have the "discussionId" and "lineCode" data attributes set.
/**
* Shows the diff or discussion form and does some setup on it.
*
* Sets some hidden fields in the form.
*
* Note: dataHolder must have the "discussionId" and "lineCode" data attributes set.
*/
Notes
.
prototype
.
setupDiscussionNoteForm
=
function
(
dataHolder
,
form
)
{
setupDiscussionNoteForm
(
dataHolder
,
form
)
{
// setup note target
var
discussionID
=
dataHolder
.
data
(
'
discussionId
'
);
...
...
@@ -883,16 +870,15 @@ const normalizeNewlines = function(str) {
form
.
find
(
'
.js-comment-resolve-button
'
)
.
attr
(
'
data-discussion-id
'
,
discussionID
);
};
/*
Called when clicking on the "add a comment" button on the side of a diff line.
}
Inserts a temporary row for the form below the line.
Sets up the form and shows it.
/**
* Called when clicking on the "add a comment" button on the side of a diff line.
*
* Inserts a temporary row for the form below the line.
* Sets up the form and shows it.
*/
Notes
.
prototype
.
onAddDiffNote
=
function
(
e
)
{
onAddDiffNote
(
e
)
{
e
.
preventDefault
();
const
link
=
e
.
currentTarget
||
e
.
target
;
const
$link
=
$
(
link
);
...
...
@@ -902,9 +888,9 @@ const normalizeNewlines = function(str) {
lineType
:
link
.
dataset
.
lineType
,
showReplyInput
});
};
}
Notes
.
prototype
.
toggleDiffNote
=
function
({
toggleDiffNote
({
target
,
lineType
,
forceShow
,
...
...
@@ -968,16 +954,15 @@ const normalizeNewlines = function(str) {
// show the form
return
this
.
setupDiscussionNoteForm
(
$link
,
newForm
);
}
};
/*
Called in response to "cancel" on a diff note form.
}
Shows the reply button again.
Removes the form and if necessary it's temporary row.
/**
* Called in response to "cancel" on a diff note form.
*
* Shows the reply button again.
* Removes the form and if necessary it's temporary row.
*/
Notes
.
prototype
.
removeDiscussionNoteForm
=
function
(
form
)
{
removeDiscussionNoteForm
(
form
)
{
var
glForm
,
row
;
row
=
form
.
closest
(
'
tr
'
);
glForm
=
form
.
data
(
'
gl-form
'
);
...
...
@@ -994,38 +979,36 @@ const normalizeNewlines = function(str) {
// only remove the form
return
form
.
remove
();
}
};
}
Notes
.
prototype
.
cancelDiscussionForm
=
function
(
e
)
{
cancelDiscussionForm
(
e
)
{
var
form
;
e
.
preventDefault
();
form
=
$
(
e
.
target
).
closest
(
'
.js-discussion-note-form
'
);
return
this
.
removeDiscussionNoteForm
(
form
);
};
/*
Called after an attachment file has been selected.
}
Updates the file name for the selected attachment.
/**
* Called after an attachment file has been selected.
*
* Updates the file name for the selected attachment.
*/
Notes
.
prototype
.
updateFormAttachment
=
function
()
{
updateFormAttachment
()
{
var
filename
,
form
;
form
=
$
(
this
).
closest
(
'
form
'
);
// get only the basename
filename
=
$
(
this
).
val
().
replace
(
/^.*
[\\\/]
/
,
''
);
return
form
.
find
(
'
.js-attachment-filename
'
).
text
(
filename
);
};
}
/
*
Called when the tab visibility changes
/*
*
*
Called when the tab visibility changes
*/
Notes
.
prototype
.
visibilityChange
=
function
()
{
visibilityChange
()
{
return
this
.
refresh
();
};
}
Notes
.
prototype
.
updateTargetButtons
=
function
(
e
)
{
updateTargetButtons
(
e
)
{
var
closebtn
,
closetext
,
discardbtn
,
form
,
reopenbtn
,
reopentext
,
textarea
;
textarea
=
$
(
e
.
target
);
form
=
textarea
.
parents
(
'
form
'
);
...
...
@@ -1070,9 +1053,9 @@ const normalizeNewlines = function(str) {
return
discardbtn
.
hide
();
}
}
};
}
Notes
.
prototype
.
putEditFormInPlace
=
function
(
$el
)
{
putEditFormInPlace
(
$el
)
{
var
$editForm
=
$
(
this
.
getEditFormSelector
(
$el
));
var
$note
=
$el
.
closest
(
'
.note
'
);
...
...
@@ -1094,9 +1077,9 @@ const normalizeNewlines = function(str) {
$editForm
.
find
(
'
.js-note-text
'
).
focus
().
val
(
originalContent
);
$editForm
.
find
(
'
.js-md-write-button
'
).
trigger
(
'
click
'
);
$editForm
.
find
(
'
.referenced-users
'
).
hide
();
};
}
Notes
.
prototype
.
putConflictEditWarningInPlace
=
function
(
noteEntity
,
$note
)
{
putConflictEditWarningInPlace
(
noteEntity
,
$note
)
{
if
(
$note
.
find
(
'
.js-conflict-edit-warning
'
).
length
===
0
)
{
const
$alert
=
$
(
`<div class="js-conflict-edit-warning alert alert-danger">
This comment has changed since you started editing, please review the
...
...
@@ -1107,26 +1090,26 @@ const normalizeNewlines = function(str) {
</div>`
);
$alert
.
insertAfter
(
$note
.
find
(
'
.note-text
'
));
}
};
}
Notes
.
prototype
.
updateNotesCount
=
function
(
updateCount
)
{
updateNotesCount
(
updateCount
)
{
return
this
.
notesCountBadge
.
text
(
parseInt
(
this
.
notesCountBadge
.
text
(),
10
)
+
updateCount
);
};
}
Notes
.
prototype
.
toggleCommitList
=
function
(
e
)
{
toggleCommitList
(
e
)
{
const
$element
=
$
(
e
.
currentTarget
);
const
$closestSystemCommitList
=
$element
.
siblings
(
'
.system-note-commit-list
'
);
$element
.
find
(
'
.fa
'
).
toggleClass
(
'
fa-angle-down
'
).
toggleClass
(
'
fa-angle-up
'
);
$closestSystemCommitList
.
toggleClass
(
'
hide-shade
'
);
};
}
/**
Scans system notes with `ul` elements in system note body
then collapse long commit list pushed by user to make it less
intrusive.
*
Scans system notes with `ul` elements in system note body
*
then collapse long commit list pushed by user to make it less
*
intrusive.
*/
Notes
.
prototype
.
collapseLongCommitList
=
function
()
{
collapseLongCommitList
()
{
const
systemNotes
=
$
(
'
#notes-list
'
).
find
(
'
li.system-note
'
).
has
(
'
ul
'
);
$
.
each
(
systemNotes
,
function
(
index
,
systemNote
)
{
...
...
@@ -1142,20 +1125,20 @@ const normalizeNewlines = function(str) {
$systemNote
.
find
(
'
.note-text
'
).
addClass
(
'
system-note-commit-list hide-shade
'
);
}
});
};
}
Notes
.
prototype
.
addFlash
=
function
(...
flashParams
)
{
addFlash
(...
flashParams
)
{
this
.
flashInstance
=
new
Flash
(...
flashParams
);
};
}
Notes
.
prototype
.
clearFlash
=
function
()
{
clearFlash
()
{
if
(
this
.
flashInstance
&&
this
.
flashInstance
.
flashContainer
)
{
this
.
flashInstance
.
flashContainer
.
hide
();
this
.
flashInstance
=
null
;
}
};
}
Notes
.
prototype
.
cleanForm
=
function
(
$form
)
{
cleanForm
(
$form
)
{
// Remove JS classes that are not needed here
$form
.
find
(
'
.js-comment-type-dropdown
'
)
...
...
@@ -1167,78 +1150,78 @@ const normalizeNewlines = function(str) {
.
remove
();
return
$form
;
};
}
/**
* Check if note does not exists on page
*/
Notes
.
isNewNote
=
function
(
noteEntity
,
noteIds
)
{
static
isNewNote
(
noteEntity
,
noteIds
)
{
return
$
.
inArray
(
noteEntity
.
id
,
noteIds
)
===
-
1
;
};
}
/**
* Check if $note already contains the `noteEntity` content
*/
Notes
.
isUpdatedNote
=
function
(
noteEntity
,
$note
)
{
static
isUpdatedNote
(
noteEntity
,
$note
)
{
// There can be CRLF vs LF mismatches if we don't sanitize and compare the same way
const
sanitizedNoteEntityText
=
normalizeNewlines
(
noteEntity
.
note
.
trim
());
const
currentNoteText
=
normalizeNewlines
(
$note
.
find
(
'
.original-note-content
'
).
first
().
text
().
trim
()
);
return
sanitizedNoteEntityText
!==
currentNoteText
;
};
}
Notes
.
checkMergeRequestStatus
=
function
()
{
static
checkMergeRequestStatus
()
{
if
(
gl
.
utils
.
getPagePath
(
1
)
===
'
merge_requests
'
)
{
gl
.
mrWidget
.
checkStatus
();
}
};
}
Notes
.
animateAppendNote
=
function
(
noteHtml
,
$notesList
)
{
static
animateAppendNote
(
noteHtml
,
$notesList
)
{
const
$note
=
$
(
noteHtml
);
$note
.
addClass
(
'
fade-in-full
'
).
renderGFM
();
$notesList
.
append
(
$note
);
return
$note
;
};
}
Notes
.
animateUpdateNote
=
function
(
noteHtml
,
$note
)
{
static
animateUpdateNote
(
noteHtml
,
$note
)
{
const
$updatedNote
=
$
(
noteHtml
);
$updatedNote
.
addClass
(
'
fade-in
'
).
renderGFM
();
$note
.
replaceWith
(
$updatedNote
);
return
$updatedNote
;
};
}
/**
* Get data from Form attributes to use for saving/submitting comment.
*/
Notes
.
prototype
.
getFormData
=
function
(
$form
)
{
getFormData
(
$form
)
{
return
{
formData
:
$form
.
serialize
(),
formContent
:
_
.
escape
(
$form
.
find
(
'
.js-note-text
'
).
val
()),
formAction
:
$form
.
attr
(
'
action
'
),
};
};
}
/**
* Identify if comment has any quick actions
*/
Notes
.
prototype
.
hasQuickActions
=
function
(
formContent
)
{
hasQuickActions
(
formContent
)
{
return
REGEX_QUICK_ACTIONS
.
test
(
formContent
);
};
}
/**
* Remove quick actions and leave comment with pure message
*/
Notes
.
prototype
.
stripQuickActions
=
function
(
formContent
)
{
stripQuickActions
(
formContent
)
{
return
formContent
.
replace
(
REGEX_QUICK_ACTIONS
,
''
).
trim
();
};
}
/**
* Gets appropriate description from quick actions found in provided `formContent`
*/
Notes
.
prototype
.
getQuickActionDescription
=
function
(
formContent
,
availableQuickActions
=
[])
{
getQuickActionDescription
(
formContent
,
availableQuickActions
=
[])
{
let
tempFormContent
;
// Identify executed quick actions from `formContent`
...
...
@@ -1259,7 +1242,7 @@ const normalizeNewlines = function(str) {
}
return
tempFormContent
;
};
}
/**
* Create placeholder note DOM element populated with comment body
...
...
@@ -1267,7 +1250,7 @@ const normalizeNewlines = function(str) {
* Once comment is _actually_ posted on server, we will have final element
* in response that we will show in place of this temporary element.
*/
Notes
.
prototype
.
createPlaceholderNote
=
function
({
formContent
,
uniqueId
,
isDiscussionNote
,
currentUsername
,
currentUserFullname
,
currentUserAvatar
})
{
createPlaceholderNote
({
formContent
,
uniqueId
,
isDiscussionNote
,
currentUsername
,
currentUserFullname
,
currentUserAvatar
})
{
const
discussionClass
=
isDiscussionNote
?
'
discussion
'
:
''
;
const
$tempNote
=
$
(
`<li id="
${
uniqueId
}
" class="note being-posted fade-in-half timeline-entry">
...
...
@@ -1297,12 +1280,12 @@ const normalizeNewlines = function(str) {
);
return
$tempNote
;
};
}
/**
* Create Placeholder System Note DOM element populated with quick action description
*/
Notes
.
prototype
.
createPlaceholderSystemNote
=
function
({
formContent
,
uniqueId
})
{
createPlaceholderSystemNote
({
formContent
,
uniqueId
})
{
const
$tempNote
=
$
(
`<li id="
${
uniqueId
}
" class="note system-note timeline-entry being-posted fade-in-half">
<div class="timeline-entry-inner">
...
...
@@ -1314,7 +1297,7 @@ const normalizeNewlines = function(str) {
);
return
$tempNote
;
};
}
/**
* This method does following tasks step-by-step whenever a new comment
...
...
@@ -1335,7 +1318,7 @@ const normalizeNewlines = function(str) {
* 1. Remove placeholder element
* 2. Show error Flash message about failure
*/
Notes
.
prototype
.
postComment
=
function
(
e
)
{
postComment
(
e
)
{
e
.
preventDefault
();
// Get Form metadata
...
...
@@ -1471,7 +1454,7 @@ const normalizeNewlines = function(str) {
});
return
$closeBtn
.
text
(
$closeBtn
.
data
(
'
original-text
'
));
};
}
/**
* This method does following tasks step-by-step whenever an existing comment
...
...
@@ -1486,7 +1469,7 @@ const normalizeNewlines = function(str) {
* 1. Revert Note element to original content
* 2. Show error Flash message about failure
*/
Notes
.
prototype
.
updateComment
=
function
(
e
)
{
updateComment
(
e
)
{
e
.
preventDefault
();
// Get Form metadata
...
...
@@ -1524,8 +1507,7 @@ const normalizeNewlines = function(str) {
});
return
$closeBtn
.
text
(
$closeBtn
.
data
(
'
original-text
'
));
};
}
}
return
Notes
;
})();
}).
call
(
window
);
window
.
Notes
=
Notes
;
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment