Commit 4ed8278870640017b93f18b476532824eba70ac2

Authored by Riyad Preukschas
1 parent 7978f8dd

Fix a bunch of smaller glitches.

app/assets/javascripts/notes.js
... ... @@ -58,12 +58,6 @@ var NoteList = {
58 58 ".js-close-discussion-note-form",
59 59 NoteList.removeDiscussionNoteForm);
60 60  
61   - // do some specific housekeeping when removing a diff or discussion note
62   - $(document).on("click",
63   - ".diff_file .js-note-delete," +
64   - ".discussion .js-note-delete",
65   - NoteList.removeDiscussionNote);
66   -
67 61 // remove a note (in general)
68 62 $(document).on("click",
69 63 ".js-note-delete",
... ... @@ -96,9 +90,6 @@ var NoteList = {
96 90 previewContainer.removeClass("on");
97 91 }
98 92 form.find(".js-note-text").val("").trigger("input");
99   -
100   - // re-enable submit button
101   - form.find(".js-comment-button").enable();
102 93 },
103 94  
104 95 /**
... ... @@ -144,8 +135,6 @@ var NoteList = {
144 135 var preview = form.find('.js-note-preview');
145 136 var noteText = form.find('.js-note-text').val();
146 137  
147   - console.log("preview", noteText);
148   -
149 138 if(noteText.trim().length === 0) {
150 139 preview.text('Nothing to preview.');
151 140 } else {
... ... @@ -158,35 +147,12 @@ var NoteList = {
158 147 },
159 148  
160 149 /**
161   - * Called in response to deleting a note on a diff line.
162   - *
163   - * Removes the actual note from view.
164   - * Removes the whole notes row if the last note for that line is being removed.
165   - *
166   - * Note: must be called before removeNote()
167   - */
168   - removeDiscussionNote: function() {
169   - var notes = $(this).closest(".notes");
170   -
171   - // check if this is the last note for this line
172   - if (notes.find(".note").length === 1) {
173   - // for discussions
174   - notes.closest(".discussion").remove();
175   -
176   - // for diff lines
177   - notes.closest("tr").remove();
178   - }
179   - },
180   -
181   - /**
182 150 * Called in response to "cancel" on a diff note form.
183 151 *
184 152 * Shows the reply button again.
185 153 * Removes the form and if necessary it's temporary row.
186 154 */
187   - removeDiscussionNoteForm: function(e) {
188   - e.preventDefault();
189   -
  155 + removeDiscussionNoteForm: function() {
190 156 var form = $(this).closest("form");
191 157 var row = form.closest("tr");
192 158  
... ... @@ -206,9 +172,22 @@ var NoteList = {
206 172 * Called in response to deleting a note of any kind.
207 173 *
208 174 * Removes the actual note from view.
  175 + * Removes the whole discussion if the last note is being removed.
209 176 */
210 177 removeNote: function() {
211   - $(this).closest(".note").remove();
  178 + var note = $(this).closest(".note");
  179 + var notes = note.closest(".notes");
  180 +
  181 + // check if this is the last note for this line
  182 + if (notes.find(".note").length === 1) {
  183 + // for discussions
  184 + notes.closest(".discussion").remove();
  185 +
  186 + // for diff lines
  187 + notes.closest("tr").remove();
  188 + }
  189 +
  190 + note.remove();
212 191 NoteList.updateVotes();
213 192 },
214 193  
... ... @@ -274,6 +253,7 @@ var NoteList = {
274 253  
275 254 NoteList.setupNoteForm(form);
276 255  
  256 + form.find(".js-note-text").focus();
277 257 },
278 258  
279 259 /**
... ... @@ -312,16 +292,18 @@ var NoteList = {
312 292 setupNoteForm: function(form) {
313 293 disableButtonIfEmptyField(form.find(".js-note-text"), form.find(".js-comment-button"));
314 294  
  295 + form.removeClass("js-new-note-form");
  296 +
315 297 // setup preview buttons
316   - $(".js-note-edit-button, .js-note-preview-button").tooltip({ placement: 'left' });
  298 + form.find(".js-note-edit-button, .js-note-preview-button")
  299 + .tooltip({ placement: 'left' });
317 300  
318   - previewButton = $(".js-note-preview-button");
319   - previewButton.hide();
  301 + previewButton = form.find(".js-note-preview-button");
320 302 form.find(".js-note-text").on("input", function() {
321 303 if ($(this).val().trim() !== "") {
322   - previewButton.fadeIn();
  304 + previewButton.removeClass("turn-off").addClass("turn-on");
323 305 } else {
324   - previewButton.fadeOut();
  306 + previewButton.removeClass("turn-on").addClass("turn-off");
325 307 }
326 308 });
327 309  
... ... @@ -344,8 +326,8 @@ var NoteList = {
344 326 $.ajax({
345 327 url: NoteList.notes_path,
346 328 data: NoteList.target_params,
347   - complete: function(){ $('.notes-status').removeClass("loading")},
348   - beforeSend: function() { $('.notes-status').addClass("loading") },
  329 + complete: function(){ $('.js-notes-busy').removeClass("loading")},
  330 + beforeSend: function() { $('.js-notes-busy').addClass("loading") },
349 331 dataType: "script"
350 332 });
351 333 },
... ... @@ -404,8 +386,8 @@ var NoteList = {
404 386 $.ajax({
405 387 url: NoteList.notes_path,
406 388 data: NoteList.target_params + "&loading_more=1&" + (NoteList.reversed ? "before_id" : "after_id") + "=" + NoteList.bottom_id,
407   - complete: function(){ $('.notes-status').removeClass("loading")},
408   - beforeSend: function() { $('.notes-status').addClass("loading") },
  389 + complete: function(){ $('.js-notes-busy').removeClass("loading")},
  390 + beforeSend: function() { $('.js-notes-busy').addClass("loading") },
409 391 dataType: "script"
410 392 });
411 393 },
... ...
app/assets/stylesheets/sections/notes.scss
... ... @@ -135,9 +135,12 @@ ul.notes {
135 135 }
136 136 }
137 137  
  138 +
  139 +
138 140 /**
139   - * Discussion/Note Actions
  141 + * Actions for Discussions/Notes
140 142 */
  143 +
141 144 .discussion,
142 145 .note {
143 146 &.note:hover {
... ... @@ -174,33 +177,12 @@ ul.notes {
174 177 top: 0;
175 178 }
176 179  
177   -// TODO: start cleaup
178   -.issue_notes,
179   -.wiki_notes {
180   - .note_content {
181   - float: left;
182   - width: 400px;
183   - }
184   -}
185   -
186   -/* for loading indicator */
187   -.notes-status {
188   - margin: 18px;
189   -}
190 180  
191 181  
192   -p.notify_controls input{
193   - margin: 5px;
194   -}
195   -
196   -p.notify_controls span{
197   - font-weight: 700;
198   -}
199   -// TODO: end cleaup
200   -
201 182 /**
202   - * line note button on the side of diffs
  183 + * Line note button on the side of diffs
203 184 */
  185 +
204 186 .diff_file tr.line_holder {
205 187 .add-diff-note {
206 188 background: url("diff_note_add.png") no-repeat left 0;
... ... @@ -231,8 +213,10 @@ p.notify_controls span{
231 213 }
232 214 }
233 215  
  216 +
  217 +
234 218 /**
235   - * Note Forms
  219 + * Note Form
236 220 */
237 221  
238 222 .comment-btn,
... ... @@ -257,6 +241,46 @@ p.notify_controls span{
257 241 line-height: 32px;
258 242 padding-right: 15px;
259 243 }
  244 +
  245 + // TODO: start cleanup
  246 + .attachments {
  247 + position: relative;
  248 + width: 350px;
  249 + height: 50px;
  250 + overflow: hidden;
  251 + margin:0 0 5px !important;
  252 +
  253 + .input_file {
  254 + .file_name {
  255 + line-height: 30px;
  256 + width: 240px;
  257 + height: 28px;
  258 + overflow: hidden;
  259 + }
  260 + .file_upload {
  261 + position: absolute;
  262 + right:14px;
  263 + top:7px;
  264 + }
  265 + .input-file {
  266 + width: 260px;
  267 + height: 41px;
  268 + float: right;
  269 + }
  270 + }
  271 + }
  272 + .input-file {
  273 + font: 500px monospace;
  274 + opacity:0;
  275 + filter: alpha(opacity=0);
  276 + position: absolute;
  277 + z-index: 1;
  278 + top:0;
  279 + right:0;
  280 + padding:0;
  281 + margin: 0;
  282 + }
  283 + // TODO: end cleanup
260 284 }
261 285 .note_text_and_preview {
262 286 // makes the "absolute" position for links relative to this
... ... @@ -282,44 +306,9 @@ p.notify_controls span{
282 306 width: 98.6%;
283 307 }
284 308 }
  309 +}
285 310  
286   - // TODO: start cleanup
287   - .attachments {
288   - position: relative;
289   - width: 350px;
290   - height: 50px;
291   - overflow: hidden;
292   - margin:0 0 5px !important;
293   -
294   - .input_file {
295   - .file_name {
296   - line-height: 30px;
297   - width: 240px;
298   - height: 28px;
299   - overflow: hidden;
300   - }
301   - .file_upload {
302   - position: absolute;
303   - right:14px;
304   - top:7px;
305   - }
306   - .input-file {
307   - width: 260px;
308   - height: 41px;
309   - float: right;
310   - }
311   - }
312   - }
313   - .input-file {
314   - font: 500px monospace;
315   - opacity:0;
316   - filter: alpha(opacity=0);
317   - position: absolute;
318   - z-index: 1;
319   - top:0;
320   - right:0;
321   - padding:0;
322   - margin: 0;
323   - }
324   - // TODO: end cleanup
  311 +/* loading indicator */
  312 +.notes-busy {
  313 + margin: 18px;
325 314 }
... ...
app/views/issues/show.html.haml
... ... @@ -61,4 +61,4 @@
61 61 = markdown @issue.description
62 62  
63 63  
64   -.issue_notes.voting_notes#notes= render "notes/notes_with_form"
  64 +.voting_notes#notes= render "notes/notes_with_form"
... ...
app/views/notes/_form.html.haml
... ... @@ -6,7 +6,7 @@
6 6 = f.hidden_field :noteable_type
7 7  
8 8 .note_text_and_preview.js-toggler-container
9   - %a.js-note-preview-button.js-toggler-target.turn-on{ href: "javascript:;", data: {title: "Preview", url: preview_project_notes_path(@project)} }
  9 + %a.js-note-preview-button.js-toggler-target.turn-off{ href: "javascript:;", data: {title: "Preview", url: preview_project_notes_path(@project)} }
10 10 %i.icon-eye-open
11 11 %a.js-note-edit-button.js-toggler-target.turn-off{ href: "javascript:;", data: {title: "Edit"} }
12 12 %i.icon-edit
... ... @@ -37,7 +37,7 @@
37 37 = check_box_tag :notify, 1, !@note.for_commit?
38 38 %span Project team
39 39  
40   - - if @note.notify_only_author?(current_user)
  40 + - if @note.notify_only_author?(current_user) # FIXME: put in JS
41 41 = label_tag :notify_author do
42 42 = check_box_tag :notify_author, 1 , !@note.for_commit?
43 43 %span Commit author
... ...