Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
G
gitlab-ce
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
0
Merge Requests
0
Analytics
Analytics
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Commits
Issue Boards
Open sidebar
Jérome Perrin
gitlab-ce
Commits
02fbdb8b
Commit
02fbdb8b
authored
Mar 08, 2017
by
Clement Ho
Browse files
Options
Browse Files
Download
Plain Diff
Merge branch 'es6-class-issue' into 'master'
Convert Issue into ES6 class See merge request !9636
parents
a12664cd
6bf109b7
Changes
4
Hide whitespace changes
Inline
Side-by-side
Showing
4 changed files
with
135 additions
and
140 deletions
+135
-140
app/assets/javascripts/dispatcher.js
app/assets/javascripts/dispatcher.js
+1
-1
app/assets/javascripts/issue.js
app/assets/javascripts/issue.js
+110
-116
changelogs/unreleased/es6-class-issue.yml
changelogs/unreleased/es6-class-issue.yml
+4
-0
spec/javascripts/issue_spec.js
spec/javascripts/issue_spec.js
+20
-23
No files found.
app/assets/javascripts/dispatcher.js
View file @
02fbdb8b
...
...
@@ -5,7 +5,6 @@ import PrometheusGraph from './monitoring/prometheus_graph'; // TODO: Maybe Make
/* global ShortcutsNavigation */
/* global Build */
/* global Issuable */
/* global Issue */
/* global ShortcutsIssuable */
/* global ZenMode */
/* global Milestone */
...
...
@@ -35,6 +34,7 @@ import PrometheusGraph from './monitoring/prometheus_graph'; // TODO: Maybe Make
/* global ProjectShow */
/* global Labels */
/* global Shortcuts */
import
Issue
from
'
./issue
'
;
import
BindInOut
from
'
./behaviors/bind_in_out
'
;
import
GroupsList
from
'
./groups_list
'
;
...
...
app/assets/javascripts/issue.js
View file @
02fbdb8b
...
...
@@ -5,131 +5,125 @@ require('./flash');
require
(
'
vendor/jquery.waitforimages
'
);
require
(
'
./task_list
'
);
(
function
()
{
var
bind
=
function
(
fn
,
me
)
{
return
function
()
{
return
fn
.
apply
(
me
,
arguments
);
};
};
this
.
Issue
=
(
function
()
{
function
Issue
()
{
this
.
submitNoteForm
=
bind
(
this
.
submitNoteForm
,
this
);
if
(
$
(
'
a.btn-close
'
).
length
)
{
this
.
taskList
=
new
gl
.
TaskList
({
dataType
:
'
issue
'
,
fieldName
:
'
description
'
,
selector
:
'
.detail-page-description
'
,
onSuccess
:
(
result
)
=>
{
document
.
querySelector
(
'
#task_status
'
).
innerText
=
result
.
task_status
;
document
.
querySelector
(
'
#task_status_short
'
).
innerText
=
result
.
task_status_short
;
}
});
this
.
initIssueBtnEventListeners
();
}
this
.
initMergeRequests
();
this
.
initRelatedBranches
();
this
.
initCanCreateBranch
();
class
Issue
{
constructor
()
{
if
(
$
(
'
a.btn-close
'
).
length
)
{
this
.
taskList
=
new
gl
.
TaskList
({
dataType
:
'
issue
'
,
fieldName
:
'
description
'
,
selector
:
'
.detail-page-description
'
,
onSuccess
:
(
result
)
=>
{
document
.
querySelector
(
'
#task_status
'
).
innerText
=
result
.
task_status
;
document
.
querySelector
(
'
#task_status_short
'
).
innerText
=
result
.
task_status_short
;
}
});
Issue
.
initIssueBtnEventListeners
();
}
Issue
.
initMergeRequests
();
Issue
.
initRelatedBranches
();
Issue
.
initCanCreateBranch
();
}
Issue
.
prototype
.
initIssueBtnEventListeners
=
function
()
{
var
_this
,
issueFailMessage
;
_this
=
this
;
issueFailMessage
=
'
Unable to update this issue at this time.
'
;
return
$
(
'
a.btn-close, a.btn-reopen
'
).
on
(
'
click
'
,
function
(
e
)
{
var
$this
,
isClose
,
shouldSubmit
,
url
;
e
.
preventDefault
();
e
.
stopImmediatePropagation
();
$this
=
$
(
this
);
isClose
=
$this
.
hasClass
(
'
btn-close
'
);
shouldSubmit
=
$this
.
hasClass
(
'
btn-comment
'
);
if
(
shouldSubmit
)
{
_this
.
submitNoteForm
(
$this
.
closest
(
'
form
'
));
}
$this
.
prop
(
'
disabled
'
,
true
);
url
=
$this
.
attr
(
'
href
'
);
return
$
.
ajax
({
type
:
'
PUT
'
,
url
:
url
,
error
:
function
(
jqXHR
,
textStatus
,
errorThrown
)
{
var
issueStatus
;
issueStatus
=
isClose
?
'
close
'
:
'
open
'
;
return
new
Flash
(
issueFailMessage
,
'
alert
'
);
},
success
:
function
(
data
,
textStatus
,
jqXHR
)
{
if
(
'
id
'
in
data
)
{
$
(
document
).
trigger
(
'
issuable:change
'
);
const
currentTotal
=
Number
(
$
(
'
.issue_counter
'
).
text
());
if
(
isClose
)
{
$
(
'
a.btn-close
'
).
addClass
(
'
hidden
'
);
$
(
'
a.btn-reopen
'
).
removeClass
(
'
hidden
'
);
$
(
'
div.status-box-closed
'
).
removeClass
(
'
hidden
'
);
$
(
'
div.status-box-open
'
).
addClass
(
'
hidden
'
);
$
(
'
.issue_counter
'
).
text
(
currentTotal
-
1
);
}
else
{
$
(
'
a.btn-reopen
'
).
addClass
(
'
hidden
'
);
$
(
'
a.btn-close
'
).
removeClass
(
'
hidden
'
);
$
(
'
div.status-box-closed
'
).
addClass
(
'
hidden
'
);
$
(
'
div.status-box-open
'
).
removeClass
(
'
hidden
'
);
$
(
'
.issue_counter
'
).
text
(
currentTotal
+
1
);
}
static
initIssueBtnEventListeners
()
{
var
issueFailMessage
;
issueFailMessage
=
'
Unable to update this issue at this time.
'
;
return
$
(
'
a.btn-close, a.btn-reopen
'
).
on
(
'
click
'
,
function
(
e
)
{
var
$this
,
isClose
,
shouldSubmit
,
url
;
e
.
preventDefault
();
e
.
stopImmediatePropagation
();
$this
=
$
(
this
);
isClose
=
$this
.
hasClass
(
'
btn-close
'
);
shouldSubmit
=
$this
.
hasClass
(
'
btn-comment
'
);
if
(
shouldSubmit
)
{
Issue
.
submitNoteForm
(
$this
.
closest
(
'
form
'
));
}
$this
.
prop
(
'
disabled
'
,
true
);
url
=
$this
.
attr
(
'
href
'
);
return
$
.
ajax
({
type
:
'
PUT
'
,
url
:
url
,
error
:
function
(
jqXHR
,
textStatus
,
errorThrown
)
{
var
issueStatus
;
issueStatus
=
isClose
?
'
close
'
:
'
open
'
;
return
new
Flash
(
issueFailMessage
,
'
alert
'
);
},
success
:
function
(
data
,
textStatus
,
jqXHR
)
{
if
(
'
id
'
in
data
)
{
$
(
document
).
trigger
(
'
issuable:change
'
);
const
currentTotal
=
Number
(
$
(
'
.issue_counter
'
).
text
());
if
(
isClose
)
{
$
(
'
a.btn-close
'
).
addClass
(
'
hidden
'
);
$
(
'
a.btn-reopen
'
).
removeClass
(
'
hidden
'
);
$
(
'
div.status-box-closed
'
).
removeClass
(
'
hidden
'
);
$
(
'
div.status-box-open
'
).
addClass
(
'
hidden
'
);
$
(
'
.issue_counter
'
).
text
(
currentTotal
-
1
);
}
else
{
new
Flash
(
issueFailMessage
,
'
alert
'
);
$
(
'
a.btn-reopen
'
).
addClass
(
'
hidden
'
);
$
(
'
a.btn-close
'
).
removeClass
(
'
hidden
'
);
$
(
'
div.status-box-closed
'
).
addClass
(
'
hidden
'
);
$
(
'
div.status-box-open
'
).
removeClass
(
'
hidden
'
);
$
(
'
.issue_counter
'
).
text
(
currentTotal
+
1
);
}
return
$this
.
prop
(
'
disabled
'
,
false
);
}
else
{
new
Flash
(
issueFailMessage
,
'
alert
'
);
}
});
return
$this
.
prop
(
'
disabled
'
,
false
);
}
});
};
});
}
Issue
.
prototype
.
submitNoteForm
=
function
(
form
)
{
var
noteText
;
noteText
=
form
.
find
(
"
textarea.js-note-text
"
).
val
();
if
(
noteText
.
trim
().
length
>
0
)
{
return
form
.
submit
();
}
};
static
submitNoteForm
(
form
)
{
var
noteText
;
noteText
=
form
.
find
(
"
textarea.js-note-text
"
).
val
();
if
(
noteText
.
trim
().
length
>
0
)
{
return
form
.
submit
();
}
}
Issue
.
prototype
.
initMergeRequests
=
function
()
{
var
$container
;
$container
=
$
(
'
#merge-requests
'
);
return
$
.
getJSON
(
$container
.
data
(
'
url
'
)).
error
(
function
()
{
return
new
Flash
(
'
Failed to load referenced merge requests
'
,
'
alert
'
);
}).
success
(
function
(
data
)
{
if
(
'
html
'
in
data
)
{
return
$container
.
html
(
data
.
html
);
}
});
};
static
initMergeRequests
()
{
var
$container
;
$container
=
$
(
'
#merge-requests
'
);
return
$
.
getJSON
(
$container
.
data
(
'
url
'
)).
error
(
function
()
{
return
new
Flash
(
'
Failed to load referenced merge requests
'
,
'
alert
'
);
}).
success
(
function
(
data
)
{
if
(
'
html
'
in
data
)
{
return
$container
.
html
(
data
.
html
);
}
});
}
Issue
.
prototype
.
initRelatedBranches
=
function
()
{
var
$container
;
$container
=
$
(
'
#related-branches
'
);
return
$
.
getJSON
(
$container
.
data
(
'
url
'
)).
error
(
function
()
{
return
new
Flash
(
'
Failed to load related branches
'
,
'
alert
'
);
}).
success
(
function
(
data
)
{
if
(
'
html
'
in
data
)
{
return
$container
.
html
(
data
.
html
);
}
});
};
static
initRelatedBranches
()
{
var
$container
;
$container
=
$
(
'
#related-branches
'
);
return
$
.
getJSON
(
$container
.
data
(
'
url
'
)).
error
(
function
()
{
return
new
Flash
(
'
Failed to load related branches
'
,
'
alert
'
);
}).
success
(
function
(
data
)
{
if
(
'
html
'
in
data
)
{
return
$container
.
html
(
data
.
html
);
}
});
}
Issue
.
prototype
.
initCanCreateBranch
=
function
()
{
var
$container
;
$container
=
$
(
'
#new-branch
'
);
// If the user doesn't have the required permissions the container isn't
// rendered at all.
if
(
$container
.
length
===
0
)
{
return
;
static
initCanCreateBranch
()
{
var
$container
;
$container
=
$
(
'
#new-branch
'
);
// If the user doesn't have the required permissions the container isn't
// rendered at all.
if
(
$container
.
length
===
0
)
{
return
;
}
return
$
.
getJSON
(
$container
.
data
(
'
path
'
)).
error
(
function
()
{
$container
.
find
(
'
.unavailable
'
).
show
();
return
new
Flash
(
'
Failed to check if a new branch can be created.
'
,
'
alert
'
);
}).
success
(
function
(
data
)
{
if
(
data
.
can_create_branch
)
{
$container
.
find
(
'
.available
'
).
show
();
}
else
{
return
$container
.
find
(
'
.unavailable
'
).
show
();
}
return
$
.
getJSON
(
$container
.
data
(
'
path
'
)).
error
(
function
()
{
$container
.
find
(
'
.unavailable
'
).
show
();
return
new
Flash
(
'
Failed to check if a new branch can be created.
'
,
'
alert
'
);
}).
success
(
function
(
data
)
{
if
(
data
.
can_create_branch
)
{
$container
.
find
(
'
.available
'
).
show
();
}
else
{
return
$container
.
find
(
'
.unavailable
'
).
show
();
}
});
};
});
}
}
return
Issue
;
})();
}).
call
(
window
);
export
default
Issue
;
changelogs/unreleased/es6-class-issue.yml
0 → 100644
View file @
02fbdb8b
---
title
:
Convert Issue into ES6 class
merge_request
:
9636
author
:
winniehell
spec/javascripts/issue_spec.js
View file @
02fbdb8b
/* eslint-disable space-before-function-paren, no-var, one-var, one-var-declaration-per-line, no-use-before-define, comma-dangle, max-len */
/* global Issue */
import
Issue
from
'
~/issue
'
;
require
(
'
~/lib/utils/text_utility
'
);
require
(
'
~/issue
'
);
(
function
()
{
describe
(
'
Issue
'
,
function
()
{
var
INVALID_URL
=
'
http://goesnowhere.nothing/whereami
'
;
var
$boxClosed
,
$boxOpen
,
$btnClose
,
$btnReopen
;
...
...
@@ -59,28 +58,26 @@ require('~/issue');
expect
(
$btnReopen
).
toHaveText
(
'
Reopen issue
'
);
}
describe
(
'
Issue
'
,
function
()
{
describe
(
'
task lists
'
,
function
()
{
beforeEach
(
function
()
{
loadFixtures
(
'
issues/issue-with-task-list.html.raw
'
);
this
.
issue
=
new
Issue
();
});
it
(
'
modifies the Markdown field
'
,
function
()
{
spyOn
(
jQuery
,
'
ajax
'
).
and
.
stub
();
$
(
'
input[type=checkbox]
'
).
attr
(
'
checked
'
,
true
).
trigger
(
'
change
'
);
expect
(
$
(
'
.js-task-list-field
'
).
val
()).
toBe
(
'
- [x] Task List Item
'
);
});
describe
(
'
task lists
'
,
function
()
{
beforeEach
(
function
()
{
loadFixtures
(
'
issues/issue-with-task-list.html.raw
'
);
this
.
issue
=
new
Issue
();
});
it
(
'
submits an ajax request on tasklist:changed
'
,
function
()
{
spyOn
(
jQuery
,
'
ajax
'
).
and
.
callFake
(
function
(
req
)
{
expect
(
req
.
type
).
toBe
(
'
PATCH
'
);
expect
(
req
.
url
).
toBe
(
gl
.
TEST_HOST
+
'
/frontend-fixtures/issues-project/issues/1.json
'
);
// eslint-disable-line prefer-template
expect
(
req
.
data
.
issue
.
description
).
not
.
toBe
(
null
);
});
it
(
'
modifies the Markdown field
'
,
function
()
{
spyOn
(
jQuery
,
'
ajax
'
).
and
.
stub
();
$
(
'
input[type=checkbox]
'
).
attr
(
'
checked
'
,
true
).
trigger
(
'
change
'
);
expect
(
$
(
'
.js-task-list-field
'
).
val
()).
toBe
(
'
- [x] Task List Item
'
);
});
$
(
'
.js-task-list-field
'
).
trigger
(
'
tasklist:changed
'
);
it
(
'
submits an ajax request on tasklist:changed
'
,
function
()
{
spyOn
(
jQuery
,
'
ajax
'
).
and
.
callFake
(
function
(
req
)
{
expect
(
req
.
type
).
toBe
(
'
PATCH
'
);
expect
(
req
.
url
).
toBe
(
gl
.
TEST_HOST
+
'
/frontend-fixtures/issues-project/issues/1.json
'
);
// eslint-disable-line prefer-template
expect
(
req
.
data
.
issue
.
description
).
not
.
toBe
(
null
);
});
$
(
'
.js-task-list-field
'
).
trigger
(
'
tasklist:changed
'
);
});
});
...
...
@@ -165,4 +162,4 @@ require('~/issue');
expect
(
$
(
'
.issue_counter
'
)).
toHaveText
(
1
);
});
});
})
.
call
(
window
)
;
});
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment