Commit 45fa7fd4 authored by Phil Hughes's avatar Phil Hughes

Correctly checks for character before GFM input char

It must not be letter or number to work
parent 94e0ca00
...@@ -43,6 +43,17 @@ GitLab.GfmAutoComplete = ...@@ -43,6 +43,17 @@ GitLab.GfmAutoComplete =
@at @at
else else
value value
matcher: (flag, subtext, should_startWithSpace) ->
# escape RegExp
flag = flag.replace(/[\-\[\]\/\{\}\(\)\*\+\?\.\\\^\$\|]/g, "\\$&")
# À
_a = decodeURI("%C3%80")
# ÿ
_y = decodeURI("%C3%BF")
regexp = new RegExp "(?:\\B|\\W|\\s)#{flag}([A-Za-z#{_a}-#{_y}0-9_\'\.\+\-]*)|([^\\x00-\\xff]*)$", 'gi'
match = regexp.exec subtext
if match then match[2] || match[1] else null
# Add GFM auto-completion to all input fields, that accept GFM input. # Add GFM auto-completion to all input fields, that accept GFM input.
setup: (wrap) -> setup: (wrap) ->
...@@ -89,6 +100,7 @@ GitLab.GfmAutoComplete = ...@@ -89,6 +100,7 @@ GitLab.GfmAutoComplete =
sorter: @DefaultOptions.sorter sorter: @DefaultOptions.sorter
filter: @DefaultOptions.filter filter: @DefaultOptions.filter
beforeInsert: @DefaultOptions.beforeInsert beforeInsert: @DefaultOptions.beforeInsert
matcher: @DefaultOptions.matcher
# Team Members # Team Members
@input.atwho @input.atwho
...@@ -106,6 +118,7 @@ GitLab.GfmAutoComplete = ...@@ -106,6 +118,7 @@ GitLab.GfmAutoComplete =
sorter: @DefaultOptions.sorter sorter: @DefaultOptions.sorter
filter: @DefaultOptions.filter filter: @DefaultOptions.filter
beforeInsert: @DefaultOptions.beforeInsert beforeInsert: @DefaultOptions.beforeInsert
matcher: @DefaultOptions.matcher
beforeSave: (members) -> beforeSave: (members) ->
$.map members, (m) -> $.map members, (m) ->
return m if not m.username? return m if not m.username?
...@@ -133,6 +146,7 @@ GitLab.GfmAutoComplete = ...@@ -133,6 +146,7 @@ GitLab.GfmAutoComplete =
sorter: @DefaultOptions.sorter sorter: @DefaultOptions.sorter
filter: @DefaultOptions.filter filter: @DefaultOptions.filter
beforeInsert: @DefaultOptions.beforeInsert beforeInsert: @DefaultOptions.beforeInsert
matcher: @DefaultOptions.matcher
beforeSave: (issues) -> beforeSave: (issues) ->
$.map issues, (i) -> $.map issues, (i) ->
return i if not i.title? return i if not i.title?
...@@ -154,6 +168,7 @@ GitLab.GfmAutoComplete = ...@@ -154,6 +168,7 @@ GitLab.GfmAutoComplete =
data: ['loading'] data: ['loading']
startWithSpace: false startWithSpace: false
callbacks: callbacks:
matcher: @DefaultOptions.matcher
beforeSave: (milestones) -> beforeSave: (milestones) ->
$.map milestones, (m) -> $.map milestones, (m) ->
return m if not m.title? return m if not m.title?
...@@ -178,6 +193,7 @@ GitLab.GfmAutoComplete = ...@@ -178,6 +193,7 @@ GitLab.GfmAutoComplete =
sorter: @DefaultOptions.sorter sorter: @DefaultOptions.sorter
filter: @DefaultOptions.filter filter: @DefaultOptions.filter
beforeInsert: @DefaultOptions.beforeInsert beforeInsert: @DefaultOptions.beforeInsert
matcher: @DefaultOptions.matcher
beforeSave: (merges) -> beforeSave: (merges) ->
$.map merges, (m) -> $.map merges, (m) ->
return m if not m.title? return m if not m.title?
...@@ -194,6 +210,7 @@ GitLab.GfmAutoComplete = ...@@ -194,6 +210,7 @@ GitLab.GfmAutoComplete =
insertTpl: '${atwho-at}${title}' insertTpl: '${atwho-at}${title}'
startWithSpace: false startWithSpace: false
callbacks: callbacks:
matcher: @DefaultOptions.matcher
beforeSave: (merges) -> beforeSave: (merges) ->
sanitizeLabelTitle = (title)-> sanitizeLabelTitle = (title)->
if /[\w\?&]+\s+[\w\?&]+/g.test(title) if /[\w\?&]+\s+[\w\?&]+/g.test(title)
......
...@@ -9,16 +9,34 @@ feature 'GFM autocomplete', feature: true, js: true do ...@@ -9,16 +9,34 @@ feature 'GFM autocomplete', feature: true, js: true do
project.team << [user, :master] project.team << [user, :master]
login_as(user) login_as(user)
visit namespace_project_issue_path(project.namespace, project, issue) visit namespace_project_issue_path(project.namespace, project, issue)
end
it 'opens autocomplete menu when doesnt starts with space' do
sleep 2 sleep 2
end
it 'opens autocomplete menu when field starts with text' do
page.within '.timeline-content-form' do page.within '.timeline-content-form' do
find('#note_note').native.send_keys('testing') find('#note_note').native.send_keys('')
find('#note_note').native.send_keys('@') find('#note_note').native.send_keys('@')
end end
expect(page).to have_selector('.atwho-view') expect(page).to have_selector('.atwho-view')
end end
it 'opens autocomplete menu when field is prefixed with non-text character' do
page.within '.timeline-content-form' do
find('#note_note').native.send_keys('')
find('#note_note').native.send_keys('@')
end
expect(page).to have_selector('.atwho-view')
end
it 'doesnt open autocomplete menu character is prefixed with text' do
page.within '.timeline-content-form' do
find('#note_note').native.send_keys('testing')
find('#note_note').native.send_keys('@')
end
expect(page).not_to have_selector('.atwho-view')
end
end end
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment