diff --git a/src/app/app.js b/src/app/app.js
index 973765c4f52..8ce947a33ec 100644
--- a/src/app/app.js
+++ b/src/app/app.js
@@ -26,7 +26,8 @@ function (angular, $, _, appLevelRequire) {
// features if we define them after boot time
register_fns = {};
- app.constant('version',"3.0.0pre5");
+ // This stores the Kibana revision number, @REV@ is replaced by grunt.
+ app.constant('kbnVersion',"@REV@");
// Use this for cache busting partials
app.constant('cacheBust',"cache-bust="+Date.now());
diff --git a/src/app/directives/all.js b/src/app/directives/all.js
index 3e5225f4ed2..63b205751fe 100644
--- a/src/app/directives/all.js
+++ b/src/app/directives/all.js
@@ -8,5 +8,6 @@ define([
'./ngModelOnBlur',
'./tip',
'./confirmClick',
- './esVersion'
+ './esVersion',
+ './configModal'
], function () {});
\ No newline at end of file
diff --git a/src/app/directives/configModal.js b/src/app/directives/configModal.js
new file mode 100644
index 00000000000..4755dfb76e3
--- /dev/null
+++ b/src/app/directives/configModal.js
@@ -0,0 +1,34 @@
+define([
+ 'angular',
+ 'app',
+],
+function (angular) {
+ 'use strict';
+
+ angular
+ .module('kibana.directives')
+ .directive('configModal', function($modal,$q) {
+ return {
+ restrict: 'A',
+ link: function(scope, elem) {
+ // create a new modal. Can't reuse one modal unforunately as the directive will not
+ // re-render on show.
+ elem.bind('click',function(){
+ var panelModal = $modal({
+ template: './app/partials/paneleditor.html',
+ persist: true,
+ show: false,
+ scope: scope,
+ keyboard: false
+ });
+
+ // and show it
+ $q.when(panelModal).then(function(modalEl) {
+ modalEl.modal('show');
+ });
+ scope.$apply();
+ });
+ }
+ };
+ });
+});
\ No newline at end of file
diff --git a/src/app/directives/kibanaPanel.js b/src/app/directives/kibanaPanel.js
index 2c4b3c9e2a8..d00fcb1e23f 100644
--- a/src/app/directives/kibanaPanel.js
+++ b/src/app/directives/kibanaPanel.js
@@ -34,6 +34,11 @@ function (angular) {
'{{panel.type}}'+
'' +
+ '' +
+
'