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
7c7f5266
Commit
7c7f5266
authored
Jan 05, 2018
by
Filipa Lacerda
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
[ci skip] Fix more rules
parent
1525b005
Changes
34
Show whitespace changes
Inline
Side-by-side
Showing
34 changed files
with
1035 additions
and
920 deletions
+1035
-920
app/assets/javascripts/boards/components/board_card.vue
app/assets/javascripts/boards/components/board_card.vue
+2
-1
app/assets/javascripts/clusters/components/applications.vue
app/assets/javascripts/clusters/components/applications.vue
+6
-6
app/assets/javascripts/cycle_analytics/components/stage_code_component.vue
...ripts/cycle_analytics/components/stage_code_component.vue
+1
-1
app/assets/javascripts/cycle_analytics/components/stage_plan_component.vue
...ripts/cycle_analytics/components/stage_plan_component.vue
+1
-1
app/assets/javascripts/cycle_analytics/components/stage_review_component.vue
...pts/cycle_analytics/components/stage_review_component.vue
+2
-3
app/assets/javascripts/cycle_analytics/components/stage_staging_component.vue
...ts/cycle_analytics/components/stage_staging_component.vue
+3
-3
app/assets/javascripts/cycle_analytics/components/stage_test_component.vue
...ripts/cycle_analytics/components/stage_test_component.vue
+51
-15
app/assets/javascripts/cycle_analytics/components/total_time_component.vue
...ripts/cycle_analytics/components/total_time_component.vue
+24
-4
app/assets/javascripts/deploy_keys/components/action_btn.vue
app/assets/javascripts/deploy_keys/components/action_btn.vue
+11
-13
app/assets/javascripts/deploy_keys/components/app.vue
app/assets/javascripts/deploy_keys/components/app.vue
+23
-23
app/assets/javascripts/deploy_keys/components/key.vue
app/assets/javascripts/deploy_keys/components/key.vue
+5
-4
app/assets/javascripts/deploy_keys/components/keys_panel.vue
app/assets/javascripts/deploy_keys/components/keys_panel.vue
+7
-5
app/assets/javascripts/environments/components/container.vue
app/assets/javascripts/environments/components/container.vue
+9
-10
app/assets/javascripts/environments/components/empty_state.vue
...ssets/javascripts/environments/components/empty_state.vue
+7
-6
app/assets/javascripts/environments/components/environment_actions.vue
...vascripts/environments/components/environment_actions.vue
+49
-45
app/assets/javascripts/environments/components/environment_external_url.vue
...ipts/environments/components/environment_external_url.vue
+24
-22
app/assets/javascripts/environments/components/environment_item.vue
.../javascripts/environments/components/environment_item.vue
+454
-436
app/assets/javascripts/issue_show/components/description.vue
app/assets/javascripts/issue_show/components/description.vue
+7
-7
app/assets/javascripts/issue_show/components/edited.vue
app/assets/javascripts/issue_show/components/edited.vue
+26
-26
app/assets/javascripts/issue_show/components/fields/description.vue
.../javascripts/issue_show/components/fields/description.vue
+3
-3
app/assets/javascripts/issue_show/components/form.vue
app/assets/javascripts/issue_show/components/form.vue
+15
-11
app/assets/javascripts/issue_show/components/title.vue
app/assets/javascripts/issue_show/components/title.vue
+14
-14
app/assets/javascripts/jobs/components/header.vue
app/assets/javascripts/jobs/components/header.vue
+12
-12
app/assets/javascripts/jobs/components/sidebar_detail_row.vue
...assets/javascripts/jobs/components/sidebar_detail_row.vue
+4
-3
app/assets/javascripts/jobs/components/sidebar_details_block.vue
...ets/javascripts/jobs/components/sidebar_details_block.vue
+32
-28
app/assets/javascripts/monitoring/components/dashboard.vue
app/assets/javascripts/monitoring/components/dashboard.vue
+32
-30
app/assets/javascripts/monitoring/components/empty_state.vue
app/assets/javascripts/monitoring/components/empty_state.vue
+12
-6
app/assets/javascripts/monitoring/components/graph.vue
app/assets/javascripts/monitoring/components/graph.vue
+75
-73
app/assets/javascripts/monitoring/components/graph/deployment.vue
...ts/javascripts/monitoring/components/graph/deployment.vue
+39
-35
app/assets/javascripts/monitoring/components/graph/flag.vue
app/assets/javascripts/monitoring/components/graph/flag.vue
+13
-10
app/assets/javascripts/monitoring/components/graph/legend.vue
...assets/javascripts/monitoring/components/graph/legend.vue
+41
-36
app/assets/javascripts/monitoring/components/graph/path.vue
app/assets/javascripts/monitoring/components/graph/path.vue
+5
-4
app/assets/javascripts/monitoring/components/graph_group.vue
app/assets/javascripts/monitoring/components/graph_group.vue
+8
-8
app/assets/javascripts/notes/components/note_actions.vue
app/assets/javascripts/notes/components/note_actions.vue
+18
-16
No files found.
app/assets/javascripts/boards/components/board_card.vue
View file @
7c7f5266
...
@@ -89,6 +89,7 @@ export default {
...
@@ -89,6 +89,7 @@ export default {
:issue=
"issue"
:issue=
"issue"
:issue-link-base=
"issueLinkBase"
:issue-link-base=
"issueLinkBase"
:root-path=
"rootPath"
:root-path=
"rootPath"
:update-filters=
"true"
/>
:update-filters=
"true"
/>
</li>
</li>
</
template
>
</
template
>
app/assets/javascripts/clusters/components/applications.vue
View file @
7c7f5266
...
@@ -79,7 +79,7 @@ which incur additional costs. See %{pricingLink}`)),
...
@@ -79,7 +79,7 @@ which incur additional costs. See %{pricingLink}`)),
with %{gitlabIntegrationLink} to monitor deployed applications.`
)),
with %{gitlabIntegrationLink} to monitor deployed applications.`
)),
{
{
gitlabIntegrationLink
:
`<a href="https://docs.gitlab.com/ce/user/project/integrations/prometheus.html"
gitlabIntegrationLink
:
`<a href="https://docs.gitlab.com/ce/user/project/integrations/prometheus.html"
target="_blank" rel="noopener noreferrer">
target="_blank" rel="noopener noreferrer">
${
_
.
escape
(
s__
(
'
ClusterIntegration|Gitlab Integration
'
))}
${
_
.
escape
(
s__
(
'
ClusterIntegration|Gitlab Integration
'
))}
</a>`
,
</a>`
,
},
},
...
...
app/assets/javascripts/cycle_analytics/components/stage_code_component.vue
View file @
7c7f5266
...
@@ -12,7 +12,7 @@
...
@@ -12,7 +12,7 @@
props
:
{
props
:
{
items
:
{
items
:
{
type
:
Array
,
type
:
Array
,
default
:
[]
default
:
()
=>
[],
},
},
stage
:
{
stage
:
{
type
:
Object
,
type
:
Object
,
...
...
app/assets/javascripts/cycle_analytics/components/stage_plan_component.vue
View file @
7c7f5266
...
@@ -13,7 +13,7 @@
...
@@ -13,7 +13,7 @@
props
:
{
props
:
{
items
:
{
items
:
{
type
:
Array
,
type
:
Array
,
default
:
[]
default
:
()
=>
[],
},
},
stage
:
{
stage
:
{
type
:
Object
,
type
:
Object
,
...
...
app/assets/javascripts/cycle_analytics/components/stage_review_component.vue
View file @
7c7f5266
...
@@ -14,7 +14,7 @@
...
@@ -14,7 +14,7 @@
props
:
{
props
:
{
items
:
{
items
:
{
type
:
Array
,
type
:
Array
,
default
:
[]
default
:
()
=>
[],
},
},
stage
:
{
stage
:
{
type
:
Object
,
type
:
Object
,
...
@@ -81,8 +81,7 @@
...
@@ -81,8 +81,7 @@
name=
"fork"
name=
"fork"
:size=
"16"
:size=
"16"
/>
/>
<a
<a
:href=
"mergeRequest.branch.url"
>
:href=
"mergeRequest.branch.url"
>
{{
mergeRequest
.
branch
.
name
}}
{{
mergeRequest
.
branch
.
name
}}
</a>
</a>
</span>
</span>
...
...
app/assets/javascripts/cycle_analytics/components/stage_staging_component.vue
View file @
7c7f5266
...
@@ -15,7 +15,7 @@
...
@@ -15,7 +15,7 @@
props
:
{
props
:
{
items
:
{
items
:
{
type
:
Array
,
type
:
Array
,
default
:
[]
default
:
()
=>
[],
},
},
stage
:
{
stage
:
{
type
:
Object
,
type
:
Object
,
...
...
app/assets/javascripts/cycle_analytics/components/stage_test_component.vue
View file @
7c7f5266
...
@@ -6,15 +6,21 @@
...
@@ -6,15 +6,21 @@
import
icon
from
'
../../vue_shared/components/icon.vue
'
;
import
icon
from
'
../../vue_shared/components/icon.vue
'
;
export
default
{
export
default
{
props
:
{
items
:
Array
,
stage
:
Object
,
},
components
:
{
components
:
{
totalTime
,
totalTime
,
limitWarning
,
limitWarning
,
icon
,
icon
,
},
},
props
:
{
items
:
{
type
:
Array
,
default
:
()
=>
[],
},
stage
:
{
type
:
Object
,
default
:
()
=>
({}),
},
},
computed
:
{
computed
:
{
iconBuildStatus
()
{
iconBuildStatus
()
{
return
iconBuildStatus
;
return
iconBuildStatus
;
...
@@ -35,29 +41,59 @@
...
@@ -35,29 +41,59 @@
<li
<li
v-for=
"(build, i) in items"
v-for=
"(build, i) in items"
:key=
"i"
:key=
"i"
class=
"stage-event-item item-build-component"
>
class=
"stage-event-item item-build-component"
>
<div
class=
"item-details"
>
<div
class=
"item-details"
>
<h5
class=
"item-title"
>
<h5
class=
"item-title"
>
<span
class=
"icon-build-status"
v-html=
"iconBuildStatus"
></span>
<span
<a
:href=
"build.url"
class=
"item-build-name"
>
{{
build
.
name
}}
</a>
class=
"icon-build-status"
v-html=
"iconBuildStatus"
>
</span>
<a
:href=
"build.url"
class=
"item-build-name"
>
{{
build
.
name
}}
</a>
·
·
<a
:href=
"build.url"
class=
"pipeline-id"
>
#
{{
build
.
id
}}
</a>
<a
:href=
"build.url"
class=
"pipeline-id"
>
#
{{
build
.
id
}}
</a>
<icon
<icon
name=
"fork"
name=
"fork"
:size=
"16"
>
:size=
"16"
</icon>
/>
<a
:href=
"build.branch.url"
class=
"ref-name"
>
{{
build
.
branch
.
name
}}
</a>
<a
<span
class=
"icon-branch"
v-html=
"iconBranch"
></span>
:href=
"build.branch.url"
<a
:href=
"build.commitUrl"
class=
"commit-sha"
>
{{
build
.
shortSha
}}
</a>
class=
"ref-name"
>
{{
build
.
branch
.
name
}}
</a>
<span
class=
"icon-branch"
v-html=
"iconBranch"
>
</span>
<a
:href=
"build.commitUrl"
class=
"commit-sha"
>
{{
build
.
shortSha
}}
</a>
</h5>
</h5>
<span>
<span>
<a
:href=
"build.url"
class=
"issue-date"
>
<a
:href=
"build.url"
class=
"issue-date"
>
{{
build
.
date
}}
{{
build
.
date
}}
</a>
</a>
</span>
</span>
</div>
</div>
<div
class=
"item-time"
>
<div
class=
"item-time"
>
<total-time
:time=
"build.totalTime"
/>
<total-time
:time=
"build.totalTime"
/>
</div>
</div>
</li>
</li>
</ul>
</ul>
...
...
app/assets/javascripts/cycle_analytics/components/total_time_component.vue
View file @
7c7f5266
...
@@ -17,10 +17,30 @@
...
@@ -17,10 +17,30 @@
<
template
>
<
template
>
<span
class=
"total-time"
>
<span
class=
"total-time"
>
<template
v-if=
"hasData"
>
<template
v-if=
"hasData"
>
<template
v-if=
"time.days"
>
{{
time
.
days
}}
<span>
{{
n__
(
'
day
'
,
'
days
'
,
time
.
days
)
}}
</span></
template
>
<template
v-if=
"time.days"
>
<
template
v-if=
"time.hours"
>
{{
time
.
hours
}}
<span>
{{
n__
(
'
Time|hr
'
,
'
Time|hrs
'
,
time
.
hours
)
}}
</span></
template
>
{{
time
.
days
}}
<
template
v-if=
"time.mins && !time.days"
>
{{
time
.
mins
}}
<span>
{{
n__
(
'
Time|min
'
,
'
Time|mins
'
,
time
.
mins
)
}}
</span></
template
>
<span>
<
template
v-if=
"time.seconds && hasData === 1 || time.seconds === 0"
>
{{
time
.
seconds
}}
<span>
{{
s__
(
'
Time|s
'
)
}}
</span></
template
>
{{
n__
(
'
day
'
,
'
days
'
,
time
.
days
)
}}
</span>
</
template
>
<
template
v-if=
"time.hours"
>
{{
time
.
hours
}}
<span>
{{
n__
(
'
Time|hr
'
,
'
Time|hrs
'
,
time
.
hours
)
}}
</span>
</
template
>
<
template
v-if=
"time.mins && !time.days"
>
{{
time
.
mins
}}
<span>
{{
n__
(
'
Time|min
'
,
'
Time|mins
'
,
time
.
mins
)
}}
</span>
</
template
>
<
template
v-if=
"time.seconds && hasData === 1 || time.seconds === 0"
>
{{
time
.
seconds
}}
<span>
{{
s__
(
'
Time|s
'
)
}}
</span>
</
template
>
</template>
</template>
<
template
v-else
>
<
template
v-else
>
--
--
...
...
app/assets/javascripts/deploy_keys/components/action_btn.vue
View file @
7c7f5266
...
@@ -3,10 +3,8 @@
...
@@ -3,10 +3,8 @@
import
loadingIcon
from
'
../../vue_shared/components/loading_icon.vue
'
;
import
loadingIcon
from
'
../../vue_shared/components/loading_icon.vue
'
;
export
default
{
export
default
{
data
()
{
components
:
{
return
{
loadingIcon
,
isLoading
:
false
,
};
},
},
props
:
{
props
:
{
deployKey
:
{
deployKey
:
{
...
@@ -23,11 +21,16 @@
...
@@ -23,11 +21,16 @@
default
:
'
btn-default
'
,
default
:
'
btn-default
'
,
},
},
},
},
data
()
{
components
:
{
return
{
loadingIcon
,
isLoading
:
false
,
};
},
computed
:
{
text
()
{
return
`
${
this
.
type
.
charAt
(
0
).
toUpperCase
()}${
this
.
type
.
slice
(
1
)}
`
;
},
},
},
methods
:
{
methods
:
{
doAction
()
{
doAction
()
{
this
.
isLoading
=
true
;
this
.
isLoading
=
true
;
...
@@ -37,11 +40,6 @@
...
@@ -37,11 +40,6 @@
});
});
},
},
},
},
computed
:
{
text
()
{
return
`
${
this
.
type
.
charAt
(
0
).
toUpperCase
()}${
this
.
type
.
slice
(
1
)}
`
;
},
},
};
};
</
script
>
</
script
>
...
...
app/assets/javascripts/deploy_keys/components/app.vue
View file @
7c7f5266
...
@@ -7,11 +7,9 @@
...
@@ -7,11 +7,9 @@
import
loadingIcon
from
'
../../vue_shared/components/loading_icon.vue
'
;
import
loadingIcon
from
'
../../vue_shared/components/loading_icon.vue
'
;
export
default
{
export
default
{
data
()
{
components
:
{
return
{
keysPanel
,
isLoading
:
false
,
loadingIcon
,
store
:
new
DeployKeysStore
(),
};
},
},
props
:
{
props
:
{
endpoint
:
{
endpoint
:
{
...
@@ -19,6 +17,12 @@
...
@@ -19,6 +17,12 @@
required
:
true
,
required
:
true
,
},
},
},
},
data
()
{
return
{
isLoading
:
false
,
store
:
new
DeployKeysStore
(),
};
},
computed
:
{
computed
:
{
hasKeys
()
{
hasKeys
()
{
return
Object
.
keys
(
this
.
keys
).
length
;
return
Object
.
keys
(
this
.
keys
).
length
;
...
@@ -27,9 +31,20 @@
...
@@ -27,9 +31,20 @@
return
this
.
store
.
keys
;
return
this
.
store
.
keys
;
},
},
},
},
components
:
{
created
()
{
keysPanel
,
this
.
service
=
new
DeployKeysService
(
this
.
endpoint
);
loadingIcon
,
eventHub
.
$on
(
'
enable.key
'
,
this
.
enableKey
);
eventHub
.
$on
(
'
remove.key
'
,
this
.
disableKey
);
eventHub
.
$on
(
'
disable.key
'
,
this
.
disableKey
);
},
mounted
()
{
this
.
fetchKeys
();
},
beforeDestroy
()
{
eventHub
.
$off
(
'
enable.key
'
,
this
.
enableKey
);
eventHub
.
$off
(
'
remove.key
'
,
this
.
disableKey
);
eventHub
.
$off
(
'
disable.key
'
,
this
.
disableKey
);
},
},
methods
:
{
methods
:
{
fetchKeys
()
{
fetchKeys
()
{
...
@@ -59,21 +74,6 @@
...
@@ -59,21 +74,6 @@
}
}
},
},
},
},
created
()
{
this
.
service
=
new
DeployKeysService
(
this
.
endpoint
);
eventHub
.
$on
(
'
enable.key
'
,
this
.
enableKey
);
eventHub
.
$on
(
'
remove.key
'
,
this
.
disableKey
);
eventHub
.
$on
(
'
disable.key
'
,
this
.
disableKey
);
},
mounted
()
{
this
.
fetchKeys
();
},
beforeDestroy
()
{
eventHub
.
$off
(
'
enable.key
'
,
this
.
enableKey
);
eventHub
.
$off
(
'
remove.key
'
,
this
.
disableKey
);
eventHub
.
$off
(
'
disable.key
'
,
this
.
disableKey
);
},
};
};
</
script
>
</
script
>
...
...
app/assets/javascripts/deploy_keys/components/key.vue
View file @
7c7f5266
...
@@ -3,6 +3,9 @@
...
@@ -3,6 +3,9 @@
import
{
getTimeago
}
from
'
../../lib/utils/datetime_utility
'
;
import
{
getTimeago
}
from
'
../../lib/utils/datetime_utility
'
;
export
default
{
export
default
{
components
:
{
actionBtn
,
},
props
:
{
props
:
{
deployKey
:
{
deployKey
:
{
type
:
Object
,
type
:
Object
,
...
@@ -17,9 +20,6 @@
...
@@ -17,9 +20,6 @@
required
:
true
,
required
:
true
,
},
},
},
},
components
:
{
actionBtn
,
},
computed
:
{
computed
:
{
timeagoDate
()
{
timeagoDate
()
{
return
getTimeago
().
format
(
this
.
deployKey
.
created_at
);
return
getTimeago
().
format
(
this
.
deployKey
.
created_at
);
...
@@ -61,9 +61,10 @@
...
@@ -61,9 +61,10 @@
</div>
</div>
<div
class=
"deploy-key-content prepend-left-default deploy-key-projects"
>
<div
class=
"deploy-key-content prepend-left-default deploy-key-projects"
>
<a
<a
v-for=
"
project
in deployKey.projects"
v-for=
"
(project, i)
in deployKey.projects"
class=
"label deploy-project-label"
class=
"label deploy-project-label"
:href=
"project.full_path"
:href=
"project.full_path"
:key=
"i"
>
>
{{
project
.
full_name
}}
{{
project
.
full_name
}}
</a>
</a>
...
...
app/assets/javascripts/deploy_keys/components/keys_panel.vue
View file @
7c7f5266
...
@@ -2,6 +2,9 @@
...
@@ -2,6 +2,9 @@
import
key
from
'
./key.vue
'
;
import
key
from
'
./key.vue
'
;
export
default
{
export
default
{
components
:
{
key
,
},
props
:
{
props
:
{
title
:
{
title
:
{
type
:
String
,
type
:
String
,
...
@@ -25,9 +28,6 @@
...
@@ -25,9 +28,6 @@
required
:
true
,
required
:
true
,
},
},
},
},
components
:
{
key
,
},
};
};
</
script
>
</
script
>
...
@@ -37,12 +37,14 @@
...
@@ -37,12 +37,14 @@
{{
title
}}
{{
title
}}
(
{{
keys
.
length
}}
)
(
{{
keys
.
length
}}
)
</h5>
</h5>
<ul
class=
"well-list"
<ul
class=
"well-list"
v-if=
"keys.length"
v-if=
"keys.length"
>
>
<li
<li
v-for=
"deployKey in keys"
v-for=
"deployKey in keys"
:key=
"deployKey.id"
>
:key=
"deployKey.id"
>
<key
<key
:deploy-key=
"deployKey"
:deploy-key=
"deployKey"
:store=
"store"
:store=
"store"
...
...
app/assets/javascripts/environments/components/container.vue
View file @
7c7f5266
...
@@ -4,6 +4,11 @@
...
@@ -4,6 +4,11 @@
import
environmentTable
from
'
../components/environments_table.vue
'
;
import
environmentTable
from
'
../components/environments_table.vue
'
;
export
default
{
export
default
{
components
:
{
environmentTable
,
loadingIcon
,
tablePagination
,
},
props
:
{
props
:
{
isLoading
:
{
isLoading
:
{
type
:
Boolean
,
type
:
Boolean
,
...
@@ -26,12 +31,6 @@
...
@@ -26,12 +31,6 @@
required
:
true
,
required
:
true
,
},
},
},
},
components
:
{
environmentTable
,
loadingIcon
,
tablePagination
,
},
methods
:
{
methods
:
{
onChangePage
(
page
)
{
onChangePage
(
page
)
{
this
.
$emit
(
'
onChangePage
'
,
page
);
this
.
$emit
(
'
onChangePage
'
,
page
);
...
@@ -64,7 +63,7 @@
...
@@ -64,7 +63,7 @@
<table-pagination
<table-pagination
v-if=
"pagination && pagination.totalPages > 1"
v-if=
"pagination && pagination.totalPages > 1"
:change=
"onChangePage"
:change=
"onChangePage"
:page
I
nfo=
"pagination"
:page
-i
nfo=
"pagination"
/>
/>
</div>
</div>
</div>
</div>
...
...
app/assets/javascripts/environments/components/empty_state.vue
View file @
7c7f5266
<
script
>
<
script
>
export
default
{
export
default
{
name
:
'
e
nvironmentsEmptyState
'
,
name
:
'
E
nvironmentsEmptyState
'
,
props
:
{
props
:
{
newPath
:
{
newPath
:
{
type
:
String
,
type
:
String
,
...
@@ -21,21 +21,22 @@
...
@@ -21,21 +21,22 @@
<div
class=
"blank-state-row"
>
<div
class=
"blank-state-row"
>
<div
class=
"blank-state-center"
>
<div
class=
"blank-state-center"
>
<h2
class=
"blank-state-title js-blank-state-title"
>
<h2
class=
"blank-state-title js-blank-state-title"
>
{{
s__
(
"
Environments|You don't have any environments right now.
"
)
}}
{{
s__
(
"
Environments|You don't have any environments right now.
"
)
}}
</h2>
</h2>
<p
class=
"blank-state-text"
>
<p
class=
"blank-state-text"
>
{{
s__
(
"
Environments|Environments are places where code gets deployed, such as staging or production.
"
)
}}
{{
s__
(
"
Environments|Environments are places where code gets deployed, such as staging or production.
"
)
}}
<br
/>
<br
/>
<a
:href=
"helpPath"
>
<a
:href=
"helpPath"
>
{{
s__
(
"
Environments|Read more about environments
"
)
}}
{{
s__
(
"
Environments|Read more about environments
"
)
}}
</a>
</a>
</p>
</p>
<a
<a
v-if=
"canCreateEnvironment"
v-if=
"canCreateEnvironment"
:href=
"newPath"
:href=
"newPath"
class=
"btn btn-create js-new-environment-button"
>
class=
"btn btn-create js-new-environment-button"
{{
s__
(
"
Environments|New environment
"
)
}}
>
{{
s__
(
"
Environments|New environment
"
)
}}
</a>
</a>
</div>
</div>
</div>
</div>
...
...
app/assets/javascripts/environments/components/environment_actions.vue
View file @
7c7f5266
<
script
>
<
script
>
import
playIconSvg
from
'
icons/_icon_play.svg
'
;
import
playIconSvg
from
'
icons/_icon_play.svg
'
;
import
eventHub
from
'
../event_hub
'
;
import
eventHub
from
'
../event_hub
'
;
import
loadingIcon
from
'
../../vue_shared/components/loading_icon.vue
'
;
import
loadingIcon
from
'
../../vue_shared/components/loading_icon.vue
'
;
import
tooltip
from
'
../../vue_shared/directives/tooltip
'
;
import
tooltip
from
'
../../vue_shared/directives/tooltip
'
;
export
default
{
props
:
{
actions
:
{
type
:
Array
,
required
:
false
,
default
:
()
=>
[],
},
},
export
default
{
directives
:
{
directives
:
{
tooltip
,
tooltip
,
},
},
...
@@ -20,6 +12,13 @@ export default {
...
@@ -20,6 +12,13 @@ export default {
components
:
{
components
:
{
loadingIcon
,
loadingIcon
,
},
},
props
:
{
actions
:
{
type
:
Array
,
required
:
false
,
default
:
()
=>
[],
},
},
data
()
{
data
()
{
return
{
return
{
...
@@ -49,7 +48,7 @@ export default {
...
@@ -49,7 +48,7 @@ export default {
return
!
action
.
playable
;
return
!
action
.
playable
;
},
},
},
},
};
};
</
script
>
</
script
>
<
template
>
<
template
>
<div
<div
...
@@ -63,27 +62,32 @@ export default {
...
@@ -63,27 +62,32 @@ export default {
data-toggle=
"dropdown"
data-toggle=
"dropdown"
:title=
"title"
:title=
"title"
:aria-label=
"title"
:aria-label=
"title"
:disabled=
"isLoading"
>
:disabled=
"isLoading"
>
<span>
<span>
<span
v-html=
"playIconSvg"
></span>
<span
v-html=
"playIconSvg"
></span>
<i
<i
class=
"fa fa-caret-down"
class=
"fa fa-caret-down"
aria-hidden=
"true"
/>
aria-hidden=
"true"
/>
<loading-icon
v-if=
"isLoading"
/>
<loading-icon
v-if=
"isLoading"
/>
</span>
</span>
</button>
</button>
<ul
class=
"dropdown-menu dropdown-menu-align-right"
>
<ul
class=
"dropdown-menu dropdown-menu-align-right"
>
<li
v-for=
"action in actions"
>
<li
v-for=
"(action, i) in actions"
:key=
"i"
>
<button
<button
type=
"button"
type=
"button"
class=
"js-manual-action-link no-btn btn"
class=
"js-manual-action-link no-btn btn"
@
click=
"onClickAction(action.play_path)"
@
click=
"onClickAction(action.play_path)"
:class=
"
{ disabled: isActionDisabled(action) }"
:class=
"
{ disabled: isActionDisabled(action) }"
:disabled="isActionDisabled(action)">
:disabled="isActionDisabled(action)"
>
<span
v-html=
"playIconSvg"
></span>
<span
v-html=
"playIconSvg"
></span>
<span>
<span>
{{
action
.
name
}}
{{
action
.
name
}}
</span>
</span>
</button>
</button>
</li>
</li>
...
...
app/assets/javascripts/environments/components/environment_external_url.vue
View file @
7c7f5266
<
script
>
<
script
>
import
tooltip
from
'
../../vue_shared/directives/tooltip
'
;
import
tooltip
from
'
../../vue_shared/directives/tooltip
'
;
import
{
s__
}
from
'
../../locale
'
;
import
{
s__
}
from
'
../../locale
'
;
/**
/**
* Renders the external url link in environments table.
* Renders the external url link in environments table.
*/
*/
export
default
{
export
default
{
directives
:
{
tooltip
,
},
props
:
{
props
:
{
externalUrl
:
{
externalUrl
:
{
type
:
String
,
type
:
String
,
...
@@ -13,16 +16,12 @@ export default {
...
@@ -13,16 +16,12 @@ export default {
},
},
},
},
directives
:
{
tooltip
,
},
computed
:
{
computed
:
{
title
()
{
title
()
{
return
s__
(
'
Environments|Open
'
);
return
s__
(
'
Environments|Open
'
);
},
},
},
},
};
};
</
script
>
</
script
>
<
template
>
<
template
>
<a
<a
...
@@ -33,9 +32,12 @@ export default {
...
@@ -33,9 +32,12 @@ export default {
rel=
"noopener noreferrer nofollow"
rel=
"noopener noreferrer nofollow"
:title=
"title"
:title=
"title"
:aria-label=
"title"
:aria-label=
"title"
:href=
"externalUrl"
>
:href=
"externalUrl"
>
<i
<i
class=
"fa fa-external-link"
class=
"fa fa-external-link"
aria-hidden=
"true"
/>
aria-hidden=
"true"
>
</i>
</a>
</a>
</
template
>
</
template
>
app/assets/javascripts/environments/components/environment_item.vue
View file @
7c7f5266
<
script
>
<
script
>
import
Timeago
from
'
timeago.js
'
;
import
Timeago
from
'
timeago.js
'
;
import
_
from
'
underscore
'
;
import
_
from
'
underscore
'
;
import
userAvatarLink
from
'
../../vue_shared/components/user_avatar/user_avatar_link.vue
'
;
import
userAvatarLink
from
'
../../vue_shared/components/user_avatar/user_avatar_link.vue
'
;
import
{
humanize
}
from
'
../../lib/utils/text_utility
'
;
import
{
humanize
}
from
'
../../lib/utils/text_utility
'
;
import
ActionsComponent
from
'
./environment_actions.vue
'
;
import
ActionsComponent
from
'
./environment_actions.vue
'
;
import
ExternalUrlComponent
from
'
./environment_external_url.vue
'
;
import
ExternalUrlComponent
from
'
./environment_external_url.vue
'
;
import
StopComponent
from
'
./environment_stop.vue
'
;
import
StopComponent
from
'
./environment_stop.vue
'
;
import
RollbackComponent
from
'
./environment_rollback.vue
'
;
import
RollbackComponent
from
'
./environment_rollback.vue
'
;
import
TerminalButtonComponent
from
'
./environment_terminal_button.vue
'
;
import
TerminalButtonComponent
from
'
./environment_terminal_button.vue
'
;
import
MonitoringButtonComponent
from
'
./environment_monitoring.vue
'
;
import
MonitoringButtonComponent
from
'
./environment_monitoring.vue
'
;
import
CommitComponent
from
'
../../vue_shared/components/commit.vue
'
;
import
CommitComponent
from
'
../../vue_shared/components/commit.vue
'
;
import
eventHub
from
'
../event_hub
'
;
import
eventHub
from
'
../event_hub
'
;
/**
/**
* Envrionment Item Component
* Envrionment Item Component
*
*
* Renders a table row for each environment.
* Renders a table row for each environment.
*/
*/
const
timeagoInstance
=
new
Timeago
();
const
timeagoInstance
=
new
Timeago
();
export
default
{
export
default
{
components
:
{
components
:
{
userAvatarLink
,
userAvatarLink
,
'
commit-component
'
:
CommitComponent
,
'
commit-component
'
:
CommitComponent
,
...
@@ -418,7 +418,7 @@ export default {
...
@@ -418,7 +418,7 @@ export default {
eventHub
.
$emit
(
'
toggleFolder
'
,
this
.
model
);
eventHub
.
$emit
(
'
toggleFolder
'
,
this
.
model
);
},
},
},
},
};
};
</
script
>
</
script
>
<
template
>
<
template
>
<div
<div
...
@@ -428,18 +428,22 @@ export default {
...
@@ -428,18 +428,22 @@ export default {
'folder-row': model.isFolder,
'folder-row': model.isFolder,
}"
}"
role="row">
role="row">
<div
class=
"table-section section-10"
role=
"gridcell"
>
<div
class=
"table-section section-10"
role=
"gridcell"
>
<div
<div
v-if=
"!model.isFolder"
v-if=
"!model.isFolder"
class=
"table-mobile-header"
class=
"table-mobile-header"
role=
"rowheader"
>
role=
"rowheader"
{{
s__
(
"
Environments|Environment
"
)
}}
>
{{
s__
(
"
Environments|Environment
"
)
}}
</div>
</div>
<a
<a
v-if=
"!model.isFolder"
v-if=
"!model.isFolder"
class=
"environment-name flex-truncate-parent table-mobile-content"
class=
"environment-name flex-truncate-parent table-mobile-content"
:href=
"environmentPath"
>
:href=
"environmentPath"
>
<span
class=
"flex-truncate-child"
>
{{
model
.
name
}}
</span>
<span
class=
"flex-truncate-child"
>
{{
model
.
name
}}
</span>
</a>
</a>
<span
<span
v-else
v-else
...
@@ -451,17 +455,22 @@ export default {
...
@@ -451,17 +455,22 @@ export default {
<i
<i
v-show=
"model.isOpen"
v-show=
"model.isOpen"
class=
"fa fa-caret-down"
class=
"fa fa-caret-down"
aria-hidden=
"true"
/>
aria-hidden=
"true"
>
</i>
<i
<i
v-show=
"!model.isOpen"
v-show=
"!model.isOpen"
class=
"fa fa-caret-right"
class=
"fa fa-caret-right"
aria-hidden=
"true"
/>
aria-hidden=
"true"
>
</i>
</span>
</span>
<span
class=
"folder-icon"
>
<span
class=
"folder-icon"
>
<i
<i
class=
"fa fa-folder"
class=
"fa fa-folder"
aria-hidden=
"true"
/>
aria-hidden=
"true"
>
</i>
</span>
</span>
<span>
<span>
...
@@ -491,22 +500,29 @@ export default {
...
@@ -491,22 +500,29 @@ export default {
</span>
</span>
</div>
</div>
<div
class=
"table-section section-15 hidden-xs hidden-sm"
role=
"gridcell"
>
<div
class=
"table-section section-15 hidden-xs hidden-sm"
role=
"gridcell"
>
<a
<a
v-if=
"shouldRenderBuildName"
v-if=
"shouldRenderBuildName"
class=
"build-link flex-truncate-parent"
class=
"build-link flex-truncate-parent"
:href=
"buildPath"
>
:href=
"buildPath"
<span
class=
"flex-truncate-child"
>
{{
buildName
}}
</span>
>
<span
class=
"flex-truncate-child"
>
{{
buildName
}}
</span>
</a>
</a>
</div>
</div>
<div
<div
v-if=
"!model.isFolder"
v-if=
"!model.isFolder"
class=
"table-section section-25"
role=
"gridcell"
>
class=
"table-section section-25"
role=
"gridcell"
>
<div
<div
role=
"rowheader"
role=
"rowheader"
class=
"table-mobile-header"
>
class=
"table-mobile-header"
{{
s__
(
"
Environments|Commit
"
)
}}
>
{{
s__
(
"
Environments|Commit
"
)
}}
</div>
</div>
<div
<div
v-if=
"hasLastDeploymentKey"
v-if=
"hasLastDeploymentKey"
...
@@ -522,22 +538,24 @@ export default {
...
@@ -522,22 +538,24 @@ export default {
<div
<div
v-if=
"!hasLastDeploymentKey"
v-if=
"!hasLastDeploymentKey"
class=
"commit-title table-mobile-content"
>
class=
"commit-title table-mobile-content"
>
{{
s__
(
"
Environments|No deployments yet
"
)
}}
{{
s__
(
"
Environments|No deployments yet
"
)
}}
</div>
</div>
</div>
</div>
<div
<div
v-if=
"!model.isFolder"
v-if=
"!model.isFolder"
class=
"table-section section-10"
role=
"gridcell"
>
class=
"table-section section-10"
role=
"gridcell"
>
<div
<div
role=
"rowheader"
role=
"rowheader"
class=
"table-mobile-header"
>
class=
"table-mobile-header"
>
{{
s__
(
"
Environments|Updated
"
)
}}
{{
s__
(
"
Environments|Updated
"
)
}}
</div>
</div>
<span
<span
v-if=
"canShowDate"
v-if=
"canShowDate"
class=
"environment-created-date-timeago table-mobile-content"
>
class=
"environment-created-date-timeago table-mobile-content"
>
{{
createdDate
}}
{{
createdDate
}}
</span>
</span>
</div>
</div>
...
...
app/assets/javascripts/issue_show/components/description.vue
View file @
7c7f5266
...
@@ -56,7 +56,10 @@
...
@@ -56,7 +56,10 @@
this
.
updateTaskStatusText
();
this
.
updateTaskStatusText
();
},
},
},
},
mounted
()
{
this
.
renderGFM
();
this
.
updateTaskStatusText
();
},
methods
:
{
methods
:
{
renderGFM
()
{
renderGFM
()
{
$
(
this
.
$refs
[
'
gfm-content
'
]).
renderGFM
();
$
(
this
.
$refs
[
'
gfm-content
'
]).
renderGFM
();
...
@@ -91,7 +94,7 @@
...
@@ -91,7 +94,7 @@
$tasksShort
.
text
(
$tasksShort
.
text
(
`
${
taskRegexMatches
[
1
]}
/
${
taskRegexMatches
[
2
]}
task
${
taskRegexMatches
[
2
]
>
1
?
`
${
taskRegexMatches
[
1
]}
/
${
taskRegexMatches
[
2
]}
task
${
taskRegexMatches
[
2
]
>
1
?
'
s
'
:
'
s
'
:
''
}
`
''
}
`
,
);
);
}
else
{
}
else
{
$tasks
.
text
(
''
);
$tasks
.
text
(
''
);
...
@@ -99,10 +102,6 @@
...
@@ -99,10 +102,6 @@
}
}
},
},
},
},
mounted
()
{
this
.
renderGFM
();
this
.
updateTaskStatusText
();
},
};
};
</
script
>
</
script
>
...
@@ -112,7 +111,8 @@
...
@@ -112,7 +111,8 @@
class=
"description"
class=
"description"
:class=
"
{
:class=
"
{
'js-task-list-container': canUpdate
'js-task-list-container': canUpdate
}">
}"
>
<div
<div
class=
"wiki"
class=
"wiki"
:class=
"
{
:class=
"
{
...
...
app/assets/javascripts/issue_show/components/edited.vue
View file @
7c7f5266
<
script
>
<
script
>
import
timeAgoTooltip
from
'
../../vue_shared/components/time_ago_tooltip.vue
'
;
import
timeAgoTooltip
from
'
../../vue_shared/components/time_ago_tooltip.vue
'
;
export
default
{
export
default
{
components
:
{
timeAgoTooltip
,
},
props
:
{
props
:
{
updatedAt
:
{
updatedAt
:
{
type
:
String
,
type
:
String
,
...
@@ -19,15 +22,12 @@ export default {
...
@@ -19,15 +22,12 @@ export default {
default
:
''
,
default
:
''
,
},
},
},
},
components
:
{
timeAgoTooltip
,
},
computed
:
{
computed
:
{
hasUpdatedBy
()
{
hasUpdatedBy
()
{
return
this
.
updatedByName
&&
this
.
updatedByPath
;
return
this
.
updatedByName
&&
this
.
updatedByPath
;
},
},
},
},
};
};
</
script
>
</
script
>
<
template
>
<
template
>
...
@@ -48,7 +48,7 @@ export default {
...
@@ -48,7 +48,7 @@ export default {
class=
"author_link"
class=
"author_link"
:href=
"updatedByPath"
:href=
"updatedByPath"
>
>
<span>
{{
updatedByName
}}
</span>
<span>
{{
updatedByName
}}
</span>
</a>
</a>
</span>
</span>
</small>
</small>
...
...
app/assets/javascripts/issue_show/components/fields/description.vue
View file @
7c7f5266
...
@@ -4,6 +4,9 @@
...
@@ -4,6 +4,9 @@
export
default
{
export
default
{
mixins
:
[
updateMixin
],
mixins
:
[
updateMixin
],
components
:
{
markdownField
,
},
props
:
{
props
:
{
formState
:
{
formState
:
{
type
:
Object
,
type
:
Object
,
...
@@ -28,9 +31,6 @@
...
@@ -28,9 +31,6 @@
default
:
true
,
default
:
true
,
},
},
},
},
components
:
{
markdownField
,
},
mounted
()
{
mounted
()
{
this
.
$refs
.
textarea
.
focus
();
this
.
$refs
.
textarea
.
focus
();
},
},
...
...
app/assets/javascripts/issue_show/components/form.vue
View file @
7c7f5266
...
@@ -6,6 +6,13 @@
...
@@ -6,6 +6,13 @@
import
descriptionTemplate
from
'
./fields/description_template.vue
'
;
import
descriptionTemplate
from
'
./fields/description_template.vue
'
;
export
default
{
export
default
{
components
:
{
lockedWarning
,
titleField
,
descriptionField
,
descriptionTemplate
,
editActions
,
},
props
:
{
props
:
{
canDestroy
:
{
canDestroy
:
{
type
:
Boolean
,
type
:
Boolean
,
...
@@ -52,13 +59,6 @@
...
@@ -52,13 +59,6 @@
default
:
true
,
default
:
true
,
},
},
},
},
components
:
{
lockedWarning
,
titleField
,
descriptionField
,
descriptionTemplate
,
editActions
,
},
computed
:
{
computed
:
{
hasIssuableTemplates
()
{
hasIssuableTemplates
()
{
return
this
.
issuableTemplates
.
length
;
return
this
.
issuableTemplates
.
length
;
...
@@ -78,16 +78,19 @@
...
@@ -78,16 +78,19 @@
:form-state=
"formState"
:form-state=
"formState"
:issuable-templates=
"issuableTemplates"
:issuable-templates=
"issuableTemplates"
:project-path=
"projectPath"
:project-path=
"projectPath"
:project-namespace=
"projectNamespace"
/>
:project-namespace=
"projectNamespace"
/>
</div>
</div>
<div
<div
:class=
"
{
:class=
"
{
'col-sm-8 col-lg-9': hasIssuableTemplates,
'col-sm-8 col-lg-9': hasIssuableTemplates,
'col-xs-12': !hasIssuableTemplates,
'col-xs-12': !hasIssuableTemplates,
}">
}"
>
<title-field
<title-field
:form-state=
"formState"
:form-state=
"formState"
:issuable-templates=
"issuableTemplates"
/>
:issuable-templates=
"issuableTemplates"
/>
</div>
</div>
</div>
</div>
<description-field
<description-field
...
@@ -100,6 +103,7 @@
...
@@ -100,6 +103,7 @@
<edit-actions
<edit-actions
:form-state=
"formState"
:form-state=
"formState"
:can-destroy=
"canDestroy"
:can-destroy=
"canDestroy"
:show-delete-button=
"showDeleteButton"
/>
:show-delete-button=
"showDeleteButton"
/>
</form>
</form>
</
template
>
</
template
>
app/assets/javascripts/issue_show/components/title.vue
View file @
7c7f5266
...
@@ -6,12 +6,8 @@
...
@@ -6,12 +6,8 @@
export
default
{
export
default
{
mixins
:
[
animateMixin
],
mixins
:
[
animateMixin
],
data
()
{
directives
:
{
return
{
tooltip
,
preAnimation
:
false
,
pulseAnimation
:
false
,
titleEl
:
document
.
querySelector
(
'
title
'
),
};
},
},
props
:
{
props
:
{
issuableRef
:
{
issuableRef
:
{
...
@@ -37,8 +33,17 @@
...
@@ -37,8 +33,17 @@
default
:
false
,
default
:
false
,
},
},
},
},
directives
:
{
data
()
{
tooltip
,
return
{
preAnimation
:
false
,
pulseAnimation
:
false
,
titleEl
:
document
.
querySelector
(
'
title
'
),
};
},
computed
:
{
pencilIcon
()
{
return
spriteIcon
(
'
pencil
'
,
'
link-highlight
'
);
},
},
},
watch
:
{
watch
:
{
titleHtml
()
{
titleHtml
()
{
...
@@ -46,11 +51,6 @@
...
@@ -46,11 +51,6 @@
this
.
animateChange
();
this
.
animateChange
();
},
},
},
},
computed
:
{
pencilIcon
()
{
return
spriteIcon
(
'
pencil
'
,
'
link-highlight
'
);
},
},
methods
:
{
methods
:
{
setPageTitle
()
{
setPageTitle
()
{
const
currentPageTitleScope
=
this
.
titleEl
.
innerText
.
split
(
'
·
'
);
const
currentPageTitleScope
=
this
.
titleEl
.
innerText
.
split
(
'
·
'
);
...
...
app/assets/javascripts/jobs/components/header.vue
View file @
7c7f5266
...
@@ -4,6 +4,10 @@
...
@@ -4,6 +4,10 @@
export
default
{
export
default
{
name
:
'
jobHeaderSection
'
,
name
:
'
jobHeaderSection
'
,
components
:
{
ciHeader
,
loadingIcon
,
},
props
:
{
props
:
{
job
:
{
job
:
{
type
:
Object
,
type
:
Object
,
...
@@ -14,10 +18,6 @@
...
@@ -14,10 +18,6 @@
required
:
true
,
required
:
true
,
},
},
},
},
components
:
{
ciHeader
,
loadingIcon
,
},
data
()
{
data
()
{
return
{
return
{
actions
:
this
.
getActions
(),
actions
:
this
.
getActions
(),
...
@@ -31,6 +31,11 @@
...
@@ -31,6 +31,11 @@
return
!
this
.
isLoading
&&
Object
.
keys
(
this
.
job
).
length
;
return
!
this
.
isLoading
&&
Object
.
keys
(
this
.
job
).
length
;
},
},
},
},
watch
:
{
job
()
{
this
.
actions
=
this
.
getActions
();
},
},
methods
:
{
methods
:
{
getActions
()
{
getActions
()
{
const
actions
=
[];
const
actions
=
[];
...
@@ -46,11 +51,6 @@
...
@@ -46,11 +51,6 @@
return
actions
;
return
actions
;
},
},
},
},
watch
:
{
job
()
{
this
.
actions
=
this
.
getActions
();
},
},
};
};
</
script
>
</
script
>
<
template
>
<
template
>
...
@@ -63,7 +63,7 @@
...
@@ -63,7 +63,7 @@
:time=
"job.created_at"
:time=
"job.created_at"
:user=
"job.user"
:user=
"job.user"
:actions=
"actions"
:actions=
"actions"
:has
SidebarB
utton=
"true"
:has
-sidebar-b
utton=
"true"
/>
/>
<loading-icon
<loading-icon
v-if=
"isLoading"
v-if=
"isLoading"
...
...
app/assets/javascripts/jobs/components/sidebar_detail_row.vue
View file @
7c7f5266
...
@@ -23,9 +23,10 @@
...
@@ -23,9 +23,10 @@
<p
class=
"build-detail-row"
>
<p
class=
"build-detail-row"
>
<span
<span
v-if=
"hasTitle"
v-if=
"hasTitle"
class=
"build-light-text"
>
class=
"build-light-text"
{{
title
}}
:
>
{{
title
}}
:
</span>
</span>
{{
value
}}
{{
value
}}
</p>
</p>
</
template
>
</
template
>
app/assets/javascripts/jobs/components/sidebar_details_block.vue
View file @
7c7f5266
...
@@ -6,6 +6,13 @@
...
@@ -6,6 +6,13 @@
export
default
{
export
default
{
name
:
'
SidebarDetailsBlock
'
,
name
:
'
SidebarDetailsBlock
'
,
components
:
{
detailRow
,
loadingIcon
,
},
mixins
:
[
timeagoMixin
,
],
props
:
{
props
:
{
job
:
{
job
:
{
type
:
Object
,
type
:
Object
,
...
@@ -16,13 +23,6 @@
...
@@ -16,13 +23,6 @@
required
:
true
,
required
:
true
,
},
},
},
},
mixins
:
[
timeagoMixin
,
],
components
:
{
detailRow
,
loadingIcon
,
},
computed
:
{
computed
:
{
shouldRenderContent
()
{
shouldRenderContent
()
{
return
!
this
.
isLoading
&&
Object
.
keys
(
this
.
job
).
length
>
0
;
return
!
this
.
isLoading
&&
Object
.
keys
(
this
.
job
).
length
>
0
;
...
@@ -58,11 +58,13 @@
...
@@ -58,11 +58,13 @@
<template
v-if=
"shouldRenderContent"
>
<template
v-if=
"shouldRenderContent"
>
<div
<div
class=
"block retry-link"
class=
"block retry-link"
v-if=
"job.retry_path || job.new_issue_path"
>
v-if=
"job.retry_path || job.new_issue_path"
>
<a
<a
v-if=
"job.new_issue_path"
v-if=
"job.new_issue_path"
class=
"js-new-issue btn btn-new btn-inverted"
class=
"js-new-issue btn btn-new btn-inverted"
:href=
"job.new_issue_path"
>
:href=
"job.new_issue_path"
>
New issue
New issue
</a>
</a>
<a
<a
...
@@ -70,20 +72,21 @@
...
@@ -70,20 +72,21 @@
class=
"js-retry-job btn btn-inverted-secondary"
class=
"js-retry-job btn btn-inverted-secondary"
:href=
"job.retry_path"
:href=
"job.retry_path"
data-method=
"post"
data-method=
"post"
rel=
"nofollow"
>
rel=
"nofollow"
>
Retry
Retry
</a>
</a>
</div>
</div>
<div
:class=
"
{block : renderBlock }">
<div
:class=
"
{block : renderBlock }">
<p
<p
class=
"build-detail-row js-job-mr"
class=
"build-detail-row js-job-mr"
v-if=
"job.merge_request"
>
v-if=
"job.merge_request"
<span
>
class=
"build-light-text"
>
<span
class=
"build-light-text"
>
Merge Request:
Merge Request:
</span>
</span>
<a
:href=
"job.merge_request.path"
>
<a
:href=
"job.merge_request.path"
>
!
{{
job
.
merge_request
.
iid
}}
!
{{
job
.
merge_request
.
iid
}}
</a>
</a>
</p>
</p>
...
@@ -125,16 +128,16 @@
...
@@ -125,16 +128,16 @@
/>
/>
<p
<p
class=
"build-detail-row js-job-tags"
class=
"build-detail-row js-job-tags"
v-if=
"job.tags.length"
>
v-if=
"job.tags.length"
<span
>
class=
"build-light-text"
>
<span
class=
"build-light-text"
>
Tags:
Tags:
</span>
</span>
<span
<span
v-for=
"
tag
in job.tags"
v-for=
"
(tag, i)
in job.tags"
key=
"tag
"
:key=
"i
"
class=
"label label-primary"
>
class=
"label label-primary"
>
{{
tag
}}
{{
tag
}}
</span>
</span>
</p>
</p>
...
@@ -146,7 +149,8 @@
...
@@ -146,7 +149,8 @@
class=
"js-cancel-job btn btn-sm btn-default"
class=
"js-cancel-job btn btn-sm btn-default"
:href=
"job.cancel_path"
:href=
"job.cancel_path"
data-method=
"post"
data-method=
"post"
rel=
"nofollow"
>
rel=
"nofollow"
>
Cancel
Cancel
</a>
</a>
</div>
</div>
...
...
app/assets/javascripts/monitoring/components/dashboard.vue
View file @
7c7f5266
...
@@ -11,6 +11,12 @@
...
@@ -11,6 +11,12 @@
export
default
{
export
default
{
components
:
{
Graph
,
GraphGroup
,
EmptyState
,
},
data
()
{
data
()
{
const
metricsData
=
document
.
querySelector
(
'
#prometheus-graphs
'
).
dataset
;
const
metricsData
=
document
.
querySelector
(
'
#prometheus-graphs
'
).
dataset
;
const
store
=
new
MonitoringStore
();
const
store
=
new
MonitoringStore
();
...
@@ -36,12 +42,30 @@
...
@@ -36,12 +42,30 @@
};
};
},
},
components
:
{
created
()
{
Graph
,
this
.
service
=
new
MonitoringService
({
GraphGroup
,
metricsEndpoint
:
this
.
metricsEndpoint
,
EmptyState
,
deploymentEndpoint
:
this
.
deploymentEndpoint
,
});
eventHub
.
$on
(
'
toggleAspectRatio
'
,
this
.
toggleAspectRatio
);
eventHub
.
$on
(
'
hoverChanged
'
,
this
.
hoverChanged
);
},
beforeDestroy
()
{
eventHub
.
$off
(
'
toggleAspectRatio
'
,
this
.
toggleAspectRatio
);
eventHub
.
$off
(
'
hoverChanged
'
,
this
.
hoverChanged
);
window
.
removeEventListener
(
'
resize
'
,
this
.
resizeThrottled
,
false
);
},
},
mounted
()
{
this
.
resizeThrottled
=
_
.
throttle
(
this
.
resize
,
600
);
if
(
!
this
.
hasMetrics
)
{
this
.
state
=
'
gettingStarted
'
;
}
else
{
this
.
getGraphsData
();
window
.
addEventListener
(
'
resize
'
,
this
.
resizeThrottled
,
false
);
}
},
methods
:
{
methods
:
{
getGraphsData
()
{
getGraphsData
()
{
this
.
state
=
'
loading
'
;
this
.
state
=
'
loading
'
;
...
@@ -72,36 +96,14 @@
...
@@ -72,36 +96,14 @@
this
.
hoverData
=
data
;
this
.
hoverData
=
data
;
},
},
},
},
created
()
{
this
.
service
=
new
MonitoringService
({
metricsEndpoint
:
this
.
metricsEndpoint
,
deploymentEndpoint
:
this
.
deploymentEndpoint
,
});
eventHub
.
$on
(
'
toggleAspectRatio
'
,
this
.
toggleAspectRatio
);
eventHub
.
$on
(
'
hoverChanged
'
,
this
.
hoverChanged
);
},
beforeDestroy
()
{
eventHub
.
$off
(
'
toggleAspectRatio
'
,
this
.
toggleAspectRatio
);
eventHub
.
$off
(
'
hoverChanged
'
,
this
.
hoverChanged
);
window
.
removeEventListener
(
'
resize
'
,
this
.
resizeThrottled
,
false
);
},
mounted
()
{
this
.
resizeThrottled
=
_
.
throttle
(
this
.
resize
,
600
);
if
(
!
this
.
hasMetrics
)
{
this
.
state
=
'
gettingStarted
'
;
}
else
{
this
.
getGraphsData
();
window
.
addEventListener
(
'
resize
'
,
this
.
resizeThrottled
,
false
);
}
},
};
};
</
script
>
</
script
>
<
template
>
<
template
>
<div
v-if=
"!showEmptyState"
class=
"prometheus-graphs"
>
<div
v-if=
"!showEmptyState"
class=
"prometheus-graphs"
>
<graph-group
<graph-group
v-for=
"(groupData, index) in store.groups"
v-for=
"(groupData, index) in store.groups"
:key=
"index"
:key=
"index"
...
...
app/assets/javascripts/monitoring/components/empty_state.vue
View file @
7c7f5266
...
@@ -76,20 +76,26 @@ If this takes a long time, ensure that data is available.`,
...
@@ -76,20 +76,26 @@ If this takes a long time, ensure that data is available.`,
<
template
>
<
template
>
<div
class=
"prometheus-state"
>
<div
class=
"prometheus-state"
>
<div
class=
"state-svg svg-content"
>
<div
class=
"state-svg svg-content"
>
<img
:src=
"currentState.svgUrl"
/>
<img
:src=
"currentState.svgUrl"
/>
</div>
</div>
<h4
class=
"state-title"
>
<h4
class=
"state-title"
>
{{
currentState
.
title
}}
{{
currentState
.
title
}}
</h4>
</h4>
<p
class=
"state-description"
>
<p
class=
"state-description"
>
{{
currentState
.
description
}}
{{
currentState
.
description
}}
<a
v-if=
"showButtonDescription"
:href=
"settingsPath"
>
<a
v-if=
"showButtonDescription"
:href=
"settingsPath"
>
Prometheus server
Prometheus server
</a>
</a>
</p>
</p>
<div
class=
"state-button"
>
<div
class=
"state-button"
>
<a
class=
"btn btn-success"
:href=
"buttonPath"
>
<a
{{
currentState
.
buttonText
}}
class=
"btn btn-success"
:href=
"buttonPath"
>
{{
currentState
.
buttonText
}}
</a>
</a>
</div>
</div>
</div>
</div>
...
...
app/assets/javascripts/monitoring/components/graph.vue
View file @
7c7f5266
...
@@ -3,10 +3,10 @@
...
@@ -3,10 +3,10 @@
import
{
axisLeft
,
axisBottom
}
from
'
d3-axis
'
;
import
{
axisLeft
,
axisBottom
}
from
'
d3-axis
'
;
import
{
max
,
extent
}
from
'
d3-array
'
;
import
{
max
,
extent
}
from
'
d3-array
'
;
import
{
select
}
from
'
d3-selection
'
;
import
{
select
}
from
'
d3-selection
'
;
import
G
raphLegend
from
'
./graph/legend.vue
'
;
import
g
raphLegend
from
'
./graph/legend.vue
'
;
import
G
raphFlag
from
'
./graph/flag.vue
'
;
import
g
raphFlag
from
'
./graph/flag.vue
'
;
import
G
raphDeployment
from
'
./graph/deployment.vue
'
;
import
g
raphDeployment
from
'
./graph/deployment.vue
'
;
import
G
raphPath
from
'
./graph/path.vue
'
;
import
g
raphPath
from
'
./graph/path.vue
'
;
import
MonitoringMixin
from
'
../mixins/monitoring_mixins
'
;
import
MonitoringMixin
from
'
../mixins/monitoring_mixins
'
;
import
eventHub
from
'
../event_hub
'
;
import
eventHub
from
'
../event_hub
'
;
import
measurements
from
'
../utils/measurements
'
;
import
measurements
from
'
../utils/measurements
'
;
...
@@ -17,6 +17,16 @@
...
@@ -17,6 +17,16 @@
const
d3
=
{
scaleLinear
,
scaleTime
,
axisLeft
,
axisBottom
,
max
,
extent
,
select
};
const
d3
=
{
scaleLinear
,
scaleTime
,
axisLeft
,
axisBottom
,
max
,
extent
,
select
};
export
default
{
export
default
{
components
:
{
graphLegend
,
graphFlag
,
graphDeployment
,
graphPath
,
},
mixins
:
[
MonitoringMixin
],
props
:
{
props
:
{
graphData
:
{
graphData
:
{
type
:
Object
,
type
:
Object
,
...
@@ -45,8 +55,6 @@
...
@@ -45,8 +55,6 @@
},
},
},
},
mixins
:
[
MonitoringMixin
],
data
()
{
data
()
{
return
{
return
{
baseGraphHeight
:
450
,
baseGraphHeight
:
450
,
...
@@ -74,13 +82,6 @@
...
@@ -74,13 +82,6 @@
};
};
},
},
components
:
{
GraphLegend
,
GraphFlag
,
GraphDeployment
,
GraphPath
,
},
computed
:
{
computed
:
{
outerViewBox
()
{
outerViewBox
()
{
return
`0 0
${
this
.
baseGraphWidth
}
${
this
.
baseGraphHeight
}
`
;
return
`0 0
${
this
.
baseGraphWidth
}
${
this
.
baseGraphHeight
}
`
;
...
@@ -104,6 +105,26 @@
...
@@ -104,6 +105,26 @@
},
},
},
},
watch
:
{
updateAspectRatio
()
{
if
(
this
.
updateAspectRatio
)
{
this
.
graphHeight
=
450
;
this
.
graphWidth
=
600
;
this
.
measurements
=
measurements
.
large
;
this
.
draw
();
eventHub
.
$emit
(
'
toggleAspectRatio
'
);
}
},
hoverData
()
{
this
.
positionFlag
();
},
},
mounted
()
{
this
.
draw
();
},
methods
:
{
methods
:
{
draw
()
{
draw
()
{
const
breakpointSize
=
bp
.
getBreakpointSize
();
const
breakpointSize
=
bp
.
getBreakpointSize
();
...
@@ -192,26 +213,6 @@
...
@@ -192,26 +213,6 @@
});
// This will select all of the ticks once they're rendered
});
// This will select all of the ticks once they're rendered
},
},
},
},
watch
:
{
updateAspectRatio
()
{
if
(
this
.
updateAspectRatio
)
{
this
.
graphHeight
=
450
;
this
.
graphWidth
=
600
;
this
.
measurements
=
measurements
.
large
;
this
.
draw
();
eventHub
.
$emit
(
'
toggleAspectRatio
'
);
}
},
hoverData
()
{
this
.
positionFlag
();
},
},
mounted
()
{
this
.
draw
();
},
};
};
</
script
>
</
script
>
...
@@ -221,7 +222,7 @@
...
@@ -221,7 +222,7 @@
@
mouseover=
"showFlagContent = true"
@
mouseover=
"showFlagContent = true"
@
mouseleave=
"showFlagContent = false"
>
@
mouseleave=
"showFlagContent = false"
>
<h5
class=
"text-center graph-title"
>
<h5
class=
"text-center graph-title"
>
{{
graphData
.
title
}}
{{
graphData
.
title
}}
</h5>
</h5>
<div
<div
class=
"prometheus-svg-container"
class=
"prometheus-svg-container"
...
@@ -231,12 +232,12 @@
...
@@ -231,12 +232,12 @@
ref=
"baseSvg"
>
ref=
"baseSvg"
>
<g
<g
class=
"x-axis"
class=
"x-axis"
:transform=
"axisTransform"
>
:transform=
"axisTransform"
</g
>
/
>
<g
<g
class=
"y-axis"
class=
"y-axis"
transform=
"translate(70, 20)"
>
transform=
"translate(70, 20)"
</g
>
/
>
<graph-legend
<graph-legend
:graph-width=
"graphWidth"
:graph-width=
"graphWidth"
:graph-height=
"graphHeight"
:graph-height=
"graphHeight"
...
@@ -251,7 +252,8 @@
...
@@ -251,7 +252,8 @@
<svg
<svg
class=
"graph-data"
class=
"graph-data"
:viewBox=
"innerViewBox"
:viewBox=
"innerViewBox"
ref=
"graphData"
>
ref=
"graphData"
>
<graph-path
<graph-path
v-for=
"(path, index) in timeSeries"
v-for=
"(path, index) in timeSeries"
:key=
"index"
:key=
"index"
...
@@ -267,8 +269,8 @@
...
@@ -267,8 +269,8 @@
:height=
"(graphHeight - 100)"
:height=
"(graphHeight - 100)"
transform=
"translate(-5, 20)"
transform=
"translate(-5, 20)"
ref=
"graphOverlay"
ref=
"graphOverlay"
@
mousemove=
"handleMouseOverGraph($event)"
>
@
mousemove=
"handleMouseOverGraph($event)"
</rect
>
/
>
<graph-deployment
<graph-deployment
:show-deploy-info=
"showDeployInfo"
:show-deploy-info=
"showDeployInfo"
:deployment-data=
"reducedDeploymentData"
:deployment-data=
"reducedDeploymentData"
...
...
app/assets/javascripts/monitoring/components/graph/deployment.vue
View file @
7c7f5266
<
script
>
<
script
>
import
{
dateFormatWithName
,
timeFormat
}
from
'
../../utils/date_time_formatters
'
;
import
{
dateFormatWithName
,
timeFormat
}
from
'
../../utils/date_time_formatters
'
;
import
I
con
from
'
../../../vue_shared/components/icon.vue
'
;
import
i
con
from
'
../../../vue_shared/components/icon.vue
'
;
export
default
{
export
default
{
components
:
{
icon
,
},
props
:
{
props
:
{
showDeployInfo
:
{
showDeployInfo
:
{
type
:
Boolean
,
type
:
Boolean
,
...
@@ -26,10 +29,6 @@
...
@@ -26,10 +29,6 @@
},
},
},
},
components
:
{
Icon
,
},
computed
:
{
computed
:
{
calculatedHeight
()
{
calculatedHeight
()
{
return
this
.
graphHeight
-
this
.
graphHeightOffset
;
return
this
.
graphHeight
-
this
.
graphHeightOffset
;
...
@@ -83,51 +82,55 @@
...
@@ -83,51 +82,55 @@
v-for=
"(deployment, index) in deploymentData"
v-for=
"(deployment, index) in deploymentData"
:key=
"index"
:key=
"index"
:class=
"nameDeploymentClass(deployment)"
:class=
"nameDeploymentClass(deployment)"
:transform=
"transformDeploymentGroup(deployment)"
>
:transform=
"transformDeploymentGroup(deployment)"
>
<rect
<rect
x=
"0"
x=
"0"
y=
"0"
y=
"0"
:height=
"calculatedHeight"
:height=
"calculatedHeight"
width=
"3"
width=
"3"
fill=
"url(#shadow-gradient)"
>
fill=
"url(#shadow-gradient)"
</rect
>
/
>
<line
<line
class=
"deployment-line"
class=
"deployment-line"
x1=
"0"
x1=
"0"
y1=
"0"
y1=
"0"
x2=
"0"
x2=
"0"
:y2=
"calculatedHeight"
:y2=
"calculatedHeight"
stroke=
"#000"
>
stroke=
"#000"
</line
>
/
>
<svg
<svg
v-if=
"deployment.showDeploymentFlag"
v-if=
"deployment.showDeploymentFlag"
class=
"js-deploy-info-box"
class=
"js-deploy-info-box"
:x=
"positionFlag(deployment)"
:x=
"positionFlag(deployment)"
y=
"0"
y=
"0"
width=
"134"
width=
"134"
:height=
"svgContainerHeight(deployment.tag)"
>
:height=
"svgContainerHeight(deployment.tag)"
>
<rect
<rect
class=
"rect-text-metric deploy-info-rect rect-metric"
class=
"rect-text-metric deploy-info-rect rect-metric"
x=
"1"
x=
"1"
y=
"1"
y=
"1"
rx=
"2"
rx=
"2"
width=
"132"
width=
"132"
:height=
"svgContainerHeight(deployment.tag) - 2"
>
:height=
"svgContainerHeight(deployment.tag) - 2"
</rect
>
/
>
<text
<text
class=
"deploy-info-text text-metric-bold"
class=
"deploy-info-text text-metric-bold"
transform=
"translate(5, 2)"
>
transform=
"translate(5, 2)"
>
Deployed
Deployed
</text>
</text>
<!--The date info-->
<!--The date info-->
<g
transform=
"translate(5, 20)"
>
<g
transform=
"translate(5, 20)"
>
<text
class=
"deploy-info-text"
>
<text
class=
"deploy-info-text"
>
{{
formatDate
(
deployment
.
time
)
}}
{{
formatDate
(
deployment
.
time
)
}}
</text>
</text>
<text
<text
class=
"deploy-info-text text-metric-bold"
class=
"deploy-info-text text-metric-bold"
x=
"62"
>
x=
"62"
{{
formatTime
(
deployment
.
time
)
}}
>
{{
formatTime
(
deployment
.
time
)
}}
</text>
</text>
</g>
</g>
<line
<line
...
@@ -136,21 +139,21 @@
...
@@ -136,21 +139,21 @@
y1=
"38"
y1=
"38"
x2=
"132"
x2=
"132"
:y2=
"38"
:y2=
"38"
stroke=
"#000"
>
stroke=
"#000"
</line
>
/
>
<!--Commit information-->
<!--Commit information-->
<g
transform=
"translate(5, 40)"
>
<g
transform=
"translate(5, 40)"
>
<icon
<icon
name=
"commit"
name=
"commit"
:width=
"12"
:width=
"12"
:height=
"12"
:height=
"12"
:y=
"3"
>
:y=
"3"
</icon
>
/
>
<a
:xlink:href=
"deployment.commitUrl"
>
<a
:xlink:href=
"deployment.commitUrl"
>
<text
<text
class=
"deploy-info-text deploy-info-text-link"
class=
"deploy-info-text deploy-info-text-link"
transform=
"translate(20, 2)"
>
transform=
"translate(20, 2)"
>
{{
refText
(
deployment
)
}}
{{
refText
(
deployment
)
}}
</text>
</text>
</a>
</a>
</g>
</g>
...
@@ -162,14 +165,15 @@
...
@@ -162,14 +165,15 @@
name=
"label"
name=
"label"
:width=
"12"
:width=
"12"
:height=
"12"
:height=
"12"
:y=
"5"
>
:y=
"5"
</icon
>
/
>
<a
:xlink:href=
"deployment.tagUrl"
>
<a
:xlink:href=
"deployment.tagUrl"
>
<text
<text
class=
"deploy-info-text deploy-info-text-link"
class=
"deploy-info-text deploy-info-text-link"
transform=
"translate(20, 2)"
transform=
"translate(20, 2)"
y=
"2"
>
y=
"2"
{{
deployment
.
tag
}}
>
{{
deployment
.
tag
}}
</text>
</text>
</a>
</a>
</g>
</g>
...
@@ -177,20 +181,20 @@
...
@@ -177,20 +181,20 @@
</g>
</g>
<svg
<svg
height=
"0"
height=
"0"
width=
"0"
>
width=
"0"
>
<defs>
<defs>
<linearGradient
<linearGradient
id=
"shadow-gradient"
>
id=
"shadow-gradient"
>
<stop
<stop
offset=
"0%"
offset=
"0%"
stop-color=
"#000"
stop-color=
"#000"
stop-opacity=
"0.4"
>
stop-opacity=
"0.4"
</stop
>
/
>
<stop
<stop
offset=
"100%"
offset=
"100%"
stop-color=
"#000"
stop-color=
"#000"
stop-opacity=
"0"
>
stop-opacity=
"0"
</stop
>
/
>
</linearGradient>
</linearGradient>
</defs>
</defs>
</svg>
</svg>
...
...
app/assets/javascripts/monitoring/components/graph/flag.vue
View file @
7c7f5266
...
@@ -58,13 +58,14 @@
...
@@ -58,13 +58,14 @@
:y1=
"0"
:y1=
"0"
:x2=
"currentXCoordinate"
:x2=
"currentXCoordinate"
:y2=
"calculatedHeight"
:y2=
"calculatedHeight"
transform=
"translate(-5, 20)"
>
transform=
"translate(-5, 20)"
</line
>
/
>
<svg
<svg
v-if=
"showFlagContent"
v-if=
"showFlagContent"
class=
"rect-text-metric"
class=
"rect-text-metric"
:x=
"currentFlagPosition"
:x=
"currentFlagPosition"
y=
"0"
>
y=
"0"
>
<rect
<rect
class=
"rect-metric"
class=
"rect-metric"
x=
"4"
x=
"4"
...
@@ -72,21 +73,23 @@
...
@@ -72,21 +73,23 @@
rx=
"2"
rx=
"2"
width=
"90"
width=
"90"
height=
"40"
height=
"40"
transform=
"translate(-3, 20)"
>
transform=
"translate(-3, 20)"
</rect
>
/
>
<text
<text
class=
"text-metric text-metric-bold"
class=
"text-metric text-metric-bold"
x=
"16"
x=
"16"
y=
"35"
y=
"35"
transform=
"translate(-5, 20)"
>
transform=
"translate(-5, 20)"
{{
formatTime
}}
>
{{
formatTime
}}
</text>
</text>
<text
<text
class=
"text-metric"
class=
"text-metric"
x=
"16"
x=
"16"
y=
"15"
y=
"15"
transform=
"translate(-5, 20)"
>
transform=
"translate(-5, 20)"
{{
formatDate
}}
>
{{
formatDate
}}
</text>
</text>
</svg>
</svg>
</g>
</g>
...
...
app/assets/javascripts/monitoring/components/graph/legend.vue
View file @
7c7f5266
...
@@ -73,6 +73,21 @@
...
@@ -73,6 +73,21 @@
},
},
},
},
mounted
()
{
this
.
$nextTick
(()
=>
{
const
bbox
=
this
.
$refs
.
ylabel
.
getBBox
();
this
.
metricUsageXPosition
=
0
;
this
.
seriesXPosition
=
0
;
if
(
this
.
$refs
.
legendTitleSvg
!=
null
)
{
this
.
seriesXPosition
=
this
.
$refs
.
legendTitleSvg
[
0
].
getBBox
().
width
;
}
if
(
this
.
$refs
.
seriesTitleSvg
!=
null
)
{
this
.
metricUsageXPosition
=
this
.
$refs
.
seriesTitleSvg
[
0
].
getBBox
().
width
;
}
this
.
yLabelWidth
=
bbox
.
width
+
10
;
// Added some padding
this
.
yLabelHeight
=
bbox
.
height
+
5
;
});
},
methods
:
{
methods
:
{
translateLegendGroup
(
index
)
{
translateLegendGroup
(
index
)
{
return
`translate(0,
${
12
*
(
index
)}
)`
;
return
`translate(0,
${
12
*
(
index
)}
)`
;
...
@@ -100,26 +115,10 @@
...
@@ -100,26 +115,10 @@
return
null
;
return
null
;
},
},
},
},
mounted
()
{
this
.
$nextTick
(()
=>
{
const
bbox
=
this
.
$refs
.
ylabel
.
getBBox
();
this
.
metricUsageXPosition
=
0
;
this
.
seriesXPosition
=
0
;
if
(
this
.
$refs
.
legendTitleSvg
!=
null
)
{
this
.
seriesXPosition
=
this
.
$refs
.
legendTitleSvg
[
0
].
getBBox
().
width
;
}
if
(
this
.
$refs
.
seriesTitleSvg
!=
null
)
{
this
.
metricUsageXPosition
=
this
.
$refs
.
seriesTitleSvg
[
0
].
getBBox
().
width
;
}
this
.
yLabelWidth
=
bbox
.
width
+
10
;
// Added some padding
this
.
yLabelHeight
=
bbox
.
height
+
5
;
});
},
};
};
</
script
>
</
script
>
<
template
>
<
template
>
<g
<g
class=
"axis-label-container"
>
class=
"axis-label-container"
>
<line
<line
class=
"label-x-axis-line"
class=
"label-x-axis-line"
stroke=
"#000000"
stroke=
"#000000"
...
@@ -127,8 +126,8 @@
...
@@ -127,8 +126,8 @@
x1=
"10"
x1=
"10"
:y1=
"yPosition"
:y1=
"yPosition"
:x2=
"graphWidth + 20"
:x2=
"graphWidth + 20"
:y2=
"yPosition"
>
:y2=
"yPosition"
</line
>
/
>
<line
<line
class=
"label-y-axis-line"
class=
"label-y-axis-line"
stroke=
"#000000"
stroke=
"#000000"
...
@@ -136,39 +135,43 @@
...
@@ -136,39 +135,43 @@
x1=
"10"
x1=
"10"
y1=
"0"
y1=
"0"
:x2=
"10"
:x2=
"10"
:y2=
"yPosition"
>
:y2=
"yPosition"
</line
>
/
>
<rect
<rect
class=
"rect-axis-text"
class=
"rect-axis-text"
:transform=
"rectTransform"
:transform=
"rectTransform"
:width=
"yLabelWidth"
:width=
"yLabelWidth"
:height=
"yLabelHeight"
>
:height=
"yLabelHeight"
</rect
>
/
>
<text
<text
class=
"label-axis-text y-label-text"
class=
"label-axis-text y-label-text"
text-anchor=
"middle"
text-anchor=
"middle"
:transform=
"textTransform"
:transform=
"textTransform"
ref=
"ylabel"
>
ref=
"ylabel"
{{
yAxisLabel
}}
>
{{
yAxisLabel
}}
</text>
</text>
<rect
<rect
class=
"rect-axis-text"
class=
"rect-axis-text"
:x=
"xPosition + 60"
:x=
"xPosition + 60"
:y=
"graphHeight - 80"
:y=
"graphHeight - 80"
width=
"35"
width=
"35"
height=
"50"
>
height=
"50"
</rect
>
/
>
<text
<text
class=
"label-axis-text x-label-text"
class=
"label-axis-text x-label-text"
:x=
"xPosition + 60"
:x=
"xPosition + 60"
:y=
"yPosition"
:y=
"yPosition"
dy=
".35em"
>
dy=
".35em"
>
Time
Time
</text>
</text>
<g
class=
"legend-group"
<g
class=
"legend-group"
v-for=
"(series, index) in timeSeries"
v-for=
"(series, index) in timeSeries"
:key=
"index"
:key=
"index"
:transform=
"translateLegendGroup(index)"
>
:transform=
"translateLegendGroup(index)"
>
<line
<line
:stroke=
"series.lineColor"
:stroke=
"series.lineColor"
:stroke-width=
"measurements.legends.height"
:stroke-width=
"measurements.legends.height"
...
@@ -176,23 +179,25 @@
...
@@ -176,23 +179,25 @@
:x1=
"measurements.legends.offsetX"
:x1=
"measurements.legends.offsetX"
:x2=
"measurements.legends.offsetX + measurements.legends.width"
:x2=
"measurements.legends.offsetX + measurements.legends.width"
:y1=
"graphHeight - measurements.legends.offsetY"
:y1=
"graphHeight - measurements.legends.offsetY"
:y2=
"graphHeight - measurements.legends.offsetY"
>
:y2=
"graphHeight - measurements.legends.offsetY"
</line
>
/
>
<text
<text
v-if=
"timeSeries.length > 1"
v-if=
"timeSeries.length > 1"
class=
"legend-metric-title"
class=
"legend-metric-title"
ref=
"legendTitleSvg"
ref=
"legendTitleSvg"
x=
"38"
x=
"38"
:y=
"graphHeight - 30"
>
:y=
"graphHeight - 30"
{{
createSeriesString
(
index
,
series
)
}}
>
{{
createSeriesString
(
index
,
series
)
}}
</text>
</text>
<text
<text
v-else
v-else
class=
"legend-metric-title"
class=
"legend-metric-title"
ref=
"legendTitleSvg"
ref=
"legendTitleSvg"
x=
"38"
x=
"38"
:y=
"graphHeight - 30"
>
:y=
"graphHeight - 30"
{{
legendTitle
}}
{{
formatMetricUsage
(
series
)
}}
>
{{
legendTitle
}}
{{
formatMetricUsage
(
series
)
}}
</text>
</text>
</g>
</g>
</g>
</g>
...
...
app/assets/javascripts/monitoring/components/graph/path.vue
View file @
7c7f5266
...
@@ -12,6 +12,7 @@
...
@@ -12,6 +12,7 @@
lineStyle
:
{
lineStyle
:
{
type
:
String
,
type
:
String
,
required
:
false
,
required
:
false
,
default
:
''
,
},
},
lineColor
:
{
lineColor
:
{
type
:
String
,
type
:
String
,
...
@@ -37,8 +38,8 @@
...
@@ -37,8 +38,8 @@
class=
"metric-area"
class=
"metric-area"
:d=
"generatedAreaPath"
:d=
"generatedAreaPath"
:fill=
"areaColor"
:fill=
"areaColor"
transform=
"translate(-5, 20)"
>
transform=
"translate(-5, 20)"
</path
>
/
>
<path
<path
class=
"metric-line"
class=
"metric-line"
:d=
"generatedLinePath"
:d=
"generatedLinePath"
...
@@ -46,7 +47,7 @@
...
@@ -46,7 +47,7 @@
fill=
"none"
fill=
"none"
stroke-width=
"1"
stroke-width=
"1"
:stroke-dasharray=
"strokeDashArray"
:stroke-dasharray=
"strokeDashArray"
transform=
"translate(-5, 20)"
>
transform=
"translate(-5, 20)"
</path
>
/
>
</g>
</g>
</
template
>
</
template
>
app/assets/javascripts/monitoring/components/graph_group.vue
View file @
7c7f5266
<
script
>
<
script
>
export
default
{
export
default
{
props
:
{
props
:
{
name
:
{
name
:
{
type
:
String
,
type
:
String
,
required
:
true
,
required
:
true
,
},
},
},
},
};
};
</
script
>
</
script
>
<
template
>
<
template
>
<div
class=
"panel panel-default prometheus-panel"
>
<div
class=
"panel panel-default prometheus-panel"
>
<div
class=
"panel-heading"
>
<div
class=
"panel-heading"
>
<h4>
{{
name
}}
</h4>
<h4>
{{
name
}}
</h4>
</div>
</div>
<div
class=
"panel-body prometheus-graph-group"
>
<div
class=
"panel-body prometheus-graph-group"
>
<slot
/>
<slot
/>
...
...
app/assets/javascripts/notes/components/note_actions.vue
View file @
7c7f5266
...
@@ -64,6 +64,13 @@
...
@@ -64,6 +64,13 @@
return
this
.
getUserDataByProp
(
'
id
'
);
return
this
.
getUserDataByProp
(
'
id
'
);
},
},
},
},
created
()
{
this
.
emojiSmiling
=
emojiSmiling
;
this
.
emojiSmile
=
emojiSmile
;
this
.
emojiSmiley
=
emojiSmiley
;
this
.
editSvg
=
editSvg
;
this
.
ellipsisSvg
=
ellipsisSvg
;
},
methods
:
{
methods
:
{
onEdit
()
{
onEdit
()
{
this
.
$emit
(
'
handleEdit
'
);
this
.
$emit
(
'
handleEdit
'
);
...
@@ -72,13 +79,6 @@
...
@@ -72,13 +79,6 @@
this
.
$emit
(
'
handleDelete
'
);
this
.
$emit
(
'
handleDelete
'
);
},
},
},
},
created
()
{
this
.
emojiSmiling
=
emojiSmiling
;
this
.
emojiSmile
=
emojiSmile
;
this
.
emojiSmiley
=
emojiSmiley
;
this
.
editSvg
=
editSvg
;
this
.
ellipsisSvg
=
ellipsisSvg
;
},
};
};
</
script
>
</
script
>
...
@@ -86,7 +86,9 @@
...
@@ -86,7 +86,9 @@
<div
class=
"note-actions"
>
<div
class=
"note-actions"
>
<span
<span
v-if=
"accessLevel"
v-if=
"accessLevel"
class=
"note-role user-access-role"
>
{{
accessLevel
}}
</span>
class=
"note-role user-access-role"
>
{{
accessLevel
}}
</span>
<div
<div
v-if=
"canAddAwardEmoji"
v-if=
"canAddAwardEmoji"
class=
"note-actions-item"
>
class=
"note-actions-item"
>
...
...
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