diff --git a/src/app/controllers/search.js b/src/app/controllers/search.js index 6aa525b7f91..3819be3a2e7 100644 --- a/src/app/controllers/search.js +++ b/src/app/controllers/search.js @@ -2,9 +2,8 @@ define([ 'angular', 'lodash', 'config', - 'jquery' ], -function (angular, _, config, $) { +function (angular, _, config) { 'use strict'; var module = angular.module('grafana.controllers'); @@ -29,7 +28,7 @@ function (angular, _, config, $) { $scope.keyDown = function (evt) { if (evt.keyCode === 27) { - $scope.appEvent('hide-dash-editor'); + $scope.dismiss(); } if (evt.keyCode === 40) { $scope.moveSelection(1); @@ -50,9 +49,6 @@ function (angular, _, config, $) { if (selectedDash) { $location.search({}); $location.path("/dashboard/db/" + selectedDash.slug); - setTimeout(function() { - $('body').click(); // hack to force dropdown to close; - }); } } }; diff --git a/src/app/directives/dashEditLink.js b/src/app/directives/dashEditLink.js index 0933d3f96f2..1b5173671b0 100644 --- a/src/app/directives/dashEditLink.js +++ b/src/app/directives/dashEditLink.js @@ -118,5 +118,4 @@ function (angular, $) { } }; }); - }); diff --git a/src/app/features/dashboard/all.js b/src/app/features/dashboard/all.js index 8433ecc54ce..1ba0051adf3 100644 --- a/src/app/features/dashboard/all.js +++ b/src/app/features/dashboard/all.js @@ -11,4 +11,5 @@ define([ './playlistSrv', './timeSrv', './unsavedChangesSrv', + './directives/dashSearchView', ], function () {}); diff --git a/src/app/features/dashboard/dashboardNavCtrl.js b/src/app/features/dashboard/dashboardNavCtrl.js index 4955c2e5185..b256b24d6cf 100644 --- a/src/app/features/dashboard/dashboardNavCtrl.js +++ b/src/app/features/dashboard/dashboardNavCtrl.js @@ -80,7 +80,7 @@ function (angular, _, moment, config, store) { }; $scope.openSearch = function() { - $scope.appEvent('show-dash-editor', { src: 'app/partials/search.html', cssClass: 'search-container' }); + $scope.appEvent('show-dash-search'); }; $scope.saveDashboard = function() { diff --git a/src/app/features/dashboard/directives/dashSearchView.js b/src/app/features/dashboard/directives/dashSearchView.js new file mode 100644 index 00000000000..ad73b84043c --- /dev/null +++ b/src/app/features/dashboard/directives/dashSearchView.js @@ -0,0 +1,62 @@ +define([ + 'angular', + 'jquery' +], +function (angular, $) { + 'use strict'; + + angular + .module('grafana.directives') + .directive('dashSearchView', function($compile, $timeout) { + return { + restrict: 'A', + link: function(scope, elem) { + var editorScope; + + function hookUpHideWhenClickedOutside() { + $timeout(function() { + $(document).bind('click.hide-search', function(evt) { + // some items can be inside container + // but then removed + if ($(evt.target).parents().length === 0) { + return; + } + + if ($(evt.target).parents('.search-container').length === 0) { + if (editorScope) { + editorScope.dismiss(); + } + } + }); + }); + } + + function showSearch() { + if (editorScope) { + editorScope.dismiss(); + return; + } + + editorScope = scope.$new(); + editorScope.dismiss = function() { + editorScope.$destroy(); + elem.empty(); + elem.unbind(); + editorScope = null; + $(document).unbind('click.hide-search'); + }; + + var view = $('
'); + + elem.append(view); + $compile(elem.contents())(editorScope); + + hookUpHideWhenClickedOutside(); + } + + scope.onAppEvent('show-dash-search', showSearch); + } + }; + }); + +}); diff --git a/src/app/features/dashboard/keybindings.js b/src/app/features/dashboard/keybindings.js index c0cddc5b493..15855c80bf4 100644 --- a/src/app/features/dashboard/keybindings.js +++ b/src/app/features/dashboard/keybindings.js @@ -40,7 +40,7 @@ function(angular, $) { }, { inputDisabled: true }); keyboardManager.bind('ctrl+f', function() { - scope.appEvent('show-dash-editor', { src: 'app/partials/search.html', cssClass: 'search-container' }); + scope.appEvent('show-dash-search'); }, { inputDisabled: true }); keyboardManager.bind('ctrl+o', function() { diff --git a/src/app/partials/dashboard.html b/src/app/partials/dashboard.html index b4c0c517968..b599f1e211d 100644 --- a/src/app/partials/dashboard.html +++ b/src/app/partials/dashboard.html @@ -8,8 +8,8 @@ -