Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
N
nexpie-grafana-theme
Overview
Overview
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Registry
Registry
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
Kornkitt Poolsup
nexpie-grafana-theme
Commits
36b33099
Commit
36b33099
authored
Dec 06, 2017
by
Alexander Zobnin
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
graph: convert legend.js to typescript
parent
deebaabf
Hide whitespace changes
Inline
Side-by-side
Showing
1 changed file
with
179 additions
and
188 deletions
+179
-188
public/app/plugins/panel/graph/legend.ts
+179
-188
No files found.
public/app/plugins/panel/graph/legend.
j
s
→
public/app/plugins/panel/graph/legend.
t
s
View file @
36b33099
define
([
'angular'
,
'lodash'
,
'jquery'
,
'perfect-scrollbar'
],
function
(
angular
,
_
,
$
,
PerfectScrollbar
)
{
'use strict'
;
var
module
=
angular
.
module
(
'grafana.directives'
);
module
.
directive
(
'graphLegend'
,
function
(
popoverSrv
,
$timeout
)
{
return
{
link
:
function
(
scope
,
elem
)
{
var
$container
=
$
(
'<section class="graph-legend"></section>'
);
var
firstRender
=
true
;
var
ctrl
=
scope
.
ctrl
;
var
panel
=
ctrl
.
panel
;
var
data
;
var
seriesList
;
var
i
;
var
legendScrollbar
;
ctrl
.
events
.
on
(
'render'
,
function
()
{
data
=
ctrl
.
seriesList
;
if
(
data
)
{
render
();
}
});
function
getSeriesIndexForElement
(
el
)
{
return
el
.
parents
(
'[data-series-index]'
).
data
(
'series-index'
);
import
angular
from
'angular'
;
import
_
from
'lodash'
;
import
$
from
'jquery'
;
import
PerfectScrollbar
from
'perfect-scrollbar'
;
var
module
=
angular
.
module
(
'grafana.directives'
);
module
.
directive
(
'graphLegend'
,
function
(
popoverSrv
,
$timeout
)
{
return
{
link
:
function
(
scope
,
elem
)
{
var
$container
=
$
(
'<section class="graph-legend"></section>'
);
var
firstRender
=
true
;
var
ctrl
=
scope
.
ctrl
;
var
panel
=
ctrl
.
panel
;
var
data
;
var
seriesList
;
var
i
;
var
legendScrollbar
;
ctrl
.
events
.
on
(
'render'
,
function
()
{
data
=
ctrl
.
seriesList
;
if
(
data
)
{
render
();
}
});
function
openColorSelector
(
e
)
{
// if we clicked inside poup container ignore click
if
(
$
(
e
.
target
).
parents
(
'.popover'
).
length
)
{
return
;
}
function
getSeriesIndexForElement
(
el
)
{
return
el
.
parents
(
'[data-series-index]'
).
data
(
'series-index'
);
}
var
el
=
$
(
e
.
currentTarget
).
find
(
'.fa-minus'
);
var
index
=
getSeriesIndexForElement
(
el
);
var
series
=
seriesList
[
index
];
$timeout
(
function
()
{
popoverSrv
.
show
({
element
:
el
[
0
],
position
:
'bottom center'
,
template
:
'<series-color-picker series="series" onToggleAxis="toggleAxis" onColorChange="colorSelected">'
+
'</series-color-picker>'
,
openOn
:
'hover'
,
model
:
{
series
:
series
,
toggleAxis
:
function
()
{
ctrl
.
toggleAxis
(
series
);
},
colorSelected
:
function
(
color
)
{
ctrl
.
changeSeriesColor
(
series
,
color
);
}
},
});
});
function
openColorSelector
(
e
)
{
// if we clicked inside poup container ignore click
if
(
$
(
e
.
target
).
parents
(
'.popover'
).
length
)
{
return
;
}
function
toggleSeries
(
e
)
{
var
el
=
$
(
e
.
currentTarget
);
var
index
=
getSeriesIndexForElement
(
el
);
var
seriesInfo
=
seriesList
[
index
];
var
scrollPosition
=
$
(
$container
.
children
(
'tbody'
)).
scrollTop
();
ctrl
.
toggleSeries
(
seriesInfo
,
e
);
$
(
$container
.
children
(
'tbody'
)).
scrollTop
(
scrollPosition
);
}
var
el
=
$
(
e
.
currentTarget
).
find
(
'.fa-minus'
);
var
index
=
getSeriesIndexForElement
(
el
);
var
series
=
seriesList
[
index
];
$timeout
(
function
()
{
popoverSrv
.
show
({
element
:
el
[
0
],
position
:
'bottom center'
,
template
:
'<series-color-picker series="series" onToggleAxis="toggleAxis" onColorChange="colorSelected">'
+
'</series-color-picker>'
,
openOn
:
'hover'
,
model
:
{
series
:
series
,
toggleAxis
:
function
()
{
ctrl
.
toggleAxis
(
series
);
},
colorSelected
:
function
(
color
)
{
ctrl
.
changeSeriesColor
(
series
,
color
);
}
},
});
});
}
function
sortLegend
(
e
)
{
var
el
=
$
(
e
.
currentTarget
);
var
stat
=
el
.
data
(
'stat'
);
function
toggleSeries
(
e
)
{
var
el
=
$
(
e
.
currentTarget
);
var
index
=
getSeriesIndexForElement
(
el
);
var
seriesInfo
=
seriesList
[
index
];
var
scrollPosition
=
$
(
$container
.
children
(
'tbody'
)).
scrollTop
();
ctrl
.
toggleSeries
(
seriesInfo
,
e
);
$
(
$container
.
children
(
'tbody'
)).
scrollTop
(
scrollPosition
);
}
if
(
stat
!==
panel
.
legend
.
sort
)
{
panel
.
legend
.
sortDesc
=
null
;
}
function
sortLegend
(
e
)
{
var
el
=
$
(
e
.
currentTarget
);
var
stat
=
el
.
data
(
'stat'
);
// if already sort ascending, disable sorting
if
(
panel
.
legend
.
sortDesc
===
false
)
{
panel
.
legend
.
sort
=
null
;
panel
.
legend
.
sortDesc
=
null
;
ctrl
.
render
();
return
;
}
if
(
stat
!==
panel
.
legend
.
sort
)
{
panel
.
legend
.
sortDesc
=
null
;
}
panel
.
legend
.
sortDesc
=
!
panel
.
legend
.
sortDesc
;
panel
.
legend
.
sort
=
stat
;
// if already sort ascending, disable sorting
if
(
panel
.
legend
.
sortDesc
===
false
)
{
panel
.
legend
.
sort
=
null
;
panel
.
legend
.
sortDesc
=
null
;
ctrl
.
render
();
return
;
}
function
getTableHeaderHtml
(
statName
)
{
if
(
!
panel
.
legend
[
statName
])
{
return
""
;
}
var
html
=
'<th class="pointer" data-stat="'
+
statName
+
'">'
+
statName
;
panel
.
legend
.
sortDesc
=
!
panel
.
legend
.
sortDesc
;
panel
.
legend
.
sort
=
stat
;
ctrl
.
render
();
}
if
(
panel
.
legend
.
sort
===
statName
)
{
var
cssClass
=
panel
.
legend
.
sortDesc
?
'fa fa-caret-down'
:
'fa fa-caret-up'
;
html
+=
' <span class="'
+
cssClass
+
'"></span>'
;
}
function
getTableHeaderHtml
(
statName
)
{
if
(
!
panel
.
legend
[
statName
])
{
return
""
;
}
var
html
=
'<th class="pointer" data-stat="'
+
statName
+
'">'
+
statName
;
return
html
+
'</th>'
;
if
(
panel
.
legend
.
sort
===
statName
)
{
var
cssClass
=
panel
.
legend
.
sortDesc
?
'fa fa-caret-down'
:
'fa fa-caret-up'
;
html
+=
' <span class="'
+
cssClass
+
'"></span>'
;
}
function
render
()
{
if
(
!
ctrl
.
panel
.
legend
.
show
)
{
elem
.
empty
();
firstRender
=
true
;
return
;
}
return
html
+
'</th>'
;
}
if
(
firstRender
)
{
elem
.
append
(
$container
);
$container
.
on
(
'click'
,
'.graph-legend-icon'
,
openColorSelector
);
$container
.
on
(
'click'
,
'.graph-legend-alias'
,
toggleSeries
);
$container
.
on
(
'click'
,
'th'
,
sortLegend
);
firstRender
=
false
;
}
function
render
()
{
if
(
!
ctrl
.
panel
.
legend
.
show
)
{
elem
.
empty
();
firstRender
=
true
;
return
;
}
seriesList
=
data
;
$container
.
empty
();
// Set min-width if side style and there is a value, otherwise remove the CSS propery
var
width
=
panel
.
legend
.
rightSide
&&
panel
.
legend
.
sideWidth
?
panel
.
legend
.
sideWidth
+
"px"
:
""
;
$container
.
css
(
"min-width"
,
width
);
$container
.
toggleClass
(
'graph-legend-table'
,
panel
.
legend
.
alignAsTable
===
true
);
var
tableHeaderElem
;
if
(
panel
.
legend
.
alignAsTable
)
{
var
header
=
'<tr>'
;
header
+=
'<th colspan="2" style="text-align:left"></th>'
;
if
(
panel
.
legend
.
values
)
{
header
+=
getTableHeaderHtml
(
'min'
);
header
+=
getTableHeaderHtml
(
'max'
);
header
+=
getTableHeaderHtml
(
'avg'
);
header
+=
getTableHeaderHtml
(
'current'
);
header
+=
getTableHeaderHtml
(
'total'
);
}
header
+=
'</tr>'
;
tableHeaderElem
=
$
(
header
);
}
if
(
firstRender
)
{
elem
.
append
(
$container
);
$container
.
on
(
'click'
,
'.graph-legend-icon'
,
openColorSelector
);
$container
.
on
(
'click'
,
'.graph-legend-alias'
,
toggleSeries
);
$container
.
on
(
'click'
,
'th'
,
sortLegend
);
firstRender
=
false
;
}
if
(
panel
.
legend
.
sort
)
{
seriesList
=
_
.
sortBy
(
seriesList
,
function
(
series
)
{
return
series
.
stats
[
panel
.
legend
.
sort
];
});
if
(
panel
.
legend
.
sortDesc
)
{
seriesList
=
seriesList
.
reverse
();
}
}
seriesList
=
data
;
var
seriesShown
=
0
;
var
seriesElements
=
[];
$container
.
empty
();
for
(
i
=
0
;
i
<
seriesList
.
length
;
i
++
)
{
var
series
=
seriesList
[
i
];
// Set min-width if side style and there is a value, otherwise remove the CSS propery
var
width
=
panel
.
legend
.
rightSide
&&
panel
.
legend
.
sideWidth
?
panel
.
legend
.
sideWidth
+
"px"
:
""
;
$container
.
css
(
"min-width"
,
width
);
if
(
series
.
hideFromLegend
(
panel
.
legend
))
{
continue
;
}
$container
.
toggleClass
(
'graph-legend-table'
,
panel
.
legend
.
alignAsTable
===
true
);
var
html
=
'<div class="graph-legend-series'
;
var
tableHeaderElem
;
if
(
panel
.
legend
.
alignAsTable
)
{
var
header
=
'<tr>'
;
header
+=
'<th colspan="2" style="text-align:left"></th>'
;
if
(
panel
.
legend
.
values
)
{
header
+=
getTableHeaderHtml
(
'min'
);
header
+=
getTableHeaderHtml
(
'max'
);
header
+=
getTableHeaderHtml
(
'avg'
);
header
+=
getTableHeaderHtml
(
'current'
);
header
+=
getTableHeaderHtml
(
'total'
);
}
header
+=
'</tr>'
;
tableHeaderElem
=
$
(
header
);
}
if
(
series
.
yaxis
===
2
)
{
html
+=
' graph-legend-series--right-y'
;
}
if
(
ctrl
.
hiddenSeries
[
series
.
alias
])
{
html
+=
' graph-legend-series-hidden'
;
}
html
+=
'" data-series-index="'
+
i
+
'">'
;
html
+=
'<div class="graph-legend-icon">'
;
html
+=
'<i class="fa fa-minus pointer" style="color:'
+
series
.
color
+
'"></i>'
;
html
+=
'</div>'
;
if
(
panel
.
legend
.
sort
)
{
seriesList
=
_
.
sortBy
(
seriesList
,
function
(
series
)
{
return
series
.
stats
[
panel
.
legend
.
sort
];
});
if
(
panel
.
legend
.
sortDesc
)
{
seriesList
=
seriesList
.
reverse
();
}
}
var
seriesElements
=
[];
for
(
i
=
0
;
i
<
seriesList
.
length
;
i
++
)
{
var
series
=
seriesList
[
i
];
html
+=
'<a class="graph-legend-alias pointer" title="'
+
series
.
aliasEscaped
+
'">'
+
series
.
aliasEscaped
+
'</a>'
;
if
(
series
.
hideFromLegend
(
panel
.
legend
))
{
continue
;
}
if
(
panel
.
legend
.
values
)
{
var
avg
=
series
.
formatValue
(
series
.
stats
.
avg
);
var
current
=
series
.
formatValue
(
series
.
stats
.
current
);
var
min
=
series
.
formatValue
(
series
.
stats
.
min
);
var
max
=
series
.
formatValue
(
series
.
stats
.
max
);
var
total
=
series
.
formatValue
(
series
.
stats
.
total
);
var
html
=
'<div class="graph-legend-series'
;
if
(
series
.
yaxis
===
2
)
{
html
+=
' graph-legend-series--right-y'
;
}
if
(
ctrl
.
hiddenSeries
[
series
.
alias
])
{
html
+=
' graph-legend-series-hidden'
;
}
html
+=
'" data-series-index="'
+
i
+
'">'
;
html
+=
'<div class="graph-legend-icon">'
;
html
+=
'<i class="fa fa-minus pointer" style="color:'
+
series
.
color
+
'"></i>'
;
html
+=
'</div>'
;
html
+=
'<a class="graph-legend-alias pointer" title="'
+
series
.
aliasEscaped
+
'">'
+
series
.
aliasEscaped
+
'</a>'
;
if
(
panel
.
legend
.
values
)
{
var
avg
=
series
.
formatValue
(
series
.
stats
.
avg
);
var
current
=
series
.
formatValue
(
series
.
stats
.
current
);
var
min
=
series
.
formatValue
(
series
.
stats
.
min
);
var
max
=
series
.
formatValue
(
series
.
stats
.
max
);
var
total
=
series
.
formatValue
(
series
.
stats
.
total
);
if
(
panel
.
legend
.
min
)
{
html
+=
'<div class="graph-legend-value min">'
+
min
+
'</div>'
;
}
if
(
panel
.
legend
.
max
)
{
html
+=
'<div class="graph-legend-value max">'
+
max
+
'</div>'
;
}
if
(
panel
.
legend
.
avg
)
{
html
+=
'<div class="graph-legend-value avg">'
+
avg
+
'</div>'
;
}
if
(
panel
.
legend
.
current
)
{
html
+=
'<div class="graph-legend-value current">'
+
current
+
'</div>'
;
}
if
(
panel
.
legend
.
total
)
{
html
+=
'<div class="graph-legend-value total">'
+
total
+
'</div>'
;
}
}
if
(
panel
.
legend
.
min
)
{
html
+=
'<div class="graph-legend-value min">'
+
min
+
'</div>'
;
}
if
(
panel
.
legend
.
max
)
{
html
+=
'<div class="graph-legend-value max">'
+
max
+
'</div>'
;
}
if
(
panel
.
legend
.
avg
)
{
html
+=
'<div class="graph-legend-value avg">'
+
avg
+
'</div>'
;
}
if
(
panel
.
legend
.
current
)
{
html
+=
'<div class="graph-legend-value current">'
+
current
+
'</div>'
;
}
if
(
panel
.
legend
.
total
)
{
html
+=
'<div class="graph-legend-value total">'
+
total
+
'</div>'
;
}
}
html
+=
'</div>'
;
seriesElements
.
push
(
$
(
html
));
}
html
+=
'</div>'
;
seriesElements
.
push
(
$
(
html
))
;
if
(
panel
.
legend
.
alignAsTable
)
{
var
maxHeight
=
ctrl
.
height
;
seriesShown
++
;
if
(
!
panel
.
legend
.
rightSide
)
{
maxHeight
=
maxHeight
/
2
;
}
if
(
panel
.
legend
.
alignAsTable
)
{
var
maxHeight
=
ctrl
.
height
;
if
(
!
panel
.
legend
.
rightSide
)
{
maxHeight
=
maxHeight
/
2
;
}
var
topPadding
=
6
;
var
tbodyElem
=
$
(
'<tbody></tbody>'
);
tbodyElem
.
css
(
"max-height"
,
maxHeight
-
topPadding
);
tbodyElem
.
append
(
tableHeaderElem
);
tbodyElem
.
append
(
seriesElements
);
$container
.
append
(
tbodyElem
);
}
else
{
var
maxLegendHeight
=
ctrl
.
height
/
2
;
$container
.
css
(
"max-height"
,
maxLegendHeight
-
6
);
$container
.
append
(
seriesElements
);
if
(
!
legendScrollbar
)
{
legendScrollbar
=
new
PerfectScrollbar
.
default
(
$container
[
0
]);
}
legendScrollbar
.
update
();
var
topPadding
=
6
;
var
tbodyElem
=
$
(
'<tbody></tbody>'
);
tbodyElem
.
css
(
"max-height"
,
maxHeight
-
topPadding
);
tbodyElem
.
append
(
tableHeaderElem
);
tbodyElem
.
append
(
seriesElements
);
$container
.
append
(
tbodyElem
);
}
else
{
var
maxLegendHeight
=
ctrl
.
height
/
2
;
$container
.
css
(
"max-height"
,
maxLegendHeight
-
6
);
$container
.
append
(
seriesElements
);
if
(
!
legendScrollbar
)
{
legendScrollbar
=
new
PerfectScrollbar
(
$container
[
0
]);
}
legendScrollbar
.
update
();
}
}
};
});
}
};
});
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