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
Boxiang Sun
gitlab-ce
Commits
4b1d580a
Commit
4b1d580a
authored
May 04, 2017
by
Clement Ho
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Fix FE conflicts
parent
dde9b669
Changes
12
Show whitespace changes
Inline
Side-by-side
Showing
12 changed files
with
1 addition
and
358 deletions
+1
-358
app/assets/javascripts/issuable/time_tracking/components/collapsed_state.js
...ipts/issuable/time_tracking/components/collapsed_state.js
+0
-42
app/assets/javascripts/issuable/time_tracking/components/comparison_pane.js
...ipts/issuable/time_tracking/components/comparison_pane.js
+0
-70
app/assets/javascripts/issuable/time_tracking/components/estimate_only_pane.js
...s/issuable/time_tracking/components/estimate_only_pane.js
+0
-14
app/assets/javascripts/issuable/time_tracking/components/help_state.js
...vascripts/issuable/time_tracking/components/help_state.js
+0
-25
app/assets/javascripts/issuable/time_tracking/components/spent_only_pane.js
...ipts/issuable/time_tracking/components/spent_only_pane.js
+0
-14
app/assets/javascripts/issuable/time_tracking/components/time_tracker.js
...scripts/issuable/time_tracking/components/time_tracker.js
+0
-117
app/assets/javascripts/members.js
app/assets/javascripts/members.js
+1
-20
app/assets/javascripts/milestone_select.js
app/assets/javascripts/milestone_select.js
+0
-20
app/assets/javascripts/users_select.js
app/assets/javascripts/users_select.js
+0
-23
app/views/projects/boards/components/sidebar/_assignee.html.haml
...ws/projects/boards/components/sidebar/_assignee.html.haml
+0
-4
app/views/shared/issuable/_search_bar.html.haml
app/views/shared/issuable/_search_bar.html.haml
+0
-4
app/views/shared/issuable/_sidebar.html.haml
app/views/shared/issuable/_sidebar.html.haml
+0
-5
No files found.
app/assets/javascripts/issuable/time_tracking/components/collapsed_state.js
deleted
100644 → 0
View file @
dde9b669
import
Vue
from
'
vue
'
;
import
stopwatchSvg
from
'
icons/_icon_stopwatch.svg
'
;
require
(
'
../../../lib/utils/pretty_time
'
);
(()
=>
{
Vue
.
component
(
'
time-tracking-collapsed-state
'
,
{
name
:
'
time-tracking-collapsed-state
'
,
props
:
[
'
showComparisonState
'
,
'
showSpentOnlyState
'
,
'
showEstimateOnlyState
'
,
'
showNoTimeTrackingState
'
,
'
timeSpentHumanReadable
'
,
'
timeEstimateHumanReadable
'
,
],
methods
:
{
abbreviateTime
(
timeStr
)
{
return
gl
.
utils
.
prettyTime
.
abbreviateTime
(
timeStr
);
},
},
template
:
`
<div class='sidebar-collapsed-icon'>
${
stopwatchSvg
}
<div class='time-tracking-collapsed-summary'>
<div class='compare' v-if='showComparisonState'>
<span>{{ abbreviateTime(timeSpentHumanReadable) }} / {{ abbreviateTime(timeEstimateHumanReadable) }}</span>
</div>
<div class='estimate-only' v-if='showEstimateOnlyState'>
<span class='bold'>-- / {{ abbreviateTime(timeEstimateHumanReadable) }}</span>
</div>
<div class='spend-only' v-if='showSpentOnlyState'>
<span class='bold'>{{ abbreviateTime(timeSpentHumanReadable) }} / --</span>
</div>
<div class='no-tracking' v-if='showNoTimeTrackingState'>
<span class='no-value'>None</span>
</div>
</div>
</div>
`
,
});
})();
app/assets/javascripts/issuable/time_tracking/components/comparison_pane.js
deleted
100644 → 0
View file @
dde9b669
import
Vue
from
'
vue
'
;
require
(
'
../../../lib/utils/pretty_time
'
);
(()
=>
{
const
prettyTime
=
gl
.
utils
.
prettyTime
;
Vue
.
component
(
'
time-tracking-comparison-pane
'
,
{
name
:
'
time-tracking-comparison-pane
'
,
props
:
[
'
timeSpent
'
,
'
timeEstimate
'
,
'
timeSpentHumanReadable
'
,
'
timeEstimateHumanReadable
'
,
],
computed
:
{
parsedRemaining
()
{
const
diffSeconds
=
this
.
timeEstimate
-
this
.
timeSpent
;
return
prettyTime
.
parseSeconds
(
diffSeconds
);
},
timeRemainingHumanReadable
()
{
return
prettyTime
.
stringifyTime
(
this
.
parsedRemaining
);
},
timeRemainingTooltip
()
{
const
prefix
=
this
.
timeRemainingMinutes
<
0
?
'
Over by
'
:
'
Time remaining:
'
;
return
`
${
prefix
}
${
this
.
timeRemainingHumanReadable
}
`
;
},
/* Diff values for comparison meter */
timeRemainingMinutes
()
{
return
this
.
timeEstimate
-
this
.
timeSpent
;
},
timeRemainingPercent
()
{
return
`
${
Math
.
floor
((
this
.
timeSpent
/
this
.
timeEstimate
)
*
100
)}
%`
;
},
timeRemainingStatusClass
()
{
return
this
.
timeEstimate
>=
this
.
timeSpent
?
'
within_estimate
'
:
'
over_estimate
'
;
},
/* Parsed time values */
parsedEstimate
()
{
return
prettyTime
.
parseSeconds
(
this
.
timeEstimate
);
},
parsedSpent
()
{
return
prettyTime
.
parseSeconds
(
this
.
timeSpent
);
},
},
template
:
`
<div class='time-tracking-comparison-pane'>
<div class='compare-meter' data-toggle='tooltip' data-placement='top' role='timeRemainingDisplay'
:aria-valuenow='timeRemainingTooltip'
:title='timeRemainingTooltip'
:data-original-title='timeRemainingTooltip'
:class='timeRemainingStatusClass'>
<div class='meter-container' role='timeSpentPercent' :aria-valuenow='timeRemainingPercent'>
<div :style='{ width: timeRemainingPercent }' class='meter-fill'></div>
</div>
<div class='compare-display-container'>
<div class='compare-display pull-left'>
<span class='compare-label'>Spent</span>
<span class='compare-value spent'>{{ timeSpentHumanReadable }}</span>
</div>
<div class='compare-display estimated pull-right'>
<span class='compare-label'>Est</span>
<span class='compare-value'>{{ timeEstimateHumanReadable }}</span>
</div>
</div>
</div>
</div>
`
,
});
})();
app/assets/javascripts/issuable/time_tracking/components/estimate_only_pane.js
deleted
100644 → 0
View file @
dde9b669
import
Vue
from
'
vue
'
;
(()
=>
{
Vue
.
component
(
'
time-tracking-estimate-only-pane
'
,
{
name
:
'
time-tracking-estimate-only-pane
'
,
props
:
[
'
timeEstimateHumanReadable
'
],
template
:
`
<div class='time-tracking-estimate-only-pane'>
<span class='bold'>Estimated:</span>
{{ timeEstimateHumanReadable }}
</div>
`
,
});
})();
app/assets/javascripts/issuable/time_tracking/components/help_state.js
deleted
100644 → 0
View file @
dde9b669
import
Vue
from
'
vue
'
;
(()
=>
{
Vue
.
component
(
'
time-tracking-help-state
'
,
{
name
:
'
time-tracking-help-state
'
,
props
:
[
'
docsUrl
'
],
template
:
`
<div class='time-tracking-help-state'>
<div class='time-tracking-info'>
<h4>Track time with slash commands</h4>
<p>Slash commands can be used in the issues description and comment boxes.</p>
<p>
<code>/estimate</code>
will update the estimated time with the latest command.
</p>
<p>
<code>/spend</code>
will update the sum of the time spent.
</p>
<a class='btn btn-default learn-more-button' :href='docsUrl'>Learn more</a>
</div>
</div>
`
,
});
})();
app/assets/javascripts/issuable/time_tracking/components/spent_only_pane.js
deleted
100644 → 0
View file @
dde9b669
import
Vue
from
'
vue
'
;
(()
=>
{
Vue
.
component
(
'
time-tracking-spent-only-pane
'
,
{
name
:
'
time-tracking-spent-only-pane
'
,
props
:
[
'
timeSpentHumanReadable
'
],
template
:
`
<div class='time-tracking-spend-only-pane'>
<span class='bold'>Spent:</span>
{{ timeSpentHumanReadable }}
</div>
`
,
});
})();
app/assets/javascripts/issuable/time_tracking/components/time_tracker.js
deleted
100644 → 0
View file @
dde9b669
import
Vue
from
'
vue
'
;
require
(
'
./help_state
'
);
require
(
'
./collapsed_state
'
);
require
(
'
./spent_only_pane
'
);
require
(
'
./no_tracking_pane
'
);
require
(
'
./estimate_only_pane
'
);
require
(
'
./comparison_pane
'
);
(()
=>
{
Vue
.
component
(
'
issuable-time-tracker
'
,
{
name
:
'
issuable-time-tracker
'
,
props
:
[
'
time_estimate
'
,
'
time_spent
'
,
'
human_time_estimate
'
,
'
human_time_spent
'
,
'
docsUrl
'
,
],
data
()
{
return
{
showHelp
:
false
,
};
},
computed
:
{
timeSpent
()
{
return
this
.
time_spent
;
},
timeEstimate
()
{
return
this
.
time_estimate
;
},
timeEstimateHumanReadable
()
{
return
this
.
human_time_estimate
;
},
timeSpentHumanReadable
()
{
return
this
.
human_time_spent
;
},
hasTimeSpent
()
{
return
!!
this
.
timeSpent
;
},
hasTimeEstimate
()
{
return
!!
this
.
timeEstimate
;
},
showComparisonState
()
{
return
this
.
hasTimeEstimate
&&
this
.
hasTimeSpent
;
},
showEstimateOnlyState
()
{
return
this
.
hasTimeEstimate
&&
!
this
.
hasTimeSpent
;
},
showSpentOnlyState
()
{
return
this
.
hasTimeSpent
&&
!
this
.
hasTimeEstimate
;
},
showNoTimeTrackingState
()
{
return
!
this
.
hasTimeEstimate
&&
!
this
.
hasTimeSpent
;
},
showHelpState
()
{
return
!!
this
.
showHelp
;
},
},
methods
:
{
toggleHelpState
(
show
)
{
this
.
showHelp
=
show
;
},
},
template
:
`
<div class='time_tracker time-tracking-component-wrap' v-cloak>
<time-tracking-collapsed-state
:show-comparison-state='showComparisonState'
:show-help-state='showHelpState'
:show-spent-only-state='showSpentOnlyState'
:show-estimate-only-state='showEstimateOnlyState'
:time-spent-human-readable='timeSpentHumanReadable'
:time-estimate-human-readable='timeEstimateHumanReadable'>
</time-tracking-collapsed-state>
<div class='title hide-collapsed'>
Time tracking
<div class='help-button pull-right'
v-if='!showHelpState'
@click='toggleHelpState(true)'>
<i class='fa fa-question-circle' aria-hidden='true'></i>
</div>
<div class='close-help-button pull-right'
v-if='showHelpState'
@click='toggleHelpState(false)'>
<i class='fa fa-close' aria-hidden='true'></i>
</div>
</div>
<div class='time-tracking-content hide-collapsed'>
<time-tracking-estimate-only-pane
v-if='showEstimateOnlyState'
:time-estimate-human-readable='timeEstimateHumanReadable'>
</time-tracking-estimate-only-pane>
<time-tracking-spent-only-pane
v-if='showSpentOnlyState'
:time-spent-human-readable='timeSpentHumanReadable'>
</time-tracking-spent-only-pane>
<time-tracking-no-tracking-pane
v-if='showNoTimeTrackingState'>
</time-tracking-no-tracking-pane>
<time-tracking-comparison-pane
v-if='showComparisonState'
:time-estimate='timeEstimate'
:time-spent='timeSpent'
:time-spent-human-readable='timeSpentHumanReadable'
:time-estimate-human-readable='timeEstimateHumanReadable'>
</time-tracking-comparison-pane>
<transition name='help-state-toggle'>
<time-tracking-help-state
v-if='showHelpState'
:docs-url='docsUrl'>
</time-tracking-help-state>
</transition>
</div>
</div>
`
,
});
})();
app/assets/javascripts/members.js
View file @
4b1d580a
...
...
@@ -31,27 +31,8 @@
toggleLabel
(
selected
,
$el
)
{
return
$el
.
text
();
},
<<<<<<<
HEAD
clicked
:
(
selected
,
$link
)
=>
{
this
.
formSubmit
(
null
,
$link
);
=======
clicked
:
(
options
)
=>
{
const
$link
=
options
.
$el
;
if
(
!
$link
.
data
(
'
revert
'
))
{
this
.
formSubmit
(
null
,
$link
);
}
else
{
const
{
$memberListItem
,
$toggle
,
$dateInput
}
=
this
.
getMemberListItems
(
$link
);
$toggle
.
disable
();
$dateInput
.
disable
();
this
.
overrideLdap
(
$memberListItem
,
$link
.
data
(
'
endpoint
'
),
false
).
fail
(()
=>
{
$toggle
.
enable
();
$dateInput
.
enable
();
});
}
>>>>>>>
b0a2435
...
Merge
branch
'
multiple_assignees_review_upstream
'
into
ee_master
this
.
formSubmit
(
null
,
options
.
$el
);
},
});
});
...
...
app/assets/javascripts/milestone_select.js
View file @
4b1d580a
...
...
@@ -121,30 +121,10 @@
return
$value
.
css
(
'
display
'
,
''
);
},
vue
:
$dropdown
.
hasClass
(
'
js-issue-board-sidebar
'
),
<<<<<<<
HEAD
clicked
:
function
(
selected
,
$el
,
e
)
{
=======
hideRow
:
function
(
milestone
)
{
if
(
$
(
'
html
'
).
hasClass
(
'
issue-boards-page
'
)
&&
!
$dropdown
.
hasClass
(
'
js-issue-board-sidebar
'
)
&&
!
$dropdown
.
closest
(
'
.add-issues-modal
'
).
length
&&
gl
.
issueBoards
.
BoardsStore
.
state
.
currentBoard
.
milestone
)
{
return
milestone
!==
gl
.
issueBoards
.
BoardsStore
.
state
.
currentBoard
.
milestone
.
title
;
}
return
false
;
},
isSelectable
:
function
()
{
if
(
$
(
'
html
'
).
hasClass
(
'
issue-boards-page
'
)
&&
!
$dropdown
.
hasClass
(
'
js-issue-board-sidebar
'
)
&&
!
$dropdown
.
closest
(
'
.add-issues-modal
'
).
length
&&
gl
.
issueBoards
.
BoardsStore
.
state
.
currentBoard
.
milestone_id
)
{
return
false
;
}
return
true
;
},
clicked
:
function
(
options
)
{
const
{
$el
,
e
}
=
options
;
let
selected
=
options
.
selectedObj
;
>>>>>>>
b0a2435
...
Merge
branch
'
multiple_assignees_review_upstream
'
into
ee_master
var
data
,
isIssueIndex
,
isMRIndex
,
page
,
boardsStore
;
page
=
$
(
'
body
'
).
data
(
'
page
'
);
isIssueIndex
=
page
===
'
projects:issues:index
'
;
...
...
app/assets/javascripts/users_select.js
View file @
4b1d580a
...
...
@@ -320,11 +320,6 @@ import eventHub from './sidebar/event_hub';
$value
.
css
(
'
display
'
,
''
);
}
},
<<<<<<<
HEAD
vue
:
$dropdown
.
hasClass
(
'
js-issue-board-sidebar
'
),
clicked
:
function
(
user
,
$el
,
e
)
{
var
isIssueIndex
,
isMRIndex
,
page
,
selected
,
isSelecting
;
=======
multiSelect
:
$dropdown
.
hasClass
(
'
js-multiselect
'
),
inputMeta
:
$dropdown
.
data
(
'
input-meta
'
),
clicked
:
function
(
options
)
{
...
...
@@ -390,7 +385,6 @@ import eventHub from './sidebar/event_hub';
}
var
isIssueIndex
,
isMRIndex
,
page
,
selected
;
>>>>>>>
b0a2435
...
Merge
branch
'
multiple_assignees_review_upstream
'
into
ee_master
page
=
$
(
'
body
'
).
data
(
'
page
'
);
isIssueIndex
=
page
===
'
projects:issues:index
'
;
isMRIndex
=
(
page
===
page
&&
page
===
'
projects:merge_requests:index
'
);
...
...
@@ -411,24 +405,7 @@ import eventHub from './sidebar/event_hub';
return
Issuable
.
filterResults
(
$dropdown
.
closest
(
'
form
'
));
}
else
if
(
$dropdown
.
hasClass
(
'
js-filter-submit
'
))
{
return
$dropdown
.
closest
(
'
form
'
).
submit
();
<<<<<<<
HEAD
}
else
if
(
$dropdown
.
hasClass
(
'
js-issue-board-sidebar
'
))
{
if
(
user
.
id
&&
isSelecting
)
{
gl
.
issueBoards
.
boardStoreIssueSet
(
'
assignee
'
,
new
ListUser
({
id
:
user
.
id
,
username
:
user
.
username
,
name
:
user
.
name
,
avatar_url
:
user
.
avatar_url
}));
}
else
{
gl
.
issueBoards
.
boardStoreIssueDelete
(
'
assignee
'
);
}
updateIssueBoardsIssue
();
}
else
{
=======
}
else
if
(
!
$dropdown
.
hasClass
(
'
js-multiselect
'
))
{
>>>>>>>
b0a2435
...
Merge
branch
'
multiple_assignees_review_upstream
'
into
ee_master
selected
=
$dropdown
.
closest
(
'
.selectbox
'
).
find
(
"
input[name='
"
+
(
$dropdown
.
data
(
'
field-name
'
))
+
"
']
"
).
val
();
return
assignTo
(
selected
);
}
...
...
app/views/projects/boards/components/sidebar/_assignee.html.haml
View file @
4b1d580a
...
...
@@ -16,11 +16,7 @@
"v-if"
=>
"issue.assignees"
,
"v-for"
=>
"assignee in issue.assignees"
}
.dropdown
<
<<<<<<
HEAD
%button
.dropdown-menu-toggle.js-user-search.js-author-search.js-issue-board-sidebar
{
type:
"button"
,
data:
{
toggle:
"dropdown"
,
field_name:
"issue[assignee_id]"
,
first_user:
(
current_user
.
username
if
current_user
),
current_user:
"true"
,
project_id:
@project
.
id
,
null_user:
"true"
,
null_user_default:
"true"
},
=======
%button
.dropdown-menu-toggle.js-user-search.js-author-search.js-multiselect.js-save-user-data.js-issue-board-sidebar
{
type:
"button"
,
ref:
"assigneeDropdown"
,
data:
{
toggle:
"dropdown"
,
field_name:
"issue[assignee_ids][]"
,
first_user:
(
current_user
.
username
if
current_user
),
current_user:
"true"
,
project_id:
@project
.
id
,
null_user:
"true"
,
multi_select:
"true"
,
dropdown:
{
header:
'Assignee(s)'
}
},
>>>>>>>
b0a2435
...
Merge
branch
'multiple_assignees_review_upstream'
into
ee_master
":data-issuable-id"
=>
"issue.id"
,
":data-selected"
=>
"assigneeId"
,
":data-issue-update"
=>
"'#{namespace_project_issues_path(@project.namespace, @project)}/' + issue.id + '.json'"
}
...
...
app/views/shared/issuable/_search_bar.html.haml
View file @
4b1d580a
...
...
@@ -130,11 +130,7 @@
-
field_name
=
"update[assignee_id]"
=
dropdown_tag
(
"Assignee"
,
options:
{
toggle_class:
"js-user-search js-update-assignee js-filter-submit js-filter-bulk-update"
,
title:
"Assign to"
,
filter:
true
,
dropdown_class:
"dropdown-menu-user dropdown-menu-selectable"
,
<<<<<<<
HEAD
placeholder: "Search authors", data: { first_user: (current_user.username if current_user), null_user: true, current_user: true, project_id: @project.id, field_name: "update[assignee_id]", default_label: "Assignee" } })
==
=====
placeholder:
"Search authors"
,
data:
{
first_user:
(
current_user
.
username
if
current_user
),
null_user:
true
,
current_user:
true
,
project_id:
@project
.
id
,
field_name:
field_name
}
})
>>>>>>> b0a2435... Merge branch 'multiple_assignees_review_upstream' into ee_master
.filter-item.inline
=
dropdown_tag
(
"Milestone"
,
options:
{
title:
"Assign milestone"
,
toggle_class:
'js-milestone-select js-extra-options js-filter-submit js-filter-bulk-update'
,
filter:
true
,
dropdown_class:
"dropdown-menu-selectable dropdown-menu-milestone"
,
placeholder:
"Search milestones"
,
data:
{
show_no:
true
,
field_name:
"update[milestone_id]"
,
project_id:
@project
.
id
,
milestones:
namespace_project_milestones_path
(
@project
.
namespace
,
@project
,
:json
),
use_id:
true
,
default_label:
"Milestone"
}
})
.filter-item.inline.labels-filter
...
...
app/views/shared/issuable/_sidebar.html.haml
View file @
4b1d580a
...
...
@@ -50,13 +50,8 @@
assign yourself
.selectbox.hide-collapsed
<
<<<<<<
HEAD
=
f
.
hidden_field
'assignee_id'
,
value:
issuable
.
assignee_id
,
id:
'issue_assignee_id'
=
dropdown_tag
(
'Select assignee'
,
options:
{
toggle_class:
'js-user-search js-author-search'
,
title:
'Assign to'
,
filter:
true
,
dropdown_class:
'dropdown-menu-user dropdown-menu-selectable dropdown-menu-author'
,
placeholder:
'Search users'
,
data:
{
first_user:
(
current_user
.
username
if
current_user
),
current_user:
true
,
project_id:
(
@project
.
id
if
@project
),
author_id:
issuable
.
author_id
,
field_name:
"
#{
issuable
.
to_ability_name
}
[assignee_id]"
,
issue_update:
issuable_json_path
(
issuable
),
ability_name:
issuable
.
to_ability_name
,
null_user:
true
,
null_user_default:
true
,
selected:
issuable
.
assignee_id
}
})
==
=====
-
issuable
.
assignees
.
each
do
|
assignee
|
=
hidden_field_tag
"
#{
issuable
.
to_ability_name
}
[assignee_ids][]"
,
assignee
.
id
,
id:
nil
>
>>>>>> b0a2435... Merge branch 'multiple_assignees_review_upstream' into ee_master
-
options
=
{
toggle_class:
'js-user-search js-author-search'
,
title:
'Assign to'
,
filter:
true
,
dropdown_class:
'dropdown-menu-user dropdown-menu-selectable dropdown-menu-author'
,
placeholder:
'Search users'
,
data:
{
first_user:
(
current_user
.
username
if
current_user
),
current_user:
true
,
project_id:
(
@project
.
id
if
@project
),
author_id:
issuable
.
author_id
,
field_name:
"
#{
issuable
.
to_ability_name
}
[assignee_id]"
,
issue_update:
issuable_json_path
(
issuable
),
ability_name:
issuable
.
to_ability_name
,
null_user:
true
}
}
...
...
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