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
de396b27
Unverified
Commit
de396b27
authored
Mar 20, 2018
by
Marcus Efraimsson
Committed by
GitHub
Mar 20, 2018
Browse files
Options
Browse Files
Download
Plain Diff
Merge pull request #11309 from grafana/add_graphite_func_js_to_ts
convert add_graphite_func.js to typescript
parents
4dcf1b72
3bdd0062
Hide whitespace changes
Inline
Side-by-side
Showing
1 changed file
with
144 additions
and
140 deletions
+144
-140
public/app/plugins/datasource/graphite/add_graphite_func.ts
+144
-140
No files found.
public/app/plugins/datasource/graphite/add_graphite_func.
j
s
→
public/app/plugins/datasource/graphite/add_graphite_func.
t
s
View file @
de396b27
define
([
'angular'
,
'lodash'
,
'jquery'
,
'rst2html'
,
'tether-drop'
],
function
(
angular
,
_
,
$
,
rst2html
,
Drop
)
{
'use strict'
;
angular
.
module
(
'grafana.directives'
).
directive
(
'graphiteAddFunc'
,
function
(
$compile
)
{
var
inputTemplate
=
'<input type="text"'
+
' class="gf-form-input"'
+
' spellcheck="false" style="display:none"></input>'
;
var
buttonTemplate
=
'<a class="gf-form-label query-part dropdown-toggle"'
+
' tabindex="1" gf-dropdown="functionMenu" data-toggle="dropdown">'
+
'<i class="fa fa-plus"></i></a>'
;
return
{
link
:
function
(
$scope
,
elem
)
{
var
ctrl
=
$scope
.
ctrl
;
var
$input
=
$
(
inputTemplate
);
var
$button
=
$
(
buttonTemplate
);
$input
.
appendTo
(
elem
);
$button
.
appendTo
(
elem
);
ctrl
.
datasource
.
getFuncDefs
().
then
(
function
(
funcDefs
)
{
var
allFunctions
=
_
.
map
(
funcDefs
,
'name'
).
sort
();
$scope
.
functionMenu
=
createFunctionDropDownMenu
(
funcDefs
);
import
angular
from
'angular'
;
import
_
from
'lodash'
;
import
$
from
'jquery'
;
import
rst2html
from
'rst2html'
;
import
Drop
from
'tether-drop'
;
export
function
graphiteAddFunc
(
$compile
)
{
const
inputTemplate
=
'<input type="text"'
+
' class="gf-form-input"'
+
' spellcheck="false" style="display:none"></input>'
;
const
buttonTemplate
=
'<a class="gf-form-label query-part dropdown-toggle"'
+
' tabindex="1" gf-dropdown="functionMenu" data-toggle="dropdown">'
+
'<i class="fa fa-plus"></i></a>'
;
return
{
link
:
function
(
$scope
,
elem
)
{
var
ctrl
=
$scope
.
ctrl
;
var
$input
=
$
(
inputTemplate
);
var
$button
=
$
(
buttonTemplate
);
$input
.
appendTo
(
elem
);
$button
.
appendTo
(
elem
);
ctrl
.
datasource
.
getFuncDefs
().
then
(
function
(
funcDefs
)
{
var
allFunctions
=
_
.
map
(
funcDefs
,
'name'
).
sort
();
$scope
.
functionMenu
=
createFunctionDropDownMenu
(
funcDefs
);
$input
.
attr
(
'data-provide'
,
'typeahead'
);
$input
.
typeahead
({
source
:
allFunctions
,
minLength
:
1
,
items
:
10
,
updater
:
function
(
value
)
{
var
funcDef
=
ctrl
.
datasource
.
getFuncDef
(
value
);
if
(
!
funcDef
)
{
// try find close match
value
=
value
.
toLowerCase
();
funcDef
=
_
.
find
(
allFunctions
,
function
(
funcName
)
{
return
funcName
.
toLowerCase
().
indexOf
(
value
)
===
0
;
});
$input
.
attr
(
'data-provide'
,
'typeahead'
);
$input
.
typeahead
({
source
:
allFunctions
,
minLength
:
1
,
items
:
10
,
updater
:
function
(
value
)
{
var
funcDef
=
ctrl
.
datasource
.
getFuncDef
(
value
);
if
(
!
funcDef
)
{
// try find close match
value
=
value
.
toLowerCase
();
funcDef
=
_
.
find
(
allFunctions
,
function
(
funcName
)
{
return
funcName
.
toLowerCase
().
indexOf
(
value
)
===
0
;
});
if
(
!
funcDef
)
{
return
;
}
return
''
;
}
}
$scope
.
$apply
(
function
()
{
ctrl
.
addFunction
(
funcDef
);
});
$scope
.
$apply
(
function
()
{
ctrl
.
addFunction
(
funcDef
);
});
$input
.
trigger
(
'blur'
);
return
''
;
},
});
$button
.
click
(
function
()
{
$button
.
hide
();
$input
.
show
();
$input
.
focus
();
});
$input
.
keyup
(
function
()
{
elem
.
toggleClass
(
'open'
,
$input
.
val
()
===
''
);
});
$input
.
blur
(
function
()
{
// clicking the function dropdown menu wont
// work if you remove class at once
setTimeout
(
function
()
{
$input
.
val
(
''
);
$input
.
hide
();
$button
.
show
();
elem
.
removeClass
(
'open'
);
},
200
);
});
$compile
(
elem
.
contents
())(
$scope
);
$input
.
trigger
(
'blur'
);
return
''
;
},
});
var
drop
;
var
cleanUpDrop
=
function
()
{
if
(
drop
)
{
drop
.
destroy
();
drop
=
null
;
}
};
$button
.
click
(
function
()
{
$button
.
hide
();
$input
.
show
();
$input
.
focus
();
});
$input
.
keyup
(
function
()
{
elem
.
toggleClass
(
'open'
,
$input
.
val
()
===
''
);
});
$
(
elem
)
.
on
(
'mouseenter'
,
'ul.dropdown-menu li'
,
function
()
{
cleanUpDrop
();
$input
.
blur
(
function
()
{
// clicking the function dropdown menu wont
// work if you remove class at once
setTimeout
(
function
()
{
$input
.
val
(
''
);
$input
.
hide
();
$button
.
show
();
elem
.
removeClass
(
'open'
);
},
200
);
});
var
funcDef
;
try
{
funcDef
=
ctrl
.
datasource
.
getFuncDef
(
$
(
'a'
,
this
).
text
());
}
catch
(
e
)
{
// ignore
}
$compile
(
elem
.
contents
())(
$scope
);
});
if
(
funcDef
&&
funcDef
.
description
)
{
var
shortDesc
=
funcDef
.
description
;
if
(
shortDesc
.
length
>
500
)
{
shortDesc
=
shortDesc
.
substring
(
0
,
497
)
+
'...'
;
}
var
drop
;
var
cleanUpDrop
=
function
()
{
if
(
drop
)
{
drop
.
destroy
();
drop
=
null
;
}
};
$
(
elem
)
.
on
(
'mouseenter'
,
'ul.dropdown-menu li'
,
function
()
{
cleanUpDrop
();
var
funcDef
;
try
{
funcDef
=
ctrl
.
datasource
.
getFuncDef
(
$
(
'a'
,
this
).
text
());
}
catch
(
e
)
{
// ignore
}
var
contentElement
=
document
.
createElement
(
'div'
);
contentElement
.
innerHTML
=
'<h4>'
+
funcDef
.
name
+
'</h4>'
+
rst2html
(
shortDesc
);
drop
=
new
Drop
({
target
:
this
,
content
:
contentElement
,
classes
:
'drop-popover'
,
openOn
:
'always'
,
tetherOptions
:
{
attachment
:
'bottom left'
,
targetAttachment
:
'bottom right'
,
},
});
if
(
funcDef
&&
funcDef
.
description
)
{
var
shortDesc
=
funcDef
.
description
;
if
(
shortDesc
.
length
>
500
)
{
shortDesc
=
shortDesc
.
substring
(
0
,
497
)
+
'...'
;
}
})
.
on
(
'mouseout'
,
'ul.dropdown-menu li'
,
function
()
{
cleanUpDrop
();
});
$scope
.
$on
(
'$destroy'
,
cleanUpDrop
);
},
};
});
function
createFunctionDropDownMenu
(
funcDefs
)
{
var
categories
=
{};
_
.
forEach
(
funcDefs
,
function
(
funcDef
)
{
if
(
!
funcDef
.
category
)
{
return
;
}
if
(
!
categories
[
funcDef
.
category
])
{
categories
[
funcDef
.
category
]
=
[];
}
categories
[
funcDef
.
category
].
push
({
text
:
funcDef
.
name
,
click
:
"ctrl.addFunction('"
+
funcDef
.
name
+
"')"
,
});
var
contentElement
=
document
.
createElement
(
'div'
);
contentElement
.
innerHTML
=
'<h4>'
+
funcDef
.
name
+
'</h4>'
+
rst2html
(
shortDesc
);
drop
=
new
Drop
({
target
:
this
,
content
:
contentElement
,
classes
:
'drop-popover'
,
openOn
:
'always'
,
tetherOptions
:
{
attachment
:
'bottom left'
,
targetAttachment
:
'bottom right'
,
},
});
}
})
.
on
(
'mouseout'
,
'ul.dropdown-menu li'
,
function
()
{
cleanUpDrop
();
});
$scope
.
$on
(
'$destroy'
,
cleanUpDrop
);
},
};
}
angular
.
module
(
'grafana.directives'
).
directive
(
'graphiteAddFunc'
,
graphiteAddFunc
);
function
createFunctionDropDownMenu
(
funcDefs
)
{
var
categories
=
{};
_
.
forEach
(
funcDefs
,
function
(
funcDef
)
{
if
(
!
funcDef
.
category
)
{
return
;
}
if
(
!
categories
[
funcDef
.
category
])
{
categories
[
funcDef
.
category
]
=
[];
}
categories
[
funcDef
.
category
].
push
({
text
:
funcDef
.
name
,
click
:
"ctrl.addFunction('"
+
funcDef
.
name
+
"')"
,
});
});
return
_
.
sortBy
(
_
.
map
(
categories
,
function
(
submenu
,
category
)
{
return
{
text
:
category
,
submenu
:
_
.
sortBy
(
submenu
,
'text'
),
};
}),
'text'
);
}
});
return
_
.
sortBy
(
_
.
map
(
categories
,
function
(
submenu
,
category
)
{
return
{
text
:
category
,
submenu
:
_
.
sortBy
(
submenu
,
'text'
),
};
}),
'text'
);
}
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