Commit 13e72f5a6ffa7332488ad495610971e540ea3fd1

Authored by randx
2 parents 2e0e63e1 3c5a3fe0

Merge branch 'NARKOZ-front-end'

app/assets/javascripts/gfm_auto_complete.js.coffee
  1 +# Creates the variables for setting up GFM auto-completion
1 2
2 -###  
3 - Creates the variables for setting up GFM auto-completion  
4 -###  
5 # Emoji 3 # Emoji
6 -window.autocompleteEmojiData = [];  
7 -window.autocompleteEmojiTemplate = "<li data-value='${insert}'>${name} <img alt='${name}' height='20' src='${image}' width='20' /></li>"; 4 +data = []
  5 +template = "<li data-value='${insert}'>${name} <img alt='${name}' height='20' src='${image}' width='20' /></li>"
  6 +window.autocompleteEmoji = {data, template}
8 7
9 # Team Members 8 # Team Members
10 -window.autocompleteMembersUrl = "";  
11 -window.autocompleteMembersParams =  
12 - private_token: ""  
13 - page: 1  
14 -window.autocompleteMembersData = []; 9 +url = '';
  10 +params = {private_token: '', page: 1}
  11 +window.autocompleteMembers = {data, url, params}
15 12
  13 +# Add GFM auto-completion to all input fields, that accept GFM input.
  14 +window.setupGfmAutoComplete = ->
  15 + $input = $('.js-gfm-input')
16 16
  17 + # Emoji
  18 + $input.atWho ':',
  19 + data: autocompleteEmoji.data,
  20 + tpl: autocompleteEmoji.template
17 21
18 -###  
19 - Add GFM auto-completion to all input fields, that accept GFM input.  
20 -###  
21 -window.setupGfmAutoComplete = ->  
22 - ###  
23 - Emoji  
24 - ###  
25 - $('.gfm-input').atWho ':',  
26 - data: autocompleteEmojiData,  
27 - tpl: autocompleteEmojiTemplate  
28 -  
29 - ###  
30 - Team Members  
31 - ###  
32 - $('.gfm-input').atWho '@', (query, callback) -> 22 + # Team Members
  23 + $input.atWho '@', (query, callback) ->
33 (getMoreMembers = -> 24 (getMoreMembers = ->
34 - $.getJSON(autocompleteMembersUrl, autocompleteMembersParams)  
35 - .success (members) ->  
36 - # pick the data we need  
37 - newMembersData = $.map members, (m) -> m.name  
38 -  
39 - # add the new page of data to the rest  
40 - $.merge autocompleteMembersData, newMembersData  
41 -  
42 - # show the pop-up with a copy of the current data  
43 - callback autocompleteMembersData[..]  
44 -  
45 - # are we past the last page?  
46 - if newMembersData.length == 0  
47 - # set static data and stop callbacks  
48 - $('.gfm-input').atWho '@',  
49 - data: autocompleteMembersData  
50 - callback: null  
51 - else  
52 - # get next page  
53 - getMoreMembers() 25 + $.getJSON(autocompleteMembers.url, autocompleteMembers.params).success (members) ->
  26 + # pick the data we need
  27 + newMembersData = $.map members, (m) -> m.name
  28 +
  29 + # add the new page of data to the rest
  30 + $.merge autocompleteMembers.data, newMembersData
  31 +
  32 + # show the pop-up with a copy of the current data
  33 + callback autocompleteMembers.data[..]
  34 +
  35 + # are we past the last page?
  36 + if newMembersData.length is 0
  37 + # set static data and stop callbacks
  38 + $input.atWho '@',
  39 + data: autocompleteMembers.data
  40 + callback: null
  41 + else
  42 + # get next page
  43 + getMoreMembers()
54 44
55 # so the next request gets the next page 45 # so the next request gets the next page
56 - autocompleteMembersParams.page += 1;  
57 - ).call();  
58 \ No newline at end of file 46 \ No newline at end of file
  47 + autocompleteMembers.params.page += 1
  48 + ).call()
app/assets/javascripts/graph.js.coffee
@@ -1,10 +0,0 @@ @@ -1,10 +0,0 @@
1 -initGraphNav = ->  
2 - $('.graph svg').css 'position', 'relative'  
3 -  
4 - $('body').bind 'keyup', (e) ->  
5 - if e.keyCode is 37 # left  
6 - $('.graph svg').animate left: '+=400'  
7 - else if e.keyCode is 39 # right  
8 - $('.graph svg').animate left: '-=400'  
9 -  
10 -window.initGraphNav = initGraphNav  
app/assets/javascripts/loader.js.coffee
@@ -1,5 +0,0 @@ @@ -1,5 +0,0 @@
1 -Loader =  
2 - html: (width) ->  
3 - $('<img>').attr src: '/assets/ajax-loader.gif', width: width  
4 -  
5 -window.Loader = Loader  
app/assets/javascripts/main.js.coffee
@@ -7,7 +7,7 @@ window.slugify = (text) -&gt; @@ -7,7 +7,7 @@ window.slugify = (text) -&gt;
7 window.ajaxGet = (url) -> 7 window.ajaxGet = (url) ->
8 $.ajax({type: "GET", url: url, dataType: "script"}) 8 $.ajax({type: "GET", url: url, dataType: "script"})
9 9
10 - # Disable button if text field is empty 10 +# Disable button if text field is empty
11 window.disableButtonIfEmptyField = (field_selector, button_selector) -> 11 window.disableButtonIfEmptyField = (field_selector, button_selector) ->
12 field = $(field_selector) 12 field = $(field_selector)
13 closest_submit = field.closest("form").find(button_selector) 13 closest_submit = field.closest("form").find(button_selector)
@@ -15,21 +15,21 @@ window.disableButtonIfEmptyField = (field_selector, button_selector) -&gt; @@ -15,21 +15,21 @@ window.disableButtonIfEmptyField = (field_selector, button_selector) -&gt;
15 closest_submit.disable() if field.val() is "" 15 closest_submit.disable() if field.val() is ""
16 16
17 field.on "keyup", -> 17 field.on "keyup", ->
18 - if $(this).val() is "" 18 + if $(@).val() is ""
19 closest_submit.disable() 19 closest_submit.disable()
20 else 20 else
21 closest_submit.enable() 21 closest_submit.enable()
22 22
23 $ -> 23 $ ->
24 # Click a .one_click_select field, select the contents 24 # Click a .one_click_select field, select the contents
25 - $(".one_click_select").live 'click', -> $(this).select() 25 + $(".one_click_select").on 'click', -> $(@).select()
26 26
27 # Initialize chosen selects 27 # Initialize chosen selects
28 $('select.chosen').chosen() 28 $('select.chosen').chosen()
29 29
30 # Disable form buttons while a form is submitting 30 # Disable form buttons while a form is submitting
31 $('body').on 'ajax:complete, ajax:beforeSend, submit', 'form', (e) -> 31 $('body').on 'ajax:complete, ajax:beforeSend, submit', 'form', (e) ->
32 - buttons = $('[type="submit"]', this) 32 + buttons = $('[type="submit"]', @)
33 33
34 switch e.type 34 switch e.type
35 when 'ajax:beforeSend', 'submit' 35 when 'ajax:beforeSend', 'submit'
@@ -38,7 +38,7 @@ $ -&gt; @@ -38,7 +38,7 @@ $ -&gt;
38 buttons.enable() 38 buttons.enable()
39 39
40 # Show/Hide the profile menu when hovering the account box 40 # Show/Hide the profile menu when hovering the account box
41 - $('.account-box').hover -> $(this).toggleClass('hover') 41 + $('.account-box').hover -> $(@).toggleClass('hover')
42 42
43 # Focus search field by pressing 's' key 43 # Focus search field by pressing 's' key
44 $(document).keypress (e) -> 44 $(document).keypress (e) ->
@@ -52,22 +52,22 @@ $ -&gt; @@ -52,22 +52,22 @@ $ -&gt;
52 52
53 # Commit show suppressed diff 53 # Commit show suppressed diff
54 $(".supp_diff_link").bind "click", -> 54 $(".supp_diff_link").bind "click", ->
55 - $(this).next('table').show()  
56 - $(this).remove() 55 + $(@).next('table').show()
  56 + $(@).remove()
57 57
58 # Note markdown preview 58 # Note markdown preview
59 $(document).on 'click', '#preview-link', (e) -> 59 $(document).on 'click', '#preview-link', (e) ->
60 - $('#preview-note').text('Loading...') 60 + $('#preview-note').text 'Loading...'
61 61
62 - previewLinkText = if $(this).text() == 'Preview' then 'Edit' else 'Preview'  
63 - $(this).text(previewLinkText) 62 + previewLinkText = if $(@).text() is 'Preview' then 'Edit' else 'Preview'
  63 + $(@).text previewLinkText
64 64
65 note = $('#note_note').val() 65 note = $('#note_note').val()
66 66
67 - if note.trim().length == 0  
68 - $('#preview-note').text("Nothing to preview.") 67 + if note.trim().length is 0
  68 + $('#preview-note').text 'Nothing to preview.'
69 else 69 else
70 - $.post $(this).attr('href'), {note: note}, (data) -> 70 + $.post $(@).attr('href'), {note: note}, (data) ->
71 $('#preview-note').html(data) 71 $('#preview-note').html(data)
72 72
73 $('#preview-note, #note_note').toggle() 73 $('#preview-note, #note_note').toggle()
@@ -79,14 +79,14 @@ $ -&gt; @@ -79,14 +79,14 @@ $ -&gt;
79 $.fn.extend chosen: (options) -> 79 $.fn.extend chosen: (options) ->
80 default_options = search_contains: "true" 80 default_options = search_contains: "true"
81 $.extend default_options, options 81 $.extend default_options, options
82 - _chosen.apply this, [default_options] 82 + _chosen.apply @, [default_options]
83 83
84 # Disable an element and add the 'disabled' Bootstrap class 84 # Disable an element and add the 'disabled' Bootstrap class
85 $.fn.extend disable: -> 85 $.fn.extend disable: ->
86 - $(this).attr('disabled', 'disabled').addClass('disabled') 86 + $(@).attr('disabled', 'disabled').addClass('disabled')
87 87
88 # Enable an element and remove the 'disabled' Bootstrap class 88 # Enable an element and remove the 'disabled' Bootstrap class
89 $.fn.extend enable: -> 89 $.fn.extend enable: ->
90 - $(this).removeAttr('disabled').removeClass('disabled') 90 + $(@).removeAttr('disabled').removeClass('disabled')
91 91
92 )(jQuery) 92 )(jQuery)
app/assets/javascripts/projects.js.coffee
@@ -22,3 +22,10 @@ $ -&gt; @@ -22,3 +22,10 @@ $ -&gt;
22 # Ref switcher 22 # Ref switcher
23 $('.project-refs-select').on 'change', -> 23 $('.project-refs-select').on 'change', ->
24 $(@).parents('form').submit() 24 $(@).parents('form').submit()
  25 +
  26 +class @GraphNav
  27 + @init: ->
  28 + $('.graph svg').css 'position', 'relative'
  29 + $('body').bind 'keyup', (e) ->
  30 + $('.graph svg').animate(left: '+=400') if e.keyCode is 37 # left
  31 + $('.graph svg').animate(left: '-=400') if e.keyCode is 39 # right
app/assets/javascripts/snippets.js.coffee
@@ -1,6 +0,0 @@ @@ -1,6 +0,0 @@
1 -$ ->  
2 - $('#snippets-table .snippet').live 'click', (e) ->  
3 - if e.target.nodeName isnt 'A' and e.target.nodeName isnt 'INPUT'  
4 - location.href = $(@).attr 'url'  
5 - e.stopPropagation()  
6 - false  
app/views/issues/_form.html.haml
@@ -12,7 +12,7 @@ @@ -12,7 +12,7 @@
12 = f.label :title do 12 = f.label :title do
13 %strong= "Subject *" 13 %strong= "Subject *"
14 .input 14 .input
15 - = f.text_field :title, maxlength: 255, class: "xxlarge gfm-input", autofocus: true 15 + = f.text_field :title, maxlength: 255, class: "xxlarge js-gfm-input", autofocus: true
16 .issue_middle_block 16 .issue_middle_block
17 .issue_assignee 17 .issue_assignee
18 = f.label :assignee_id do 18 = f.label :assignee_id do
@@ -37,7 +37,7 @@ @@ -37,7 +37,7 @@
37 .clearfix 37 .clearfix
38 = f.label :description, "Details" 38 = f.label :description, "Details"
39 .input 39 .input
40 - = f.text_area :description, maxlength: 2000, class: "xxlarge gfm-input", rows: 14 40 + = f.text_area :description, maxlength: 2000, class: "xxlarge js-gfm-input", rows: 14
41 %p.hint Issues are parsed with #{link_to "GitLab Flavored Markdown", help_markdown_path, target: '_blank'}. 41 %p.hint Issues are parsed with #{link_to "GitLab Flavored Markdown", help_markdown_path, target: '_blank'}.
42 42
43 43
app/views/layouts/_init_auto_complete.html.haml
1 :javascript 1 :javascript
2 $(function() { 2 $(function() {
3 - autocompleteMembersUrl = "#{ "/api/v2/projects/#{@project.code}/members" if @project }";  
4 - autocompleteMembersParams.private_token = "#{current_user.authentication_token}"; 3 + autocompleteMembers.url = "#{ "/api/v2/projects/#{@project.code}/members" if @project }";
  4 + autocompleteMembers.params.private_token = "#{current_user.private_token}";
5 5
6 - autocompleteEmojiData = #{raw emoji_autocomplete_source}; 6 + autocompleteEmoji.data = #{raw emoji_autocomplete_source};
7 // convert the list so that the items have the right format for completion 7 // convert the list so that the items have the right format for completion
8 - autocompleteEmojiData = $.map(autocompleteEmojiData, function(value) { 8 + autocompleteEmoji.data = $.map(autocompleteEmoji.data, function(value) {
9 return { 9 return {
10 name: value, 10 name: value,
11 insert: value+':', 11 insert: value+':',
app/views/merge_requests/_form.html.haml
@@ -30,12 +30,12 @@ @@ -30,12 +30,12 @@
30 .clearfix 30 .clearfix
31 .main_box 31 .main_box
32 .top_box_content 32 .top_box_content
33 - = f.label :title do 33 + = f.label :title do
34 %strong= "Title *" 34 %strong= "Title *"
35 - .input= f.text_field :title, class: "input-xxlarge pad gfm-input", maxlength: 255, rows: 5 35 + .input= f.text_field :title, class: "input-xxlarge pad js-gfm-input", maxlength: 255, rows: 5
36 .middle_box_content 36 .middle_box_content
37 - = f.label :assignee_id do  
38 - %i.icon-user 37 + = f.label :assignee_id do
  38 + %i.icon-user
39 Assign to 39 Assign to
40 .input= f.select(:assignee_id, @project.users.all.collect {|p| [ p.name, p.id ] }, { include_blank: "Select user" }, {class: 'chosen span3'}) 40 .input= f.select(:assignee_id, @project.users.all.collect {|p| [ p.name, p.id ] }, { include_blank: "Select user" }, {class: 'chosen span3'})
41 41
app/views/notes/_common_form.html.haml
@@ -8,7 +8,7 @@ @@ -8,7 +8,7 @@
8 8
9 = f.hidden_field :noteable_id 9 = f.hidden_field :noteable_id
10 = f.hidden_field :noteable_type 10 = f.hidden_field :noteable_type
11 - = f.text_area :note, size: 255, class: 'note-text gfm-input' 11 + = f.text_area :note, size: 255, class: 'note-text js-gfm-input'
12 #preview-note.preview_note.hide 12 #preview-note.preview_note.hide
13 .hint 13 .hint
14 .right Comments are parsed with #{link_to "GitLab Flavored Markdown", help_markdown_path, target: '_blank'}. 14 .right Comments are parsed with #{link_to "GitLab Flavored Markdown", help_markdown_path, target: '_blank'}.
app/views/notes/_per_line_form.html.haml
@@ -13,7 +13,7 @@ @@ -13,7 +13,7 @@
13 = f.hidden_field :noteable_id 13 = f.hidden_field :noteable_id
14 = f.hidden_field :noteable_type 14 = f.hidden_field :noteable_type
15 = f.hidden_field :line_code 15 = f.hidden_field :line_code
16 - = f.text_area :note, size: 255, class: 'line-note-text gfm-input' 16 + = f.text_area :note, size: 255, class: 'line-note-text js-gfm-input'
17 .note_actions 17 .note_actions
18 .buttons 18 .buttons
19 = f.submit 'Add note', class: "btn save-btn submit_note submit_inline_note", id: "submit_note" 19 = f.submit 'Add note', class: "btn save-btn submit_note submit_inline_note", id: "submit_note"
app/views/projects/graph.html.haml
@@ -10,5 +10,5 @@ @@ -10,5 +10,5 @@
10 initGraph(); 10 initGraph();
11 $(function(){ 11 $(function(){
12 branchGraph($("#holder")[0]); 12 branchGraph($("#holder")[0]);
13 - initGraphNav(); 13 + GraphNav.init();
14 }); 14 });
app/views/wikis/_form.html.haml
@@ -21,7 +21,7 @@ @@ -21,7 +21,7 @@
21 21
22 .bottom_box_content 22 .bottom_box_content
23 = f.label :content 23 = f.label :content
24 - .input= f.text_area :content, class: 'span8 gfm-input' 24 + .input= f.text_area :content, class: 'span8 js-gfm-input'
25 .actions 25 .actions
26 = f.submit 'Save', class: "save-btn btn" 26 = f.submit 'Save', class: "save-btn btn"
27 = link_to "Cancel", project_wiki_path(@project, :index), class: "btn cancel-btn" 27 = link_to "Cancel", project_wiki_path(@project, :index), class: "btn cancel-btn"
spec/requests/api/projects_spec.rb
@@ -239,7 +239,7 @@ describe Gitlab::API do @@ -239,7 +239,7 @@ describe Gitlab::API do
239 end 239 end
240 240
241 describe "GET /projects/:id/snippets" do 241 describe "GET /projects/:id/snippets" do
242 - it "should return a project snippet" do 242 + it "should return an array of project snippets" do
243 get api("/projects/#{project.code}/snippets", user) 243 get api("/projects/#{project.code}/snippets", user)
244 response.status.should == 200 244 response.status.should == 200
245 json_response.should be_an Array 245 json_response.should be_an Array