@@ -6,14 +6,14 @@ var userFieldId = "#user";
6
6
var secretFieldId = "#secret" ;
7
7
8
8
var projectFieldId = "#project" ;
9
- var issueTypeFieldId = "#issueType" ;
10
9
var closedStatusFieldId = "#closedStatus" ;
11
10
var reopenedStatusFieldId = "#reopenedStatus" ;
12
11
var priorityFieldId = "#priority" ;
13
12
14
13
var webhookUrlFieldId = "#webhookUrl" ;
15
14
var urlCodeId = "urlCode" ;
16
15
var key = "webhook" ;
16
+ var lgtmIssueTypeId = null ;
17
17
18
18
( function ( ) { // this closure helps us keep our variables to ourselves.
19
19
// This pattern is known as an "iife" - immediately invoked function expression
@@ -23,7 +23,6 @@ var key = "webhook";
23
23
24
24
// Init select2 fields
25
25
AJS . $ ( projectFieldId ) . auiSelect2 ( ) ;
26
- AJS . $ ( issueTypeFieldId ) . auiSelect2 ( ) ;
27
26
AJS . $ ( closedStatusFieldId ) . auiSelect2 ( ) ;
28
27
AJS . $ ( reopenedStatusFieldId ) . auiSelect2 ( ) ;
29
28
AJS . $ ( priorityFieldId ) . auiSelect2 ( ) ;
@@ -78,69 +77,77 @@ function loadProjects() {
78
77
}
79
78
80
79
function handleProjectChange ( event ) {
81
- clearSelect2Field ( issueTypeFieldId ) ;
80
+ lgtmIssueTypeId = null ;
82
81
clearSelect2Field ( priorityFieldId ) ;
83
82
clearSelect2Field ( closedStatusFieldId ) ;
84
83
clearSelect2Field ( reopenedStatusFieldId ) ;
85
84
86
85
if ( AJS . $ ( projectFieldId ) . select2 ( 'val' ) !== "none" ) {
87
- loadIssueTypes ( AJS . $ ( projectFieldId ) . select2 ( 'val' ) ) ;
86
+ loadIssueType ( AJS . $ ( projectFieldId ) . select2 ( 'val' ) , AJS . $ ( projectFieldId ) . select2 ( 'data' ) . text ) ;
88
87
loadPriorities ( AJS . $ ( projectFieldId ) . select2 ( 'val' ) ) ;
89
88
}
90
89
}
91
-
92
- function loadIssueTypes ( projectKey ) {
90
+
91
+ function loadIssueType ( projectKey , projectName ) {
93
92
$ . ajax ( {
94
93
url : AJS . contextPath ( ) + "/rest/api/2/project/" + projectKey + "/statuses"
95
94
} ) . done (
96
95
function ( issueTypes ) {
97
- var fieldContent = issueTypes . map ( function ( issueType ) {
98
- return {
99
- value : issueType . id ,
100
- text : issueType . name
101
- }
96
+ var lgtmIssueType = issueTypes . find ( function ( element ) {
97
+ return element . name . toLowerCase ( ) === "LGTM alert" . toLowerCase ( ) ;
102
98
} ) ;
103
- fieldContent . unshift ( { value : "none" , text : "" } ) ;
104
99
105
- renderSelect2Field ( issueTypeFieldId , fieldContent ) ;
106
- AJS . $ ( issueTypeFieldId ) . on ( 'change' , function ( e ) {
107
- handleIssueTypeChange ( issueTypes ) ;
108
- } ) ;
109
-
110
- if ( config !== null ) {
111
- changeSelect2Value ( issueTypeFieldId , config . issueTypeId ) ;
100
+ var children = AJS . $ ( "#message-context" ) . children ( ) ;
101
+
102
+ for ( var i = 0 ; i < children . length ; i ++ ) {
103
+ children [ i ] . remove ( ) ;
104
+ }
105
+
106
+ if ( lgtmIssueType === undefined ) {
107
+ AJS . messages . error ( "#message-context" , {
108
+ title : 'The "LGTM alert" issue type is not included in the issue type scheme of '
109
+ + projectName + '.' ,
110
+ closeable : true ,
111
+ fadeout : false
112
+ } ) ;
113
+
114
+ var messageContent = document . createElement ( 'span' ) ;
115
+ messageContent . textContent = 'It can be added using the "Edit issue types" action in '
116
+ + projectName + "'s " ;
117
+
118
+ var link = document . createElement ( 'a' ) ;
119
+ var configUrl = AJS . params . baseURL + '/plugins/servlet/project-config/' + encodeURIComponent ( projectKey ) + '/issuetypes' ;
120
+ link . href = configUrl ;
121
+ link . target = "_blank" ;
122
+ link . textContent = "issue type settings" ;
123
+
124
+ AJS . $ ( "#message-context" ) . children ( ) [ 0 ] . append ( messageContent ) ;
125
+ AJS . $ ( "#message-context" ) . children ( ) [ 0 ] . append ( link ) ;
126
+ } else {
127
+ lgtmIssueTypeId = lgtmIssueType . id ;
128
+ loadStatuses ( lgtmIssueType ) ;
112
129
}
113
130
} ) ;
114
131
} ;
115
132
116
- function handleIssueTypeChange ( issueTypes ) {
117
- clearSelect2Field ( closedStatusFieldId ) ;
118
- clearSelect2Field ( reopenedStatusFieldId ) ;
133
+ function loadStatuses ( lgtmIssueType ) {
134
+ var statuses = lgtmIssueType . statuses . map ( function ( status ) {
135
+ return {
136
+ value : status . id ,
137
+ text : status . name
138
+ }
139
+ } ) ;
140
+ statuses . unshift ( { value : "none" , text : "" } ) ;
119
141
120
- if ( AJS . $ ( issueTypeFieldId ) . select2 ( 'val' ) !== "none" ) {
121
- for ( var i = 0 ; i < issueTypes . length ; i ++ ) {
122
- if ( issueTypes [ i ] . id === AJS . $ ( issueTypeFieldId ) . select2 ( 'val' ) ) {
123
- var statuses = issueTypes [ i ] . statuses . map ( function ( status ) {
124
- return {
125
- value : status . id ,
126
- text : status . name
127
- }
128
- } ) ;
129
- statuses . unshift ( { value : "none" , text : "" } ) ;
130
-
131
- renderSelect2Field ( closedStatusFieldId , statuses ) ;
132
- renderSelect2Field ( reopenedStatusFieldId , statuses ) ;
142
+ renderSelect2Field ( closedStatusFieldId , statuses ) ;
143
+ renderSelect2Field ( reopenedStatusFieldId , statuses ) ;
133
144
134
- if ( config !== null ) {
135
- var closedStatusList = AJS . $ ( closedStatusFieldId ) ;
136
- var reopenedStatusList = AJS . $ ( reopenedStatusFieldId ) ;
145
+ if ( config !== null ) {
146
+ var closedStatusList = AJS . $ ( closedStatusFieldId ) ;
147
+ var reopenedStatusList = AJS . $ ( reopenedStatusFieldId ) ;
137
148
138
- closedStatusList . select2 ( 'val' , config . closedStatusId ) ;
139
- reopenedStatusList . select2 ( 'val' , config . reopenedStatusId ) ;
140
- }
141
- break ;
142
- }
143
- }
149
+ closedStatusList . select2 ( 'val' , config . closedStatusId ) ;
150
+ reopenedStatusList . select2 ( 'val' , config . reopenedStatusId ) ;
144
151
}
145
152
}
146
153
@@ -242,12 +249,8 @@ function updateConfig() {
242
249
return ;
243
250
}
244
251
245
- if ( AJS . $ ( issueTypeFieldId ) . select2 ( 'val' ) === "none" ) {
246
- AJS . messages . error ( "#message-context" , {
247
- title : 'Please select an IssueType.' ,
248
- closeable : true ,
249
- fadeout : true
250
- } ) ;
252
+ if ( lgtmIssueTypeId === null ) {
253
+ // Error message is handled in loadIssueType() when lgtmIssueType is undefined
251
254
return ;
252
255
}
253
256
@@ -274,7 +277,7 @@ function updateConfig() {
274
277
'lgtmSecret' : AJS . $ ( '#secret' ) . attr ( 'value' ) ,
275
278
'username' : AJS . $ ( '#user' ) . attr ( 'value' ) ,
276
279
'projectKey' : AJS . $ ( '#project' ) . select2 ( 'val' ) ,
277
- 'issueTypeId' : AJS . $ ( '#issueType' ) . select2 ( 'val' ) ,
280
+ 'issueTypeId' : lgtmIssueTypeId ,
278
281
'closedStatusId' : AJS . $ ( '#closedStatus' ) . select2 ( 'val' ) ,
279
282
'reopenedStatusId' : AJS . $ ( '#reopenedStatus' ) . select2 ( 'val' ) ,
280
283
'priorityLevelId' : AJS . $ ( '#priority' ) . select2 ( 'val' )
0 commit comments