Commit 9305ef8940988fc9baad7c5196819f272445dd9b
1 parent
f554aa38
Exists in
spb-stable
and in
3 other branches
Remove old methods and classes
Signed-off-by: Dmitriy Zaporozhets <dmitriy.zaporozhets@gmail.com>
Showing
3 changed files
with
10 additions
and
594 deletions
Show diff stats
app/assets/javascripts/notes.js
| ... | ... | @@ -1,584 +0,0 @@ |
| 1 | -var NoteList = { | |
| 2 | - id: null, | |
| 3 | - notes_path: null, | |
| 4 | - target_params: null, | |
| 5 | - target_id: 0, | |
| 6 | - target_type: null, | |
| 7 | - | |
| 8 | - init: function(tid, tt, path) { | |
| 9 | - NoteList.notes_path = path + ".json"; | |
| 10 | - NoteList.target_id = tid; | |
| 11 | - NoteList.target_type = tt; | |
| 12 | - NoteList.target_params = "target_type=" + NoteList.target_type + "&target_id=" + NoteList.target_id; | |
| 13 | - | |
| 14 | - NoteList.setupMainTargetNoteForm(); | |
| 15 | - | |
| 16 | - // Unbind events to prevent firing twice | |
| 17 | - $(document).off("click", ".js-add-diff-note-button"); | |
| 18 | - $(document).off("click", ".js-discussion-reply-button"); | |
| 19 | - $(document).off("click", ".js-note-preview-button"); | |
| 20 | - $(document).off("click", ".js-note-attachment-input"); | |
| 21 | - $(document).off("click", ".js-close-discussion-note-form"); | |
| 22 | - $(document).off("click", ".js-note-delete"); | |
| 23 | - $(document).off("click", ".js-note-edit"); | |
| 24 | - $(document).off("click", ".js-note-edit-cancel"); | |
| 25 | - $(document).off("click", ".js-note-attachment-delete"); | |
| 26 | - $(document).off("click", ".js-choose-note-attachment-button"); | |
| 27 | - $(document).off("click", ".js-show-outdated-discussion"); | |
| 28 | - | |
| 29 | - $(document).off("ajax:complete", ".js-main-target-form"); | |
| 30 | - | |
| 31 | - | |
| 32 | - // add a new diff note | |
| 33 | - $(document).on("click", | |
| 34 | - ".js-add-diff-note-button", | |
| 35 | - NoteList.addDiffNote); | |
| 36 | - | |
| 37 | - // reply to diff/discussion notes | |
| 38 | - $(document).on("click", | |
| 39 | - ".js-discussion-reply-button", | |
| 40 | - NoteList.replyToDiscussionNote); | |
| 41 | - | |
| 42 | - // setup note preview | |
| 43 | - $(document).on("click", | |
| 44 | - ".js-note-preview-button", | |
| 45 | - NoteList.previewNote); | |
| 46 | - | |
| 47 | - // update the file name when an attachment is selected | |
| 48 | - $(document).on("change", | |
| 49 | - ".js-note-attachment-input", | |
| 50 | - NoteList.updateFormAttachment); | |
| 51 | - | |
| 52 | - // hide diff note form | |
| 53 | - $(document).on("click", | |
| 54 | - ".js-close-discussion-note-form", | |
| 55 | - NoteList.removeDiscussionNoteForm); | |
| 56 | - | |
| 57 | - // remove a note (in general) | |
| 58 | - $(document).on("click", | |
| 59 | - ".js-note-delete", | |
| 60 | - NoteList.removeNote); | |
| 61 | - | |
| 62 | - // show the edit note form | |
| 63 | - $(document).on("click", | |
| 64 | - ".js-note-edit", | |
| 65 | - NoteList.showEditNoteForm); | |
| 66 | - | |
| 67 | - // cancel note editing | |
| 68 | - $(document).on("click", | |
| 69 | - ".note-edit-cancel", | |
| 70 | - NoteList.cancelNoteEdit); | |
| 71 | - | |
| 72 | - // delete note attachment | |
| 73 | - $(document).on("click", | |
| 74 | - ".js-note-attachment-delete", | |
| 75 | - NoteList.deleteNoteAttachment); | |
| 76 | - | |
| 77 | - // update the note after editing | |
| 78 | - $(document).on("ajax:complete", | |
| 79 | - "form.edit_note", | |
| 80 | - NoteList.updateNote); | |
| 81 | - | |
| 82 | - // reset main target form after submit | |
| 83 | - $(document).on("ajax:complete", | |
| 84 | - ".js-main-target-form", | |
| 85 | - NoteList.resetMainTargetForm); | |
| 86 | - | |
| 87 | - | |
| 88 | - $(document).on("click", | |
| 89 | - ".js-choose-note-attachment-button", | |
| 90 | - NoteList.chooseNoteAttachment); | |
| 91 | - | |
| 92 | - $(document).on("click", | |
| 93 | - ".js-show-outdated-discussion", | |
| 94 | - function(e) { $(this).next('.outdated-discussion').show(); e.preventDefault() }); | |
| 95 | - }, | |
| 96 | - | |
| 97 | - | |
| 98 | - /** | |
| 99 | - * When clicking on buttons | |
| 100 | - */ | |
| 101 | - | |
| 102 | - /** | |
| 103 | - * Called when clicking on the "add a comment" button on the side of a diff line. | |
| 104 | - * | |
| 105 | - * Inserts a temporary row for the form below the line. | |
| 106 | - * Sets up the form and shows it. | |
| 107 | - */ | |
| 108 | - addDiffNote: function(e) { | |
| 109 | - e.preventDefault(); | |
| 110 | - | |
| 111 | - // find the form | |
| 112 | - var form = $(".js-new-note-form"); | |
| 113 | - var row = $(this).closest("tr"); | |
| 114 | - var nextRow = row.next(); | |
| 115 | - | |
| 116 | - // does it already have notes? | |
| 117 | - if (nextRow.is(".notes_holder")) { | |
| 118 | - $.proxy(NoteList.replyToDiscussionNote, | |
| 119 | - nextRow.find(".js-discussion-reply-button") | |
| 120 | - ).call(); | |
| 121 | - } else { | |
| 122 | - // add a notes row and insert the form | |
| 123 | - row.after('<tr class="notes_holder js-temp-notes-holder"><td class="notes_line" colspan="2"></td><td class="notes_content"></td></tr>'); | |
| 124 | - form.clone().appendTo(row.next().find(".notes_content")); | |
| 125 | - | |
| 126 | - // show the form | |
| 127 | - NoteList.setupDiscussionNoteForm($(this), row.next().find("form")); | |
| 128 | - } | |
| 129 | - }, | |
| 130 | - | |
| 131 | - /** | |
| 132 | - * Called when clicking the "Choose File" button. | |
| 133 | - * | |
| 134 | - * Opens the file selection dialog. | |
| 135 | - */ | |
| 136 | - chooseNoteAttachment: function() { | |
| 137 | - var form = $(this).closest("form"); | |
| 138 | - | |
| 139 | - form.find(".js-note-attachment-input").click(); | |
| 140 | - }, | |
| 141 | - | |
| 142 | - /** | |
| 143 | - * Shows the note preview. | |
| 144 | - * | |
| 145 | - * Lets the server render GFM into Html and displays it. | |
| 146 | - * | |
| 147 | - * Note: uses the Toggler behavior to toggle preview/edit views/buttons | |
| 148 | - */ | |
| 149 | - previewNote: function(e) { | |
| 150 | - e.preventDefault(); | |
| 151 | - | |
| 152 | - var form = $(this).closest("form"); | |
| 153 | - var preview = form.find('.js-note-preview'); | |
| 154 | - var noteText = form.find('.js-note-text').val(); | |
| 155 | - | |
| 156 | - if(noteText.trim().length === 0) { | |
| 157 | - preview.text('Nothing to preview.'); | |
| 158 | - } else { | |
| 159 | - preview.text('Loading...'); | |
| 160 | - $.post($(this).data('url'), {note: noteText}) | |
| 161 | - .success(function(previewData) { | |
| 162 | - preview.html(previewData); | |
| 163 | - }); | |
| 164 | - } | |
| 165 | - }, | |
| 166 | - | |
| 167 | - /** | |
| 168 | - * Called in response to "cancel" on a diff note form. | |
| 169 | - * | |
| 170 | - * Shows the reply button again. | |
| 171 | - * Removes the form and if necessary it's temporary row. | |
| 172 | - */ | |
| 173 | - removeDiscussionNoteForm: function() { | |
| 174 | - var form = $(this).closest("form"); | |
| 175 | - var row = form.closest("tr"); | |
| 176 | - | |
| 177 | - // show the reply button (will only work for replies) | |
| 178 | - form.prev(".js-discussion-reply-button").show(); | |
| 179 | - | |
| 180 | - if (row.is(".js-temp-notes-holder")) { | |
| 181 | - // remove temporary row for diff lines | |
| 182 | - row.remove(); | |
| 183 | - } else { | |
| 184 | - // only remove the form | |
| 185 | - form.remove(); | |
| 186 | - } | |
| 187 | - }, | |
| 188 | - | |
| 189 | - /** | |
| 190 | - * Called in response to deleting a note of any kind. | |
| 191 | - * | |
| 192 | - * Removes the actual note from view. | |
| 193 | - * Removes the whole discussion if the last note is being removed. | |
| 194 | - */ | |
| 195 | - removeNote: function() { | |
| 196 | - var note = $(this).closest(".note"); | |
| 197 | - var notes = note.closest(".notes"); | |
| 198 | - | |
| 199 | - // check if this is the last note for this line | |
| 200 | - if (notes.find(".note").length === 1) { | |
| 201 | - // for discussions | |
| 202 | - notes.closest(".discussion").remove(); | |
| 203 | - | |
| 204 | - // for diff lines | |
| 205 | - notes.closest("tr").remove(); | |
| 206 | - } | |
| 207 | - | |
| 208 | - note.remove(); | |
| 209 | - NoteList.updateVotes(); | |
| 210 | - }, | |
| 211 | - | |
| 212 | - /** | |
| 213 | - * Called in response to clicking the edit note link | |
| 214 | - * | |
| 215 | - * Replaces the note text with the note edit form | |
| 216 | - * Adds a hidden div with the original content of the note to fill the edit note form with | |
| 217 | - * if the user cancels | |
| 218 | - */ | |
| 219 | - showEditNoteForm: function(e) { | |
| 220 | - e.preventDefault(); | |
| 221 | - var note = $(this).closest(".note"); | |
| 222 | - note.find(".note-text").hide(); | |
| 223 | - | |
| 224 | - // Show the attachment delete link | |
| 225 | - note.find(".js-note-attachment-delete").show(); | |
| 226 | - | |
| 227 | - GitLab.GfmAutoComplete.setup(); | |
| 228 | - | |
| 229 | - var form = note.find(".note-edit-form"); | |
| 230 | - form.show(); | |
| 231 | - | |
| 232 | - var textarea = form.find("textarea"); | |
| 233 | - if (form.find(".note-original-content").length === 0) { | |
| 234 | - var p = $("<p></p>").text(textarea.val()); | |
| 235 | - var hidden_div = $('<div class="note-original-content"></div>').append(p); | |
| 236 | - form.append(hidden_div); | |
| 237 | - hidden_div.hide(); | |
| 238 | - } | |
| 239 | - textarea.focus(); | |
| 240 | - }, | |
| 241 | - | |
| 242 | - /** | |
| 243 | - * Called in response to clicking the cancel button when editing a note | |
| 244 | - * | |
| 245 | - * Resets and hides the note editing form | |
| 246 | - */ | |
| 247 | - cancelNoteEdit: function(e) { | |
| 248 | - e.preventDefault(); | |
| 249 | - var note = $(this).closest(".note"); | |
| 250 | - NoteList.resetNoteEditing(note); | |
| 251 | - }, | |
| 252 | - | |
| 253 | - | |
| 254 | - /** | |
| 255 | - * Called in response to clicking the delete attachment link | |
| 256 | - * | |
| 257 | - * Removes the attachment wrapper view, including image tag if it exists | |
| 258 | - * Resets the note editing form | |
| 259 | - */ | |
| 260 | - deleteNoteAttachment: function() { | |
| 261 | - var note = $(this).closest(".note"); | |
| 262 | - note.find(".note-attachment").remove(); | |
| 263 | - NoteList.resetNoteEditing(note); | |
| 264 | - NoteList.rewriteTimestamp(note.find(".note-last-update")); | |
| 265 | - }, | |
| 266 | - | |
| 267 | - | |
| 268 | - /** | |
| 269 | - * Called when clicking on the "reply" button for a diff line. | |
| 270 | - * | |
| 271 | - * Shows the note form below the notes. | |
| 272 | - */ | |
| 273 | - replyToDiscussionNote: function() { | |
| 274 | - // find the form | |
| 275 | - var form = $(".js-new-note-form"); | |
| 276 | - | |
| 277 | - // hide reply button | |
| 278 | - $(this).hide(); | |
| 279 | - // insert the form after the button | |
| 280 | - form.clone().insertAfter($(this)); | |
| 281 | - | |
| 282 | - // show the form | |
| 283 | - NoteList.setupDiscussionNoteForm($(this), $(this).next("form")); | |
| 284 | - }, | |
| 285 | - | |
| 286 | - | |
| 287 | - /** | |
| 288 | - * Helper for inserting and setting up note forms. | |
| 289 | - */ | |
| 290 | - | |
| 291 | - | |
| 292 | - /** | |
| 293 | - * Called in response to creating a note failing validation. | |
| 294 | - * | |
| 295 | - * Adds the rendered errors to the respective form. | |
| 296 | - * If "discussionId" is null or undefined, the main target form is assumed. | |
| 297 | - */ | |
| 298 | - errorsOnForm: function(errorsHtml, discussionId) { | |
| 299 | - // find the form | |
| 300 | - if (discussionId) { | |
| 301 | - var form = $("form[rel='"+discussionId+"']"); | |
| 302 | - } else { | |
| 303 | - var form = $(".js-main-target-form"); | |
| 304 | - } | |
| 305 | - | |
| 306 | - form.find(".js-errors").remove(); | |
| 307 | - form.prepend(errorsHtml); | |
| 308 | - | |
| 309 | - form.find(".js-note-text").focus(); | |
| 310 | - }, | |
| 311 | - | |
| 312 | - | |
| 313 | - /** | |
| 314 | - * Shows the diff/discussion form and does some setup on it. | |
| 315 | - * | |
| 316 | - * Sets some hidden fields in the form. | |
| 317 | - * | |
| 318 | - * Note: dataHolder must have the "discussionId", "lineCode", "noteableType" | |
| 319 | - * and "noteableId" data attributes set. | |
| 320 | - */ | |
| 321 | - setupDiscussionNoteForm: function(dataHolder, form) { | |
| 322 | - // setup note target | |
| 323 | - form.attr("rel", dataHolder.data("discussionId")); | |
| 324 | - form.find("#note_commit_id").val(dataHolder.data("commitId")); | |
| 325 | - form.find("#note_line_code").val(dataHolder.data("lineCode")); | |
| 326 | - form.find("#note_noteable_type").val(dataHolder.data("noteableType")); | |
| 327 | - form.find("#note_noteable_id").val(dataHolder.data("noteableId")); | |
| 328 | - | |
| 329 | - NoteList.setupNoteForm(form); | |
| 330 | - | |
| 331 | - form.find(".js-note-text").focus(); | |
| 332 | - }, | |
| 333 | - | |
| 334 | - /** | |
| 335 | - * Shows the main form and does some setup on it. | |
| 336 | - * | |
| 337 | - * Sets some hidden fields in the form. | |
| 338 | - */ | |
| 339 | - setupMainTargetNoteForm: function() { | |
| 340 | - // find the form | |
| 341 | - var form = $(".js-new-note-form"); | |
| 342 | - // insert the form after the button | |
| 343 | - form.clone().replaceAll($(".js-main-target-form")); | |
| 344 | - | |
| 345 | - form = form.prev("form"); | |
| 346 | - | |
| 347 | - // show the form | |
| 348 | - NoteList.setupNoteForm(form); | |
| 349 | - | |
| 350 | - // fix classes | |
| 351 | - form.removeClass("js-new-note-form"); | |
| 352 | - form.addClass("js-main-target-form"); | |
| 353 | - | |
| 354 | - // remove unnecessary fields and buttons | |
| 355 | - form.find("#note_line_code").remove(); | |
| 356 | - form.find(".js-close-discussion-note-form").remove(); | |
| 357 | - }, | |
| 358 | - | |
| 359 | - /** | |
| 360 | - * General note form setup. | |
| 361 | - * | |
| 362 | - * * deactivates the submit button when text is empty | |
| 363 | - * * hides the preview button when text is empty | |
| 364 | - * * setup GFM auto complete | |
| 365 | - * * show the form | |
| 366 | - */ | |
| 367 | - setupNoteForm: function(form) { | |
| 368 | - disableButtonIfEmptyField(form.find(".js-note-text"), form.find(".js-comment-button")); | |
| 369 | - | |
| 370 | - form.removeClass("js-new-note-form"); | |
| 371 | - | |
| 372 | - // setup preview buttons | |
| 373 | - form.find(".js-note-edit-button, .js-note-preview-button") | |
| 374 | - .tooltip({ placement: 'left' }); | |
| 375 | - | |
| 376 | - previewButton = form.find(".js-note-preview-button"); | |
| 377 | - form.find(".js-note-text").on("input", function() { | |
| 378 | - if ($(this).val().trim() !== "") { | |
| 379 | - previewButton.removeClass("turn-off").addClass("turn-on"); | |
| 380 | - } else { | |
| 381 | - previewButton.removeClass("turn-on").addClass("turn-off"); | |
| 382 | - } | |
| 383 | - }); | |
| 384 | - | |
| 385 | - // remove notify commit author checkbox for non-commit notes | |
| 386 | - if (form.find("#note_noteable_type").val() !== "Commit") { | |
| 387 | - form.find(".js-notify-commit-author").remove(); | |
| 388 | - } | |
| 389 | - | |
| 390 | - GitLab.GfmAutoComplete.setup(); | |
| 391 | - | |
| 392 | - form.show(); | |
| 393 | - }, | |
| 394 | - | |
| 395 | - | |
| 396 | - /** | |
| 397 | - * Handle loading the initial set of notes. | |
| 398 | - * And set up loading more notes when scrolling to the bottom of the page. | |
| 399 | - */ | |
| 400 | - | |
| 401 | - | |
| 402 | - /** | |
| 403 | - * Gets an initial set of notes. | |
| 404 | - */ | |
| 405 | - getContent: function() { | |
| 406 | - $.ajax({ | |
| 407 | - url: NoteList.notes_path, | |
| 408 | - data: NoteList.target_params, | |
| 409 | - complete: function(){ $('.js-notes-busy').removeClass("loading")}, | |
| 410 | - beforeSend: function() { $('.js-notes-busy').addClass("loading") }, | |
| 411 | - success: function(data) { | |
| 412 | - NoteList.setContent(data.html); | |
| 413 | - }, | |
| 414 | - dataType: "json" | |
| 415 | - }); | |
| 416 | - }, | |
| 417 | - | |
| 418 | - /** | |
| 419 | - * Called in response to getContent(). | |
| 420 | - * Replaces the content of #notes-list with the given html. | |
| 421 | - */ | |
| 422 | - setContent: function(html) { | |
| 423 | - $("#notes-list").html(html); | |
| 424 | - }, | |
| 425 | - | |
| 426 | - | |
| 427 | - /** | |
| 428 | - * Adds a single common note to #notes-list. | |
| 429 | - */ | |
| 430 | - appendNewNote: function(id, html) { | |
| 431 | - $("#notes-list").append(html); | |
| 432 | - NoteList.updateVotes(); | |
| 433 | - }, | |
| 434 | - | |
| 435 | - /** | |
| 436 | - * Adds a single discussion note to #notes-list. | |
| 437 | - * | |
| 438 | - * Also removes the corresponding form. | |
| 439 | - */ | |
| 440 | - appendNewDiscussionNote: function(discussionId, diffRowHtml, noteHtml) { | |
| 441 | - var form = $("form[rel='"+discussionId+"']"); | |
| 442 | - var row = form.closest("tr"); | |
| 443 | - | |
| 444 | - // is this the first note of discussion? | |
| 445 | - if (row.is(".js-temp-notes-holder")) { | |
| 446 | - // insert the note and the reply button after the temp row | |
| 447 | - row.after(diffRowHtml); | |
| 448 | - // remove the note (will be added again below) | |
| 449 | - row.next().find(".note").remove(); | |
| 450 | - } | |
| 451 | - | |
| 452 | - // append new note to all matching discussions | |
| 453 | - $(".notes[rel='"+discussionId+"']").append(noteHtml); | |
| 454 | - | |
| 455 | - // cleanup after successfully creating a diff/discussion note | |
| 456 | - $.proxy(NoteList.removeDiscussionNoteForm, form).call(); | |
| 457 | - }, | |
| 458 | - | |
| 459 | - /** | |
| 460 | - * Called in response the main target form has been successfully submitted. | |
| 461 | - * | |
| 462 | - * Removes any errors. | |
| 463 | - * Resets text and preview. | |
| 464 | - * Resets buttons. | |
| 465 | - */ | |
| 466 | - resetMainTargetForm: function(){ | |
| 467 | - var form = $(this); | |
| 468 | - | |
| 469 | - // remove validation errors | |
| 470 | - form.find(".js-errors").remove(); | |
| 471 | - | |
| 472 | - // reset text and preview | |
| 473 | - var previewContainer = form.find(".js-toggler-container.note_text_and_preview"); | |
| 474 | - if (previewContainer.is(".on")) { | |
| 475 | - previewContainer.removeClass("on"); | |
| 476 | - } | |
| 477 | - form.find(".js-note-text").val("").trigger("input"); | |
| 478 | - }, | |
| 479 | - | |
| 480 | - /** | |
| 481 | - * Called after an attachment file has been selected. | |
| 482 | - * | |
| 483 | - * Updates the file name for the selected attachment. | |
| 484 | - */ | |
| 485 | - updateFormAttachment: function() { | |
| 486 | - var form = $(this).closest("form"); | |
| 487 | - | |
| 488 | - // get only the basename | |
| 489 | - var filename = $(this).val().replace(/^.*[\\\/]/, ''); | |
| 490 | - | |
| 491 | - form.find(".js-attachment-filename").text(filename); | |
| 492 | - }, | |
| 493 | - | |
| 494 | - /** | |
| 495 | - * Recalculates the votes and updates them (if they are displayed at all). | |
| 496 | - * | |
| 497 | - * Assumes all relevant notes are displayed (i.e. there are no more notes to | |
| 498 | - * load via getMore()). | |
| 499 | - * Might produce inaccurate results when not all notes have been loaded and a | |
| 500 | - * recalculation is triggered (e.g. when deleting a note). | |
| 501 | - */ | |
| 502 | - updateVotes: function() { | |
| 503 | - var votes = $("#votes .votes"); | |
| 504 | - var notes = $("#notes-list .note .vote"); | |
| 505 | - | |
| 506 | - // only update if there is a vote display | |
| 507 | - if (votes.size()) { | |
| 508 | - var upvotes = notes.filter(".upvote").size(); | |
| 509 | - var downvotes = notes.filter(".downvote").size(); | |
| 510 | - var votesCount = upvotes + downvotes; | |
| 511 | - var upvotesPercent = votesCount ? (100.0 / votesCount * upvotes) : 0; | |
| 512 | - var downvotesPercent = votesCount ? (100.0 - upvotesPercent) : 0; | |
| 513 | - | |
| 514 | - // change vote bar lengths | |
| 515 | - votes.find(".bar-success").css("width", upvotesPercent+"%"); | |
| 516 | - votes.find(".bar-danger").css("width", downvotesPercent+"%"); | |
| 517 | - // replace vote numbers | |
| 518 | - votes.find(".upvotes").text(votes.find(".upvotes").text().replace(/\d+/, upvotes)); | |
| 519 | - votes.find(".downvotes").text(votes.find(".downvotes").text().replace(/\d+/, downvotes)); | |
| 520 | - } | |
| 521 | - }, | |
| 522 | - | |
| 523 | - /** | |
| 524 | - * Called in response to the edit note form being submitted | |
| 525 | - * | |
| 526 | - * Updates the current note field. | |
| 527 | - * Hides the edit note form | |
| 528 | - */ | |
| 529 | - updateNote: function(e, xhr, settings) { | |
| 530 | - response = JSON.parse(xhr.responseText); | |
| 531 | - if (response.success) { | |
| 532 | - var note_li = $("#note_" + response.id); | |
| 533 | - var note_text = note_li.find(".note-text"); | |
| 534 | - note_text.html(response.note).show(); | |
| 535 | - | |
| 536 | - var note_form = note_li.find(".note-edit-form"); | |
| 537 | - var original_content = note_form.find(".note-original-content"); | |
| 538 | - original_content.remove(); | |
| 539 | - note_form.hide(); | |
| 540 | - note_form.find(".btn-save").enableButton(); | |
| 541 | - | |
| 542 | - // Update the "Edited at xxx label" on the note to show it's just been updated | |
| 543 | - NoteList.rewriteTimestamp(note_li.find(".note-last-update")); | |
| 544 | - } | |
| 545 | - }, | |
| 546 | - | |
| 547 | - /** | |
| 548 | - * Called in response to the 'cancel note' link clicked, or after deleting a note attachment | |
| 549 | - * | |
| 550 | - * Hides the edit note form and shows the note | |
| 551 | - * Resets the edit note form textarea with the original content of the note | |
| 552 | - */ | |
| 553 | - resetNoteEditing: function(note) { | |
| 554 | - note.find(".note-text").show(); | |
| 555 | - | |
| 556 | - // Hide the attachment delete link | |
| 557 | - note.find(".js-note-attachment-delete").hide(); | |
| 558 | - | |
| 559 | - // Put the original content of the note back into the edit form textarea | |
| 560 | - var form = note.find(".note-edit-form"); | |
| 561 | - var original_content = form.find(".note-original-content"); | |
| 562 | - form.find("textarea").val(original_content.text()); | |
| 563 | - original_content.remove(); | |
| 564 | - | |
| 565 | - note.find(".note-edit-form").hide(); | |
| 566 | - }, | |
| 567 | - | |
| 568 | - /** | |
| 569 | - * Utility function to generate new timestamp text for a note | |
| 570 | - * | |
| 571 | - */ | |
| 572 | - rewriteTimestamp: function(element) { | |
| 573 | - // Strip all newlines from the existing timestamp | |
| 574 | - var ts = element.text().replace(/\n/g, ' ').trim(); | |
| 575 | - | |
| 576 | - // If the timestamp already has '(Edited xxx ago)' text, remove it | |
| 577 | - ts = ts.replace(new RegExp("\\(Edited [A-Za-z0-9 ]+\\)$", "gi"), ""); | |
| 578 | - | |
| 579 | - // Append "(Edited just now)" | |
| 580 | - ts = (ts + " <small>(Edited just now)</small>"); | |
| 581 | - | |
| 582 | - element.html(ts); | |
| 583 | - } | |
| 584 | -}; |
app/assets/stylesheets/sections/notes.scss
app/helpers/notes_helper.rb
| 1 | 1 | module NotesHelper |
| 2 | 2 | # Helps to distinguish e.g. commit notes in mr notes list |
| 3 | 3 | def note_for_main_target?(note) |
| 4 | - (@target_type.camelize == note.noteable_type && !note.for_diff_line?) | |
| 4 | + (@noteable.class.name == note.noteable_type && !note.for_diff_line?) | |
| 5 | 5 | end |
| 6 | 6 | |
| 7 | 7 | def note_target_fields |
| ... | ... | @@ -21,14 +21,6 @@ module NotesHelper |
| 21 | 21 | end |
| 22 | 22 | end |
| 23 | 23 | |
| 24 | - def loading_more_notes? | |
| 25 | - params[:loading_more].present? | |
| 26 | - end | |
| 27 | - | |
| 28 | - def loading_new_notes? | |
| 29 | - params[:loading_new].present? | |
| 30 | - end | |
| 31 | - | |
| 32 | 24 | def note_timestamp(note) |
| 33 | 25 | # Shows the created at time and the updated at time if different |
| 34 | 26 | ts = "#{time_ago_with_tooltip(note.created_at, 'bottom', 'note_created_ago')} ago" |
| ... | ... | @@ -41,4 +33,13 @@ module NotesHelper |
| 41 | 33 | end |
| 42 | 34 | ts.html_safe |
| 43 | 35 | end |
| 36 | + | |
| 37 | + def noteable_json(noteable) | |
| 38 | + { | |
| 39 | + id: noteable.id, | |
| 40 | + class: noteable.class.name, | |
| 41 | + resources: noteable.class.table_name, | |
| 42 | + project_id: noteable.project.id, | |
| 43 | + }.to_json | |
| 44 | + end | |
| 44 | 45 | end | ... | ... |