From 12b3a203228cef5946f1c8dc740ba739b1aed797 Mon Sep 17 00:00:00 2001 From: Heinrich Lee Yu Date: Fri, 21 Dec 2018 16:49:44 +0800 Subject: CE backport for `reference` in gfm_autocomplete Currently not used by any CE code --- app/assets/javascripts/gfm_auto_complete.js | 24 +++++++++++-------- spec/javascripts/gfm_auto_complete_spec.js | 36 +++++++++++++++++++++++++++++ 2 files changed, 51 insertions(+), 9 deletions(-) diff --git a/app/assets/javascripts/gfm_auto_complete.js b/app/assets/javascripts/gfm_auto_complete.js index 8178821be3d..570d3b712e0 100644 --- a/app/assets/javascripts/gfm_auto_complete.js +++ b/app/assets/javascripts/gfm_auto_complete.js @@ -221,13 +221,13 @@ class GfmAutoComplete { displayTpl(value) { let tmpl = GfmAutoComplete.Loading.template; if (value.title != null) { - tmpl = GfmAutoComplete.Issues.templateFunction(value.id, value.title); + tmpl = GfmAutoComplete.Issues.templateFunction(value); } return tmpl; }, data: GfmAutoComplete.defaultLoadingData, - // eslint-disable-next-line no-template-curly-in-string - insertTpl: '${atwho-at}${id}', + insertTpl: GfmAutoComplete.Issues.insertTemplateFunction, + skipSpecialCharacterTest: true, callbacks: { ...this.getDefaultCallbacks(), beforeSave(issues) { @@ -238,6 +238,7 @@ class GfmAutoComplete { return { id: i.iid, title: sanitize(i.title), + reference: i.reference, search: `${i.iid} ${i.title}`, }; }); @@ -287,13 +288,13 @@ class GfmAutoComplete { displayTpl(value) { let tmpl = GfmAutoComplete.Loading.template; if (value.title != null) { - tmpl = GfmAutoComplete.Issues.templateFunction(value.id, value.title); + tmpl = GfmAutoComplete.Issues.templateFunction(value); } return tmpl; }, data: GfmAutoComplete.defaultLoadingData, - // eslint-disable-next-line no-template-curly-in-string - insertTpl: '${atwho-at}${id}', + insertTpl: GfmAutoComplete.Issues.insertTemplateFunction, + skipSpecialCharacterTest: true, callbacks: { ...this.getDefaultCallbacks(), beforeSave(merges) { @@ -304,6 +305,7 @@ class GfmAutoComplete { return { id: m.iid, title: sanitize(m.title), + reference: m.reference, search: `${m.iid} ${m.title}`, }; }); @@ -397,7 +399,7 @@ class GfmAutoComplete { displayTpl(value) { let tmpl = GfmAutoComplete.Loading.template; if (value.title != null) { - tmpl = GfmAutoComplete.Issues.templateFunction(value.id, value.title); + tmpl = GfmAutoComplete.Issues.templateFunction(value); } return tmpl; }, @@ -596,8 +598,12 @@ GfmAutoComplete.Labels = { }; // Issues, MergeRequests and Snippets GfmAutoComplete.Issues = { - templateFunction(id, title) { - return `
  • ${id} ${_.escape(title)}
  • `; + insertTemplateFunction(value) { + // eslint-disable-next-line no-template-curly-in-string + return value.reference || '${atwho-at}${id}'; + }, + templateFunction({ id, title, reference }) { + return `
  • ${reference || id} ${_.escape(title)}
  • `; }, }; // Milestones diff --git a/spec/javascripts/gfm_auto_complete_spec.js b/spec/javascripts/gfm_auto_complete_spec.js index 6f414c8ccf1..a14031f43ed 100644 --- a/spec/javascripts/gfm_auto_complete_spec.js +++ b/spec/javascripts/gfm_auto_complete_spec.js @@ -205,4 +205,40 @@ describe('GfmAutoComplete', function() { expect(GfmAutoComplete.isLoading({ title: 'Foo' })).toBe(false); }); }); + + describe('Issues.insertTemplateFunction', function() { + it('should return default template', function() { + expect(GfmAutoComplete.Issues.insertTemplateFunction({ id: 5, title: 'Some Issue' })).toBe( + '${atwho-at}${id}', // eslint-disable-line no-template-curly-in-string + ); + }); + + it('should return reference when reference is set', function() { + expect( + GfmAutoComplete.Issues.insertTemplateFunction({ + id: 5, + title: 'Some Issue', + reference: 'grp/proj#5', + }), + ).toBe('grp/proj#5'); + }); + }); + + describe('Issues.templateFunction', function() { + it('should return html with id and title', function() { + expect(GfmAutoComplete.Issues.templateFunction({ id: 5, title: 'Some Issue' })).toBe( + '
  • 5 Some Issue
  • ', + ); + }); + + it('should replace id with reference if reference is set', function() { + expect( + GfmAutoComplete.Issues.templateFunction({ + id: 5, + title: 'Some Issue', + reference: 'grp/proj#5', + }), + ).toBe('
  • grp/proj#5 Some Issue
  • '); + }); + }); }); -- cgit v1.2.1