diff --git a/Gruntfile.js b/Gruntfile.js
index 15a48895bfbb..60b3780169eb 100644
--- a/Gruntfile.js
+++ b/Gruntfile.js
@@ -8,6 +8,7 @@ module.exports = function (grunt) {
src: __dirname + '/src', // unbuild version of build
build: __dirname + '/build', // copy of source, but optimized
app: __dirname + '/src/kibana', // source directory for the app
+ plugins: __dirname + '/src/kibana/plugins', // source directory for the app
server: __dirname + '/src/server', // source directory for the server
target: __dirname + '/target', // location of the compressed build targets
buildApp: __dirname + '/build/kibana', // build directory for the app
@@ -31,6 +32,14 @@ module.exports = function (grunt) {
grunt.config.merge(config);
+ var dirname = require('path').dirname;
+ var indexFiles = grunt.file.expand({ cwd: 'src/kibana/plugins' }, '*/index.js');
+ var moduleIds = indexFiles.map(function (fileName) {
+ return 'plugins/' + dirname(fileName) + '/index';
+ });
+
+ config.bundledPluginModuleIds = grunt.bundledPluginModuleIds = moduleIds;
+
// load plugins
require('load-grunt-config')(grunt, {
configPath: __dirname + '/tasks/config',
diff --git a/src/kibana/apps/discover/index.js b/src/kibana/apps/discover/index.js
deleted file mode 100644
index c15e612f6a31..000000000000
--- a/src/kibana/apps/discover/index.js
+++ /dev/null
@@ -1,8 +0,0 @@
-define(function (require, module, exports) {
- require('apps/discover/directives/table');
- require('apps/discover/saved_searches/saved_searches');
- require('apps/discover/directives/timechart');
- require('apps/discover/components/field_chooser/field_chooser');
- require('apps/discover/controllers/discover');
- require('css!apps/discover/styles/main.css');
-});
\ No newline at end of file
diff --git a/src/kibana/apps/settings/sections/index.js b/src/kibana/apps/settings/sections/index.js
deleted file mode 100644
index 7de5f4aae847..000000000000
--- a/src/kibana/apps/settings/sections/index.js
+++ /dev/null
@@ -1,11 +0,0 @@
-define(function (require) {
- // each of these private modules returns an object defining that section, their properties
- // are used to create the nav bar
- return [
- require('apps/settings/sections/indices/index'),
- require('apps/settings/sections/advanced/index'),
- require('apps/settings/sections/objects/index'),
- require('apps/settings/sections/about/index'),
-
- ];
-});
\ No newline at end of file
diff --git a/src/kibana/apps/visualize/index.js b/src/kibana/apps/visualize/index.js
deleted file mode 100644
index 4edfdad9412b..000000000000
--- a/src/kibana/apps/visualize/index.js
+++ /dev/null
@@ -1,11 +0,0 @@
-define(function (require) {
- require('css!apps/visualize/styles/main.css');
-
- require('apps/visualize/editor/editor');
- require('apps/visualize/wizard/wizard');
-
- require('routes')
- .when('/visualize', {
- redirectTo: '/visualize/step/1'
- });
-});
\ No newline at end of file
diff --git a/src/kibana/components/agg_types/_agg_params.js b/src/kibana/components/agg_types/_agg_params.js
index 086cbccbce33..09bff787337d 100644
--- a/src/kibana/components/agg_types/_agg_params.js
+++ b/src/kibana/components/agg_types/_agg_params.js
@@ -1,7 +1,7 @@
define(function (require) {
return function AggParamsFactory(Private) {
var _ = require('lodash');
- var Registry = require('utils/registry/registry');
+ var IndexedArray = require('utils/indexed_array/index');
var BaseAggParam = Private(require('components/agg_types/param_types/base'));
var FieldAggParam = Private(require('components/agg_types/param_types/field'));
@@ -18,10 +18,10 @@ define(function (require) {
*
* @class AggParams
* @constructor
- * @extends Registry
+ * @extends IndexedArray
* @param {object[]} params - array of params that get new-ed up as AggParam objects as descibed above
*/
- _(AggParams).inherits(Registry);
+ _(AggParams).inherits(IndexedArray);
function AggParams(params) {
if (_.isPlainObject(params)) {
// convert the names: details format into details[].name
diff --git a/src/kibana/components/agg_types/index.js b/src/kibana/components/agg_types/index.js
index de37c0f31b8f..019126bf714b 100644
--- a/src/kibana/components/agg_types/index.js
+++ b/src/kibana/components/agg_types/index.js
@@ -1,6 +1,6 @@
define(function (require) {
return function AggTypeService(Private) {
- var Registry = require('utils/registry/registry');
+ var IndexedArray = require('utils/indexed_array/index');
var aggs = {
metrics: Private(require('components/agg_types/metric_aggs')),
@@ -22,14 +22,14 @@ define(function (require) {
/**
- * Registry of Aggregation Types.
+ * IndexedArray of Aggregation Types.
*
* These types form two groups, metric and buckets.
*
* @module agg_types
- * @type {Registry}
+ * @type {IndexedArray}
*/
- return new Registry({
+ return new IndexedArray({
/**
* @type {Array}
diff --git a/src/kibana/components/agg_types/param_types/optioned.js b/src/kibana/components/agg_types/param_types/optioned.js
index 8025afbfceaa..09367d863bea 100644
--- a/src/kibana/components/agg_types/param_types/optioned.js
+++ b/src/kibana/components/agg_types/param_types/optioned.js
@@ -2,14 +2,14 @@ define(function (require) {
return function OptionedAggParamFactory(Private) {
var _ = require('lodash');
- var Registry = require('utils/registry/registry');
+ var IndexedArray = require('utils/indexed_array/index');
var BaseAggParam = Private(require('components/agg_types/param_types/base'));
_(OptionedAggParam).inherits(BaseAggParam);
function OptionedAggParam(config) {
OptionedAggParam.Super.call(this, config);
- this.options = new Registry({
+ this.options = new IndexedArray({
index: ['val'],
immutable: true,
initialSet: this.options
diff --git a/src/kibana/components/index_patterns/_field_formats.js b/src/kibana/components/index_patterns/_field_formats.js
index 35f522ca0033..e89794e6af41 100644
--- a/src/kibana/components/index_patterns/_field_formats.js
+++ b/src/kibana/components/index_patterns/_field_formats.js
@@ -23,7 +23,7 @@ $scope.onChangeFormat = function (field, format) {
```
### Passing the formats to a chart
-Currently, the [histogram formatter](https://github.com/elasticsearch/kibana4/blob/master/src/kibana/apps/visualize/saved_visualizations/resp_converters/histogram.js) passes the formatting function as the `xAxisFormatter` and `yAxisFormatter` function.
+Currently, the [histogram formatter](https://github.com/elasticsearch/kibana4/blob/master/src/plugins/visualize/saved_visualizations/resp_converters/histogram.js) passes the formatting function as the `xAxisFormatter` and `yAxisFormatter` function.
*/
/* jshint ignore:end */
diff --git a/src/kibana/components/index_patterns/_index_pattern.js b/src/kibana/components/index_patterns/_index_pattern.js
index 0b259e933b05..f1ed7c6f5946 100644
--- a/src/kibana/components/index_patterns/_index_pattern.js
+++ b/src/kibana/components/index_patterns/_index_pattern.js
@@ -12,7 +12,7 @@ define(function (require) {
var mappingSetup = Private(require('utils/mapping_setup'));
var DocSource = Private(require('components/courier/data_source/doc_source'));
var flattenSearchResponse = require('components/index_patterns/_flatten_search_response');
- var Registry = require('utils/registry/registry');
+ var IndexedArray = require('utils/indexed_array/index');
var type = 'index-pattern';
@@ -84,7 +84,7 @@ define(function (require) {
};
function afterFieldsSet() {
- pattern.fields = new Registry({
+ pattern.fields = new IndexedArray({
index: ['name'],
group: ['type'],
initialSet: pattern.fields.map(function (field) {
diff --git a/src/kibana/components/vis/_agg_configs.js b/src/kibana/components/vis/_agg_configs.js
index 7376aed7c036..c5712b1754d4 100644
--- a/src/kibana/components/vis/_agg_configs.js
+++ b/src/kibana/components/vis/_agg_configs.js
@@ -2,9 +2,9 @@ define(function (require) {
return function AggConfigsFactory(Private) {
var _ = require('lodash');
var AggConfig = Private(require('components/vis/_agg_config'));
- var Registry = require('utils/registry/registry');
+ var IndexedArray = require('utils/indexed_array/index');
- _(AggConfigs).inherits(Registry);
+ _(AggConfigs).inherits(IndexedArray);
function AggConfigs(vis, configStates) {
var self = this;
this.vis = vis;
diff --git a/src/kibana/components/vis/vis.js b/src/kibana/components/vis/vis.js
index 29567958756e..54ffd38aefc6 100644
--- a/src/kibana/components/vis/vis.js
+++ b/src/kibana/components/vis/vis.js
@@ -2,7 +2,7 @@ define(function (require) {
return function VisFactory(Notifier, Private) {
var _ = require('lodash');
var aggTypes = Private(require('components/agg_types/index'));
- var visTypes = Private(require('components/vis_types/index'));
+ var visTypes = Private(require('registry/vis_types'));
var AggConfigs = Private(require('components/vis/_agg_configs'));
var notify = new Notifier({
diff --git a/src/kibana/components/vis_types/index.js b/src/kibana/components/vis_types/index.js
deleted file mode 100644
index 278d18cd3381..000000000000
--- a/src/kibana/components/vis_types/index.js
+++ /dev/null
@@ -1,15 +0,0 @@
-define(function (require) {
- return function VisTypeService(Private) {
- var _ = require('lodash');
- var Registry = require('utils/registry/registry');
-
- return new Registry({
- index: ['name'],
- initialSet: [
- Private(require('components/vis_types/histogram')),
- Private(require('components/vis_types/line')),
- Private(require('components/vis_types/pie'))
- ]
- });
- };
-});
\ No newline at end of file
diff --git a/src/kibana/components/visualize/_hierarchial_tooltip_formatter.js b/src/kibana/components/visualize/_hierarchial_tooltip_formatter.js
index af76869e4046..294ce0eafe94 100644
--- a/src/kibana/components/visualize/_hierarchial_tooltip_formatter.js
+++ b/src/kibana/components/visualize/_hierarchial_tooltip_formatter.js
@@ -2,7 +2,7 @@ define(function (require) {
return function HierarchialTooltipFormaterProvider($rootScope, $compile, $sce) {
var _ = require('lodash');
var $ = require('jquery');
- var $tooltip = $(require('text!components/vis_types/tooltips/pie.html'));
+ var $tooltip = $(require('text!plugins/vis_types/tooltips/pie.html'));
var $tooltipScope = $rootScope.$new();
$compile($tooltip)($tooltipScope);
diff --git a/src/kibana/components/visualize/visualize.js b/src/kibana/components/visualize/visualize.js
index 69ea23abff78..8d829573e1ba 100644
--- a/src/kibana/components/visualize/visualize.js
+++ b/src/kibana/components/visualize/visualize.js
@@ -7,7 +7,7 @@ define(function (require) {
require('css!components/visualize/visualize.css');
var $ = require('jquery');
var _ = require('lodash');
- var visTypes = Private(require('components/vis_types/index'));
+ var visTypes = Private(require('registry/vis_types'));
var buildChartData = Private(require('components/visualize/_build_chart_data'));
var buildHierarchialData = Private(require('components/visualize/_build_hierarchial_data'));
diff --git a/src/kibana/controllers/kibana.js b/src/kibana/controllers/kibana.js
index 0bb862ff19b5..08bdce957d45 100644
--- a/src/kibana/controllers/kibana.js
+++ b/src/kibana/controllers/kibana.js
@@ -74,7 +74,7 @@ define(function (require) {
});
};
})
- .controller('kibana', function ($rootScope, $location, $scope, Notifier, $injector, $q, $http, config, kbnSetup) {
+ .controller('kibana', function ($rootScope, $location, $scope, Notifier, $injector, $q, $http, config, kbnSetup, Private) {
var notify = new Notifier();
$scope.appEmbedded = $location.search().embed;
@@ -107,7 +107,7 @@ define(function (require) {
}
};
- $scope.apps = configFile.apps;
+ $scope.apps = Private(require('registry/apps'));
// initialize each apps lastPath (fetch it from storage)
$scope.apps.forEach(function (app) { lastPathFor(app); });
diff --git a/src/kibana/index.html b/src/kibana/index.html
index 2c3737bea0e3..55d6c012582a 100644
--- a/src/kibana/index.html
+++ b/src/kibana/index.html
@@ -48,7 +48,7 @@
diff --git a/src/kibana/index.js b/src/kibana/index.js
index 96f0dae16bc8..5d7237587828 100644
--- a/src/kibana/index.js
+++ b/src/kibana/index.js
@@ -56,17 +56,11 @@ define(function (require) {
// tell the modules util to add it's modules as requirements for kibana
modules.link(kibana);
- // list of modules that will require all possible applications
- var appModules = configFile.apps.map(function (app) {
- return 'apps/' + app.id + '/index';
- });
-
-
kibana.load = _.onceWithCb(function (cb) {
require([
'controllers/kibana'
], function loadApps() {
- require(appModules, cb);
+ require(configFile.plugins, cb);
});
});
diff --git a/src/kibana/plugins/README.md b/src/kibana/plugins/README.md
new file mode 100644
index 000000000000..47980f4eb875
--- /dev/null
+++ b/src/kibana/plugins/README.md
@@ -0,0 +1,7 @@
+# Kibana Plugins
+
+### Please don't write custom plugins
+
+While Kibana has a directory called plugins, and a way to load plugin-provided modules, the API is perpousfully undocumented as the underlying mechanisms making plugins possible are undocumented and very likely to change.
+
+Also, please keep in mind that, at this time, issues filed to aid in the development of plugins will be closed with a link to this file.
diff --git a/src/kibana/apps/dashboard/directives/grid.js b/src/kibana/plugins/dashboard/directives/grid.js
similarity index 100%
rename from src/kibana/apps/dashboard/directives/grid.js
rename to src/kibana/plugins/dashboard/directives/grid.js
diff --git a/src/kibana/apps/dashboard/directives/panel.js b/src/kibana/plugins/dashboard/directives/panel.js
similarity index 93%
rename from src/kibana/apps/dashboard/directives/panel.js
rename to src/kibana/plugins/dashboard/directives/panel.js
index a581eecdbe6e..a803d751856e 100644
--- a/src/kibana/apps/dashboard/directives/panel.js
+++ b/src/kibana/plugins/dashboard/directives/panel.js
@@ -10,7 +10,7 @@ define(function (require) {
return {
restrict: 'E',
- template: require('text!apps/dashboard/partials/panel.html'),
+ template: require('text!plugins/dashboard/partials/panel.html'),
requires: '^dashboardGrid',
link: function ($scope, $el) {
// using $scope inheritance, panels are available in AppState
diff --git a/src/kibana/apps/dashboard/index.html b/src/kibana/plugins/dashboard/index.html
similarity index 100%
rename from src/kibana/apps/dashboard/index.html
rename to src/kibana/plugins/dashboard/index.html
diff --git a/src/kibana/apps/dashboard/index.js b/src/kibana/plugins/dashboard/index.js
similarity index 84%
rename from src/kibana/apps/dashboard/index.js
rename to src/kibana/plugins/dashboard/index.js
index faaa36fcfd3d..6d514986a715 100644
--- a/src/kibana/apps/dashboard/index.js
+++ b/src/kibana/plugins/dashboard/index.js
@@ -11,10 +11,10 @@ define(function (require) {
require('components/clipboard/clipboard');
- require('apps/dashboard/directives/grid');
- require('apps/dashboard/directives/panel');
- require('apps/dashboard/services/saved_dashboards');
- require('css!apps/dashboard/styles/main.css');
+ require('plugins/dashboard/directives/grid');
+ require('plugins/dashboard/directives/panel');
+ require('plugins/dashboard/services/saved_dashboards');
+ require('css!plugins/dashboard/styles/main.css');
var app = require('modules').get('app/dashboard', [
'elasticsearch',
@@ -27,7 +27,7 @@ define(function (require) {
require('routes')
.when('/dashboard', {
- template: require('text!apps/dashboard/index.html'),
+ template: require('text!plugins/dashboard/index.html'),
resolve: {
dash: function (savedDashboards) {
return savedDashboards.get();
@@ -35,7 +35,7 @@ define(function (require) {
}
})
.when('/dashboard/:id', {
- template: require('text!apps/dashboard/index.html'),
+ template: require('text!plugins/dashboard/index.html'),
resolve: {
dash: function (savedDashboards, Notifier, $route, $location, courier) {
return savedDashboards.get($route.current.params.id)
@@ -65,10 +65,10 @@ define(function (require) {
var $state = $scope.state = new AppState(stateDefaults);
$scope.configTemplate = new ConfigTemplate({
- save: require('text!apps/dashboard/partials/save_dashboard.html'),
- load: require('text!apps/dashboard/partials/load_dashboard.html'),
- share: require('text!apps/dashboard/partials/share.html'),
- pickVis: require('text!apps/dashboard/partials/pick_visualization.html')
+ save: require('text!plugins/dashboard/partials/save_dashboard.html'),
+ load: require('text!plugins/dashboard/partials/load_dashboard.html'),
+ share: require('text!plugins/dashboard/partials/share.html'),
+ pickVis: require('text!plugins/dashboard/partials/pick_visualization.html')
});
$scope.openSave = _.partial($scope.configTemplate.toggle, 'save');
@@ -163,4 +163,13 @@ define(function (require) {
}
};
});
+
+ var apps = require('registry/apps');
+ apps.register(function DashboardAppModule() {
+ return {
+ id: 'dashboard',
+ name: 'Dashboard',
+ order: 2
+ };
+ });
});
diff --git a/src/kibana/apps/dashboard/partials/load_dashboard.html b/src/kibana/plugins/dashboard/partials/load_dashboard.html
similarity index 100%
rename from src/kibana/apps/dashboard/partials/load_dashboard.html
rename to src/kibana/plugins/dashboard/partials/load_dashboard.html
diff --git a/src/kibana/apps/dashboard/partials/panel.html b/src/kibana/plugins/dashboard/partials/panel.html
similarity index 100%
rename from src/kibana/apps/dashboard/partials/panel.html
rename to src/kibana/plugins/dashboard/partials/panel.html
diff --git a/src/kibana/apps/dashboard/partials/pick_visualization.html b/src/kibana/plugins/dashboard/partials/pick_visualization.html
similarity index 100%
rename from src/kibana/apps/dashboard/partials/pick_visualization.html
rename to src/kibana/plugins/dashboard/partials/pick_visualization.html
diff --git a/src/kibana/apps/dashboard/partials/save_dashboard.html b/src/kibana/plugins/dashboard/partials/save_dashboard.html
similarity index 100%
rename from src/kibana/apps/dashboard/partials/save_dashboard.html
rename to src/kibana/plugins/dashboard/partials/save_dashboard.html
diff --git a/src/kibana/apps/dashboard/partials/share.html b/src/kibana/plugins/dashboard/partials/share.html
similarity index 100%
rename from src/kibana/apps/dashboard/partials/share.html
rename to src/kibana/plugins/dashboard/partials/share.html
diff --git a/src/kibana/apps/dashboard/services/_saved_dashboard.js b/src/kibana/plugins/dashboard/services/_saved_dashboard.js
similarity index 100%
rename from src/kibana/apps/dashboard/services/_saved_dashboard.js
rename to src/kibana/plugins/dashboard/services/_saved_dashboard.js
diff --git a/src/kibana/apps/dashboard/services/saved_dashboards.js b/src/kibana/plugins/dashboard/services/saved_dashboards.js
similarity index 93%
rename from src/kibana/apps/dashboard/services/saved_dashboards.js
rename to src/kibana/plugins/dashboard/services/saved_dashboards.js
index 1f2885844fa8..dc90d11a338a 100644
--- a/src/kibana/apps/dashboard/services/saved_dashboards.js
+++ b/src/kibana/plugins/dashboard/services/saved_dashboards.js
@@ -2,12 +2,12 @@ define(function (require) {
var module = require('modules').get('app/dashboard');
var _ = require('lodash');
// bring in the factory
- require('apps/dashboard/services/_saved_dashboard');
+ require('plugins/dashboard/services/_saved_dashboard');
// Register this service with the saved object registry so it can be
// edited by the object editor.
- require('apps/settings/saved_object_registry').register({
+ require('plugins/settings/saved_object_registry').register({
service: 'savedDashboards',
title: 'dashboards'
});
diff --git a/src/kibana/apps/dashboard/styles/main.less b/src/kibana/plugins/dashboard/styles/main.less
similarity index 100%
rename from src/kibana/apps/dashboard/styles/main.less
rename to src/kibana/plugins/dashboard/styles/main.less
diff --git a/src/kibana/apps/discover/_hit_sort_fn.js b/src/kibana/plugins/discover/_hit_sort_fn.js
similarity index 100%
rename from src/kibana/apps/discover/_hit_sort_fn.js
rename to src/kibana/plugins/discover/_hit_sort_fn.js
diff --git a/src/kibana/apps/discover/_segmented_fetch.js b/src/kibana/plugins/discover/_segmented_fetch.js
similarity index 100%
rename from src/kibana/apps/discover/_segmented_fetch.js
rename to src/kibana/plugins/discover/_segmented_fetch.js
diff --git a/src/kibana/apps/discover/components/field_chooser/discover_field.html b/src/kibana/plugins/discover/components/field_chooser/discover_field.html
similarity index 100%
rename from src/kibana/apps/discover/components/field_chooser/discover_field.html
rename to src/kibana/plugins/discover/components/field_chooser/discover_field.html
diff --git a/src/kibana/apps/discover/components/field_chooser/discover_field.js b/src/kibana/plugins/discover/components/field_chooser/discover_field.js
similarity index 88%
rename from src/kibana/apps/discover/components/field_chooser/discover_field.js
rename to src/kibana/plugins/discover/components/field_chooser/discover_field.js
index 406c6753d2f2..0478fa86846d 100644
--- a/src/kibana/apps/discover/components/field_chooser/discover_field.js
+++ b/src/kibana/plugins/discover/components/field_chooser/discover_field.js
@@ -1,8 +1,8 @@
define(function (require) {
var $ = require('jquery');
var app = require('modules').get('apps/discover');
- var html = require('text!apps/discover/components/field_chooser/discover_field.html');
- var detailsHtml = require('text!apps/discover/components/field_chooser/discover_field_details.html');
+ var html = require('text!plugins/discover/components/field_chooser/discover_field.html');
+ var detailsHtml = require('text!plugins/discover/components/field_chooser/discover_field_details.html');
var _ = require('lodash');
require('directives/css_truncate');
diff --git a/src/kibana/apps/discover/components/field_chooser/discover_field_details.html b/src/kibana/plugins/discover/components/field_chooser/discover_field_details.html
similarity index 100%
rename from src/kibana/apps/discover/components/field_chooser/discover_field_details.html
rename to src/kibana/plugins/discover/components/field_chooser/discover_field_details.html
diff --git a/src/kibana/apps/discover/components/field_chooser/field_chooser.html b/src/kibana/plugins/discover/components/field_chooser/field_chooser.html
similarity index 100%
rename from src/kibana/apps/discover/components/field_chooser/field_chooser.html
rename to src/kibana/plugins/discover/components/field_chooser/field_chooser.html
diff --git a/src/kibana/apps/discover/components/field_chooser/field_chooser.js b/src/kibana/plugins/discover/components/field_chooser/field_chooser.js
similarity index 95%
rename from src/kibana/apps/discover/components/field_chooser/field_chooser.js
rename to src/kibana/plugins/discover/components/field_chooser/field_chooser.js
index be483ad50016..d7581199b1a3 100644
--- a/src/kibana/apps/discover/components/field_chooser/field_chooser.js
+++ b/src/kibana/plugins/discover/components/field_chooser/field_chooser.js
@@ -1,17 +1,17 @@
define(function (require) {
var app = require('modules').get('apps/discover');
- var html = require('text!apps/discover/components/field_chooser/field_chooser.html');
+ var html = require('text!plugins/discover/components/field_chooser/field_chooser.html');
var _ = require('lodash');
var jsonPath = require('jsonpath');
var rison = require('utils/rison');
var qs = require('utils/query_string');
- var fieldCalculator = require('apps/discover/components/field_chooser/lib/field_calculator');
+ var fieldCalculator = require('plugins/discover/components/field_chooser/lib/field_calculator');
require('directives/css_truncate');
require('directives/field_name');
require('filters/unique');
- require('apps/discover/components/field_chooser/discover_field');
+ require('plugins/discover/components/field_chooser/discover_field');
app.directive('discFieldChooser', function ($location, globalState, config) {
return {
diff --git a/src/kibana/apps/discover/components/field_chooser/lib/field_calculator.js b/src/kibana/plugins/discover/components/field_chooser/lib/field_calculator.js
similarity index 100%
rename from src/kibana/apps/discover/components/field_chooser/lib/field_calculator.js
rename to src/kibana/plugins/discover/components/field_chooser/lib/field_calculator.js
diff --git a/src/kibana/apps/discover/controllers/discover.js b/src/kibana/plugins/discover/controllers/discover.js
similarity index 97%
rename from src/kibana/apps/discover/controllers/discover.js
rename to src/kibana/plugins/discover/controllers/discover.js
index a21d700cb4d8..1dd62a74096d 100644
--- a/src/kibana/apps/discover/controllers/discover.js
+++ b/src/kibana/plugins/discover/controllers/discover.js
@@ -2,9 +2,9 @@ define(function (require) {
var _ = require('lodash');
var angular = require('angular');
var moment = require('moment');
- var settingsHtml = require('text!apps/discover/partials/settings.html');
- var saveHtml = require('text!apps/discover/partials/save_search.html');
- var loadHtml = require('text!apps/discover/partials/load_search.html');
+ var settingsHtml = require('text!plugins/discover/partials/settings.html');
+ var saveHtml = require('text!plugins/discover/partials/save_search.html');
+ var loadHtml = require('text!plugins/discover/partials/load_search.html');
var interval = require('utils/interval');
var datemath = require('utils/datemath');
@@ -19,7 +19,7 @@ define(function (require) {
require('components/state_management/app_state');
require('services/timefilter');
- require('apps/discover/directives/table');
+ require('plugins/discover/directives/table');
var app = require('modules').get('apps/discover', [
'kibana/notify',
@@ -29,7 +29,7 @@ define(function (require) {
require('routes')
.when('/discover/:id?', {
- template: require('text!apps/discover/index.html'),
+ template: require('text!plugins/discover/index.html'),
reloadOnSearch: false,
resolve: {
indexList: function (courier) {
@@ -48,9 +48,9 @@ define(function (require) {
app.controller('discover', function ($scope, config, courier, $route, $window, Notifier, AppState, timefilter, Promise, Private, kbnUrl) {
var Vis = Private(require('components/vis/vis'));
- var SegmentedFetch = Private(require('apps/discover/_segmented_fetch'));
+ var SegmentedFetch = Private(require('plugins/discover/_segmented_fetch'));
- var HitSortFn = Private(require('apps/discover/_hit_sort_fn'));
+ var HitSortFn = Private(require('plugins/discover/_hit_sort_fn'));
var notify = new Notifier({
location: 'Discover'
diff --git a/src/kibana/apps/discover/directives/table.js b/src/kibana/plugins/discover/directives/table.js
similarity index 85%
rename from src/kibana/apps/discover/directives/table.js
rename to src/kibana/plugins/discover/directives/table.js
index b474ab904718..040ea5ba5111 100644
--- a/src/kibana/apps/discover/directives/table.js
+++ b/src/kibana/plugins/discover/directives/table.js
@@ -1,10 +1,10 @@
define(function (require) {
- var html = require('text!apps/discover/partials/table.html');
+ var html = require('text!plugins/discover/partials/table.html');
require('directives/truncated');
require('directives/infinite_scroll');
- require('apps/discover/directives/table_header');
- require('apps/discover/directives/table_row');
+ require('plugins/discover/directives/table_header');
+ require('plugins/discover/directives/table_row');
var module = require('modules').get('app/discover');
diff --git a/src/kibana/apps/discover/directives/table_header.js b/src/kibana/plugins/discover/directives/table_header.js
similarity index 95%
rename from src/kibana/apps/discover/directives/table_header.js
rename to src/kibana/plugins/discover/directives/table_header.js
index d503346a6433..1a046f0f3ec6 100644
--- a/src/kibana/apps/discover/directives/table_header.js
+++ b/src/kibana/plugins/discover/directives/table_header.js
@@ -3,7 +3,7 @@ define(function (require) {
var module = require('modules').get('app/discover');
module.directive('kbnTableHeader', function () {
- var headerHtml = require('text!apps/discover/partials/table_header.html');
+ var headerHtml = require('text!plugins/discover/partials/table_header.html');
return {
restrict: 'A',
scope: {
diff --git a/src/kibana/apps/discover/directives/table_row.js b/src/kibana/plugins/discover/directives/table_row.js
similarity index 95%
rename from src/kibana/apps/discover/directives/table_row.js
rename to src/kibana/plugins/discover/directives/table_row.js
index 83c77e66a188..5ef1c7787dbf 100644
--- a/src/kibana/apps/discover/directives/table_row.js
+++ b/src/kibana/plugins/discover/directives/table_row.js
@@ -13,9 +13,9 @@ define(function (require) {
* ```
*/
module.directive('kbnTableRow', function ($compile, config) {
- var openRowHtml = require('text!apps/discover/partials/table_row/open.html');
- var detailsHtml = require('text!apps/discover/partials/table_row/details.html');
- var cellTemplate = _.template(require('text!apps/discover/partials/table_row/cell.html'));
+ var openRowHtml = require('text!plugins/discover/partials/table_row/open.html');
+ var detailsHtml = require('text!plugins/discover/partials/table_row/details.html');
+ var cellTemplate = _.template(require('text!plugins/discover/partials/table_row/cell.html'));
var truncateByHeightTemplate = _.template(require('text!partials/truncate_by_height.html'));
return {
diff --git a/src/kibana/apps/discover/directives/timechart.js b/src/kibana/plugins/discover/directives/timechart.js
similarity index 100%
rename from src/kibana/apps/discover/directives/timechart.js
rename to src/kibana/plugins/discover/directives/timechart.js
diff --git a/src/kibana/apps/discover/index.html b/src/kibana/plugins/discover/index.html
similarity index 100%
rename from src/kibana/apps/discover/index.html
rename to src/kibana/plugins/discover/index.html
diff --git a/src/kibana/plugins/discover/index.js b/src/kibana/plugins/discover/index.js
new file mode 100644
index 000000000000..926dd6524cca
--- /dev/null
+++ b/src/kibana/plugins/discover/index.js
@@ -0,0 +1,17 @@
+define(function (require, module, exports) {
+ require('plugins/discover/directives/table');
+ require('plugins/discover/saved_searches/saved_searches');
+ require('plugins/discover/directives/timechart');
+ require('plugins/discover/components/field_chooser/field_chooser');
+ require('plugins/discover/controllers/discover');
+ require('css!plugins/discover/styles/main.css');
+
+ var apps = require('registry/apps');
+ apps.register(function DiscoverAppModule() {
+ return {
+ id: 'discover',
+ name: 'Discover',
+ order: 0
+ };
+ });
+});
\ No newline at end of file
diff --git a/src/kibana/apps/discover/partials/load_search.html b/src/kibana/plugins/discover/partials/load_search.html
similarity index 100%
rename from src/kibana/apps/discover/partials/load_search.html
rename to src/kibana/plugins/discover/partials/load_search.html
diff --git a/src/kibana/apps/discover/partials/save_search.html b/src/kibana/plugins/discover/partials/save_search.html
similarity index 100%
rename from src/kibana/apps/discover/partials/save_search.html
rename to src/kibana/plugins/discover/partials/save_search.html
diff --git a/src/kibana/apps/discover/partials/settings.html b/src/kibana/plugins/discover/partials/settings.html
similarity index 100%
rename from src/kibana/apps/discover/partials/settings.html
rename to src/kibana/plugins/discover/partials/settings.html
diff --git a/src/kibana/apps/discover/partials/table.html b/src/kibana/plugins/discover/partials/table.html
similarity index 100%
rename from src/kibana/apps/discover/partials/table.html
rename to src/kibana/plugins/discover/partials/table.html
diff --git a/src/kibana/apps/discover/partials/table_header.html b/src/kibana/plugins/discover/partials/table_header.html
similarity index 100%
rename from src/kibana/apps/discover/partials/table_header.html
rename to src/kibana/plugins/discover/partials/table_header.html
diff --git a/src/kibana/apps/discover/partials/table_row/cell.html b/src/kibana/plugins/discover/partials/table_row/cell.html
similarity index 100%
rename from src/kibana/apps/discover/partials/table_row/cell.html
rename to src/kibana/plugins/discover/partials/table_row/cell.html
diff --git a/src/kibana/apps/discover/partials/table_row/details.html b/src/kibana/plugins/discover/partials/table_row/details.html
similarity index 100%
rename from src/kibana/apps/discover/partials/table_row/details.html
rename to src/kibana/plugins/discover/partials/table_row/details.html
diff --git a/src/kibana/apps/discover/partials/table_row/open.html b/src/kibana/plugins/discover/partials/table_row/open.html
similarity index 100%
rename from src/kibana/apps/discover/partials/table_row/open.html
rename to src/kibana/plugins/discover/partials/table_row/open.html
diff --git a/src/kibana/apps/discover/saved_searches/_saved_search.js b/src/kibana/plugins/discover/saved_searches/_saved_search.js
similarity index 100%
rename from src/kibana/apps/discover/saved_searches/_saved_search.js
rename to src/kibana/plugins/discover/saved_searches/_saved_search.js
diff --git a/src/kibana/apps/discover/saved_searches/saved_searches.js b/src/kibana/plugins/discover/saved_searches/saved_searches.js
similarity index 93%
rename from src/kibana/apps/discover/saved_searches/saved_searches.js
rename to src/kibana/plugins/discover/saved_searches/saved_searches.js
index 6575e0ec51cc..4cb3325c8db4 100644
--- a/src/kibana/apps/discover/saved_searches/saved_searches.js
+++ b/src/kibana/plugins/discover/saved_searches/saved_searches.js
@@ -1,7 +1,7 @@
define(function (require) {
var _ = require('lodash');
- require('apps/discover/saved_searches/_saved_search');
+ require('plugins/discover/saved_searches/_saved_search');
require('components/notify/notify');
var module = require('modules').get('discover/saved_searches', [
@@ -10,7 +10,7 @@ define(function (require) {
// Register this service with the saved object registry so it can be
// edited by the object editor.
- require('apps/settings/saved_object_registry').register({
+ require('plugins/settings/saved_object_registry').register({
service: 'savedSearches',
title: 'searches'
});
diff --git a/src/kibana/apps/discover/styles/main.less b/src/kibana/plugins/discover/styles/main.less
similarity index 100%
rename from src/kibana/apps/discover/styles/main.less
rename to src/kibana/plugins/discover/styles/main.less
diff --git a/src/kibana/apps/settings/app.html b/src/kibana/plugins/settings/app.html
similarity index 100%
rename from src/kibana/apps/settings/app.html
rename to src/kibana/plugins/settings/app.html
diff --git a/src/kibana/apps/settings/index.js b/src/kibana/plugins/settings/index.js
similarity index 67%
rename from src/kibana/apps/settings/index.js
rename to src/kibana/plugins/settings/index.js
index d557bd47a575..4d1b2a30b1a2 100644
--- a/src/kibana/apps/settings/index.js
+++ b/src/kibana/plugins/settings/index.js
@@ -1,7 +1,7 @@
define(function (require, module, exports) {
var _ = require('lodash');
- require('css!apps/settings/styles/main.css');
+ require('css!plugins/settings/styles/main.css');
require('filters/start_from');
require('routes')
@@ -13,14 +13,14 @@ define(function (require, module, exports) {
.directive('kbnSettingsApp', function (Private, $route, timefilter) {
return {
restrict: 'E',
- template: require('text!apps/settings/app.html'),
+ template: require('text!plugins/settings/app.html'),
transclude: true,
scope: {
sectionName: '@section'
},
link: function ($scope, $el) {
timefilter.enabled = false;
- $scope.sections = require('apps/settings/sections/index');
+ $scope.sections = require('plugins/settings/sections/index');
$scope.section = _.find($scope.sections, { name: $scope.sectionName });
$scope.sections.forEach(function (section) {
@@ -29,4 +29,13 @@ define(function (require, module, exports) {
}
};
});
+
+ var apps = require('registry/apps');
+ apps.register(function SettingsAppModule() {
+ return {
+ id: 'settings',
+ name: 'Settings',
+ order: 3
+ };
+ });
});
diff --git a/src/kibana/apps/settings/saved_object_registry.js b/src/kibana/plugins/settings/saved_object_registry.js
similarity index 100%
rename from src/kibana/apps/settings/saved_object_registry.js
rename to src/kibana/plugins/settings/saved_object_registry.js
diff --git a/src/kibana/apps/settings/sections/about/elk.png b/src/kibana/plugins/settings/sections/about/elk.png
similarity index 100%
rename from src/kibana/apps/settings/sections/about/elk.png
rename to src/kibana/plugins/settings/sections/about/elk.png
diff --git a/src/kibana/apps/settings/sections/about/index.html b/src/kibana/plugins/settings/sections/about/index.html
similarity index 92%
rename from src/kibana/apps/settings/sections/about/index.html
rename to src/kibana/plugins/settings/sections/about/index.html
index 210b255a78d1..dbcd6f0040d1 100644
--- a/src/kibana/apps/settings/sections/about/index.html
+++ b/src/kibana/plugins/settings/sections/about/index.html
@@ -2,7 +2,7 @@
- 
+ 
Kibana
diff --git a/src/kibana/apps/settings/sections/about/index.js b/src/kibana/plugins/settings/sections/about/index.js
similarity index 86%
rename from src/kibana/apps/settings/sections/about/index.js
rename to src/kibana/plugins/settings/sections/about/index.js
index 5d3b5437c40a..796d8101edbf 100644
--- a/src/kibana/apps/settings/sections/about/index.js
+++ b/src/kibana/plugins/settings/sections/about/index.js
@@ -3,7 +3,7 @@ define(function (require) {
require('routes')
.when('/settings/about', {
- template: require('text!apps/settings/sections/about/index.html')
+ template: require('text!plugins/settings/sections/about/index.html')
});
require('modules').get('apps/settings')
diff --git a/src/kibana/apps/settings/sections/advanced/index.html b/src/kibana/plugins/settings/sections/advanced/index.html
similarity index 100%
rename from src/kibana/apps/settings/sections/advanced/index.html
rename to src/kibana/plugins/settings/sections/advanced/index.html
diff --git a/src/kibana/apps/settings/sections/advanced/index.js b/src/kibana/plugins/settings/sections/advanced/index.js
similarity index 97%
rename from src/kibana/apps/settings/sections/advanced/index.js
rename to src/kibana/plugins/settings/sections/advanced/index.js
index 8687fa84eb94..dba9bcd31525 100644
--- a/src/kibana/apps/settings/sections/advanced/index.js
+++ b/src/kibana/plugins/settings/sections/advanced/index.js
@@ -4,7 +4,7 @@ define(function (require) {
require('routes')
.when('/settings/advanced', {
- template: require('text!apps/settings/sections/advanced/index.html')
+ template: require('text!plugins/settings/sections/advanced/index.html')
});
require('modules').get('apps/settings')
diff --git a/src/kibana/plugins/settings/sections/index.js b/src/kibana/plugins/settings/sections/index.js
new file mode 100644
index 000000000000..0f0eeaeab18a
--- /dev/null
+++ b/src/kibana/plugins/settings/sections/index.js
@@ -0,0 +1,10 @@
+define(function (require) {
+ // each of these private modules returns an object defining that section, their properties
+ // are used to create the nav bar
+ return [
+ require('plugins/settings/sections/indices/index'),
+ require('plugins/settings/sections/advanced/index'),
+ require('plugins/settings/sections/objects/index'),
+ require('plugins/settings/sections/about/index')
+ ];
+});
\ No newline at end of file
diff --git a/src/kibana/apps/settings/sections/indices/_create.html b/src/kibana/plugins/settings/sections/indices/_create.html
similarity index 100%
rename from src/kibana/apps/settings/sections/indices/_create.html
rename to src/kibana/plugins/settings/sections/indices/_create.html
diff --git a/src/kibana/apps/settings/sections/indices/_create.js b/src/kibana/plugins/settings/sections/indices/_create.js
similarity index 97%
rename from src/kibana/apps/settings/sections/indices/_create.js
rename to src/kibana/plugins/settings/sections/indices/_create.js
index e065e63e27b1..4ef27290ffb0 100644
--- a/src/kibana/apps/settings/sections/indices/_create.js
+++ b/src/kibana/plugins/settings/sections/indices/_create.js
@@ -5,14 +5,14 @@ define(function (require) {
require('routes')
.when('/settings/indices/', {
- template: require('text!apps/settings/sections/indices/_create.html')
+ template: require('text!plugins/settings/sections/indices/_create.html')
});
require('modules').get('apps/settings')
.controller('settingsIndicesCreate', function ($scope, kbnUrl, Private, Notifier, indexPatterns, es, config) {
var notify = new Notifier();
var MissingIndices = errors.IndexPatternMissingIndices;
- var refreshKibanaIndex = Private(require('apps/settings/sections/indices/_refresh_kibana_index'));
+ var refreshKibanaIndex = Private(require('plugins/settings/sections/indices/_refresh_kibana_index'));
var intervals = indexPatterns.intervals;
// this and child scopes will write pattern vars here
diff --git a/src/kibana/apps/settings/sections/indices/_edit.html b/src/kibana/plugins/settings/sections/indices/_edit.html
similarity index 100%
rename from src/kibana/apps/settings/sections/indices/_edit.html
rename to src/kibana/plugins/settings/sections/indices/_edit.html
diff --git a/src/kibana/apps/settings/sections/indices/_edit.js b/src/kibana/plugins/settings/sections/indices/_edit.js
similarity index 92%
rename from src/kibana/apps/settings/sections/indices/_edit.js
rename to src/kibana/plugins/settings/sections/indices/_edit.js
index 79977f008dba..131634cb11af 100644
--- a/src/kibana/apps/settings/sections/indices/_edit.js
+++ b/src/kibana/plugins/settings/sections/indices/_edit.js
@@ -3,7 +3,7 @@ define(function (require) {
require('routes')
.when('/settings/indices/:id', {
- template: require('text!apps/settings/sections/indices/_edit.html'),
+ template: require('text!plugins/settings/sections/indices/_edit.html'),
resolve: {
indexPattern: function ($route, courier) {
return courier.indexPatterns.get($route.current.params.id)
@@ -15,7 +15,7 @@ define(function (require) {
require('modules').get('apps/settings')
.controller('settingsIndicesEdit', function ($scope, $location, $route, config, courier, Notifier, Private) {
var notify = new Notifier();
- var refreshKibanaIndex = Private(require('apps/settings/sections/indices/_refresh_kibana_index'));
+ var refreshKibanaIndex = Private(require('plugins/settings/sections/indices/_refresh_kibana_index'));
$scope.indexPattern = $route.current.locals.indexPattern;
var otherIds = _.without($route.current.locals.indexPatternIds, $scope.indexPattern.id);
diff --git a/src/kibana/apps/settings/sections/indices/_refresh_kibana_index.js b/src/kibana/plugins/settings/sections/indices/_refresh_kibana_index.js
similarity index 100%
rename from src/kibana/apps/settings/sections/indices/_refresh_kibana_index.js
rename to src/kibana/plugins/settings/sections/indices/_refresh_kibana_index.js
diff --git a/src/kibana/apps/settings/sections/indices/index.html b/src/kibana/plugins/settings/sections/indices/index.html
similarity index 100%
rename from src/kibana/apps/settings/sections/indices/index.html
rename to src/kibana/plugins/settings/sections/indices/index.html
diff --git a/src/kibana/apps/settings/sections/indices/index.js b/src/kibana/plugins/settings/sections/indices/index.js
similarity index 88%
rename from src/kibana/apps/settings/sections/indices/index.js
rename to src/kibana/plugins/settings/sections/indices/index.js
index f37b25adbf91..f36d0c15d4cf 100644
--- a/src/kibana/apps/settings/sections/indices/index.js
+++ b/src/kibana/plugins/settings/sections/indices/index.js
@@ -1,8 +1,8 @@
define(function (require) {
var _ = require('lodash');
- require('apps/settings/sections/indices/_create');
- require('apps/settings/sections/indices/_edit');
+ require('plugins/settings/sections/indices/_create');
+ require('plugins/settings/sections/indices/_edit');
// add a dependency to all of the subsection routes
require('routes')
@@ -18,7 +18,7 @@ define(function (require) {
return {
restrict: 'E',
transclude: true,
- template: require('text!apps/settings/sections/indices/index.html'),
+ template: require('text!plugins/settings/sections/indices/index.html'),
link: function ($scope) {
$scope.edittingId = $route.current.params.id;
$scope.defaultIndex = config.get('defaultIndex');
diff --git a/src/kibana/apps/settings/sections/objects/_objects.html b/src/kibana/plugins/settings/sections/objects/_objects.html
similarity index 100%
rename from src/kibana/apps/settings/sections/objects/_objects.html
rename to src/kibana/plugins/settings/sections/objects/_objects.html
diff --git a/src/kibana/apps/settings/sections/objects/_objects.js b/src/kibana/plugins/settings/sections/objects/_objects.js
similarity index 94%
rename from src/kibana/apps/settings/sections/objects/_objects.js
rename to src/kibana/plugins/settings/sections/objects/_objects.js
index 0b026181cfbe..b0af3a08dc1c 100644
--- a/src/kibana/apps/settings/sections/objects/_objects.js
+++ b/src/kibana/plugins/settings/sections/objects/_objects.js
@@ -1,7 +1,7 @@
define(function (require) {
var _ = require('lodash');
- var registry = require('apps/settings/saved_object_registry');
- var objectIndexHTML = require('text!apps/settings/sections/objects/_objects.html');
+ var registry = require('plugins/settings/saved_object_registry');
+ var objectIndexHTML = require('text!plugins/settings/sections/objects/_objects.html');
require('routes')
.when('/settings/objects', {
diff --git a/src/kibana/apps/settings/sections/objects/_view.html b/src/kibana/plugins/settings/sections/objects/_view.html
similarity index 100%
rename from src/kibana/apps/settings/sections/objects/_view.html
rename to src/kibana/plugins/settings/sections/objects/_view.html
diff --git a/src/kibana/apps/settings/sections/objects/_view.js b/src/kibana/plugins/settings/sections/objects/_view.js
similarity index 97%
rename from src/kibana/apps/settings/sections/objects/_view.js
rename to src/kibana/plugins/settings/sections/objects/_view.js
index 41ddd36baad2..9029164242c1 100644
--- a/src/kibana/apps/settings/sections/objects/_view.js
+++ b/src/kibana/plugins/settings/sections/objects/_view.js
@@ -2,8 +2,8 @@ define(function (require) {
var _ = require('lodash');
var inflection = require('inflection');
var rison = require('utils/rison');
- var registry = require('apps/settings/saved_object_registry');
- var objectViewHTML = require('text!apps/settings/sections/objects/_view.html');
+ var registry = require('plugins/settings/saved_object_registry');
+ var objectViewHTML = require('text!plugins/settings/sections/objects/_view.html');
require('routes')
.when('/settings/objects/:service/:id', {
diff --git a/src/kibana/apps/settings/sections/objects/index.js b/src/kibana/plugins/settings/sections/objects/index.js
similarity index 75%
rename from src/kibana/apps/settings/sections/objects/index.js
rename to src/kibana/plugins/settings/sections/objects/index.js
index 4ac1cbe448e1..ef85a416111b 100644
--- a/src/kibana/apps/settings/sections/objects/index.js
+++ b/src/kibana/plugins/settings/sections/objects/index.js
@@ -1,6 +1,6 @@
define(function (require) {
- require('apps/settings/sections/objects/_view');
- require('apps/settings/sections/objects/_objects');
+ require('plugins/settings/sections/objects/_view');
+ require('plugins/settings/sections/objects/_objects');
require('angular-ui-ace');
require('angular-elastic');
diff --git a/src/kibana/apps/settings/styles/main.less b/src/kibana/plugins/settings/styles/main.less
similarity index 100%
rename from src/kibana/apps/settings/styles/main.less
rename to src/kibana/plugins/settings/styles/main.less
diff --git a/src/kibana/components/vis_types/_schemas.js b/src/kibana/plugins/vis_types/_schemas.js
similarity index 84%
rename from src/kibana/components/vis_types/_schemas.js
rename to src/kibana/plugins/vis_types/_schemas.js
index 4b1b4621812c..2c1e03133936 100644
--- a/src/kibana/components/vis_types/_schemas.js
+++ b/src/kibana/plugins/vis_types/_schemas.js
@@ -1,7 +1,7 @@
define(function (require) {
return function VisTypeSchemasFactory(Private) {
var _ = require('lodash');
- var Registry = require('utils/registry/registry');
+ var IndexedArray = require('utils/indexed_array/index');
var AggParams = Private(require('components/agg_types/_agg_params'));
function Schemas(schemas) {
@@ -18,7 +18,7 @@ define(function (require) {
default: true
}
];
- schema.editor = require('text!components/vis_types/controls/rows_or_columns.html');
+ schema.editor = require('text!plugins/vis_types/controls/rows_or_columns.html');
}
_.defaults(schema, {
@@ -37,7 +37,7 @@ define(function (require) {
return schema;
})
.tap(function (schemas) {
- self.all = new Registry({
+ self.all = new IndexedArray({
index: ['name'],
group: ['group'],
immutable: true,
@@ -46,7 +46,7 @@ define(function (require) {
})
.groupBy('group')
.forOwn(function (group, groupName) {
- self[groupName] = new Registry({
+ self[groupName] = new IndexedArray({
index: ['name'],
immutable: true,
initialSet: group
diff --git a/src/kibana/components/vis_types/_vis_type.js b/src/kibana/plugins/vis_types/_vis_type.js
similarity index 77%
rename from src/kibana/components/vis_types/_vis_type.js
rename to src/kibana/plugins/vis_types/_vis_type.js
index 0168f6a53ce6..70f1196c5237 100644
--- a/src/kibana/components/vis_types/_vis_type.js
+++ b/src/kibana/plugins/vis_types/_vis_type.js
@@ -2,8 +2,8 @@ define(function (require) {
return function VisTypeFactory(Private) {
var _ = require('lodash');
- var VisTypeSchemas = Private(require('components/vis_types/_schemas'));
- var HistogramConverter = Private(require('components/vis_types/converters/histogram'));
+ var VisTypeSchemas = Private(require('plugins/vis_types/_schemas'));
+ var HistogramConverter = Private(require('plugins/vis_types/converters/histogram'));
function VisType(opts) {
opts = opts || {};
diff --git a/src/kibana/components/vis_types/controls/rows_or_columns.html b/src/kibana/plugins/vis_types/controls/rows_or_columns.html
similarity index 100%
rename from src/kibana/components/vis_types/controls/rows_or_columns.html
rename to src/kibana/plugins/vis_types/controls/rows_or_columns.html
diff --git a/src/kibana/components/vis_types/converters/histogram.js b/src/kibana/plugins/vis_types/converters/histogram.js
similarity index 98%
rename from src/kibana/components/vis_types/converters/histogram.js
rename to src/kibana/plugins/vis_types/converters/histogram.js
index c1dbdf8613b7..892d0141f235 100644
--- a/src/kibana/components/vis_types/converters/histogram.js
+++ b/src/kibana/plugins/vis_types/converters/histogram.js
@@ -6,7 +6,7 @@ define(function (require) {
var interval = require('utils/interval');
var $tooltipScope = $rootScope.$new();
- var $tooltip = $(require('text!components/vis_types/tooltips/histogram.html'));
+ var $tooltip = $(require('text!plugins/vis_types/tooltips/histogram.html'));
$compile($tooltip)($tooltipScope);
return function (chart, columns, rows) {
diff --git a/src/kibana/components/vis_types/converters/pie.js b/src/kibana/plugins/vis_types/converters/pie.js
similarity index 98%
rename from src/kibana/components/vis_types/converters/pie.js
rename to src/kibana/plugins/vis_types/converters/pie.js
index 96d0def52256..2d68a735d833 100644
--- a/src/kibana/components/vis_types/converters/pie.js
+++ b/src/kibana/plugins/vis_types/converters/pie.js
@@ -5,7 +5,7 @@ define(function (require) {
var moment = require('moment');
var interval = require('utils/interval');
- var $tooltip = $(require('text!components/vis_types/tooltips/pie.html'));
+ var $tooltip = $(require('text!plugins/vis_types/tooltips/pie.html'));
var $tooltipScope = $rootScope.$new();
$compile($tooltip)($tooltipScope);
diff --git a/src/kibana/components/vis_types/histogram.js b/src/kibana/plugins/vis_types/histogram.js
similarity index 87%
rename from src/kibana/components/vis_types/histogram.js
rename to src/kibana/plugins/vis_types/histogram.js
index 537485165d57..bf37ae1960c7 100644
--- a/src/kibana/components/vis_types/histogram.js
+++ b/src/kibana/plugins/vis_types/histogram.js
@@ -1,7 +1,7 @@
define(function (require) {
return function HistogramVisType(Private) {
- var VisType = Private(require('components/vis_types/_vis_type'));
- var Schemas = Private(require('components/vis_types/_schemas'));
+ var VisType = Private(require('plugins/vis_types/_vis_type'));
+ var Schemas = Private(require('plugins/vis_types/_schemas'));
return new VisType({
name: 'histogram',
diff --git a/src/kibana/plugins/vis_types/index.js b/src/kibana/plugins/vis_types/index.js
new file mode 100644
index 000000000000..c6a182c3453f
--- /dev/null
+++ b/src/kibana/plugins/vis_types/index.js
@@ -0,0 +1,7 @@
+define(function (require) {
+ var visTypes = require('registry/vis_types');
+
+ visTypes.register(require('plugins/vis_types/histogram'));
+ visTypes.register(require('plugins/vis_types/line'));
+ visTypes.register(require('plugins/vis_types/pie'));
+});
\ No newline at end of file
diff --git a/src/kibana/components/vis_types/line.js b/src/kibana/plugins/vis_types/line.js
similarity index 87%
rename from src/kibana/components/vis_types/line.js
rename to src/kibana/plugins/vis_types/line.js
index c36d792ef0a3..4e81c69e9605 100644
--- a/src/kibana/components/vis_types/line.js
+++ b/src/kibana/plugins/vis_types/line.js
@@ -1,7 +1,7 @@
define(function (require) {
return function HistogramVisType(Private) {
- var VisType = Private(require('components/vis_types/_vis_type'));
- var Schemas = Private(require('components/vis_types/_schemas'));
+ var VisType = Private(require('plugins/vis_types/_vis_type'));
+ var Schemas = Private(require('plugins/vis_types/_schemas'));
return new VisType({
name: 'line',
diff --git a/src/kibana/components/vis_types/pie.js b/src/kibana/plugins/vis_types/pie.js
similarity index 82%
rename from src/kibana/components/vis_types/pie.js
rename to src/kibana/plugins/vis_types/pie.js
index 2304fceff313..7b257c270f31 100644
--- a/src/kibana/components/vis_types/pie.js
+++ b/src/kibana/plugins/vis_types/pie.js
@@ -1,8 +1,8 @@
define(function (require) {
return function HistogramVisType(Private) {
- var VisType = Private(require('components/vis_types/_vis_type'));
- var Schemas = Private(require('components/vis_types/_schemas'));
- var PieConverter = Private(require('components/vis_types/converters/pie'));
+ var VisType = Private(require('plugins/vis_types/_vis_type'));
+ var Schemas = Private(require('plugins/vis_types/_schemas'));
+ var PieConverter = Private(require('plugins/vis_types/converters/pie'));
return new VisType({
name: 'pie',
diff --git a/src/kibana/components/vis_types/tooltips/histogram.html b/src/kibana/plugins/vis_types/tooltips/histogram.html
similarity index 100%
rename from src/kibana/components/vis_types/tooltips/histogram.html
rename to src/kibana/plugins/vis_types/tooltips/histogram.html
diff --git a/src/kibana/components/vis_types/tooltips/pie.html b/src/kibana/plugins/vis_types/tooltips/pie.html
similarity index 100%
rename from src/kibana/components/vis_types/tooltips/pie.html
rename to src/kibana/plugins/vis_types/tooltips/pie.html
diff --git a/src/kibana/apps/visualize/editor/add_bucket_agg.js b/src/kibana/plugins/visualize/editor/add_bucket_agg.js
similarity index 100%
rename from src/kibana/apps/visualize/editor/add_bucket_agg.js
rename to src/kibana/plugins/visualize/editor/add_bucket_agg.js
diff --git a/src/kibana/apps/visualize/partials/advanced_toggle.html b/src/kibana/plugins/visualize/editor/advanced_toggle.html
similarity index 100%
rename from src/kibana/apps/visualize/partials/advanced_toggle.html
rename to src/kibana/plugins/visualize/editor/advanced_toggle.html
diff --git a/src/kibana/apps/visualize/editor/agg.html b/src/kibana/plugins/visualize/editor/agg.html
similarity index 100%
rename from src/kibana/apps/visualize/editor/agg.html
rename to src/kibana/plugins/visualize/editor/agg.html
diff --git a/src/kibana/apps/visualize/editor/agg.js b/src/kibana/plugins/visualize/editor/agg.js
similarity index 96%
rename from src/kibana/apps/visualize/editor/agg.js
rename to src/kibana/plugins/visualize/editor/agg.js
index c6bb9b270cb0..7fc61ecfac1e 100644
--- a/src/kibana/apps/visualize/editor/agg.js
+++ b/src/kibana/plugins/visualize/editor/agg.js
@@ -5,11 +5,11 @@ define(function (require) {
var _ = require('lodash');
var $ = require('jquery');
var aggTypes = Private(require('components/agg_types/index'));
- var aggSelectHtml = require('text!apps/visualize/editor/agg_select.html');
- var advancedToggleHtml = require('text!apps/visualize/partials/advanced_toggle.html');
+ var aggSelectHtml = require('text!plugins/visualize/editor/agg_select.html');
+ var advancedToggleHtml = require('text!plugins/visualize/editor/advanced_toggle.html');
var chosen = require('angular-chosen');
- require('apps/visualize/editor/agg_param');
+ require('plugins/visualize/editor/agg_param');
var notify = new Notifier({
location: 'visAggGroup'
@@ -18,7 +18,7 @@ define(function (require) {
return {
restrict: 'E',
replace: true,
- template: require('text!apps/visualize/editor/agg.html'),
+ template: require('text!plugins/visualize/editor/agg.html'),
scope: {
vis: '=',
agg: '=',
diff --git a/src/kibana/apps/visualize/editor/agg_filter.js b/src/kibana/plugins/visualize/editor/agg_filter.js
similarity index 100%
rename from src/kibana/apps/visualize/editor/agg_filter.js
rename to src/kibana/plugins/visualize/editor/agg_filter.js
diff --git a/src/kibana/apps/visualize/editor/agg_group.html b/src/kibana/plugins/visualize/editor/agg_group.html
similarity index 100%
rename from src/kibana/apps/visualize/editor/agg_group.html
rename to src/kibana/plugins/visualize/editor/agg_group.html
diff --git a/src/kibana/apps/visualize/editor/agg_group.js b/src/kibana/plugins/visualize/editor/agg_group.js
similarity index 86%
rename from src/kibana/apps/visualize/editor/agg_group.js
rename to src/kibana/plugins/visualize/editor/agg_group.js
index cf4eee4d4d66..c970dc4a49d6 100644
--- a/src/kibana/apps/visualize/editor/agg_group.js
+++ b/src/kibana/plugins/visualize/editor/agg_group.js
@@ -2,15 +2,15 @@ define(function (require) {
require('modules')
.get('app/visualize')
.directive('visEditorAggGroup', function (Private) {
- require('apps/visualize/editor/agg');
- require('apps/visualize/editor/nesting_indicator');
+ require('plugins/visualize/editor/agg');
+ require('plugins/visualize/editor/nesting_indicator');
- var eachGroupHtml = require('text!apps/visualize/editor/agg_group.html');
+ var eachGroupHtml = require('text!plugins/visualize/editor/agg_group.html');
var AggConfig = Private(require('components/vis/_agg_config'));
return {
restrict: 'E',
- template: require('text!apps/visualize/editor/agg_group.html'),
+ template: require('text!plugins/visualize/editor/agg_group.html'),
replace: true,
scope: {
vis: '=',
diff --git a/src/kibana/apps/visualize/editor/agg_param.js b/src/kibana/plugins/visualize/editor/agg_param.js
similarity index 100%
rename from src/kibana/apps/visualize/editor/agg_param.js
rename to src/kibana/plugins/visualize/editor/agg_param.js
diff --git a/src/kibana/apps/visualize/editor/agg_select.html b/src/kibana/plugins/visualize/editor/agg_select.html
similarity index 100%
rename from src/kibana/apps/visualize/editor/agg_select.html
rename to src/kibana/plugins/visualize/editor/agg_select.html
diff --git a/src/kibana/apps/visualize/editor/editor.html b/src/kibana/plugins/visualize/editor/editor.html
similarity index 100%
rename from src/kibana/apps/visualize/editor/editor.html
rename to src/kibana/plugins/visualize/editor/editor.html
diff --git a/src/kibana/apps/visualize/editor/editor.js b/src/kibana/plugins/visualize/editor/editor.js
similarity index 92%
rename from src/kibana/apps/visualize/editor/editor.js
rename to src/kibana/plugins/visualize/editor/editor.js
index 007d54edb2a5..d631cd77bf47 100644
--- a/src/kibana/apps/visualize/editor/editor.js
+++ b/src/kibana/plugins/visualize/editor/editor.js
@@ -1,7 +1,7 @@
define(function (require) {
- require('apps/visualize/saved_visualizations/saved_visualizations');
- require('apps/visualize/editor/sidebar');
- require('apps/visualize/editor/agg_filter');
+ require('plugins/visualize/saved_visualizations/saved_visualizations');
+ require('plugins/visualize/editor/sidebar');
+ require('plugins/visualize/editor/agg_filter');
require('directives/saved_object_finder');
@@ -12,7 +12,7 @@ define(function (require) {
require('routes')
.when('/visualize/create', {
- template: require('text!apps/visualize/editor/editor.html'),
+ template: require('text!plugins/visualize/editor/editor.html'),
resolve: {
savedVis: function (savedVisualizations, courier, $route) {
if (!$route.current.params.indexPattern && !$route.current.params.savedSearchId) {
@@ -27,7 +27,7 @@ define(function (require) {
}
})
.when('/visualize/edit/:id', {
- template: require('text!apps/visualize/editor/editor.html'),
+ template: require('text!plugins/visualize/editor/editor.html'),
resolve: {
savedVis: function (savedVisualizations, courier, $route) {
return savedVisualizations.get($route.current.params.id)
@@ -62,9 +62,9 @@ define(function (require) {
// config panel templates
var configTemplate = new ConfigTemplate({
- save: require('text!apps/visualize/editor/panels/save.html'),
- load: require('text!apps/visualize/editor/panels/load.html'),
- share: require('text!apps/visualize/editor/panels/share.html'),
+ save: require('text!plugins/visualize/editor/panels/save.html'),
+ load: require('text!plugins/visualize/editor/panels/load.html'),
+ share: require('text!plugins/visualize/editor/panels/share.html'),
});
var $state = (function initState() {
diff --git a/src/kibana/apps/visualize/editor/nesting_indicator.js b/src/kibana/plugins/visualize/editor/nesting_indicator.js
similarity index 100%
rename from src/kibana/apps/visualize/editor/nesting_indicator.js
rename to src/kibana/plugins/visualize/editor/nesting_indicator.js
diff --git a/src/kibana/apps/visualize/editor/panels/load.html b/src/kibana/plugins/visualize/editor/panels/load.html
similarity index 100%
rename from src/kibana/apps/visualize/editor/panels/load.html
rename to src/kibana/plugins/visualize/editor/panels/load.html
diff --git a/src/kibana/apps/visualize/editor/panels/save.html b/src/kibana/plugins/visualize/editor/panels/save.html
similarity index 100%
rename from src/kibana/apps/visualize/editor/panels/save.html
rename to src/kibana/plugins/visualize/editor/panels/save.html
diff --git a/src/kibana/apps/visualize/editor/panels/share.html b/src/kibana/plugins/visualize/editor/panels/share.html
similarity index 100%
rename from src/kibana/apps/visualize/editor/panels/share.html
rename to src/kibana/plugins/visualize/editor/panels/share.html
diff --git a/src/kibana/apps/visualize/editor/sidebar.html b/src/kibana/plugins/visualize/editor/sidebar.html
similarity index 100%
rename from src/kibana/apps/visualize/editor/sidebar.html
rename to src/kibana/plugins/visualize/editor/sidebar.html
diff --git a/src/kibana/apps/visualize/editor/sidebar.js b/src/kibana/plugins/visualize/editor/sidebar.js
similarity index 80%
rename from src/kibana/apps/visualize/editor/sidebar.js
rename to src/kibana/plugins/visualize/editor/sidebar.js
index 6392942ed054..16b269984bb8 100644
--- a/src/kibana/apps/visualize/editor/sidebar.js
+++ b/src/kibana/plugins/visualize/editor/sidebar.js
@@ -4,11 +4,11 @@ define(function (require) {
.directive('visEditorSidebar', function () {
var _ = require('lodash');
- require('apps/visualize/editor/agg_group');
+ require('plugins/visualize/editor/agg_group');
return {
restrict: 'E',
- template: require('text!apps/visualize/editor/sidebar.html'),
+ template: require('text!plugins/visualize/editor/sidebar.html'),
replace: true,
scope: {
vis: '=',
diff --git a/src/kibana/apps/visualize/editor/styles/editor.less b/src/kibana/plugins/visualize/editor/styles/editor.less
similarity index 100%
rename from src/kibana/apps/visualize/editor/styles/editor.less
rename to src/kibana/plugins/visualize/editor/styles/editor.less
diff --git a/src/kibana/plugins/visualize/index.js b/src/kibana/plugins/visualize/index.js
new file mode 100644
index 000000000000..e79b172ca71c
--- /dev/null
+++ b/src/kibana/plugins/visualize/index.js
@@ -0,0 +1,20 @@
+define(function (require) {
+ require('css!plugins/visualize/styles/main.css');
+
+ require('plugins/visualize/editor/editor');
+ require('plugins/visualize/wizard/wizard');
+
+ require('routes')
+ .when('/visualize', {
+ redirectTo: '/visualize/step/1'
+ });
+
+ var apps = require('registry/apps');
+ apps.register(function VisualizeAppModule() {
+ return {
+ id: 'visualize',
+ name: 'Visualize',
+ order: 1
+ };
+ });
+});
\ No newline at end of file
diff --git a/src/kibana/apps/visualize/saved_visualizations/_saved_vis.js b/src/kibana/plugins/visualize/saved_visualizations/_saved_vis.js
similarity index 100%
rename from src/kibana/apps/visualize/saved_visualizations/_saved_vis.js
rename to src/kibana/plugins/visualize/saved_visualizations/_saved_vis.js
diff --git a/src/kibana/apps/visualize/saved_visualizations/saved_visualizations.js b/src/kibana/plugins/visualize/saved_visualizations/saved_visualizations.js
similarity index 92%
rename from src/kibana/apps/visualize/saved_visualizations/saved_visualizations.js
rename to src/kibana/plugins/visualize/saved_visualizations/saved_visualizations.js
index a37bb06918c3..acaaea807a1e 100644
--- a/src/kibana/apps/visualize/saved_visualizations/saved_visualizations.js
+++ b/src/kibana/plugins/visualize/saved_visualizations/saved_visualizations.js
@@ -2,17 +2,17 @@ define(function (require) {
var app = require('modules').get('app/visualize');
var _ = require('lodash');
- require('apps/visualize/saved_visualizations/_saved_vis');
+ require('plugins/visualize/saved_visualizations/_saved_vis');
// Register this service with the saved object registry so it can be
// edited by the object editor.
- require('apps/settings/saved_object_registry').register({
+ require('plugins/settings/saved_object_registry').register({
service: 'savedVisualizations',
title: 'visualizations'
});
app.service('savedVisualizations', function (Promise, es, config, SavedVis, Private, Notifier, kbnUrl) {
- var visTypes = Private(require('components/vis_types/index'));
+ var visTypes = Private(require('registry/vis_types'));
var notify = new Notifier({
location: 'saved visualization service'
});
diff --git a/src/kibana/apps/visualize/styles/main.less b/src/kibana/plugins/visualize/styles/main.less
similarity index 100%
rename from src/kibana/apps/visualize/styles/main.less
rename to src/kibana/plugins/visualize/styles/main.less
diff --git a/src/kibana/apps/visualize/wizard/step_1.html b/src/kibana/plugins/visualize/wizard/step_1.html
similarity index 100%
rename from src/kibana/apps/visualize/wizard/step_1.html
rename to src/kibana/plugins/visualize/wizard/step_1.html
diff --git a/src/kibana/apps/visualize/wizard/step_2.html b/src/kibana/plugins/visualize/wizard/step_2.html
similarity index 100%
rename from src/kibana/apps/visualize/wizard/step_2.html
rename to src/kibana/plugins/visualize/wizard/step_2.html
diff --git a/src/kibana/apps/visualize/wizard/wizard.js b/src/kibana/plugins/visualize/wizard/wizard.js
similarity index 82%
rename from src/kibana/apps/visualize/wizard/wizard.js
rename to src/kibana/plugins/visualize/wizard/wizard.js
index 01944e22bb2b..b6026ecd9722 100644
--- a/src/kibana/apps/visualize/wizard/wizard.js
+++ b/src/kibana/plugins/visualize/wizard/wizard.js
@@ -1,9 +1,9 @@
define(function (require) {
var _ = require('lodash');
- require('apps/visualize/saved_visualizations/saved_visualizations');
+ require('plugins/visualize/saved_visualizations/saved_visualizations');
require('directives/saved_object_finder');
- require('apps/discover/saved_searches/saved_searches');
+ require('plugins/discover/saved_searches/saved_searches');
var templateStep = function (num, txt) {
return '' + txt + '
';
@@ -16,7 +16,7 @@ define(function (require) {
/** Wizard Step 1
/********/
routes.when('/visualize/step/1', {
- template: templateStep(1, require('text!apps/visualize/wizard/step_1.html')),
+ template: templateStep(1, require('text!plugins/visualize/wizard/step_1.html')),
resolve: {
indexPatternIds: function (courier) {
return courier.indexPatterns.getIds();
@@ -46,7 +46,7 @@ define(function (require) {
/** Wizard Step 2
/********/
routes.when('/visualize/step/2', {
- template: templateStep(2, require('text!apps/visualize/wizard/step_2.html'))
+ template: templateStep(2, require('text!plugins/visualize/wizard/step_2.html'))
});
module.controller('VisualizeWizardStep2', function ($scope, $route, $location, timefilter, Private) {
@@ -54,7 +54,7 @@ define(function (require) {
timefilter.enabled = false;
- $scope.visTypes = Private(require('components/vis_types/index'));
+ $scope.visTypes = Private(require('registry/vis_types'));
$scope.visTypeUrl = function (visType) {
var query = _.defaults({
type: visType.name
diff --git a/src/kibana/registry/_registry.js b/src/kibana/registry/_registry.js
new file mode 100644
index 000000000000..ccfceb337d7c
--- /dev/null
+++ b/src/kibana/registry/_registry.js
@@ -0,0 +1,23 @@
+define(function (require) {
+ var _ = require('lodash');
+ var IndexedArray = require('utils/indexed_array/index');
+
+ return function createRegistry(name, indexedArrayOpts) {
+ var modules = [];
+ indexedArrayOpts = indexedArrayOpts || { index: ['name'] };
+
+ var registry = function (Private) {
+ var opts = _.cloneDeep(indexedArrayOpts);
+ opts.initialSet = modules.map(Private);
+ return new IndexedArray(opts);
+ };
+
+ registry.name = name + 'Registry';
+ registry.register = function (privateModule) {
+ modules.push(privateModule);
+ };
+
+ return registry;
+ };
+
+});
\ No newline at end of file
diff --git a/src/kibana/registry/apps.js b/src/kibana/registry/apps.js
new file mode 100644
index 000000000000..39ae28612fa7
--- /dev/null
+++ b/src/kibana/registry/apps.js
@@ -0,0 +1,6 @@
+define(function (require) {
+ return require('registry/_registry')('apps', {
+ index: ['name'],
+ order: ['order']
+ });
+});
\ No newline at end of file
diff --git a/src/kibana/registry/vis_types.js b/src/kibana/registry/vis_types.js
new file mode 100644
index 000000000000..3bd178c3b3e7
--- /dev/null
+++ b/src/kibana/registry/vis_types.js
@@ -0,0 +1,3 @@
+define(function (require) {
+ return require('registry/_registry')('visTypes');
+});
\ No newline at end of file
diff --git a/src/kibana/services/private.js b/src/kibana/services/private.js
index 833283ae21ae..2ef7d1c3df6c 100644
--- a/src/kibana/services/private.js
+++ b/src/kibana/services/private.js
@@ -38,14 +38,14 @@ define(function (require) {
var id = identify(fn);
if (cache[id]) return cache[id];
- else if (~privPath.indexOf(id)) {
+ else if (~privPath.indexOf(fn)) {
throw new Error(
'Circluar refrence to "' + name(fn) + '"' +
' found while resolving private deps: ' + pathToString()
);
}
- privPath.push(id);
+ privPath.push(fn);
var context = {};
var instance = $injector.invoke(fn, context);
diff --git a/src/kibana/utils/registry/_inflector.js b/src/kibana/utils/indexed_array/_inflector.js
similarity index 100%
rename from src/kibana/utils/registry/_inflector.js
rename to src/kibana/utils/indexed_array/_inflector.js
diff --git a/src/kibana/utils/registry/_path_getter.js b/src/kibana/utils/indexed_array/_path_getter.js
similarity index 100%
rename from src/kibana/utils/registry/_path_getter.js
rename to src/kibana/utils/indexed_array/_path_getter.js
diff --git a/src/kibana/utils/registry/registry.js b/src/kibana/utils/indexed_array/index.js
similarity index 84%
rename from src/kibana/utils/registry/registry.js
rename to src/kibana/utils/indexed_array/index.js
index b16c948ee5ad..a2ebd5865ce5 100644
--- a/src/kibana/utils/registry/registry.js
+++ b/src/kibana/utils/indexed_array/index.js
@@ -2,8 +2,8 @@ define(function (require) {
var _ = require('lodash');
- var pathGetter = require('utils/registry/_path_getter');
- var inflector = require('utils/registry/_inflector');
+ var pathGetter = require('utils/indexed_array/_path_getter');
+ var inflector = require('utils/indexed_array/_inflector');
var inflectIndex = inflector('by');
var inflectOrder = inflector('in', 'Order');
@@ -14,21 +14,21 @@ define(function (require) {
* Generic extension of Array class, which will index (and reindex) the
* objects it contains based on their properties.
*
- * @class Registry
+ * @class IndexedArray
* @module utils
* @constructor
* @param {object} [config] - describes the properties of this registry object
* @param {string[]} [config.index] - a list of props/paths that should be used to index the docs.
* @param {string[]} [config.group] - a list of keys/paths to group docs by.
* @param {string[]} [config.order] - a list of keys/paths to order the keys by.
- * @param {object[]} [config.initialSet] - the initial dataset the Registry should contain.
+ * @param {object[]} [config.initialSet] - the initial dataset the IndexedArray should contain.
* @param {boolean} [config.immutable] - a flag that hints to people reading the implementation
- * that this Registry should not be modified. It's modification
+ * that this IndexedArray should not be modified. It's modification
* methods are also removed
*/
- _(Registry).inherits(Array);
- function Registry(config) {
- Registry.Super.call(this);
+ _(IndexedArray).inherits(Array);
+ function IndexedArray(config) {
+ IndexedArray.Super.call(this);
config = config || {};
this.raw = [];
@@ -63,7 +63,7 @@ define(function (require) {
*
* @returns {string[]} - the public keys of all indices created
*/
- Registry.prototype._setupIndices = function (props, inflect, op) {
+ IndexedArray.prototype._setupIndices = function (props, inflect, op) {
// shortcut for empty props
if (!props || props.length === 0) return;
@@ -102,7 +102,7 @@ define(function (require) {
*
* @return {undefined}
*/
- Registry.prototype._clearIndices = function () {
+ IndexedArray.prototype._clearIndices = function () {
var self = this;
self._indexNames.forEach(function (name) {
self[name] = CLEAR_CACHE;
@@ -112,7 +112,7 @@ define(function (require) {
/**
* Copy all array methods which have side-effects, and wrap them
* in a function that will reindex after each call, as well
- * as duplex the operation to the .raw version of the Registry.
+ * as duplex the operation to the .raw version of the IndexedArray.
*
* @param {[type]} method [description]
* @return {[type]} [description]
@@ -120,7 +120,7 @@ define(function (require) {
'pop push shift splice unshift reverse'.split(' ').forEach(function (method) {
var orig = Array.prototype[method];
- Registry.prototype[method] = function (/* args... */) {
+ IndexedArray.prototype[method] = function (/* args... */) {
// call the original method with this context
orig.apply(this, arguments);
@@ -136,9 +136,9 @@ define(function (require) {
* provide a hook for the JSON serializer
* @return {array} - a plain, vanilla array with our same data
*/
- Registry.prototype.toJSON = function () {
+ IndexedArray.prototype.toJSON = function () {
return this.raw;
};
- return Registry;
+ return IndexedArray;
});
\ No newline at end of file
diff --git a/src/server/bin/initialize b/src/server/bin/initialize
index e6ebfb047641..340ecf39ad89 100755
--- a/src/server/bin/initialize
+++ b/src/server/bin/initialize
@@ -14,7 +14,8 @@ end
# Defaults for the options
options = {
- :config => ENV["CONFIG_PATH"] || File.expand_path("#{HERE}/../config/kibana.yml")
+ :config => ENV["CONFIG_PATH"] || File.expand_path("#{HERE}/../config/kibana.yml"),
+ :plugins_folder => ENV["PLUGINS_FOLDER"]
}
# Create a new parser
@@ -38,6 +39,9 @@ parser = OptionParser.new do |opts|
puts ENV['KIBANA_VERSION'] || 'dev-build'
exit
end
+ opts.on('--plugins', 'Path to the folder to scan for plugins') do |arg|
+ options[:plugins_folder] = arg
+ end
opts.on('-h', '--help', 'Display this screen') do
puts opts
exit
@@ -70,14 +74,17 @@ Kibana.global_settings[:port] = port || 5601
Kibana.global_settings[:host] = host || '0.0.0.0'
Kibana.global_settings[:config] = config
Kibana.global_settings[:elasticsearch] = elasticsearch
-Kibana.global_settings[:root] = File.expand_path("#{File.dirname(__FILE__)}/../")
+Kibana.global_settings[:root] = File.expand_path("#{HERE}/../")
Kibana.global_settings[:quiet] = options[:quiet]
+Kibana.global_settings[:external_plugins_folder] = options[:plugins_folder] || nil
# Set the public folder based on whether we are running in production or not.
if ENV['RACK_ENV'] == ('production')
- Kibana.global_settings[:public_folder] = File.expand_path("#{File.dirname(__FILE__)}/../public/")
+ Kibana.global_settings[:public_folder] = File.expand_path("#{HERE}/../public/")
+ Kibana.global_settings[:bundled_plugins_folder] = File.expand_path("#{HERE}/../public/plugins")
else
- Kibana.global_settings[:public_folder] = File.expand_path("#{File.dirname(__FILE__)}/../../kibana/")
+ Kibana.global_settings[:public_folder] = File.expand_path("#{HERE}/../../kibana/")
+ Kibana.global_settings[:bundled_plugins_folder] = File.expand_path("#{HERE}/../../kibana/plugins")
end
# Add the root of the project to the load path
diff --git a/src/server/bin/kibana.bat b/src/server/bin/kibana.bat
index a6082e637468..66e8d9c6197e 100644
--- a/src/server/bin/kibana.bat
+++ b/src/server/bin/kibana.bat
@@ -8,6 +8,7 @@ for %%I in ("%SCRIPT_DIR%..") do set DIR=%%~dpfI
set RACK_ENV=production
set CONFIG_PATH=%DIR%\config\kibana.yml
+set PLUGINS_FOLDER=%DIR%\plugins
set KIBANA_VERSION=@@version
diff --git a/src/server/bin/kibana.sh b/src/server/bin/kibana.sh
index 16c1e128781a..63066a078412 100755
--- a/src/server/bin/kibana.sh
+++ b/src/server/bin/kibana.sh
@@ -4,13 +4,13 @@ SCRIPT=$0
# SCRIPT may be an arbitrarily deep series of symlinks. Loop until we have the concrete path.
while [ -h "$SCRIPT" ] ; do
- ls=`ls -ld "$SCRIPT"`
+ ls=$(ls -ld "$SCRIPT")
# Drop everything prior to ->
- link=`expr "$ls" : '.*-> \(.*\)$'`
+ link=$(expr "$ls" : '.*-> \(.*\)$')
if expr "$link" : '/.*' > /dev/null; then
SCRIPT="$link"
else
- SCRIPT=`dirname "$SCRIPT"`/"$link"
+ SCRIPT=$(dirname "$SCRIPT")/"$link"
fi
done
@@ -19,7 +19,7 @@ DIR=$(dirname "${SCRIPT}")
if [ -x "${JAVA_HOME}/bin/java" ]; then
JAVA="${JAVA_HOME}/bin/java"
else
- JAVA=`which java`
+ JAVA=$(which java)
fi
if [ ! -x "${JAVA}" ]; then
@@ -34,4 +34,11 @@ JAVA_OPTS="-Xmx512m $JAVA_OPTS"
export GEM_HOME=
export GEM_PATH=
-KIBANA_VERSION=@@version CONFIG_PATH=${DIR}/../config/kibana.yml RACK_ENV=production exec "${JAVA}" $JAVA_OPTS -jar "${DIR}/../lib/kibana.jar" "$@"
+# shellcheck disable=SC2086
+KIBANA_VERSION=@@version \
+ CONFIG_PATH=${DIR}/../config/kibana.yml \
+ PLUGINS_FOLDER=${DIR}/../plugins \
+ RACK_ENV=production \
+ exec "${JAVA}" \
+ $JAVA_OPTS \
+ -jar "${DIR}/../lib/kibana.jar" "$@"
\ No newline at end of file
diff --git a/src/server/config/kibana.yml b/src/server/config/kibana.yml
index a617f07a0c7e..3214a8fb8529 100644
--- a/src/server/config/kibana.yml
+++ b/src/server/config/kibana.yml
@@ -11,13 +11,5 @@ elasticsearch: "http://localhost:9200"
# and dashboards. It will create an new index if it doesn't already exist.
kibanaIndex: ".kibana"
-# Applications loaded and included into Kibana. Use the settings below to
-# customize the applications and thier names.
-apps:
- - { id: "discover", name: "Discover" }
- - { id: "visualize", name: "Visualize" }
- - { id: "dashboard", name: "Dashboard" }
- - { id: "settings", name: "Settings" }
-
# The default application to laad.
defaultAppId: "discover"
diff --git a/src/server/config/web.ru b/src/server/config/web.ru
deleted file mode 100644
index a1418449f7f7..000000000000
--- a/src/server/config/web.ru
+++ /dev/null
@@ -1,22 +0,0 @@
-require "rubygems"
-require "bundler/setup"
-
-ROOT = File.expand_path("#{File.dirname(__FILE__)}/../")
-
-if ENV['RACK_ENV'] == ('development')
- PUBLIC_ROOT = File.expand_path("#{File.dirname(__FILE__)}/../../kibana/")
- CONFIG_PATH = File.expand_path("#{File.dirname(__FILE__)}/kibana.yml")
-end
-
-if ENV['RACK_ENV'] == ('production')
- PUBLIC_ROOT = File.expand_path("#{File.dirname(__FILE__)}/../public/")
- CONFIG_PATH = ENV["CONFIG_PATH"]
-end
-
-$LOAD_PATH.unshift(ROOT)
-
-# Require the application
-require "#{ROOT}/lib/app"
-
-# Run the application
-run Kibana::App
diff --git a/src/server/lib/MultiStatic.rb b/src/server/lib/MultiStatic.rb
new file mode 100644
index 000000000000..a4936d7129bd
--- /dev/null
+++ b/src/server/lib/MultiStatic.rb
@@ -0,0 +1,36 @@
+require "rack/file"
+
+PATH_INFO = 'PATH_INFO'
+
+module Kibana
+ class MultiStatic
+ def initialize(app, options={})
+ @app = app
+ @prefix = options[:prefix] || '/'
+ @servers = (options[:paths] || []).map {|p| Rack::File.new(File.expand_path(p)) }
+ end
+
+ def call(env)
+ resp = nil
+ orig_path = env[PATH_INFO]
+
+ if orig_path.start_with? @prefix
+ env[PATH_INFO] = orig_path.sub @prefix, '/'
+ else
+ return @app.call(env)
+ end
+
+ @servers.each do |server|
+ resp = server.call(env)
+
+ resp = nil if resp[0] == 404
+ break if resp
+ end
+
+ return resp if resp
+
+ env[PATH_INFO] = orig_path
+ @app.call(env)
+ end
+ end
+end
\ No newline at end of file
diff --git a/src/server/lib/app.rb b/src/server/lib/app.rb
index 47afb78c8021..be038e9cc1f1 100644
--- a/src/server/lib/app.rb
+++ b/src/server/lib/app.rb
@@ -9,6 +9,7 @@ require "lib/ColorLogger"
require "routes/home"
require "sinatra/json"
require "routes/proxy"
+require "routes/plugins"
class Logger
alias_method :write, :<<
@@ -67,6 +68,7 @@ module Kibana
# Routes go here
use Routes::Home
use Routes::Proxy
+ use Routes::Plugins
end
end
diff --git a/src/server/routes/base.rb b/src/server/routes/base.rb
index 392960376da8..510b020dec1f 100644
--- a/src/server/routes/base.rb
+++ b/src/server/routes/base.rb
@@ -13,8 +13,11 @@ module Kibana
set :root, Kibana.global_settings[:root]
set :public_folder, Kibana.global_settings[:public_folder]
+ set :bundled_plugins_folder, Kibana.global_settings[:bundled_plugins_folder]
+ set :external_plugins_folder, Kibana.global_settings[:external_plugins_folder]
set :httponly, true
set :config, config
+ set :bundled_plugin_ids, config['bundledPluginIds'] || []
end
end
end
diff --git a/src/server/routes/home.rb b/src/server/routes/home.rb
index dc63b369d878..81fdb9d87155 100644
--- a/src/server/routes/home.rb
+++ b/src/server/routes/home.rb
@@ -13,9 +13,33 @@ module Kibana
# to the proxy for elasticsearch
data = settings.config.clone()
data['elasticsearch'] = "#{request.scheme}://#{request.host}:#{request.port}/elasticsearch"
+
+ plugins = external_plugins.concat(bundled_plugins)
+ data['plugins'] = plugins
+
json data
end
+ private
+
+ def external_plugins
+ plugins_ids_in(settings.external_plugins_folder)
+ end
+
+ def bundled_plugins
+ plugins_ids_in(settings.bundled_plugins_folder).concat(settings.bundled_plugin_ids)
+ end
+
+ def plugins_ids_in(dir)
+ if dir
+ indexes = Dir.glob(File.join(dir, '*', 'index.js'))
+ else
+ indexes = []
+ end
+
+ indexes.map { |path| path.sub(dir, 'plugins').sub(/\.js$/, '') }
+ end
+
end
end
end
diff --git a/src/server/routes/plugins.rb b/src/server/routes/plugins.rb
index e69de29bb2d1..01d836af3022 100644
--- a/src/server/routes/plugins.rb
+++ b/src/server/routes/plugins.rb
@@ -0,0 +1,15 @@
+require "routes/base"
+require "lib/MultiStatic"
+
+module Kibana
+ module Routes
+ class Plugins < Base
+ use Kibana::MultiStatic,
+ prefix: '/plugins/',
+ paths: [
+ settings.bundled_plugins_folder,
+ settings.external_plugins_folder
+ ].compact
+ end
+ end
+end
\ No newline at end of file
diff --git a/tasks/build.js b/tasks/build.js
index 12c068b91b00..04dc57322362 100644
--- a/tasks/build.js
+++ b/tasks/build.js
@@ -18,6 +18,8 @@ module.exports = function (grunt) {
'copy:dist',
'compile_dist_readme',
'chmod_kibana',
+ 'make_plugin_dir',
+ 'describe_bundled_plugins',
'copy:versioned_dist',
'create_packages'
]);
diff --git a/tasks/config/less.js b/tasks/config/less.js
index 19297e15caeb..0f3d4b56ec1d 100644
--- a/tasks/config/less.js
+++ b/tasks/config/less.js
@@ -4,15 +4,15 @@ module.exports = {
src: {
src: [
'<%= src %>/kibana/components/*/*.less',
- '<%= src %>/kibana/apps/dashboard/styles/main.less',
- '<%= src %>/kibana/apps/discover/styles/main.less',
- '<%= src %>/kibana/apps/settings/styles/main.less',
- '<%= src %>/kibana/apps/visualize/styles/main.less',
- '<%= src %>/kibana/apps/visualize/styles/visualization.less',
- '<%= src %>/kibana/apps/visualize/styles/main.less',
'<%= src %>/kibana/styles/main.less',
'<%= src %>/kibana/components/vislib/styles/main.less',
- '<%= src %>/kibana/components/**/*.less'
+ '<%= src %>/kibana/components/**/*.less',
+ '<%= plugins %>/dashboard/styles/main.less',
+ '<%= plugins %>/discover/styles/main.less',
+ '<%= plugins %>/settings/styles/main.less',
+ '<%= plugins %>/visualize/styles/main.less',
+ '<%= plugins %>/visualize/styles/visualization.less',
+ '<%= plugins %>/visualize/styles/main.less'
],
expand: true,
ext: '.css',
diff --git a/tasks/config/requirejs.js b/tasks/config/requirejs.js
index 4c3ea6bb0ca4..a293bbfdb9a3 100644
--- a/tasks/config/requirejs.js
+++ b/tasks/config/requirejs.js
@@ -59,11 +59,10 @@ module.exports = function (grunt) {
}
};
- // include each app
+ // include bundled plugins in the build
var main = config.build.options.modules[0];
- var configFile = grunt.file.readYAML(grunt.config.get('configFile'));
- configFile.apps.forEach(function (app) {
- main.include.push('apps/' + app.id + '/index');
+ grunt.bundledPluginModuleIds.forEach(function (moduleId) {
+ main.include.push(moduleId);
});
return config;
diff --git a/tasks/config/watch.js b/tasks/config/watch.js
index 8818c9b975e6..63064813cb3b 100644
--- a/tasks/config/watch.js
+++ b/tasks/config/watch.js
@@ -10,6 +10,7 @@ module.exports = function (grunt) {
less: {
files: [
'<%= app %>/**/styles/**/*.less',
+ '<%= plugins %>/**/styles/**/*.less',
'<%= app %>/**/components/**/*.less',
'<%= app %>/**/components/vislib/components/styles/**/*.less'
],
@@ -22,6 +23,7 @@ module.exports = function (grunt) {
],
tasks: ['jade:test']
},
+
clientside_jade: {
files: [
'<%= testUtilsDir %>/istanbul_reporter/report.clientside.jade'
diff --git a/tasks/plugins.js b/tasks/plugins.js
new file mode 100644
index 000000000000..181b66cb0b57
--- /dev/null
+++ b/tasks/plugins.js
@@ -0,0 +1,27 @@
+module.exports = function (grunt) {
+ grunt.registerTask('make_plugin_dir', function () {
+ var dir = grunt.config.process('<%= build %>/dist/kibana/plugins');
+ grunt.file.mkdir(dir);
+ });
+
+ grunt.registerTask('describe_bundled_plugins', function () {
+ var configKey = 'bundledPluginIds';
+ var file = grunt.config.process('<%= build %>/dist/kibana/config/kibana.yml');
+ var idList = grunt.config.get('bundledPluginModuleIds').map(function (id) {
+ return ' - ' + id;
+ }).join('\n');
+
+ var contents = grunt.file.read(file);
+ if (contents.indexOf(configKey) !== -1) {
+ grunt.log.error('bundled plugin ids already written to config/kibana.yml');
+ return;
+ }
+
+ contents +=
+ '\n# Plugins that are included in the build, and no longer found in the plugins/ folder' +
+ '\n' + configKey + ':' +
+ '\n' + idList;
+
+ grunt.file.write(file, contents);
+ });
+};
\ No newline at end of file
diff --git a/tasks/run_build.js b/tasks/run_build.js
index e438943e3f5b..95c744563288 100644
--- a/tasks/run_build.js
+++ b/tasks/run_build.js
@@ -10,7 +10,10 @@ module.exports = function (grunt) {
var join = require('path').join;
var extract = require('./utils/spawn')(
'tar',
- ['-xzf', grunt.config.process('<%= pkg.name %>-<%= pkg.version %>.tar.gz')],
+ [
+ '-xzf',
+ grunt.config.process('<%= pkg.name %>-<%= pkg.version %>.tar.gz')
+ ],
join(__dirname, '../target')
);
diff --git a/test/unit/index.html b/test/unit/index.html
index 29361c292fad..433f91f9c603 100644
--- a/test/unit/index.html
+++ b/test/unit/index.html
@@ -19,7 +19,7 @@
});
require.config({
- baseUrl: '/src/kibana',
+ baseUrl: '/',
paths: {
config: '/config',
test_utils: '../../test/utils',
@@ -135,12 +135,13 @@
'specs/utils/diff_time_picker_vals',
'specs/factories/events',
'specs/index_patterns/_flatten_search_response',
- 'specs/utils/registry/index',
+ 'specs/utils/indexed_array/index',
'specs/directives/filter_bar',
'specs/components/agg_types/index',
'specs/components/agg_types/param_types/index',
'specs/components/vis/index',
'specs/components/reflow_watcher',
+ 'specs/registry/index',
'specs/components/clipboard',
'specs/visualize/_build_hierarchial_data',
'specs/visualize/_extract_buckets',
diff --git a/test/unit/specs/apps/dashboard/directives/grid.js b/test/unit/specs/apps/dashboard/directives/grid.js
index 32677a3f08f8..65bfb4ae3065 100644
--- a/test/unit/specs/apps/dashboard/directives/grid.js
+++ b/test/unit/specs/apps/dashboard/directives/grid.js
@@ -7,7 +7,7 @@ define(function (require) {
require('angular-route');
// Load the code for the directive
- require('apps/dashboard/directives/panel');
+ require('plugins/dashboard/directives/panel');
describe('Gridster', function () {
var $scope, $elem, compile;
diff --git a/test/unit/specs/apps/dashboard/directives/panel.js b/test/unit/specs/apps/dashboard/directives/panel.js
index 98f326a37540..67dc3b4b1687 100644
--- a/test/unit/specs/apps/dashboard/directives/panel.js
+++ b/test/unit/specs/apps/dashboard/directives/panel.js
@@ -7,11 +7,11 @@ define(function (require) {
require('angular-route');
// Load the code for the directive
- require('apps/visualize/index');
- require('apps/dashboard/index');
+ require('plugins/visualize/index');
+ require('plugins/dashboard/index');
// TODO: This should not be needed, timefilter is only included here
- require('apps/discover/index');
+ require('plugins/discover/index');
describe('Dashboard panels', function () {
diff --git a/test/unit/specs/apps/dashboard/index.js b/test/unit/specs/apps/dashboard/index.js
index 6389490d96de..f29236eea89e 100644
--- a/test/unit/specs/apps/dashboard/index.js
+++ b/test/unit/specs/apps/dashboard/index.js
@@ -9,7 +9,7 @@ define(function (require) {
require('angular-route');
// Load the code for the modules
- require('apps/dashboard/index');
+ require('plugins/dashboard/index');
describe('Dashboard app', function () {
var $scope,
diff --git a/test/unit/specs/apps/discover/directives/discover_field.js b/test/unit/specs/apps/discover/directives/discover_field.js
index 41c892bbf3bf..ade8c4118747 100644
--- a/test/unit/specs/apps/discover/directives/discover_field.js
+++ b/test/unit/specs/apps/discover/directives/discover_field.js
@@ -6,7 +6,7 @@ define(function (require) {
// Load the kibana app dependencies.
require('services/private');
- require('apps/discover/components/field_chooser/discover_field');
+ require('plugins/discover/components/field_chooser/discover_field');
var $parentScope, $scope, indexPattern;
diff --git a/test/unit/specs/apps/discover/directives/field_calculator.js b/test/unit/specs/apps/discover/directives/field_calculator.js
index 69a61af4a59b..8bb37cb4d208 100644
--- a/test/unit/specs/apps/discover/directives/field_calculator.js
+++ b/test/unit/specs/apps/discover/directives/field_calculator.js
@@ -3,7 +3,7 @@ define(function (require) {
var $ = require('jquery');
var _ = require('lodash');
var sinon = require('test_utils/auto_release_sinon');
- var fieldCalculator = require('apps/discover/components/field_chooser/lib/field_calculator');
+ var fieldCalculator = require('plugins/discover/components/field_chooser/lib/field_calculator');
// Load the kibana app dependencies.
require('services/private');
diff --git a/test/unit/specs/apps/discover/directives/field_chooser.js b/test/unit/specs/apps/discover/directives/field_chooser.js
index fed007164678..8431e5dbe2d2 100644
--- a/test/unit/specs/apps/discover/directives/field_chooser.js
+++ b/test/unit/specs/apps/discover/directives/field_chooser.js
@@ -6,7 +6,7 @@ define(function (require) {
// Load the kibana app dependencies.
require('services/private');
- require('apps/discover/components/field_chooser/field_chooser');
+ require('plugins/discover/components/field_chooser/field_chooser');
var $parentScope, $scope, config, indexPattern;
diff --git a/test/unit/specs/apps/discover/directives/table.js b/test/unit/specs/apps/discover/directives/table.js
index 21ce75db5ec0..672eb429862e 100644
--- a/test/unit/specs/apps/discover/directives/table.js
+++ b/test/unit/specs/apps/discover/directives/table.js
@@ -9,7 +9,7 @@ define(function (require) {
// Load the kibana app dependencies.
require('angular-route');
- require('apps/discover/index');
+ require('plugins/discover/index');
var $parentScope, $scope, config;
diff --git a/test/unit/specs/apps/discover/hit_sort_fn.js b/test/unit/specs/apps/discover/hit_sort_fn.js
index 03b5568b60cc..60ebe6c12e45 100644
--- a/test/unit/specs/apps/discover/hit_sort_fn.js
+++ b/test/unit/specs/apps/discover/hit_sort_fn.js
@@ -8,7 +8,7 @@ define(function (require) {
beforeEach(module('hitSortFunctionTests'));
beforeEach(inject(function (Private) {
- createHitSortFn = Private(require('apps/discover/_hit_sort_fn'));
+ createHitSortFn = Private(require('plugins/discover/_hit_sort_fn'));
}));
diff --git a/test/unit/specs/apps/discover/segmented_fetch.js b/test/unit/specs/apps/discover/segmented_fetch.js
index e1758c857ece..fa39f91136ac 100644
--- a/test/unit/specs/apps/discover/segmented_fetch.js
+++ b/test/unit/specs/apps/discover/segmented_fetch.js
@@ -39,7 +39,7 @@ define(function (require) {
var Notifier = $injector.get('Notifier');
notify = new Notifier();
- SegmentedFetch = Private(require('apps/discover/_segmented_fetch'));
+ SegmentedFetch = Private(require('plugins/discover/_segmented_fetch'));
// mock the searchSource
searchSourceStubs = {
diff --git a/test/unit/specs/components/agg_types/_bucket_count_between.js b/test/unit/specs/components/agg_types/_bucket_count_between.js
index f345c5e4fc02..4ca9dbbe14a0 100644
--- a/test/unit/specs/components/agg_types/_bucket_count_between.js
+++ b/test/unit/specs/components/agg_types/_bucket_count_between.js
@@ -18,7 +18,7 @@ define(function (require) {
beforeEach(inject(function (Private) {
indexPattern = Private(require('fixtures/stubbed_logstash_index_pattern'));
Vis = Private(require('components/vis/vis'));
- visTypes = Private(require('components/vis_types/index'));
+ visTypes = Private(require('registry/vis_types'));
aggTypes = Private(require('components/agg_types/index'));
AggConfig = Private(require('components/vis/_agg_config'));
bucketCountBetween = Private(require('components/agg_types/buckets/_bucket_count_between'));
diff --git a/test/unit/specs/components/vis/_agg_configs.js b/test/unit/specs/components/vis/_agg_configs.js
index 05a7442c8097..483e53720d92 100644
--- a/test/unit/specs/components/vis/_agg_configs.js
+++ b/test/unit/specs/components/vis/_agg_configs.js
@@ -4,7 +4,7 @@ define(function (require) {
var sinon = require('test_utils/auto_release_sinon');
var Vis;
- var Registry;
+ var IndexedArray;
var AggConfig;
var AggConfigs;
var SpiedAggConfig;
@@ -22,14 +22,14 @@ define(function (require) {
Vis = Private(require('components/vis/vis'));
SpiedAggConfig = Private(require('components/vis/_agg_config'));
AggConfigs = Private(require('components/vis/_agg_configs'));
- Registry = require('utils/registry/registry');
+ IndexedArray = require('utils/indexed_array/index');
indexPattern = Private(require('fixtures/stubbed_logstash_index_pattern'));
- Schemas = Private(require('components/vis_types/_schemas'));
+ Schemas = Private(require('plugins/vis_types/_schemas'));
}));
- it('extends Registry', function () {
+ it('extends IndexedArray', function () {
var ac = new AggConfigs();
- expect(ac).to.be.a(Registry);
+ expect(ac).to.be.a(IndexedArray);
});
describe('constructor', function () {
diff --git a/test/unit/specs/directives/confirm-click.js b/test/unit/specs/directives/confirm-click.js
index 651b5b1db104..37eeb352fd02 100644
--- a/test/unit/specs/directives/confirm-click.js
+++ b/test/unit/specs/directives/confirm-click.js
@@ -8,7 +8,7 @@ define(function (require) {
// Load the kibana app dependencies.
require('angular-route');
- require('apps/discover/index');
+ require('plugins/discover/index');
var $parentScope, $scope, $elem;
diff --git a/test/unit/specs/directives/css_truncate.js b/test/unit/specs/directives/css_truncate.js
index 88904da0e91a..15de5f7ef5f5 100644
--- a/test/unit/specs/directives/css_truncate.js
+++ b/test/unit/specs/directives/css_truncate.js
@@ -3,7 +3,7 @@ define(function (require) {
var $ = require('jquery');
require('angular-route');
- require('apps/discover/index');
+ require('plugins/discover/index');
var $parentScope, $scope, $elem;
diff --git a/test/unit/specs/directives/spinner.js b/test/unit/specs/directives/spinner.js
index b360004cacbd..16ff9db1b4bc 100644
--- a/test/unit/specs/directives/spinner.js
+++ b/test/unit/specs/directives/spinner.js
@@ -5,7 +5,7 @@ define(function (require) {
// Load the kibana app dependencies.
require('angular-route');
- require('apps/discover/index');
+ require('plugins/discover/index');
var $parentScope, $scope, $elem;
diff --git a/test/unit/specs/directives/timepicker.js b/test/unit/specs/directives/timepicker.js
index be953ef22555..469cc5942dd5 100644
--- a/test/unit/specs/directives/timepicker.js
+++ b/test/unit/specs/directives/timepicker.js
@@ -9,11 +9,11 @@ define(function (require) {
// Load the kibana app dependencies.
require('angular-route');
- require('apps/visualize/index');
- require('apps/dashboard/index');
+ require('plugins/visualize/index');
+ require('plugins/dashboard/index');
// TODO: This should not be needed, timefilter is only included here, it should move
- require('apps/discover/index');
+ require('plugins/discover/index');
var $parentScope, $scope, $elem;
var clock, anchor = '2014-01-01T06:06:06.666Z';
diff --git a/test/unit/specs/directives/truncate.js b/test/unit/specs/directives/truncate.js
index cf91cc0f0c91..30fd4309776f 100644
--- a/test/unit/specs/directives/truncate.js
+++ b/test/unit/specs/directives/truncate.js
@@ -5,7 +5,7 @@ define(function (require) {
// Load the kibana app dependencies.
require('angular-route');
- require('apps/discover/index');
+ require('plugins/discover/index');
var $parentScope, $scope, $elem;
diff --git a/test/unit/specs/directives/typeahead.js b/test/unit/specs/directives/typeahead.js
index b00f65798195..b78470b03d21 100644
--- a/test/unit/specs/directives/typeahead.js
+++ b/test/unit/specs/directives/typeahead.js
@@ -7,7 +7,7 @@ define(function (require) {
require('components/typeahead/typeahead');
// TODO: This should not be needed, timefilter is only included here, it should move
- require('apps/discover/index');
+ require('plugins/discover/index');
var typeaheadHistoryCount = 10;
var typeaheadName = 'unittest';
diff --git a/test/unit/specs/filters/field_type.js b/test/unit/specs/filters/field_type.js
index f5bfbe38ad94..675fb4877e5b 100644
--- a/test/unit/specs/filters/field_type.js
+++ b/test/unit/specs/filters/field_type.js
@@ -4,7 +4,7 @@ define(function (require) {
// Load the kibana app dependencies.
require('angular-route');
- require('apps/discover/index');
+ require('plugins/discover/index');
require('filters/field_type');
var filter, types;
diff --git a/test/unit/specs/filters/label.js b/test/unit/specs/filters/label.js
index 1e9248608135..ac180f75d2bc 100644
--- a/test/unit/specs/filters/label.js
+++ b/test/unit/specs/filters/label.js
@@ -7,7 +7,7 @@ define(function (require) {
require('angular-route');
// Load kibana and its applications
- require('apps/discover/index');
+ require('plugins/discover/index');
var filter;
diff --git a/test/unit/specs/filters/rison.js b/test/unit/specs/filters/rison.js
index d3b602b9193b..bf3dacbdc7b7 100644
--- a/test/unit/specs/filters/rison.js
+++ b/test/unit/specs/filters/rison.js
@@ -5,7 +5,7 @@ define(function (require) {
require('angular-route');
// Load kibana and its applications
- require('apps/discover/index');
+ require('plugins/discover/index');
var rison;
var risonDecode;
diff --git a/test/unit/specs/filters/short_dots.js b/test/unit/specs/filters/short_dots.js
index 1e38ace5e106..b537b1ff5f61 100644
--- a/test/unit/specs/filters/short_dots.js
+++ b/test/unit/specs/filters/short_dots.js
@@ -4,7 +4,7 @@ define(function (require) {
// Load the kibana app dependencies.
require('angular-route');
- require('apps/discover/index');
+ require('plugins/discover/index');
require('filters/short_dots');
var filter, config;
diff --git a/test/unit/specs/filters/uriescape.js b/test/unit/specs/filters/uriescape.js
index 0dca0fb5e568..a100d9f30a5f 100644
--- a/test/unit/specs/filters/uriescape.js
+++ b/test/unit/specs/filters/uriescape.js
@@ -4,7 +4,7 @@ define(function (require) {
// Load the kibana app dependencies.
require('angular-route');
- require('apps/discover/index');
+ require('plugins/discover/index');
var filter;
diff --git a/test/unit/specs/registry/index.js b/test/unit/specs/registry/index.js
new file mode 100644
index 000000000000..9b8f88a75cb5
--- /dev/null
+++ b/test/unit/specs/registry/index.js
@@ -0,0 +1,42 @@
+define(function (require) {
+ describe('Registry', function () {
+ var Registry = require('registry/_registry');
+ var Private;
+
+ beforeEach(module('kibana'));
+ beforeEach(inject(function ($injector) {
+ Private = $injector.get('Private');
+ }));
+
+ it('is technically a function', function () {
+ var reg = new Registry('name');
+ expect(reg).to.be.a('function');
+ });
+
+ describe('#register', function () {
+ it('accepts a Private module', function () {
+ var reg = new Registry('name');
+ var mod = function SomePrivateModule() {
+
+ };
+
+ reg.register(mod);
+ // modules are not exposed, so this is the most that we can test
+ });
+ });
+
+ describe('as a module', function () {
+ it('exposes the list of registered modules', function () {
+ var reg = new Registry('name');
+ var mod = function SomePrivateModule(Private) {
+ this.PrivateModuleLoader = Private;
+ };
+
+ reg.register(mod);
+ var result = Private(reg);
+ expect(result).to.have.length(1);
+ expect(result[0]).to.have.property('PrivateModuleLoader', Private);
+ });
+ });
+ });
+});
\ No newline at end of file
diff --git a/test/unit/specs/utils/registry/index.js b/test/unit/specs/utils/indexed_array/index.js
similarity index 86%
rename from test/unit/specs/utils/registry/index.js
rename to test/unit/specs/utils/indexed_array/index.js
index 5ee359ee2460..613974239183 100644
--- a/test/unit/specs/utils/registry/index.js
+++ b/test/unit/specs/utils/indexed_array/index.js
@@ -1,8 +1,8 @@
define(function (require) {
var _ = require('lodash');
- var Registry = require('utils/registry/registry');
+ var IndexedArray = require('utils/indexed_array/index');
- // this is generally a data-structure that Registry is good for managing
+ // this is generally a data-structure that IndexedArray is good for managing
var users = [
{ name: 'John', id: 69, username: 'beast', group: 'admins' },
{ name: 'Anon', id: 0, username: 'shhhh', group: 'secret' },
@@ -10,20 +10,20 @@ define(function (require) {
{ name: 'Mary', id: 55, username: 'sheep', group: 'editor' }
];
- // this is how we used to accomplish this, before Registry
+ // this is how we used to accomplish this, before IndexedArray
users.byName = _.indexBy(users, 'name');
users.byUsername = _.indexBy(users, 'username');
users.byGroup = _.groupBy(users, 'group');
users.inIdOrder = _.sortBy(users, 'id');
- // then things started becoming unruly... so Registry!
+ // then things started becoming unruly... so IndexedArray!
- describe('Registry', function () {
+ describe('IndexedArray', function () {
describe('Basics', function () {
var reg;
beforeEach(function () {
- reg = new Registry();
+ reg = new IndexedArray();
});
it('Extends Array', function () {
@@ -42,7 +42,7 @@ define(function (require) {
describe('Indexing', function () {
it('provides the initial set', function () {
- var reg = new Registry({
+ var reg = new IndexedArray({
initialSet: [1, 2, 3]
});
@@ -54,7 +54,7 @@ define(function (require) {
});
it('indexes the initial set', function () {
- var reg = new Registry({
+ var reg = new IndexedArray({
index: ['username'],
initialSet: users
});
@@ -69,7 +69,7 @@ define(function (require) {
var otherUsers = users.slice(1);
// start off with all but the first
- var reg = new Registry({
+ var reg = new IndexedArray({
group: ['group'],
order: ['id'],
initialSet: otherUsers
@@ -85,7 +85,7 @@ define(function (require) {
it('updates indices after values are removed', function () {
// start off with all
- var reg = new Registry({
+ var reg = new IndexedArray({
group: ['group'],
order: ['id'],
initialSet: users
@@ -119,7 +119,7 @@ define(function (require) {
// do the move
var move = function (arr) { arr.splice(toI, 0, arr.splice(fromI, 1)[0]); };
- var reg = new Registry({
+ var reg = new IndexedArray({
index: ['username'],
initialSet: rawUsers
});
diff --git a/test/unit/specs/utils/registry/inflector.js b/test/unit/specs/utils/indexed_array/inflector.js
similarity index 93%
rename from test/unit/specs/utils/registry/inflector.js
rename to test/unit/specs/utils/indexed_array/inflector.js
index 390a130751b9..f2baf5c42399 100644
--- a/test/unit/specs/utils/registry/inflector.js
+++ b/test/unit/specs/utils/indexed_array/inflector.js
@@ -1,6 +1,6 @@
define(function (require) {
return function () {
- var inflector = require('utils/registry/_inflector');
+ var inflector = require('utils/indexed_array/_inflector');
describe('Inflector', function () {
it('returns a function', function () {
diff --git a/test/unit/specs/utils/registry/path_getter.js b/test/unit/specs/utils/indexed_array/path_getter.js
similarity index 94%
rename from test/unit/specs/utils/registry/path_getter.js
rename to test/unit/specs/utils/indexed_array/path_getter.js
index e85e02f70c51..68e2dc1544a5 100644
--- a/test/unit/specs/utils/registry/path_getter.js
+++ b/test/unit/specs/utils/indexed_array/path_getter.js
@@ -1,6 +1,6 @@
define(function (require) {
return function () {
- var pathGetter = require('utils/registry/_path_getter');
+ var pathGetter = require('utils/indexed_array/_path_getter');
describe('Path Getter', function () {
it('returns a function', function () {
diff --git a/test/utils/agg_param_writer.js b/test/utils/agg_param_writer.js
index 0b09ed1a204e..1528a3bc5e50 100644
--- a/test/utils/agg_param_writer.js
+++ b/test/utils/agg_param_writer.js
@@ -3,7 +3,7 @@ define(function (require) {
var _ = require('lodash');
var Vis = Private(require('components/vis/vis'));
var aggTypes = Private(require('components/agg_types/index'));
- var visTypes = Private(require('components/vis_types/index'));
+ var visTypes = Private(require('registry/vis_types'));
var stubbedLogstashIndexPattern = Private(require('fixtures/stubbed_logstash_index_pattern'));
/**
diff --git a/test/utils/dev_server/index.js b/test/utils/dev_server/index.js
index e40ebe83598c..93e30249903f 100644
--- a/test/utils/dev_server/index.js
+++ b/test/utils/dev_server/index.js
@@ -6,11 +6,15 @@ var Promise = require('bluebird');
var instrumentationMiddleware = require('./_instrumentation');
var amdRapperMiddleware = require('./_amd_rapper');
-var rel = require('path').join.bind(null, __dirname);
-
var proxy = require('http-proxy').createProxyServer({});
+
+var join = require('path').join;
+var rel = join.bind(null, __dirname);
var ROOT = rel('../../../');
-var SRC = rel('../../../src');
+var SRC = join(ROOT, 'src');
+var APP = join(SRC, 'kibana');
+var TEST = join(SRC, 'test');
+var PLUGINS = join(SRC, 'plugins');
module.exports = function DevServer(opts) {
opts = opts || {};
@@ -19,8 +23,28 @@ module.exports = function DevServer(opts) {
var app = connect();
var httpServer = http.createServer(app);
+ // Kibana Backend Proxy
+ app.use(function (req, res, next) {
+ // Proxy config and es requests to the Kibana Backend
+ if (/^\/(config|elasticsearch\/)/.test(req.url)) {
+ return proxy.web(req, res, { target: 'http://localhost:5601' });
+ }
+
+ next();
+ });
+
app.use(instrumentationMiddleware({
- root: ROOT,
+ root: SRC,
+ displayRoot: SRC,
+ filter: function (filename) {
+ return filename.match(/.*\/src\/.*\.js$/)
+ && !filename.match(/.*\/src\/kibana\/bower_components\/.*\.js$/)
+ && !filename.match(/.*\/src\/kibana\/utils\/(event_emitter|next_tick|rison)\.js$/);
+ }
+ }));
+
+ app.use(instrumentationMiddleware({
+ root: APP,
displayRoot: SRC,
filter: function (filename) {
return filename.match(/.*\/src\/.*\.js$/)
@@ -33,20 +57,10 @@ module.exports = function DevServer(opts) {
root: ROOT
}));
- app.use('/es-proxy', function (req, res) {
- req.url = req.url.replace(/^\/es-proxy/, '');
- proxy.web(req, res, { target: 'http://localhost:' + (process.env.ES_PORT || 9200) });
- });
-
- // Kibana Backend Proxy
- app.use(function (req, res, next) {
- // Don't proxy test requests
- if (/^\/(test|src|node_modules)/.test(req.url)) return next();
- // Proxy everything else to the Kibana backend
- proxy.web(req, res, { target: 'http://localhost:5601' });
- });
-
app.use(connect.static(ROOT));
+ app.use(connect.static(APP));
+ app.use('/test', connect.static(TEST));
+ app.use('/plugins', connect.static(PLUGINS));
// respond to the "maybe_start_server" pings
app.use(function (req, res, next) {
diff --git a/test/utils/stub_index_pattern.js b/test/utils/stub_index_pattern.js
index bba347cef12b..7076fe0a6b54 100644
--- a/test/utils/stub_index_pattern.js
+++ b/test/utils/stub_index_pattern.js
@@ -1,12 +1,12 @@
define(function (require) {
return function (Private) {
var sinon = require('sinon/sinon');
- var Registry = require('utils/registry/registry');
+ var IndexedArray = require('utils/indexed_array/index');
var fieldFormats = Private(require('components/index_patterns/_field_formats'));
function StubIndexPattern(pattern, timeField, fields) {
this.popularizeField = sinon.spy();
- this.fields = new Registry({
+ this.fields = new IndexedArray({
index: ['name'],
group: ['type'],
initialSet: fields.map(function (field) {
diff --git a/thrid_party_plugins/someOtherPlugins/index.js b/thrid_party_plugins/someOtherPlugins/index.js
new file mode 100644
index 000000000000..3b81ba743b1e
--- /dev/null
+++ b/thrid_party_plugins/someOtherPlugins/index.js
@@ -0,0 +1,3 @@
+define(function (require) {
+ console.log('loading other plugin');
+});
\ No newline at end of file