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
1
Merge Requests
1
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
nexedi
gitlab-ce
Commits
6eef6eb6
Commit
6eef6eb6
authored
Dec 17, 2021
by
Coung Ngo
Committed by
Denys Mishunov
Dec 17, 2021
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Move code to ~/issuable
parent
0b93a127
Changes
30
Hide whitespace changes
Inline
Side-by-side
Showing
30 changed files
with
38 additions
and
44 deletions
+38
-44
app/assets/javascripts/issuable/components/issue_assignees.vue
...ssets/javascripts/issuable/components/issue_assignees.vue
+0
-0
app/assets/javascripts/issuable/components/issue_milestone.vue
...ssets/javascripts/issuable/components/issue_milestone.vue
+0
-0
app/assets/javascripts/issuable/components/related_issuable_item.vue
...javascripts/issuable/components/related_issuable_item.vue
+2
-2
app/assets/javascripts/issuable/mixins/related_issuable_mixin.js
...ets/javascripts/issuable/mixins/related_issuable_mixin.js
+0
-0
app/assets/javascripts/issues/related_merge_requests/components/related_merge_requests.vue
...ated_merge_requests/components/related_merge_requests.vue
+1
-1
app/assets/javascripts/issues_list/components/issuable.vue
app/assets/javascripts/issues_list/components/issuable.vue
+1
-1
app/assets/javascripts/notes/components/discussion_locked_widget.vue
...javascripts/notes/components/discussion_locked_widget.vue
+10
-2
app/assets/javascripts/related_issues/components/issue_token.vue
...ets/javascripts/related_issues/components/issue_token.vue
+1
-1
app/assets/javascripts/related_issues/components/related_issues_list.vue
...scripts/related_issues/components/related_issues_list.vue
+1
-1
app/assets/javascripts/vue_shared/issuable/list/components/issuable_item.vue
...pts/vue_shared/issuable/list/components/issuable_item.vue
+1
-1
app/assets/javascripts/vue_shared/mixins/issuable.js
app/assets/javascripts/vue_shared/mixins/issuable.js
+0
-14
ee/app/assets/javascripts/related_items_tree/components/tree_item_body.vue
...ascripts/related_items_tree/components/tree_item_body.vue
+2
-2
ee/app/assets/javascripts/vue_merge_request_widget/components/blocking_merge_requests/blocking_merge_request_body.vue
...s/blocking_merge_requests/blocking_merge_request_body.vue
+1
-1
ee/spec/frontend/issuable/components/related_issuable_item_spec.js
...rontend/issuable/components/related_issuable_item_spec.js
+2
-2
ee/spec/frontend/issuable/related_issues/components/related_issues_list_spec.js
...ble/related_issues/components/related_issues_list_spec.js
+1
-1
ee/spec/frontend/related_items_tree/components/tree_item_body_spec.js
...tend/related_items_tree/components/tree_item_body_spec.js
+2
-2
ee/spec/frontend/vue_mr_widget/components/blocking_merge_requests/blocking_merge_requests_body_spec.js
...cking_merge_requests/blocking_merge_requests_body_spec.js
+1
-1
qa/qa/page/project/issue/index.rb
qa/qa/page/project/issue/index.rb
+1
-1
qa/qa/page/project/issue/show.rb
qa/qa/page/project/issue/show.rb
+1
-1
spec/frontend/issuable/components/issue_assignees_spec.js
spec/frontend/issuable/components/issue_assignees_spec.js
+1
-1
spec/frontend/issuable/components/issue_milestone_spec.js
spec/frontend/issuable/components/issue_milestone_spec.js
+1
-1
spec/frontend/issuable/components/related_issuable_item_spec.js
...rontend/issuable/components/related_issuable_item_spec.js
+1
-1
spec/frontend/issuable/components/related_issuable_mock_data.js
...rontend/issuable/components/related_issuable_mock_data.js
+0
-0
spec/frontend/issuable/related_issues/components/related_issues_block_spec.js
...le/related_issues/components/related_issues_block_spec.js
+1
-1
spec/frontend/issuable/related_issues/components/related_issues_list_spec.js
...ble/related_issues/components/related_issues_list_spec.js
+1
-1
spec/frontend/issuable/related_issues/components/related_issues_root_spec.js
...ble/related_issues/components/related_issues_root_spec.js
+1
-1
spec/frontend/issuable/related_issues/stores/related_issues_store_spec.js
...suable/related_issues/stores/related_issues_store_spec.js
+1
-1
spec/frontend/issues/related_merge_requests/components/related_merge_requests_spec.js
..._merge_requests/components/related_merge_requests_spec.js
+1
-1
spec/frontend/issues_list/components/issuable_spec.js
spec/frontend/issues_list/components/issuable_spec.js
+1
-1
spec/frontend/vue_shared/issuable/list/components/issuable_item_spec.js
...vue_shared/issuable/list/components/issuable_item_spec.js
+1
-1
No files found.
app/assets/javascripts/
vue_shared/components/issue
/issue_assignees.vue
→
app/assets/javascripts/
issuable/components
/issue_assignees.vue
View file @
6eef6eb6
File moved
app/assets/javascripts/
vue_shared/components/issue
/issue_milestone.vue
→
app/assets/javascripts/
issuable/components
/issue_milestone.vue
View file @
6eef6eb6
File moved
app/assets/javascripts/
vue_shared/components/issue
/related_issuable_item.vue
→
app/assets/javascripts/
issuable/components
/related_issuable_item.vue
View file @
6eef6eb6
...
...
@@ -9,8 +9,8 @@ import {
}
from
'
@gitlab/ui
'
;
import
IssueDueDate
from
'
~/boards/components/issue_due_date.vue
'
;
import
{
sprintf
}
from
'
~/locale
'
;
import
relatedIssuableMixin
from
'
../../mixins/related_issuable_mixin
'
;
import
CiIcon
from
'
../ci_icon.vue
'
;
import
CiIcon
from
'
~/vue_shared/components/ci_icon.vue
'
;
import
relatedIssuableMixin
from
'
../mixins/related_issuable_mixin
'
;
import
IssueAssignees
from
'
./issue_assignees.vue
'
;
import
IssueMilestone
from
'
./issue_milestone.vue
'
;
...
...
app/assets/javascripts/
vue_shared
/mixins/related_issuable_mixin.js
→
app/assets/javascripts/
issuable
/mixins/related_issuable_mixin.js
View file @
6eef6eb6
File moved
app/assets/javascripts/issues/related_merge_requests/components/related_merge_requests.vue
View file @
6eef6eb6
...
...
@@ -2,7 +2,7 @@
import
{
GlLink
,
GlLoadingIcon
,
GlIcon
}
from
'
@gitlab/ui
'
;
import
{
mapState
,
mapActions
}
from
'
vuex
'
;
import
{
sprintf
,
__
,
n__
}
from
'
~/locale
'
;
import
RelatedIssuableItem
from
'
~/
vue_shared/components/issue
/related_issuable_item.vue
'
;
import
RelatedIssuableItem
from
'
~/
issuable/components
/related_issuable_item.vue
'
;
import
{
parseIssuableData
}
from
'
~/issues/show/utils/parse_data
'
;
export
default
{
...
...
app/assets/javascripts/issues_list/components/issuable.vue
View file @
6eef6eb6
...
...
@@ -28,7 +28,7 @@ import { convertToCamelCase } from '~/lib/utils/text_utility';
import
{
mergeUrlParams
,
setUrlFragment
,
isExternal
}
from
'
~/lib/utils/url_utility
'
;
import
{
sprintf
,
__
}
from
'
~/locale
'
;
import
initUserPopovers
from
'
~/user_popovers
'
;
import
IssueAssignees
from
'
~/
vue_shared/components/issue
/issue_assignees.vue
'
;
import
IssueAssignees
from
'
~/
issuable/components
/issue_assignees.vue
'
;
export
default
{
i18n
:
{
...
...
app/assets/javascripts/notes/components/discussion_locked_widget.vue
View file @
6eef6eb6
<
script
>
import
{
GlLink
,
GlIcon
}
from
'
@gitlab/ui
'
;
import
{
__
,
sprintf
}
from
'
~/locale
'
;
import
Issuable
from
'
~/vue_shared/mixins/issuable
'
;
import
issuableStateMixin
from
'
../mixins/issuable_state
'
;
export
default
{
...
...
@@ -9,8 +8,17 @@ export default {
GlIcon
,
GlLink
,
},
mixins
:
[
Issuable
,
issuableStateMixin
],
mixins
:
[
issuableStateMixin
],
props
:
{
issuableType
:
{
required
:
true
,
type
:
String
,
},
},
computed
:
{
issuableDisplayName
()
{
return
this
.
issuableType
.
replace
(
/_/g
,
'
'
);
},
projectArchivedWarning
()
{
return
__
(
'
This project is archived and cannot be commented on.
'
);
},
...
...
app/assets/javascripts/related_issues/components/issue_token.vue
View file @
6eef6eb6
<
script
>
import
{
GlIcon
,
GlTooltipDirective
}
from
'
@gitlab/ui
'
;
import
{
__
,
sprintf
}
from
'
~/locale
'
;
import
relatedIssuableMixin
from
'
~/
vue_shared
/mixins/related_issuable_mixin
'
;
import
relatedIssuableMixin
from
'
~/
issuable
/mixins/related_issuable_mixin
'
;
export
default
{
name
:
'
IssueToken
'
,
...
...
app/assets/javascripts/related_issues/components/related_issues_list.vue
View file @
6eef6eb6
...
...
@@ -2,7 +2,7 @@
import
{
GlLoadingIcon
}
from
'
@gitlab/ui
'
;
import
Sortable
from
'
sortablejs
'
;
import
sortableConfig
from
'
~/sortable/sortable_config
'
;
import
RelatedIssuableItem
from
'
~/
vue_shared/components/issue
/related_issuable_item.vue
'
;
import
RelatedIssuableItem
from
'
~/
issuable/components
/related_issuable_item.vue
'
;
export
default
{
name
:
'
RelatedIssuesList
'
,
...
...
app/assets/javascripts/vue_shared/issuable/list/components/issuable_item.vue
View file @
6eef6eb6
...
...
@@ -6,7 +6,7 @@ import { isScopedLabel } from '~/lib/utils/common_utils';
import
{
differenceInSeconds
,
getTimeago
,
SECONDS_IN_DAY
}
from
'
~/lib/utils/datetime_utility
'
;
import
{
isExternal
,
setUrlFragment
}
from
'
~/lib/utils/url_utility
'
;
import
{
__
,
n__
,
sprintf
}
from
'
~/locale
'
;
import
IssuableAssignees
from
'
~/
vue_shared/components/issue
/issue_assignees.vue
'
;
import
IssuableAssignees
from
'
~/
issuable/components
/issue_assignees.vue
'
;
import
timeagoMixin
from
'
~/vue_shared/mixins/timeago
'
;
export
default
{
...
...
app/assets/javascripts/vue_shared/mixins/issuable.js
deleted
100644 → 0
View file @
0b93a127
export
default
{
props
:
{
issuableType
:
{
required
:
true
,
type
:
String
,
},
},
computed
:
{
issuableDisplayName
()
{
return
this
.
issuableType
.
replace
(
/_/g
,
'
'
);
},
},
};
ee/app/assets/javascripts/related_items_tree/components/tree_item_body.vue
View file @
6eef6eb6
...
...
@@ -16,8 +16,8 @@ import ItemDueDate from '~/boards/components/issue_due_date.vue';
import
{
__
}
from
'
~/locale
'
;
import
{
isScopedLabel
}
from
'
~/lib/utils/common_utils
'
;
import
ItemAssignees
from
'
~/
vue_shared/components/issue
/issue_assignees.vue
'
;
import
ItemMilestone
from
'
~/
vue_shared/components/issue
/issue_milestone.vue
'
;
import
ItemAssignees
from
'
~/
issuable/components
/issue_assignees.vue
'
;
import
ItemMilestone
from
'
~/
issuable/components
/issue_milestone.vue
'
;
import
{
ChildType
,
ChildState
,
itemRemoveModalId
}
from
'
../constants
'
;
import
EpicHealthStatus
from
'
./epic_health_status.vue
'
;
...
...
ee/app/assets/javascripts/vue_merge_request_widget/components/blocking_merge_requests/blocking_merge_request_body.vue
View file @
6eef6eb6
<
script
>
import
{
GlIcon
}
from
'
@gitlab/ui
'
;
import
{
n__
}
from
'
~/locale
'
;
import
RelatedIssuableItem
from
'
~/
vue_shared/components/issue
/related_issuable_item.vue
'
;
import
RelatedIssuableItem
from
'
~/
issuable/components
/related_issuable_item.vue
'
;
export
default
{
name
:
'
BlockingMergeRequestsBody
'
,
...
...
ee/spec/frontend/issu
e
/related_issuable_item_spec.js
→
ee/spec/frontend/issu
able/components
/related_issuable_item_spec.js
View file @
6eef6eb6
...
...
@@ -4,8 +4,8 @@ import { TEST_HOST } from 'helpers/test_constants';
import
{
defaultAssignees
,
defaultMilestone
,
}
from
'
jest/
vue_shared/components/issue
/related_issuable_mock_data
'
;
import
RelatedIssuableItem
from
'
~/
vue_shared/components/issue
/related_issuable_item.vue
'
;
}
from
'
jest/
issuable/components
/related_issuable_mock_data
'
;
import
RelatedIssuableItem
from
'
~/
issuable/components
/related_issuable_item.vue
'
;
describe
(
'
RelatedIssuableItem
'
,
()
=>
{
let
wrapper
;
...
...
ee/spec/frontend/issuable/related_issues/components/related_issues_list_spec.js
View file @
6eef6eb6
import
{
mount
}
from
'
@vue/test-utils
'
;
import
IssueWeight
from
'
ee/boards/components/issue_card_weight.vue
'
;
import
{
issuable1
}
from
'
jest/
vue_shared/components/issue
/related_issuable_mock_data
'
;
import
{
issuable1
}
from
'
jest/
issuable/components
/related_issuable_mock_data
'
;
import
RelatedIssuesList
from
'
~/related_issues/components/related_issues_list.vue
'
;
import
{
PathIdSeparator
}
from
'
~/related_issues/constants
'
;
...
...
ee/spec/frontend/related_items_tree/components/tree_item_body_spec.js
View file @
6eef6eb6
...
...
@@ -13,8 +13,8 @@ import createDefaultStore from 'ee/related_items_tree/store';
import
*
as
epicUtils
from
'
ee/related_items_tree/utils/epic_utils
'
;
import
ItemDueDate
from
'
~/boards/components/issue_due_date.vue
'
;
import
{
PathIdSeparator
}
from
'
~/related_issues/constants
'
;
import
ItemAssignees
from
'
~/
vue_shared/components/issue
/issue_assignees.vue
'
;
import
ItemMilestone
from
'
~/
vue_shared/components/issue
/issue_milestone.vue
'
;
import
ItemAssignees
from
'
~/
issuable/components
/issue_assignees.vue
'
;
import
ItemMilestone
from
'
~/
issuable/components
/issue_milestone.vue
'
;
import
{
mockParentItem
,
...
...
ee/spec/frontend/vue_mr_widget/components/blocking_merge_requests/blocking_merge_requests_body_spec.js
View file @
6eef6eb6
import
{
shallowMount
}
from
'
@vue/test-utils
'
;
import
BlockingMergeRequestBody
from
'
ee/vue_merge_request_widget/components/blocking_merge_requests/blocking_merge_request_body.vue
'
;
import
RelatedIssuableItem
from
'
~/
vue_shared/components/issue
/related_issuable_item.vue
'
;
import
RelatedIssuableItem
from
'
~/
issuable/components
/related_issuable_item.vue
'
;
describe
(
'
BlockingMergeRequestBody
'
,
()
=>
{
it
(
'
shows hidden merge request text if hidden MRs exist
'
,
()
=>
{
...
...
qa/qa/page/project/issue/index.rb
View file @
6eef6eb6
...
...
@@ -10,7 +10,7 @@ module QA
element
:issuable_search_container
end
view
'app/assets/javascripts/
vue_shared/components/issue
/issue_assignees.vue'
do
view
'app/assets/javascripts/
issuable/components
/issue_assignees.vue'
do
element
:assignee_link
element
:avatar_counter_content
end
...
...
qa/qa/page/project/issue/show.rb
View file @
6eef6eb6
...
...
@@ -11,7 +11,7 @@ module QA
include
Page
::
Component
::
Issuable
::
Sidebar
prepend
Mobile
::
Page
::
Project
::
Issue
::
Show
if
Runtime
::
Env
.
mobile_layout?
view
'app/assets/javascripts/
vue_shared/components/issue
/related_issuable_item.vue'
do
view
'app/assets/javascripts/
issuable/components
/related_issuable_item.vue'
do
element
:remove_related_issue_button
end
...
...
spec/frontend/
vue_shared/components/issue
/issue_assignees_spec.js
→
spec/frontend/
issuable/components
/issue_assignees_spec.js
View file @
6eef6eb6
import
{
shallowMount
}
from
'
@vue/test-utils
'
;
import
{
mockAssigneesList
}
from
'
jest/boards/mock_data
'
;
import
IssueAssignees
from
'
~/
vue_shared/components/issue
/issue_assignees.vue
'
;
import
IssueAssignees
from
'
~/
issuable/components
/issue_assignees.vue
'
;
import
UserAvatarLink
from
'
~/vue_shared/components/user_avatar/user_avatar_link.vue
'
;
const
TEST_CSS_CLASSES
=
'
test-classes
'
;
...
...
spec/frontend/
vue_shared/components/issue
/issue_milestone_spec.js
→
spec/frontend/
issuable/components
/issue_milestone_spec.js
View file @
6eef6eb6
...
...
@@ -3,7 +3,7 @@ import { shallowMount } from '@vue/test-utils';
import
Vue
from
'
vue
'
;
import
{
mockMilestone
}
from
'
jest/boards/mock_data
'
;
import
IssueMilestone
from
'
~/
vue_shared/components/issue
/issue_milestone.vue
'
;
import
IssueMilestone
from
'
~/
issuable/components
/issue_milestone.vue
'
;
const
createComponent
=
(
milestone
=
mockMilestone
)
=>
{
const
Component
=
Vue
.
extend
(
IssueMilestone
);
...
...
spec/frontend/
vue_shared/components/issue
/related_issuable_item_spec.js
→
spec/frontend/
issuable/components
/related_issuable_item_spec.js
View file @
6eef6eb6
...
...
@@ -2,7 +2,7 @@ import { mount } from '@vue/test-utils';
import
{
TEST_HOST
}
from
'
helpers/test_constants
'
;
import
IssueDueDate
from
'
~/boards/components/issue_due_date.vue
'
;
import
{
formatDate
}
from
'
~/lib/utils/datetime_utility
'
;
import
RelatedIssuableItem
from
'
~/
vue_shared/components/issue
/related_issuable_item.vue
'
;
import
RelatedIssuableItem
from
'
~/
issuable/components
/related_issuable_item.vue
'
;
import
{
defaultAssignees
,
defaultMilestone
}
from
'
./related_issuable_mock_data
'
;
describe
(
'
RelatedIssuableItem
'
,
()
=>
{
...
...
spec/frontend/
vue_shared/components/issue
/related_issuable_mock_data.js
→
spec/frontend/
issuable/components
/related_issuable_mock_data.js
View file @
6eef6eb6
File moved
spec/frontend/issuable/related_issues/components/related_issues_block_spec.js
View file @
6eef6eb6
...
...
@@ -4,7 +4,7 @@ import {
issuable1
,
issuable2
,
issuable3
,
}
from
'
jest/
vue_shared/components/issue
/related_issuable_mock_data
'
;
}
from
'
jest/
issuable/components
/related_issuable_mock_data
'
;
import
RelatedIssuesBlock
from
'
~/related_issues/components/related_issues_block.vue
'
;
import
{
linkedIssueTypesMap
,
...
...
spec/frontend/issuable/related_issues/components/related_issues_list_spec.js
View file @
6eef6eb6
...
...
@@ -5,7 +5,7 @@ import {
issuable3
,
issuable4
,
issuable5
,
}
from
'
jest/
vue_shared/components/issue
/related_issuable_mock_data
'
;
}
from
'
jest/
issuable/components
/related_issuable_mock_data
'
;
import
IssueDueDate
from
'
~/boards/components/issue_due_date.vue
'
;
import
RelatedIssuesList
from
'
~/related_issues/components/related_issues_list.vue
'
;
import
{
PathIdSeparator
}
from
'
~/related_issues/constants
'
;
...
...
spec/frontend/issuable/related_issues/components/related_issues_root_spec.js
View file @
6eef6eb6
...
...
@@ -5,7 +5,7 @@ import {
defaultProps
,
issuable1
,
issuable2
,
}
from
'
jest/
vue_shared/components/issue
/related_issuable_mock_data
'
;
}
from
'
jest/
issuable/components
/related_issuable_mock_data
'
;
import
createFlash
from
'
~/flash
'
;
import
axios
from
'
~/lib/utils/axios_utils
'
;
import
RelatedIssuesRoot
from
'
~/related_issues/components/related_issues_root.vue
'
;
...
...
spec/frontend/issuable/related_issues/stores/related_issues_store_spec.js
View file @
6eef6eb6
...
...
@@ -4,7 +4,7 @@ import {
issuable3
,
issuable4
,
issuable5
,
}
from
'
jest/
vue_shared/components/issue
/related_issuable_mock_data
'
;
}
from
'
jest/
issuable/components
/related_issuable_mock_data
'
;
import
RelatedIssuesStore
from
'
~/related_issues/stores/related_issues_store
'
;
describe
(
'
RelatedIssuesStore
'
,
()
=>
{
...
...
spec/frontend/issues/related_merge_requests/components/related_merge_requests_spec.js
View file @
6eef6eb6
...
...
@@ -4,7 +4,7 @@ import mockData from 'test_fixtures/issues/related_merge_requests.json';
import
axios
from
'
~/lib/utils/axios_utils
'
;
import
RelatedMergeRequests
from
'
~/issues/related_merge_requests/components/related_merge_requests.vue
'
;
import
createStore
from
'
~/issues/related_merge_requests/store/index
'
;
import
RelatedIssuableItem
from
'
~/
vue_shared/components/issue
/related_issuable_item.vue
'
;
import
RelatedIssuableItem
from
'
~/
issuable/components
/related_issuable_item.vue
'
;
const
API_ENDPOINT
=
'
/api/v4/projects/2/issues/33/related_merge_requests
'
;
const
localVue
=
createLocalVue
();
...
...
spec/frontend/issues_list/components/issuable_spec.js
View file @
6eef6eb6
...
...
@@ -7,7 +7,7 @@ import { isScopedLabel } from '~/lib/utils/common_utils';
import
{
formatDate
}
from
'
~/lib/utils/datetime_utility
'
;
import
{
mergeUrlParams
}
from
'
~/lib/utils/url_utility
'
;
import
initUserPopovers
from
'
~/user_popovers
'
;
import
IssueAssignees
from
'
~/
vue_shared/components/issue
/issue_assignees.vue
'
;
import
IssueAssignees
from
'
~/
issuable/components
/issue_assignees.vue
'
;
import
{
simpleIssue
,
testAssignees
,
testLabels
}
from
'
../issuable_list_test_data
'
;
jest
.
mock
(
'
~/user_popovers
'
);
...
...
spec/frontend/vue_shared/issuable/list/components/issuable_item_spec.js
View file @
6eef6eb6
...
...
@@ -2,7 +2,7 @@ import { GlLink, GlLabel, GlIcon, GlFormCheckbox, GlSprintf } from '@gitlab/ui';
import
{
useFakeDate
}
from
'
helpers/fake_date
'
;
import
{
shallowMountExtended
as
shallowMount
}
from
'
helpers/vue_test_utils_helper
'
;
import
IssuableItem
from
'
~/vue_shared/issuable/list/components/issuable_item.vue
'
;
import
IssuableAssignees
from
'
~/
vue_shared/components/issue
/issue_assignees.vue
'
;
import
IssuableAssignees
from
'
~/
issuable/components
/issue_assignees.vue
'
;
import
{
mockIssuable
,
mockRegularLabel
,
mockScopedLabel
}
from
'
../mock_data
'
;
...
...
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