Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
李少辉-开发者
gitlab-foss
提交
b38e6903
G
gitlab-foss
项目概览
李少辉-开发者
/
gitlab-foss
通知
15
Star
0
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
G
gitlab-foss
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
体验新版 GitCode,发现更多精彩内容 >>
提交
b38e6903
编写于
8月 11, 2017
作者:
F
Filipa Lacerda
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
Fix open discussions
上级
fc9e5743
变更
16
隐藏空白更改
内联
并排
Showing
16 changed file
with
54 addition
and
68 deletion
+54
-68
app/assets/javascripts/notes/components/issue_comment_form.vue
...ssets/javascripts/notes/components/issue_comment_form.vue
+9
-17
app/assets/javascripts/notes/components/issue_discussion.vue
app/assets/javascripts/notes/components/issue_discussion.vue
+1
-1
app/assets/javascripts/notes/components/issue_note_actions.vue
...ssets/javascripts/notes/components/issue_note_actions.vue
+6
-7
app/assets/javascripts/notes/components/issue_note_awards_list.vue
...s/javascripts/notes/components/issue_note_awards_list.vue
+2
-2
app/assets/javascripts/notes/components/issue_note_body.vue
app/assets/javascripts/notes/components/issue_note_body.vue
+0
-1
app/assets/javascripts/notes/components/issue_note_header.vue
...assets/javascripts/notes/components/issue_note_header.vue
+1
-6
app/assets/javascripts/notes/components/issue_notes_app.vue
app/assets/javascripts/notes/components/issue_notes_app.vue
+6
-7
app/assets/javascripts/notes/components/issue_placeholder_note.vue
...s/javascripts/notes/components/issue_placeholder_note.vue
+11
-10
app/assets/javascripts/notes/components/issue_system_note.vue
...assets/javascripts/notes/components/issue_system_note.vue
+3
-5
app/assets/javascripts/notes/constants.js
app/assets/javascripts/notes/constants.js
+1
-0
app/assets/javascripts/notes/index.js
app/assets/javascripts/notes/index.js
+0
-3
app/assets/javascripts/notes/stores/getters.js
app/assets/javascripts/notes/stores/getters.js
+8
-5
app/assets/javascripts/vue_shared/components/markdown/field.vue
...sets/javascripts/vue_shared/components/markdown/field.vue
+2
-3
app/views/projects/issues/_discussion.html.haml
app/views/projects/issues/_discussion.html.haml
+2
-0
app/views/shared/notes/_notes_with_form.html.haml
app/views/shared/notes/_notes_with_form.html.haml
+1
-1
features/project/issues/issues.feature
features/project/issues/issues.feature
+1
-0
未找到文件。
app/assets/javascripts/notes/components/issue_comment_form.vue
浏览文件 @
b38e6903
<
script
>
/* global Flash, Autosave */
import
{
mapActions
,
mapGetters
}
from
'
vuex
'
;
import
_
from
'
underscore
'
;
import
'
../../autosave
'
;
...
...
@@ -113,7 +112,7 @@
data
:
{
view
:
'
full_data
'
,
note
:
{
noteable_type
:
'
Issue
'
,
noteable_type
:
constants
.
NOTEABLE_TYPE
,
noteable_id
:
this
.
getIssueData
.
id
,
note
:
this
.
note
,
},
...
...
@@ -123,7 +122,6 @@
if
(
this
.
noteType
===
constants
.
DISCUSSION
)
{
noteData
.
data
.
note
.
type
=
constants
.
DISCUSSION_NOTE
;
}
this
.
isSubmitting
=
true
;
this
.
saveNote
(
noteData
)
...
...
@@ -150,13 +148,7 @@
}
if
(
withIssueAction
)
{
if
(
this
.
isIssueOpen
)
{
this
.
issueState
=
constants
.
CLOSED
;
}
else
{
this
.
issueState
=
constants
.
REOPENED
;
}
this
.
isIssueOpen
=
!
this
.
isIssueOpen
;
this
.
issueState
=
this
.
isIssueOpen
?
constants
.
CLOSED
:
constants
.
REOPENED
;
// This is out of scope for the Notes Vue component.
// It was the shortest path to update the issue state and relevant places.
...
...
@@ -220,9 +212,8 @@
<ul
v-else
class=
"notes notes-form timeline new-note"
>
<li
class=
"timeline-entry"
ref=
"commentForm"
>
<li
class=
"timeline-entry"
>
<div
class=
"timeline-entry-inner"
>
<div
class=
"flash-container timeline-content"
></div>
<div
class=
"timeline-icon hidden-xs hidden-sm"
>
<user-avatar-link
v-if=
"author"
...
...
@@ -234,10 +225,10 @@
</div>
<div
>
<form
class=
"js-main-target-form timeline-content timeline-content-form common-note-form"
@
submit=
"handleSave(true)"
>
ref=
"commentForm"
class=
"js-main-target-form timeline-content timeline-content-form common-note-form"
>
<div
class=
"flash-container timeline-content"
></div>
<confidentialIssue
v-if=
"isConfidentialIssue"
/>
<markdown-field
:markdown-preview-url=
"markdownPreviewUrl"
:markdown-docs=
"markdownDocsUrl"
...
...
@@ -263,7 +254,7 @@
<button
@
click=
"handleSave()"
:disabled=
"isSubmitButtonDisabled"
class=
"btn btn-
nr btn-
create comment-btn js-comment-button js-comment-submit-button"
class=
"btn btn-create comment-btn js-comment-button js-comment-submit-button"
type=
"button"
>
{{
commentButtonTitle
}}
</button>
...
...
@@ -319,7 +310,8 @@
</ul>
</div>
<button
type=
"submit"
type=
"button"
@
click=
"handleSave(true)"
v-if=
"canUpdateIssue"
:class=
"actionButtonClassNames"
class=
"btn btn-comment btn-comment-and-close"
>
...
...
app/assets/javascripts/notes/components/issue_discussion.vue
浏览文件 @
b38e6903
...
...
@@ -148,7 +148,7 @@
:created-at=
"discussion.created_at"
:note-id=
"discussion.id"
:include-toggle=
"true"
:toggle-h
andler=
"toggleDiscussionHandler"
@
toggleH
andler=
"toggleDiscussionHandler"
action-text=
"started a discussion"
/>
<issue-note-edited-text
...
...
app/assets/javascripts/notes/components/issue_note_actions.vue
浏览文件 @
b38e6903
...
...
@@ -7,6 +7,7 @@
import
tooltip
from
'
../../vue_shared/directives/tooltip
'
;
export
default
{
name
:
'
issueNoteActions
'
,
props
:
{
authorId
:
{
type
:
Number
,
...
...
@@ -41,13 +42,6 @@
directives
:
{
tooltip
,
},
data
()
{
return
{
emojiSmiling
,
emojiSmile
,
emojiSmiley
,
};
},
components
:
{
loadingIcon
,
},
...
...
@@ -76,6 +70,11 @@
this
.
$emit
(
'
deleteHandler
'
);
},
},
created
()
{
this
.
emojiSmiling
=
emojiSmiling
;
this
.
emojiSmile
=
emojiSmile
;
this
.
emojiSmiley
=
emojiSmiley
;
}
};
</
script
>
...
...
app/assets/javascripts/notes/components/issue_note_awards_list.vue
浏览文件 @
b38e6903
...
...
@@ -5,7 +5,7 @@
import
emojiSmiling
from
'
icons/_emoji_slightly_smiling_face.svg
'
;
import
emojiSmile
from
'
icons/_emoji_smile.svg
'
;
import
emojiSmiley
from
'
icons/_emoji_smiley.svg
'
;
import
*
as
Emoji
from
'
../../emoji
'
;
import
{
glEmojiTag
}
from
'
../../emoji
'
;
import
tooltip
from
'
../../vue_shared/directives/tooltip
'
;
export
default
{
...
...
@@ -79,7 +79,7 @@
'
toggleAwardRequest
'
,
]),
getAwardHTML
(
name
)
{
return
Emoji
.
glEmojiTag
(
name
);
return
glEmojiTag
(
name
);
},
getAwardClassBindings
(
awardList
,
awardName
)
{
return
{
...
...
app/assets/javascripts/notes/components/issue_note_body.vue
浏览文件 @
b38e6903
<
script
>
/* global Autosave */
import
issueNoteEditedText
from
'
./issue_note_edited_text.vue
'
;
import
issueNoteAwardsList
from
'
./issue_note_awards_list.vue
'
;
import
issueNoteForm
from
'
./issue_note_form.vue
'
;
...
...
app/assets/javascripts/notes/components/issue_note_header.vue
浏览文件 @
b38e6903
...
...
@@ -31,11 +31,6 @@
required
:
false
,
default
:
false
,
},
toggleHandler
:
{
type
:
Function
,
required
:
false
,
default
:
()
=>
{},
},
},
data
()
{
return
{
...
...
@@ -59,7 +54,7 @@
]),
handleToggle
()
{
this
.
isExpanded
=
!
this
.
isExpanded
;
this
.
toggleHandler
(
);
this
.
$emit
(
'
toggleHandler
'
);
},
updateTargetNoteHash
()
{
this
.
setTargetNoteHash
(
this
.
noteTimestampLink
);
...
...
app/assets/javascripts/notes/components/issue_notes_app.vue
浏览文件 @
b38e6903
...
...
@@ -79,16 +79,15 @@
},
fetchNotes
()
{
return
this
.
actionFetchNotes
(
this
.
getNotesDataByProp
(
'
discussionsPath
'
))
.
then
(()
=>
this
.
initPolling
())
.
then
(()
=>
{
// Scroll to note if we have hash fragment in the page URL
this
.
$nextTick
(()
=>
{
this
.
checkLocationHash
();
});
this
.
isLoading
=
false
;
})
.
catch
(()
=>
Flash
(
'
Something went wrong while fetching issue comments. Please try again.
'
))
.
then
(()
=>
{
.
then
(()
=>
this
.
$nextTick
())
.
then
(()
=>
this
.
checkLocationHash
())
.
catch
(()
=>
{
this
.
isLoading
=
false
;
this
.
initPolling
(
);
Flash
(
'
Something went wrong while fetching issue comments. Please try again.
'
);
});
},
initPolling
()
{
...
...
app/assets/javascripts/notes/components/issue_placeholder_note.vue
浏览文件 @
b38e6903
<
script
>
import
{
mapGetters
}
from
'
vuex
'
;
import
userAvatarLink
from
'
../../vue_shared/components/user_avatar/user_avatar_link.vue
'
;
export
default
{
...
...
@@ -12,10 +13,10 @@
components
:
{
userAvatarLink
,
},
data
()
{
return
{
currentUser
:
this
.
$store
.
getters
.
getUserData
,
};
computed
:
{
...
mapGetters
([
'
getUserData
'
,
]),
},
};
</
script
>
...
...
@@ -25,9 +26,9 @@
<div
class=
"timeline-entry-inner"
>
<div
class=
"timeline-icon"
>
<user-avatar-link
:link-href=
"
currentUser
.path"
:img-src=
"
currentUser
.avatar_url"
:size=
"40"
:link-href=
"
getUserData
.path"
:img-src=
"
getUserData
.avatar_url"
:
img-
size=
"40"
/>
</div>
<div
...
...
@@ -35,9 +36,9 @@
class="timeline-content">
<div
class=
"note-header"
>
<div
class=
"note-header-info"
>
<a
:href=
"
currentUser
.path"
>
<span
class=
"hidden-xs"
>
{{
currentUser
.
name
}}
</span>
<span
class=
"note-headline-light"
>
@
{{
currentUser
.
username
}}
</span>
<a
:href=
"
getUserData
.path"
>
<span
class=
"hidden-xs"
>
{{
getUserData
.
name
}}
</span>
<span
class=
"note-headline-light"
>
@
{{
getUserData
.
username
}}
</span>
</a>
</div>
</div>
...
...
app/assets/javascripts/notes/components/issue_system_note.vue
浏览文件 @
b38e6903
...
...
@@ -11,11 +11,6 @@
required
:
true
,
},
},
data
()
{
return
{
svg
:
iconsMap
[
this
.
note
.
system_note_icon_name
],
};
},
components
:
{
issueNoteHeader
,
},
...
...
@@ -30,6 +25,9 @@
return
this
.
targetNoteHash
===
this
.
noteAnchorId
;
},
},
created
()
{
this
.
svg
=
iconsMap
[
this
.
note
.
system_note_icon_name
];
},
};
</
script
>
...
...
app/assets/javascripts/notes/constants.js
浏览文件 @
b38e6903
...
...
@@ -8,3 +8,4 @@ export const REOPENED = 'reopened';
export
const
CLOSED
=
'
closed
'
;
export
const
EMOJI_THUMBSUP
=
'
thumbsup
'
;
export
const
EMOJI_THUMBSDOWN
=
'
thumbsdown
'
;
export
const
NOTEABLE_TYPE
=
'
Issue
'
;
app/assets/javascripts/notes/index.js
浏览文件 @
b38e6903
...
...
@@ -25,9 +25,6 @@ document.addEventListener('DOMContentLoaded', () => new Vue({
},
render
(
createElement
)
{
return
createElement
(
'
issue-notes-app
'
,
{
attrs
:
{
ref
:
'
notes
'
,
},
props
:
{
issueData
:
this
.
issueData
,
notesData
:
this
.
notesData
,
...
...
app/assets/javascripts/notes/stores/getters.js
浏览文件 @
b38e6903
...
...
@@ -18,11 +18,14 @@ export const notesById = state => state.notes.reduce((acc, note) => {
},
{});
const
reverseNotes
=
array
=>
array
.
slice
(
0
).
reverse
();
const
isLastNote
=
(
note
,
state
)
=>
!
note
.
system
&&
note
.
author
.
id
===
state
.
userData
.
id
;
export
const
getCurrentUserLastNote
=
state
=>
_
.
flatten
(
reverseNotes
(
state
.
notes
)
.
map
(
note
=>
note
.
notes
))
.
find
(
el
=>
isLastNote
(
el
,
state
));
const
isLastNote
=
(
note
,
state
)
=>
!
note
.
system
&&
state
.
userData
&&
note
.
author
.
id
===
state
.
userData
.
id
;
export
const
getCurrentUserLastNote
=
state
=>
_
.
flatten
(
reverseNotes
(
state
.
notes
)
.
map
(
note
=>
reverseNotes
(
note
.
notes
)),
).
find
(
el
=>
isLastNote
(
el
,
state
));
export
const
getDiscussionLastNote
=
state
=>
discussion
=>
reverseNotes
(
discussion
.
notes
)
.
find
(
el
=>
isLastNote
(
el
,
state
));
app/assets/javascripts/vue_shared/components/markdown/field.vue
浏览文件 @
b38e6903
...
...
@@ -3,8 +3,6 @@
import
markdownHeader
from
'
./header.vue
'
;
import
markdownToolbar
from
'
./toolbar.vue
'
;
const
REFERENCED_USERS_THRESHOLD
=
10
;
export
default
{
props
:
{
markdownPreviewUrl
:
{
...
...
@@ -41,7 +39,8 @@
},
computed
:
{
shouldShowReferencedUsers
()
{
return
this
.
referencedUsers
.
length
>=
REFERENCED_USERS_THRESHOLD
;
const
referencedUsersThreshold
=
10
;
return
this
.
referencedUsers
.
length
>=
referencedUsersThreshold
;
},
},
methods
:
{
...
...
app/views/projects/issues/_discussion.html.haml
浏览文件 @
b38e6903
...
...
@@ -16,3 +16,5 @@
-
content_for
:page_specific_javascripts
do
=
webpack_bundle_tag
'common_vue'
=
webpack_bundle_tag
'notes'
=
render
"layouts/init_auto_complete"
\ No newline at end of file
app/views/shared/notes/_notes_with_form.html.haml
浏览文件 @
b38e6903
...
...
@@ -15,7 +15,7 @@
.timeline-content.timeline-content-form
=
render
"shared/notes/form"
,
view:
diff_view
,
supports_autocomplete:
autocomplete
-
elsif
!
current_user
.disabled-comment.text-center.prepend-top-default
.js-disabled-comment
.disabled-comment.text-center.prepend-top-default
Please
=
link_to
"register"
,
new_session_path
(
:user
,
redirect_to_referer:
'yes'
),
class:
'js-register-link'
or
...
...
features/project/issues/issues.feature
浏览文件 @
b38e6903
...
...
@@ -46,6 +46,7 @@ Feature: Project Issues
Given
I visit issue page
"Release 0.4"
And
I leave a comment like
"XML attached"
Then
I should see comment
"XML attached"
And
I should see an error alert section within the comment form
@javascript
Scenario
:
Visiting Issues after being sorted the list
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录