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 | ... | ... |