From a668ec9ca55ed66e08a03bc10f3949f1a6f73c1a Mon Sep 17 00:00:00 2001 From: spalger Date: Wed, 3 Feb 2016 15:41:25 -0700 Subject: [PATCH 1/6] [es6modules] hoist private module providers --- src/fixtures/mock_courier.js | 3 +- src/fixtures/stubbed_doc_source_response.js | 4 +- .../stubbed_logstash_index_pattern.js | 9 ++- src/fixtures/stubbed_search_source.js | 3 +- src/fixtures/vislib/_vis_fixture.js | 3 +- .../kbn_vislib_vis_types/public/area.js | 7 ++- .../kbn_vislib_vis_types/public/histogram.js | 7 ++- .../kbn_vislib_vis_types/public/line.js | 7 ++- .../kbn_vislib_vis_types/public/pie.js | 7 ++- .../kbn_vislib_vis_types/public/tileMap.js | 12 ++-- .../components/panel/lib/load_panel.js | 6 +- .../components/panel/lib/visualization.js | 7 ++- .../dashboard/components/panel/panel.js | 9 ++- src/plugins/kibana/public/dashboard/index.js | 6 +- .../__tests__/directives/discover_field.js | 3 +- .../__tests__/directives/field_calculator.js | 3 +- .../__tests__/directives/field_chooser.js | 6 +- .../public/discover/__tests__/hit_sort_fn.js | 3 +- .../components/field_chooser/field_chooser.js | 3 +- .../public/discover/controllers/discover.js | 21 ++++--- .../public/discover/directives/timechart.js | 3 +- .../kibana/public/doc/__tests__/doc.js | 3 +- .../sections/advanced/advanced_row.js | 3 +- .../settings/sections/advanced/index.js | 3 +- .../settings/sections/indices/_create.js | 3 +- .../public/settings/sections/indices/_edit.js | 9 ++- .../sections/indices/_field_editor.js | 6 +- .../public/settings/sections/objects/_view.js | 3 +- .../kibana/public/visualize/editor/agg.js | 3 +- .../kibana/public/visualize/editor/agg_add.js | 4 +- .../public/visualize/editor/agg_params.js | 3 +- .../kibana/public/visualize/editor/editor.js | 15 +++-- .../visualize/editor/nesting_indicator.js | 3 +- .../saved_visualizations/_saved_vis.js | 3 +- .../saved_visualizations.js | 3 +- .../kibana/public/visualize/wizard/wizard.js | 3 +- .../markdown_vis/public/markdown_vis.js | 3 +- src/plugins/metric_vis/public/metric_vis.js | 6 +- .../public/metric_vis_controller.js | 3 +- src/plugins/spyModes/public/tableSpyMode.js | 3 +- .../table_vis/public/__tests__/_table_vis.js | 9 ++- .../public/__tests__/_table_vis_controller.js | 9 ++- src/plugins/table_vis/public/table_vis.js | 6 +- .../table_vis/public/table_vis_controller.js | 4 +- src/testUtils/stub_index_pattern.js | 9 ++- src/ui/public/Vis/AggConfig.js | 3 +- src/ui/public/Vis/AggConfigs.js | 6 +- src/ui/public/Vis/Schemas.js | 3 +- src/ui/public/Vis/Vis.js | 9 ++- src/ui/public/Vis/VisType.js | 4 +- src/ui/public/Vis/__tests__/_AggConfig.js | 15 +++-- .../public/Vis/__tests__/_AggConfigResult.js | 9 ++- src/ui/public/Vis/__tests__/_AggConfigs.js | 15 +++-- src/ui/public/Vis/__tests__/_Renderbot.js | 3 +- src/ui/public/Vis/__tests__/_Vis.js | 9 ++- .../geo_json/__tests__/geo_json.js | 15 +++-- .../geo_json/_tooltip_formatter.js | 3 +- .../public/agg_response/geo_json/geo_json.js | 3 +- .../__tests__/build_hierarchical_data.js | 12 ++-- .../hierarchical/__tests__/create_raw_data.js | 9 ++- .../__tests__/transform_aggregation.js | 3 +- .../agg_response/hierarchical/_build_split.js | 3 +- .../hierarchical/build_hierarchical_data.js | 6 +- src/ui/public/agg_response/index.js | 13 +++-- .../point_series/__tests__/_add_to_siri.js | 3 +- .../point_series/__tests__/_fake_x_aspect.js | 14 +++-- .../point_series/__tests__/_get_aspects.js | 15 +++-- .../point_series/__tests__/_get_point.js | 3 +- .../point_series/__tests__/_get_series.js | 3 +- .../point_series/__tests__/_init_x_axis.js | 3 +- .../point_series/__tests__/_init_y_axis.js | 3 +- .../point_series/__tests__/_main.js | 12 ++-- .../__tests__/_ordered_date_axis.js | 3 +- .../__tests__/_tooltip_formatter.js | 3 +- .../point_series/_fake_x_aspect.js | 7 ++- .../agg_response/point_series/_get_aspects.js | 3 +- .../agg_response/point_series/_get_series.js | 6 +- .../agg_response/point_series/point_series.js | 18 ++++-- .../agg_response/tabify/__tests__/_buckets.js | 3 +- .../tabify/__tests__/_get_columns.js | 9 ++- .../tabify/__tests__/_integration.js | 9 ++- .../tabify/__tests__/_response_writer.js | 18 ++++-- .../agg_response/tabify/__tests__/_table.js | 3 +- .../tabify/__tests__/_table_group.js | 3 +- .../agg_response/tabify/_get_columns.js | 3 +- .../agg_response/tabify/_response_writer.js | 9 ++- src/ui/public/agg_response/tabify/tabify.js | 9 ++- src/ui/public/agg_table/__tests__/_group.js | 9 ++- src/ui/public/agg_table/__tests__/_table.js | 9 ++- src/ui/public/agg_types/AggParams.js | 18 ++++-- src/ui/public/agg_types/AggType.js | 6 +- .../agg_types/__tests__/AggParamWriter.js | 12 ++-- .../public/agg_types/__tests__/AggParams.js | 15 +++-- src/ui/public/agg_types/__tests__/AggType.js | 15 +++-- .../agg_types/__tests__/bucketCountBetween.js | 18 ++++-- .../agg_types/__tests__/buckets/_histogram.js | 6 +- .../agg_types/__tests__/buckets/_range.js | 12 ++-- .../buckets/create_filter/date_histogram.js | 15 +++-- .../buckets/create_filter/date_range.js | 12 ++-- .../buckets/create_filter/filters.js | 12 ++-- .../buckets/create_filter/histogram.js | 12 ++-- .../buckets/create_filter/ip_range.js | 12 ++-- .../__tests__/buckets/create_filter/range.js | 12 ++-- .../__tests__/buckets/create_filter/terms.js | 12 ++-- .../buckets/date_histogram/_editor.js | 9 ++- .../buckets/date_histogram/_params.js | 12 ++-- src/ui/public/agg_types/__tests__/index.js | 11 ++-- .../param_types/_calculate_interval.js | 12 ++-- .../agg_types/__tests__/param_types/_field.js | 6 +- .../__tests__/param_types/_optioned.js | 6 +- .../__tests__/param_types/_raw_json.js | 6 +- .../agg_types/__tests__/param_types/_regex.js | 12 ++-- .../__tests__/param_types/_string.js | 6 +- .../agg_types/buckets/_bucket_agg_type.js | 3 +- .../agg_types/buckets/date_histogram.js | 15 +++-- src/ui/public/agg_types/buckets/date_range.js | 9 ++- src/ui/public/agg_types/buckets/filters.js | 9 ++- src/ui/public/agg_types/buckets/geo_hash.js | 3 +- src/ui/public/agg_types/buckets/histogram.js | 6 +- src/ui/public/agg_types/buckets/ip_range.js | 6 +- src/ui/public/agg_types/buckets/range.js | 12 ++-- .../agg_types/buckets/significant_terms.js | 6 +- src/ui/public/agg_types/buckets/terms.js | 15 +++-- src/ui/public/agg_types/index.js | 57 ++++++++++++------- .../public/agg_types/metrics/MetricAggType.js | 6 +- src/ui/public/agg_types/metrics/avg.js | 4 +- .../public/agg_types/metrics/cardinality.js | 7 ++- src/ui/public/agg_types/metrics/count.js | 7 ++- src/ui/public/agg_types/metrics/max.js | 4 +- src/ui/public/agg_types/metrics/median.js | 9 ++- src/ui/public/agg_types/metrics/min.js | 4 +- .../agg_types/metrics/percentile_ranks.js | 9 ++- .../public/agg_types/metrics/percentiles.js | 9 ++- .../public/agg_types/metrics/stdDeviation.js | 6 +- src/ui/public/agg_types/metrics/sum.js | 4 +- src/ui/public/agg_types/param_types/field.js | 3 +- .../public/agg_types/param_types/optioned.js | 3 +- .../public/agg_types/param_types/raw_json.js | 3 +- src/ui/public/agg_types/param_types/regex.js | 3 +- src/ui/public/agg_types/param_types/string.js | 3 +- src/ui/public/config/__tests__/config.js | 3 +- src/ui/public/config/_delayed_updater.js | 3 +- src/ui/public/config/config.js | 12 ++-- src/ui/public/courier/courier.js | 33 +++++++---- .../data_source/__tests__/decorate_query.js | 3 +- .../__tests__/normalize_sort_request.js | 6 +- .../public/courier/data_source/_abstract.js | 12 ++-- .../courier/data_source/_doc_send_to_es.js | 6 +- .../data_source/_root_search_source.js | 4 +- .../public/courier/data_source/doc_source.js | 12 ++-- .../courier/data_source/search_source.js | 15 +++-- src/ui/public/courier/fetch/__tests__/doc.js | 6 +- .../public/courier/fetch/__tests__/fetch.js | 6 +- .../courier/fetch/__tests__/fetch_these.js | 3 +- src/ui/public/courier/fetch/_call_client.js | 11 ++-- .../courier/fetch/_call_response_handlers.js | 8 ++- .../courier/fetch/_continue_incomplete.js | 4 +- src/ui/public/courier/fetch/_fetch_these.js | 23 +++++--- src/ui/public/courier/fetch/_is_request.js | 4 +- .../fetch/_merge_duplicate_requests.js | 7 ++- src/ui/public/courier/fetch/fetch.js | 12 ++-- .../fetch/request/__tests__/segmented.js | 6 +- .../__tests__/segmented_create_queue.js | 3 +- .../__tests__/segmented_index_selection.js | 3 +- .../__tests__/segmented_size_picking.js | 3 +- .../courier/fetch/request/_error_handler.js | 4 +- .../fetch/request/_segmented_handle.js | 3 +- src/ui/public/courier/fetch/request/doc.js | 6 +- .../public/courier/fetch/request/request.js | 6 +- src/ui/public/courier/fetch/request/search.js | 6 +- .../public/courier/fetch/request/segmented.js | 6 +- .../fetch/strategy/__tests__/search.js | 3 +- src/ui/public/courier/looper/doc.js | 10 +++- src/ui/public/courier/looper/search.js | 13 +++-- .../courier/saved_object/saved_object.js | 9 ++- .../directives/__tests__/parse_query.js | 3 +- src/ui/public/directives/rows.js | 3 +- .../public/directives/saved_object_finder.js | 3 +- .../public/doc_table/__tests__/doc_table.js | 3 +- .../doc_table/__tests__/lib/get_sort.js | 3 +- .../doc_table/__tests__/lib/rows_headers.js | 5 +- .../public/doc_title/__tests__/doc_title.js | 3 +- .../public/doc_viewer/__tests__/doc_viewer.js | 3 +- src/ui/public/factories/__tests__/events.js | 3 +- .../field_editor/__tests__/field_editor.js | 9 ++- src/ui/public/field_editor/field_editor.js | 6 +- .../filter_bar/__tests__/_addFilters.js | 3 +- .../filter_bar/__tests__/_getFilters.js | 3 +- .../filter_bar/__tests__/_invertFilters.js | 3 +- .../filter_bar/__tests__/_pinFilters.js | 3 +- .../filter_bar/__tests__/_removeFilters.js | 3 +- .../filter_bar/__tests__/_toggleFilters.js | 3 +- .../filter_bar/__tests__/_updateFilters.js | 3 +- .../public/filter_bar/__tests__/filter_bar.js | 6 +- .../filter_bar/__tests__/push_filter.js | 3 +- .../filter_bar/__tests__/query_filter.js | 6 +- src/ui/public/filter_bar/filter_bar.js | 18 ++++-- .../lib/__tests__/changeTimeFilter.js | 3 +- .../lib/__tests__/extractTimeFilter.js | 3 +- .../lib/__tests__/filterOutTimeBasedFilter.js | 3 +- .../lib/__tests__/generateMappingChain.js | 3 +- .../lib/__tests__/mapAndFlattenFilters.js | 3 +- .../filter_bar/lib/__tests__/mapDefault.js | 3 +- .../filter_bar/lib/__tests__/mapExists.js | 3 +- .../filter_bar/lib/__tests__/mapFilter.js | 3 +- .../lib/__tests__/mapFlattenAndWrapFilters.js | 3 +- .../lib/__tests__/mapGeoBoundingBox.js | 3 +- .../filter_bar/lib/__tests__/mapMatchAll.js | 3 +- .../filter_bar/lib/__tests__/mapMissing.js | 3 +- .../lib/__tests__/mapQueryString.js | 3 +- .../filter_bar/lib/__tests__/mapRange.js | 3 +- .../filter_bar/lib/__tests__/mapScript.js | 3 +- .../filter_bar/lib/__tests__/mapTerms.js | 3 +- .../filter_bar/lib/mapAndFlattenFilters.js | 3 +- src/ui/public/filter_bar/lib/mapFilter.js | 30 ++++++---- .../lib/mapFlattenAndWrapFilters.js | 3 +- src/ui/public/filter_bar/query_filter.js | 6 +- .../__tests__/filter_manager.js | 6 +- .../public/filter_manager/filter_manager.js | 3 +- .../filter_manager/lib/__tests__/phrase.js | 3 +- .../filter_manager/lib/__tests__/query.js | 3 +- .../filter_manager/lib/__tests__/range.js | 3 +- .../index_patterns/__tests__/_FieldFormat.js | 3 +- .../__tests__/_cast_mapping_type.js | 3 +- .../__tests__/_get_computed_fields.js | 3 +- .../__tests__/_index_pattern.js | 21 ++++--- .../index_patterns/__tests__/_map_field.js | 3 +- .../__tests__/calculate_indices.js | 3 +- .../index_patterns/__tests__/flatten_hit.js | 3 +- .../__tests__/index_patterns.js | 6 +- .../index_patterns/__tests__/intervals.js | 3 +- src/ui/public/index_patterns/_field.js | 9 ++- .../_field_format/FieldFormat.js | 3 +- src/ui/public/index_patterns/_field_list.js | 3 +- .../public/index_patterns/_index_pattern.js | 32 +++++++---- src/ui/public/index_patterns/_map_field.js | 3 +- src/ui/public/index_patterns/_mapper.js | 12 ++-- .../_transform_mapping_into_fields.js | 3 +- .../public/index_patterns/index_patterns.js | 21 ++++--- .../index_patterns/routeSetup/loadDefault.js | 6 +- src/ui/public/listen/__tests__/listen.js | 3 +- src/ui/public/navbar/navbar.js | 3 +- src/ui/public/parse_query/lib/from_user.js | 3 +- src/ui/public/parse_query/parse_query.js | 3 +- .../__tests__/persisted_state.js | 6 +- .../public/persisted_state/persisted_state.js | 3 +- .../__tests__/reflow_watcher.js | 6 +- .../public/reflow_watcher/reflow_watcher.js | 3 +- src/ui/public/registry/_registry.js | 3 +- .../share/directives/share_object_url.js | 3 +- .../state_management/__tests__/app_state.js | 3 +- .../state_management/__tests__/state.js | 6 +- src/ui/public/state_management/app_state.js | 6 +- .../public/state_management/global_state.js | 3 +- src/ui/public/state_management/state.js | 3 +- src/ui/public/stringify/__tests__/_color.js | 3 +- .../stringify/__tests__/_conformance.js | 6 +- src/ui/public/stringify/__tests__/_date.js | 3 +- src/ui/public/stringify/__tests__/_ip.js | 3 +- src/ui/public/stringify/__tests__/_source.js | 9 ++- src/ui/public/stringify/__tests__/_string.js | 3 +- .../public/stringify/__tests__/_truncate.js | 3 +- src/ui/public/stringify/__tests__/_url.js | 3 +- src/ui/public/stringify/types/Bytes.js | 4 +- src/ui/public/stringify/types/Color.js | 3 +- src/ui/public/stringify/types/Date.js | 6 +- src/ui/public/stringify/types/Ip.js | 3 +- src/ui/public/stringify/types/Number.js | 4 +- src/ui/public/stringify/types/Percent.js | 6 +- src/ui/public/stringify/types/Source.js | 3 +- src/ui/public/stringify/types/String.js | 3 +- src/ui/public/stringify/types/Url.js | 3 +- src/ui/public/stringify/types/_Numeral.js | 6 +- src/ui/public/stringify/types/truncate.js | 3 +- .../template_vis_type/TemplateRenderbot.js | 3 +- .../template_vis_type/TemplateVisType.js | 6 +- src/ui/public/time_buckets/time_buckets.js | 6 +- .../timefilter/__tests__/diff_interval.js | 3 +- .../public/timefilter/__tests__/diff_time.js | 3 +- src/ui/public/timefilter/lib/diff_interval.js | 3 +- src/ui/public/timefilter/lib/diff_time.js | 3 +- src/ui/public/timefilter/timefilter.js | 12 ++-- .../utils/__tests__/diff_time_picker_vals.js | 3 +- .../public/utils/__tests__/mapping_setup.js | 3 +- .../vislib/__tests__/components/color.js | 18 +++--- .../vislib/__tests__/components/labels.js | 12 ++-- .../__tests__/components/zero_injection.js | 22 ++++--- src/ui/public/vislib/__tests__/index.js | 3 +- .../public/vislib/__tests__/lib/axis_title.js | 9 ++- .../vislib/__tests__/lib/chart_title.js | 9 ++- src/ui/public/vislib/__tests__/lib/data.js | 6 +- .../public/vislib/__tests__/lib/dispatch.js | 18 +++--- .../vislib/__tests__/lib/error_handler.js | 3 +- .../vislib/__tests__/lib/handler/handler.js | 9 ++- .../vislib/__tests__/lib/layout/layout.js | 9 ++- .../__tests__/lib/layout/layout_types.js | 3 +- .../lib/layout/splits/column_chart/splits.js | 12 ++-- .../lib/layout/types/column_layout.js | 3 +- .../vislib/__tests__/lib/resize_checker.js | 9 ++- src/ui/public/vislib/__tests__/lib/x_axis.js | 9 ++- src/ui/public/vislib/__tests__/lib/y_axis.js | 9 ++- src/ui/public/vislib/__tests__/vis.js | 8 ++- .../__tests__/visualizations/area_chart.js | 6 +- .../vislib/__tests__/visualizations/chart.js | 15 +++-- .../__tests__/visualizations/column_chart.js | 6 +- .../__tests__/visualizations/line_chart.js | 6 +- .../__tests__/visualizations/pie_chart.js | 27 +++++---- .../__tests__/visualizations/tile_maps/map.js | 3 +- .../visualizations/tile_maps/markers.js | 12 ++-- .../visualizations/tile_maps/tile_map.js | 3 +- .../__tests__/visualizations/time_marker.js | 3 +- .../__tests__/visualizations/vis_types.js | 3 +- .../public/vislib/components/color/color.js | 3 +- .../vislib/components/color/color_palette.js | 3 +- .../vislib/components/color/mapped_colors.js | 3 +- .../vislib/components/labels/data_array.js | 3 +- .../public/vislib/components/labels/labels.js | 9 ++- .../components/labels/pie/get_pie_names.js | 3 +- .../components/labels/pie/pie_labels.js | 6 +- .../components/zero_injection/inject_zeros.js | 9 ++- .../zero_injection/ordered_x_keys.js | 3 +- .../components/zero_injection/uniq_keys.js | 3 +- src/ui/public/vislib/lib/axis_title.js | 3 +- src/ui/public/vislib/lib/chart_title.js | 6 +- src/ui/public/vislib/lib/data.js | 12 ++-- src/ui/public/vislib/lib/dispatch.js | 3 +- src/ui/public/vislib/lib/handler/handler.js | 6 +- .../vislib/lib/handler/handler_types.js | 10 +++- src/ui/public/vislib/lib/handler/types/pie.js | 10 +++- .../vislib/lib/handler/types/point_series.js | 25 +++++--- .../vislib/lib/handler/types/tile_map.js | 6 +- src/ui/public/vislib/lib/layout/layout.js | 3 +- .../public/vislib/lib/layout/layout_types.js | 14 +++-- .../vislib/lib/layout/types/column_layout.js | 12 ++-- .../vislib/lib/layout/types/map_layout.js | 3 +- .../vislib/lib/layout/types/pie_layout.js | 6 +- src/ui/public/vislib/lib/resize_checker.js | 6 +- src/ui/public/vislib/lib/x_axis.js | 3 +- src/ui/public/vislib/lib/y_axis.js | 3 +- src/ui/public/vislib/vis.js | 12 ++-- src/ui/public/vislib/vislib.js | 3 +- src/ui/public/vislib/visualizations/_chart.js | 6 +- src/ui/public/vislib/visualizations/_map.js | 12 ++-- .../visualizations/_point_series_chart.js | 6 +- .../vislib/visualizations/area_chart.js | 6 +- .../vislib/visualizations/column_chart.js | 9 ++- .../vislib/visualizations/line_chart.js | 6 +- .../marker_types/geohash_grid.js | 3 +- .../visualizations/marker_types/heatmap.js | 3 +- .../marker_types/scaled_circles.js | 3 +- .../marker_types/shaded_circles.js | 3 +- .../public/vislib/visualizations/pie_chart.js | 3 +- .../public/vislib/visualizations/tile_map.js | 6 +- .../public/vislib/visualizations/vis_types.js | 16 ++++-- .../public/vislib_vis_type/VislibRenderbot.js | 9 ++- .../public/vislib_vis_type/VislibVisType.js | 12 ++-- .../__tests__/_VislibRenderbot.js | 18 ++++-- .../__tests__/_buildChartData.js | 12 ++-- .../public/vislib_vis_type/buildChartData.js | 7 ++- src/ui/public/visualize/spy.js | 3 +- src/ui/public/visualize/visualize.js | 3 +- src/ui/public/visualize/visualize_legend.js | 9 ++- 362 files changed, 1647 insertions(+), 821 deletions(-) diff --git a/src/fixtures/mock_courier.js b/src/fixtures/mock_courier.js index 84ab876b783cfc..5c8636d17b5942 100644 --- a/src/fixtures/mock_courier.js +++ b/src/fixtures/mock_courier.js @@ -1,9 +1,10 @@ import _ from 'lodash'; import sinon from 'auto-release-sinon'; +import FixturesStubbedLogstashIndexPatternProvider from 'fixtures/stubbed_logstash_index_pattern'; define(function (require) { return function (Private, Promise) { - var indexPatterns = Private(require('fixtures/stubbed_logstash_index_pattern')); + var indexPatterns = Private(FixturesStubbedLogstashIndexPatternProvider); var getIndexPatternStub = sinon.stub(); getIndexPatternStub.returns(Promise.resolve(indexPatterns)); diff --git a/src/fixtures/stubbed_doc_source_response.js b/src/fixtures/stubbed_doc_source_response.js index a26f73c1f7786e..82050b5325c89c 100644 --- a/src/fixtures/stubbed_doc_source_response.js +++ b/src/fixtures/stubbed_doc_source_response.js @@ -1,6 +1,8 @@ +import FixturesLogstashFieldsProvider from 'fixtures/logstash_fields'; + define(function (require) { function stubbedDocSourceResponse(Private) { - var mockLogstashFields = Private(require('fixtures/logstash_fields')); + var mockLogstashFields = Private(FixturesLogstashFieldsProvider); return function (id, index) { index = index || '.kibana'; diff --git a/src/fixtures/stubbed_logstash_index_pattern.js b/src/fixtures/stubbed_logstash_index_pattern.js index 0936fa4cb410e1..0e6ec717ffe924 100644 --- a/src/fixtures/stubbed_logstash_index_pattern.js +++ b/src/fixtures/stubbed_logstash_index_pattern.js @@ -1,9 +1,12 @@ import _ from 'lodash'; +import TestUtilsStubIndexPatternProvider from 'testUtils/stub_index_pattern'; +import IndexPatternsFieldTypesProvider from 'ui/index_patterns/_field_types'; +import FixturesLogstashFieldsProvider from 'fixtures/logstash_fields'; define(function (require) { return function stubbedLogstashIndexPatternService(Private) { - var StubIndexPattern = Private(require('testUtils/stub_index_pattern')); - var fieldTypes = Private(require('ui/index_patterns/_field_types')); - var mockLogstashFields = Private(require('fixtures/logstash_fields')); + var StubIndexPattern = Private(TestUtilsStubIndexPatternProvider); + var fieldTypes = Private(IndexPatternsFieldTypesProvider); + var mockLogstashFields = Private(FixturesLogstashFieldsProvider); var fields = mockLogstashFields.map(function (field) { diff --git a/src/fixtures/stubbed_search_source.js b/src/fixtures/stubbed_search_source.js index a90dd9d2931431..147fbe1a55cb7e 100644 --- a/src/fixtures/stubbed_search_source.js +++ b/src/fixtures/stubbed_search_source.js @@ -1,10 +1,11 @@ import sinon from 'auto-release-sinon'; import searchResponse from 'fixtures/search_response'; +import FixturesStubbedLogstashIndexPatternProvider from 'fixtures/stubbed_logstash_index_pattern'; define(function (require) { return function stubSearchSource(Private, $q, Promise) { var deferedResult = $q.defer(); - var indexPattern = Private(require('fixtures/stubbed_logstash_index_pattern')); + var indexPattern = Private(FixturesStubbedLogstashIndexPatternProvider); return { sort: sinon.spy(), diff --git a/src/fixtures/vislib/_vis_fixture.js b/src/fixtures/vislib/_vis_fixture.js index b06885c8aac34e..6f401a140ec4db 100644 --- a/src/fixtures/vislib/_vis_fixture.js +++ b/src/fixtures/vislib/_vis_fixture.js @@ -1,5 +1,6 @@ import _ from 'lodash'; import $ from 'jquery'; +import VislibVisProvider from 'ui/vislib/vis'; var $visCanvas = $('
').attr('id', 'vislib-vis-fixtures').appendTo('body'); var count = 0; @@ -19,7 +20,7 @@ afterEach(function () { module.exports = function VislibFixtures(Private) { return function (visLibParams) { - var Vis = Private(require('ui/vislib/vis')); + var Vis = Private(VislibVisProvider); return new Vis($visCanvas.new(), _.defaults({}, visLibParams || {}, { shareYAxis: true, addTooltip: true, diff --git a/src/plugins/kbn_vislib_vis_types/public/area.js b/src/plugins/kbn_vislib_vis_types/public/area.js index e12b1b72ccafda..eae49674fd1005 100644 --- a/src/plugins/kbn_vislib_vis_types/public/area.js +++ b/src/plugins/kbn_vislib_vis_types/public/area.js @@ -1,7 +1,10 @@ +import VislibVisTypeVislibVisTypeProvider from 'ui/vislib_vis_type/VislibVisType'; +import VisSchemasProvider from 'ui/Vis/Schemas'; + define(function (require) { return function HistogramVisType(Private) { - const VislibVisType = Private(require('ui/vislib_vis_type/VislibVisType')); - const Schemas = Private(require('ui/Vis/Schemas')); + const VislibVisType = Private(VislibVisTypeVislibVisTypeProvider); + const Schemas = Private(VisSchemasProvider); return new VislibVisType({ name: 'area', diff --git a/src/plugins/kbn_vislib_vis_types/public/histogram.js b/src/plugins/kbn_vislib_vis_types/public/histogram.js index 3a87179b045e77..994b7f68deb65d 100644 --- a/src/plugins/kbn_vislib_vis_types/public/histogram.js +++ b/src/plugins/kbn_vislib_vis_types/public/histogram.js @@ -1,7 +1,10 @@ +import VislibVisTypeVislibVisTypeProvider from 'ui/vislib_vis_type/VislibVisType'; +import VisSchemasProvider from 'ui/Vis/Schemas'; + define(function (require) { return function HistogramVisType(Private) { - const VislibVisType = Private(require('ui/vislib_vis_type/VislibVisType')); - const Schemas = Private(require('ui/Vis/Schemas')); + const VislibVisType = Private(VislibVisTypeVislibVisTypeProvider); + const Schemas = Private(VisSchemasProvider); return new VislibVisType({ name: 'histogram', diff --git a/src/plugins/kbn_vislib_vis_types/public/line.js b/src/plugins/kbn_vislib_vis_types/public/line.js index bab825dfb0874d..dcc9013965db85 100644 --- a/src/plugins/kbn_vislib_vis_types/public/line.js +++ b/src/plugins/kbn_vislib_vis_types/public/line.js @@ -1,7 +1,10 @@ +import VislibVisTypeVislibVisTypeProvider from 'ui/vislib_vis_type/VislibVisType'; +import VisSchemasProvider from 'ui/Vis/Schemas'; + define(function (require) { return function HistogramVisType(Private) { - const VislibVisType = Private(require('ui/vislib_vis_type/VislibVisType')); - const Schemas = Private(require('ui/Vis/Schemas')); + const VislibVisType = Private(VislibVisTypeVislibVisTypeProvider); + const Schemas = Private(VisSchemasProvider); return new VislibVisType({ name: 'line', diff --git a/src/plugins/kbn_vislib_vis_types/public/pie.js b/src/plugins/kbn_vislib_vis_types/public/pie.js index c69ed934af61a4..c3b2f8f73e9551 100644 --- a/src/plugins/kbn_vislib_vis_types/public/pie.js +++ b/src/plugins/kbn_vislib_vis_types/public/pie.js @@ -1,7 +1,10 @@ +import VislibVisTypeVislibVisTypeProvider from 'ui/vislib_vis_type/VislibVisType'; +import VisSchemasProvider from 'ui/Vis/Schemas'; + define(function (require) { return function HistogramVisType(Private) { - const VislibVisType = Private(require('ui/vislib_vis_type/VislibVisType')); - const Schemas = Private(require('ui/Vis/Schemas')); + const VislibVisType = Private(VislibVisTypeVislibVisTypeProvider); + const Schemas = Private(VisSchemasProvider); return new VislibVisType({ name: 'pie', diff --git a/src/plugins/kbn_vislib_vis_types/public/tileMap.js b/src/plugins/kbn_vislib_vis_types/public/tileMap.js index 2b68cf7200bbdd..eb69273bd5180b 100644 --- a/src/plugins/kbn_vislib_vis_types/public/tileMap.js +++ b/src/plugins/kbn_vislib_vis_types/public/tileMap.js @@ -1,10 +1,14 @@ import _ from 'lodash'; import supports from 'ui/utils/supports'; +import VislibVisTypeVislibVisTypeProvider from 'ui/vislib_vis_type/VislibVisType'; +import VisSchemasProvider from 'ui/Vis/Schemas'; +import AggResponseGeoJsonGeoJsonProvider from 'ui/agg_response/geo_json/geo_json'; +import FilterBarPushFilterProvider from 'ui/filter_bar/push_filter'; define(function (require) { return function TileMapVisType(Private, getAppState, courier, config) { - const VislibVisType = Private(require('ui/vislib_vis_type/VislibVisType')); - const Schemas = Private(require('ui/Vis/Schemas')); - const geoJsonConverter = Private(require('ui/agg_response/geo_json/geo_json')); + const VislibVisType = Private(VislibVisTypeVislibVisTypeProvider); + const Schemas = Private(VisSchemasProvider); + const geoJsonConverter = Private(AggResponseGeoJsonGeoJsonProvider); return new VislibVisType({ name: 'tile_map', @@ -33,7 +37,7 @@ define(function (require) { const agg = _.get(event, 'chart.geohashGridAgg'); if (!agg) return; - const pushFilter = Private(require('ui/filter_bar/push_filter'))(getAppState()); + const pushFilter = Private(FilterBarPushFilterProvider)(getAppState()); const indexPatternName = agg.vis.indexPattern.id; const field = agg.fieldName(); const filter = {geo_bounding_box: {}}; diff --git a/src/plugins/kibana/public/dashboard/components/panel/lib/load_panel.js b/src/plugins/kibana/public/dashboard/components/panel/lib/load_panel.js index c0bdfb20f28af6..a907cebbe904e1 100644 --- a/src/plugins/kibana/public/dashboard/components/panel/lib/load_panel.js +++ b/src/plugins/kibana/public/dashboard/components/panel/lib/load_panel.js @@ -1,10 +1,12 @@ import _ from 'lodash'; +import PluginsKibanaDashboardComponentsPanelLibVisualizationProvider from 'plugins/kibana/dashboard/components/panel/lib/visualization'; +import PluginsKibanaDashboardComponentsPanelLibSearchProvider from 'plugins/kibana/dashboard/components/panel/lib/search'; define(function (require) { return function loadPanelFunction(Private) { // Inject services here return function (panel, $scope) { // Function parameters here const panelTypes = { - visualization: Private(require('plugins/kibana/dashboard/components/panel/lib/visualization')), - search: Private(require('plugins/kibana/dashboard/components/panel/lib/search')) + visualization: Private(PluginsKibanaDashboardComponentsPanelLibVisualizationProvider), + search: Private(PluginsKibanaDashboardComponentsPanelLibSearchProvider) }; try { diff --git a/src/plugins/kibana/public/dashboard/components/panel/lib/visualization.js b/src/plugins/kibana/public/dashboard/components/panel/lib/visualization.js index 2e4415f42b7cc1..ec29dc9f396cc8 100644 --- a/src/plugins/kibana/public/dashboard/components/panel/lib/visualization.js +++ b/src/plugins/kibana/public/dashboard/components/panel/lib/visualization.js @@ -1,7 +1,10 @@ +import UtilsBrushEventProvider from 'ui/utils/brush_event'; +import FilterBarFilterBarClickHandlerProvider from 'ui/filter_bar/filter_bar_click_handler'; + define(function (require) { return function visualizationLoader(savedVisualizations, Private) { // Inject services here - const brushEvent = Private(require('ui/utils/brush_event')); - const filterBarClickHandler = Private(require('ui/filter_bar/filter_bar_click_handler')); + const brushEvent = Private(UtilsBrushEventProvider); + const filterBarClickHandler = Private(FilterBarFilterBarClickHandlerProvider); return function (panel, $scope) { // Function parameters here return savedVisualizations.get(panel.id) diff --git a/src/plugins/kibana/public/dashboard/components/panel/panel.js b/src/plugins/kibana/public/dashboard/components/panel/panel.js index c3364596661cd7..513c23af90f580 100644 --- a/src/plugins/kibana/public/dashboard/components/panel/panel.js +++ b/src/plugins/kibana/public/dashboard/components/panel/panel.js @@ -3,12 +3,15 @@ import $ from 'jquery'; import _ from 'lodash'; import 'ui/visualize'; import 'ui/doc_table'; +import PluginsKibanaDashboardComponentsPanelLibLoadPanelProvider from 'plugins/kibana/dashboard/components/panel/lib/load_panel'; +import FilterManagerProvider from 'ui/filter_manager'; +import UtilsBrushEventProvider from 'ui/utils/brush_event'; define(function (require) { require('ui/modules') .get('app/dashboard') .directive('dashboardPanel', function (savedVisualizations, savedSearches, Notifier, Private, $injector) { - const loadPanel = Private(require('plugins/kibana/dashboard/components/panel/lib/load_panel')); - const filterManager = Private(require('ui/filter_manager')); + const loadPanel = Private(PluginsKibanaDashboardComponentsPanelLibLoadPanelProvider); + const filterManager = Private(FilterManagerProvider); const notify = new Notifier(); const services = require('plugins/kibana/settings/saved_object_registry').all().map(function (serviceObj) { @@ -20,7 +23,7 @@ define(function (require) { }); - const brushEvent = Private(require('ui/utils/brush_event')); + const brushEvent = Private(UtilsBrushEventProvider); const getPanelId = function (panel) { return ['P', panel.panelIndex].join('-'); diff --git a/src/plugins/kibana/public/dashboard/index.js b/src/plugins/kibana/public/dashboard/index.js index a7cce6c902b7f1..8165dbcb159659 100644 --- a/src/plugins/kibana/public/dashboard/index.js +++ b/src/plugins/kibana/public/dashboard/index.js @@ -14,6 +14,8 @@ import 'plugins/kibana/dashboard/directives/grid'; import 'plugins/kibana/dashboard/components/panel/panel'; import 'plugins/kibana/dashboard/services/saved_dashboards'; import 'plugins/kibana/dashboard/styles/main.less'; +import FilterBarQueryFilterProvider from 'ui/filter_bar/query_filter'; +import DocTitleProvider from 'ui/doc_title'; define(function (require) { @@ -55,7 +57,7 @@ define(function (require) { return { controller: function ($scope, $rootScope, $route, $routeParams, $location, Private, getAppState) { - const queryFilter = Private(require('ui/filter_bar/query_filter')); + const queryFilter = Private(FilterBarQueryFilterProvider); const notify = new Notifier({ location: 'Dashboard' @@ -115,7 +117,7 @@ define(function (require) { function init() { updateQueryOnRootSource(); - const docTitle = Private(require('ui/doc_title')); + const docTitle = Private(DocTitleProvider); if (dash.id) { docTitle.change(dash.title); } diff --git a/src/plugins/kibana/public/discover/__tests__/directives/discover_field.js b/src/plugins/kibana/public/discover/__tests__/directives/discover_field.js index 2230c2e7a63c12..554c97fdb27d6c 100644 --- a/src/plugins/kibana/public/discover/__tests__/directives/discover_field.js +++ b/src/plugins/kibana/public/discover/__tests__/directives/discover_field.js @@ -7,6 +7,7 @@ import expect from 'expect.js'; import $ from 'jquery'; import 'ui/private'; import 'plugins/kibana/discover/components/field_chooser/discover_field'; +import FixturesStubbedLogstashIndexPatternProvider from 'fixtures/stubbed_logstash_index_pattern'; // Load the kibana app dependencies. @@ -18,7 +19,7 @@ describe('discoverField', function () { beforeEach(ngMock.module('kibana')); beforeEach(ngMock.inject(function (Private, $rootScope, $compile) { $elem = angular.element(''); - indexPattern = Private(require('fixtures/stubbed_logstash_index_pattern')); + indexPattern = Private(FixturesStubbedLogstashIndexPatternProvider); _.assign($rootScope, { field: indexPattern.fields.byName.extension, diff --git a/src/plugins/kibana/public/discover/__tests__/directives/field_calculator.js b/src/plugins/kibana/public/discover/__tests__/directives/field_calculator.js index 29662393a08baf..f4820abfbc9c52 100644 --- a/src/plugins/kibana/public/discover/__tests__/directives/field_calculator.js +++ b/src/plugins/kibana/public/discover/__tests__/directives/field_calculator.js @@ -4,6 +4,7 @@ import ngMock from 'ngMock'; import fieldCalculator from 'plugins/kibana/discover/components/field_chooser/lib/field_calculator'; import expect from 'expect.js'; import 'ui/private'; +import FixturesStubbedLogstashIndexPatternProvider from 'fixtures/stubbed_logstash_index_pattern'; // Load the kibana app dependencies. @@ -12,7 +13,7 @@ let indexPattern; describe('fieldCalculator', function () { beforeEach(ngMock.module('kibana')); beforeEach(ngMock.inject(function (Private) { - indexPattern = Private(require('fixtures/stubbed_logstash_index_pattern')); + indexPattern = Private(FixturesStubbedLogstashIndexPatternProvider); })); diff --git a/src/plugins/kibana/public/discover/__tests__/directives/field_chooser.js b/src/plugins/kibana/public/discover/__tests__/directives/field_chooser.js index 9f88294d881e7e..78c7fca669c0fb 100644 --- a/src/plugins/kibana/public/discover/__tests__/directives/field_chooser.js +++ b/src/plugins/kibana/public/discover/__tests__/directives/field_chooser.js @@ -7,6 +7,8 @@ import expect from 'expect.js'; import $ from 'jquery'; import 'ui/private'; import 'plugins/kibana/discover/components/field_chooser/field_chooser'; +import FixturesHitsProvider from 'fixtures/hits'; +import FixturesStubbedLogstashIndexPatternProvider from 'fixtures/stubbed_logstash_index_pattern'; // Load the kibana app dependencies. @@ -55,8 +57,8 @@ describe('discover field chooser directives', function () { beforeEach(ngMock.module('kibana')); beforeEach(ngMock.inject(function (Private) { - hits = Private(require('fixtures/hits')); - indexPattern = Private(require('fixtures/stubbed_logstash_index_pattern')); + hits = Private(FixturesHitsProvider); + indexPattern = Private(FixturesStubbedLogstashIndexPatternProvider); indexPatternList = [ 'b', 'a', 'c' ]; const fieldCounts = _.transform(hits, function (counts, hit) { diff --git a/src/plugins/kibana/public/discover/__tests__/hit_sort_fn.js b/src/plugins/kibana/public/discover/__tests__/hit_sort_fn.js index df04ca96ba6a83..601b1928279015 100644 --- a/src/plugins/kibana/public/discover/__tests__/hit_sort_fn.js +++ b/src/plugins/kibana/public/discover/__tests__/hit_sort_fn.js @@ -2,13 +2,14 @@ import _ from 'lodash'; import ngMock from 'ngMock'; import expect from 'expect.js'; +import PluginsKibanaDiscoverHitSortFnProvider from 'plugins/kibana/discover/_hit_sort_fn'; describe('hit sort function', function () { let createHitSortFn; beforeEach(ngMock.module('kibana')); beforeEach(ngMock.inject(function (Private) { - createHitSortFn = Private(require('plugins/kibana/discover/_hit_sort_fn')); + createHitSortFn = Private(PluginsKibanaDiscoverHitSortFnProvider); })); diff --git a/src/plugins/kibana/public/discover/components/field_chooser/field_chooser.js b/src/plugins/kibana/public/discover/components/field_chooser/field_chooser.js index 8e941f9821b374..aa4af01582bdf2 100644 --- a/src/plugins/kibana/public/discover/components/field_chooser/field_chooser.js +++ b/src/plugins/kibana/public/discover/components/field_chooser/field_chooser.js @@ -6,13 +6,14 @@ import _ from 'lodash'; import $ from 'jquery'; import rison from 'ui/utils/rison'; import fieldCalculator from 'plugins/kibana/discover/components/field_chooser/lib/field_calculator'; +import IndexPatternsFieldListProvider from 'ui/index_patterns/_field_list'; define(function (require) { const app = require('ui/modules').get('apps/discover'); app.directive('discFieldChooser', function ($location, globalState, config, $route, Private) { - const FieldList = Private(require('ui/index_patterns/_field_list')); + const FieldList = Private(IndexPatternsFieldListProvider); return { restrict: 'E', diff --git a/src/plugins/kibana/public/discover/controllers/discover.js b/src/plugins/kibana/public/discover/controllers/discover.js index 1c3b166e6e7162..9399a77bbf26ed 100644 --- a/src/plugins/kibana/public/discover/controllers/discover.js +++ b/src/plugins/kibana/public/discover/controllers/discover.js @@ -17,6 +17,13 @@ import 'ui/state_management/app_state'; import 'ui/timefilter'; import 'ui/highlight/highlight_tags'; import 'ui/share'; +import VisProvider from 'ui/Vis'; +import DocTitleProvider from 'ui/doc_title'; +import UtilsBrushEventProvider from 'ui/utils/brush_event'; +import PluginsKibanaDiscoverHitSortFnProvider from 'plugins/kibana/discover/_hit_sort_fn'; +import FilterBarQueryFilterProvider from 'ui/filter_bar/query_filter'; +import FilterManagerProvider from 'ui/filter_manager'; +import AggTypesBucketsIntervalOptionsProvider from 'ui/agg_types/buckets/_interval_options'; define(function (require) { @@ -66,18 +73,18 @@ define(function (require) { app.controller('discover', function ($scope, config, courier, $route, $window, Notifier, AppState, timefilter, Promise, Private, kbnUrl, highlightTags) { - const Vis = Private(require('ui/Vis')); - const docTitle = Private(require('ui/doc_title')); - const brushEvent = Private(require('ui/utils/brush_event')); - const HitSortFn = Private(require('plugins/kibana/discover/_hit_sort_fn')); - const queryFilter = Private(require('ui/filter_bar/query_filter')); - const filterManager = Private(require('ui/filter_manager')); + const Vis = Private(VisProvider); + const docTitle = Private(DocTitleProvider); + const brushEvent = Private(UtilsBrushEventProvider); + const HitSortFn = Private(PluginsKibanaDiscoverHitSortFnProvider); + const queryFilter = Private(FilterBarQueryFilterProvider); + const filterManager = Private(FilterManagerProvider); const notify = new Notifier({ location: 'Discover' }); - $scope.intervalOptions = Private(require('ui/agg_types/buckets/_interval_options')); + $scope.intervalOptions = Private(AggTypesBucketsIntervalOptionsProvider); $scope.showInterval = false; $scope.intervalEnabled = function (interval) { diff --git a/src/plugins/kibana/public/discover/directives/timechart.js b/src/plugins/kibana/public/discover/directives/timechart.js index e303a361fb6d6d..b3c7301a6573b1 100644 --- a/src/plugins/kibana/public/discover/directives/timechart.js +++ b/src/plugins/kibana/public/discover/directives/timechart.js @@ -1,9 +1,10 @@ import _ from 'lodash'; import $ from 'jquery'; +import VislibProvider from 'ui/vislib'; require('ui/modules') .get('apps/discover') .directive('discoverTimechart', function (Private, $compile) { - const vislib = Private(require('ui/vislib')); + const vislib = Private(VislibProvider); return { restrict: 'E', diff --git a/src/plugins/kibana/public/doc/__tests__/doc.js b/src/plugins/kibana/public/doc/__tests__/doc.js index 4700304798fb53..32bec47cadbbc8 100644 --- a/src/plugins/kibana/public/doc/__tests__/doc.js +++ b/src/plugins/kibana/public/doc/__tests__/doc.js @@ -2,6 +2,7 @@ import ngMock from 'ngMock'; import expect from 'expect.js'; import 'plugins/kibana/doc/index'; +import FixturesStubbedLogstashIndexPatternProvider from 'fixtures/stubbed_logstash_index_pattern'; let $scope; let createController; @@ -16,7 +17,7 @@ const init = function (index, type, id) { $provide.service('$route', function (Private) { this.current = { locals: { - indexPattern: Private(require('fixtures/stubbed_logstash_index_pattern')) + indexPattern: Private(FixturesStubbedLogstashIndexPatternProvider) }, params: { index: index || 'myIndex', diff --git a/src/plugins/kibana/public/settings/sections/advanced/advanced_row.js b/src/plugins/kibana/public/settings/sections/advanced/advanced_row.js index 5847c90200b310..4075f074004c5d 100644 --- a/src/plugins/kibana/public/settings/sections/advanced/advanced_row.js +++ b/src/plugins/kibana/public/settings/sections/advanced/advanced_row.js @@ -1,5 +1,6 @@ import _ from 'lodash'; import 'ui/elastic_textarea'; +import ConfigDefaultsProvider from 'ui/config/defaults'; define(function (require) { require('ui/modules').get('apps/settings') @@ -13,7 +14,7 @@ define(function (require) { configs: '=' }, link: function ($scope) { - const configDefaults = Private(require('ui/config/defaults')); + const configDefaults = Private(ConfigDefaultsProvider); const notify = new Notifier(); const keyCodes = { ESC: 27 diff --git a/src/plugins/kibana/public/settings/sections/advanced/index.js b/src/plugins/kibana/public/settings/sections/advanced/index.js index ef7895e808f9b2..d30e0a1e3e2280 100644 --- a/src/plugins/kibana/public/settings/sections/advanced/index.js +++ b/src/plugins/kibana/public/settings/sections/advanced/index.js @@ -1,6 +1,7 @@ import _ from 'lodash'; import toEditableConfig from 'plugins/kibana/settings/sections/advanced/lib/to_editable_config'; import 'plugins/kibana/settings/sections/advanced/advanced_row'; +import ConfigDefaultsProvider from 'ui/config/defaults'; define(function (require) { @@ -15,7 +16,7 @@ define(function (require) { return { restrict: 'E', link: function ($scope) { - const configDefaults = Private(require('ui/config/defaults')); + const configDefaults = Private(ConfigDefaultsProvider); const keyCodes = { ESC: 27 }; diff --git a/src/plugins/kibana/public/settings/sections/indices/_create.js b/src/plugins/kibana/public/settings/sections/indices/_create.js index 10536f20774d8d..f052aa0f799d6a 100644 --- a/src/plugins/kibana/public/settings/sections/indices/_create.js +++ b/src/plugins/kibana/public/settings/sections/indices/_create.js @@ -3,6 +3,7 @@ import moment from 'moment'; import { IndexPatternMissingIndices } from 'ui/errors'; import 'ui/directives/validate_index_name'; import 'ui/directives/auto_select_if_only_one'; +import PluginsKibanaSettingsSectionsIndicesRefreshKibanaIndexProvider from 'plugins/kibana/settings/sections/indices/_refresh_kibana_index'; define(function (require) { @@ -14,7 +15,7 @@ define(function (require) { require('ui/modules').get('apps/settings') .controller('settingsIndicesCreate', function ($scope, kbnUrl, Private, Notifier, indexPatterns, es, config, Promise) { const notify = new Notifier(); - const refreshKibanaIndex = Private(require('plugins/kibana/settings/sections/indices/_refresh_kibana_index')); + const refreshKibanaIndex = Private(PluginsKibanaSettingsSectionsIndicesRefreshKibanaIndexProvider); const intervals = indexPatterns.intervals; let samplePromise; diff --git a/src/plugins/kibana/public/settings/sections/indices/_edit.js b/src/plugins/kibana/public/settings/sections/indices/_edit.js index 7ef4ba27c29d8d..c6aae0fa789226 100644 --- a/src/plugins/kibana/public/settings/sections/indices/_edit.js +++ b/src/plugins/kibana/public/settings/sections/indices/_edit.js @@ -2,6 +2,9 @@ import _ from 'lodash'; import 'plugins/kibana/settings/sections/indices/_indexed_fields'; import 'plugins/kibana/settings/sections/indices/_scripted_fields'; import 'plugins/kibana/settings/sections/indices/_index_header'; +import PluginsKibanaSettingsSectionsIndicesRefreshKibanaIndexProvider from 'plugins/kibana/settings/sections/indices/_refresh_kibana_index'; +import UrlProvider from 'ui/url'; +import PluginsKibanaSettingsSectionsIndicesFieldTypesProvider from 'plugins/kibana/settings/sections/indices/_field_types'; define(function (require) { require('ui/routes') @@ -20,14 +23,14 @@ define(function (require) { const notify = new Notifier(); const $state = $scope.state = new AppState(); - const refreshKibanaIndex = Private(require('plugins/kibana/settings/sections/indices/_refresh_kibana_index')); + const refreshKibanaIndex = Private(PluginsKibanaSettingsSectionsIndicesRefreshKibanaIndexProvider); - $scope.kbnUrl = Private(require('ui/url')); + $scope.kbnUrl = Private(UrlProvider); $scope.indexPattern = $route.current.locals.indexPattern; docTitle.change($scope.indexPattern.id); const otherIds = _.without($route.current.locals.indexPatternIds, $scope.indexPattern.id); - const fieldTypes = Private(require('plugins/kibana/settings/sections/indices/_field_types')); + const fieldTypes = Private(PluginsKibanaSettingsSectionsIndicesFieldTypesProvider); $scope.$watch('indexPattern.fields', function () { $scope.fieldTypes = fieldTypes($scope.indexPattern); }); diff --git a/src/plugins/kibana/public/settings/sections/indices/_field_editor.js b/src/plugins/kibana/public/settings/sections/indices/_field_editor.js index ddef8ddf3a5e25..902e35d2154c0c 100644 --- a/src/plugins/kibana/public/settings/sections/indices/_field_editor.js +++ b/src/plugins/kibana/public/settings/sections/indices/_field_editor.js @@ -1,5 +1,7 @@ import 'ui/field_editor'; import 'plugins/kibana/settings/sections/indices/_index_header'; +import IndexPatternsFieldProvider from 'ui/index_patterns/_field'; +import UrlProvider from 'ui/url'; define(function (require) { require('ui/routes') @@ -15,9 +17,9 @@ define(function (require) { }, controllerAs: 'fieldSettings', controller: function FieldEditorPageController($route, Private, Notifier, docTitle) { - const Field = Private(require('ui/index_patterns/_field')); + const Field = Private(IndexPatternsFieldProvider); const notify = new Notifier({ location: 'Field Editor' }); - const kbnUrl = Private(require('ui/url')); + const kbnUrl = Private(UrlProvider); this.mode = $route.current.mode; diff --git a/src/plugins/kibana/public/settings/sections/objects/_view.js b/src/plugins/kibana/public/settings/sections/objects/_view.js index c174c7d44fd7b4..ba26e6e07f030f 100644 --- a/src/plugins/kibana/public/settings/sections/objects/_view.js +++ b/src/plugins/kibana/public/settings/sections/objects/_view.js @@ -3,6 +3,7 @@ import angular from 'angular'; import rison from 'ui/utils/rison'; import registry from 'plugins/kibana/settings/saved_object_registry'; import objectViewHTML from 'plugins/kibana/settings/sections/objects/_view.html'; +import IndexPatternsCastMappingTypeProvider from 'ui/index_patterns/_cast_mapping_type'; define(function (require) { require('ui/routes') @@ -16,7 +17,7 @@ define(function (require) { restrict: 'E', controller: function ($scope, $injector, $routeParams, $location, $window, $rootScope, es, Private) { const notify = new Notifier({ location: 'SavedObject view' }); - const castMappingType = Private(require('ui/index_patterns/_cast_mapping_type')); + const castMappingType = Private(IndexPatternsCastMappingTypeProvider); const serviceObj = registry.get($routeParams.service); const service = $injector.get(serviceObj.service); diff --git a/src/plugins/kibana/public/visualize/editor/agg.js b/src/plugins/kibana/public/visualize/editor/agg.js index f7e83964d00873..21603033da5b4d 100644 --- a/src/plugins/kibana/public/visualize/editor/agg.js +++ b/src/plugins/kibana/public/visualize/editor/agg.js @@ -3,12 +3,13 @@ import 'plugins/kibana/visualize/editor/agg_add'; import _ from 'lodash'; import $ from 'jquery'; import advancedToggleHtml from 'plugins/kibana/visualize/editor/advanced_toggle.html'; +import AggTypesIndexProvider from 'ui/agg_types/index'; define(function (require) { require('ui/modules') .get('app/visualize') .directive('visEditorAgg', function ($compile, $parse, $filter, Private, Notifier) { - const aggTypes = Private(require('ui/agg_types/index')); + const aggTypes = Private(AggTypesIndexProvider); const notify = new Notifier({ location: 'visAggGroup' diff --git a/src/plugins/kibana/public/visualize/editor/agg_add.js b/src/plugins/kibana/public/visualize/editor/agg_add.js index dffb16127f2c64..841a04bab4a894 100644 --- a/src/plugins/kibana/public/visualize/editor/agg_add.js +++ b/src/plugins/kibana/public/visualize/editor/agg_add.js @@ -1,8 +1,10 @@ +import VisAggConfigProvider from 'ui/Vis/AggConfig'; + define(function (require) { require('ui/modules') .get('kibana') .directive('visEditorAggAdd', function (Private) { - const AggConfig = Private(require('ui/Vis/AggConfig')); + const AggConfig = Private(VisAggConfigProvider); return { restrict: 'E', diff --git a/src/plugins/kibana/public/visualize/editor/agg_params.js b/src/plugins/kibana/public/visualize/editor/agg_params.js index ff88f36c248c02..2439ff32e52f28 100644 --- a/src/plugins/kibana/public/visualize/editor/agg_params.js +++ b/src/plugins/kibana/public/visualize/editor/agg_params.js @@ -5,12 +5,13 @@ import aggSelectHtml from 'plugins/kibana/visualize/editor/agg_select.html'; import advancedToggleHtml from 'plugins/kibana/visualize/editor/advanced_toggle.html'; import 'ui/filters/match_any'; import 'plugins/kibana/visualize/editor/agg_param'; +import AggTypesIndexProvider from 'ui/agg_types/index'; define(function (require) { require('ui/modules') .get('app/visualize') .directive('visEditorAggParams', function ($compile, $parse, Private, Notifier, $filter) { - const aggTypes = Private(require('ui/agg_types/index')); + const aggTypes = Private(AggTypesIndexProvider); const notify = new Notifier({ location: 'visAggGroup' diff --git a/src/plugins/kibana/public/visualize/editor/editor.js b/src/plugins/kibana/public/visualize/editor/editor.js index 3205c50a2f9ec8..799c9b93b35982 100644 --- a/src/plugins/kibana/public/visualize/editor/editor.js +++ b/src/plugins/kibana/public/visualize/editor/editor.js @@ -9,6 +9,11 @@ import 'ui/share'; import angular from 'angular'; import ConfigTemplate from 'ui/ConfigTemplate'; import Notifier from 'ui/notify/notifier'; +import RegistryVisTypesProvider from 'ui/registry/vis_types'; +import DocTitleProvider from 'ui/doc_title'; +import UtilsBrushEventProvider from 'ui/utils/brush_event'; +import FilterBarQueryFilterProvider from 'ui/filter_bar/query_filter'; +import FilterBarFilterBarClickHandlerProvider from 'ui/filter_bar/filter_bar_click_handler'; define(function (require) { @@ -17,7 +22,7 @@ define(function (require) { template: require('plugins/kibana/visualize/editor/editor.html'), resolve: { savedVis: function (savedVisualizations, courier, $route, Private) { - const visTypes = Private(require('ui/registry/vis_types')); + const visTypes = Private(RegistryVisTypesProvider); const visType = _.find(visTypes, {name: $route.current.params.type}); if (visType.requiresSearch && !$route.current.params.indexPattern && !$route.current.params.savedSearchId) { throw new Error('You must provide either an indexPattern or a savedSearchId'); @@ -52,10 +57,10 @@ define(function (require) { ]) .controller('VisEditor', function ($scope, $route, timefilter, AppState, $location, kbnUrl, $timeout, courier, Private, Promise) { - const docTitle = Private(require('ui/doc_title')); - const brushEvent = Private(require('ui/utils/brush_event')); - const queryFilter = Private(require('ui/filter_bar/query_filter')); - const filterBarClickHandler = Private(require('ui/filter_bar/filter_bar_click_handler')); + const docTitle = Private(DocTitleProvider); + const brushEvent = Private(UtilsBrushEventProvider); + const queryFilter = Private(FilterBarQueryFilterProvider); + const filterBarClickHandler = Private(FilterBarFilterBarClickHandlerProvider); const notify = new Notifier({ location: 'Visualization Editor' diff --git a/src/plugins/kibana/public/visualize/editor/nesting_indicator.js b/src/plugins/kibana/public/visualize/editor/nesting_indicator.js index fab1f18ccacc24..01863706507783 100644 --- a/src/plugins/kibana/public/visualize/editor/nesting_indicator.js +++ b/src/plugins/kibana/public/visualize/editor/nesting_indicator.js @@ -1,10 +1,11 @@ import _ from 'lodash'; import $ from 'jquery'; +import VislibComponentsColorColorPaletteProvider from 'ui/vislib/components/color/color_palette'; define(function (require) { require('ui/modules') .get('kibana') .directive('nestingIndicator', function ($rootScope, $parse, Private) { - const getColors = Private(require('ui/vislib/components/color/color_palette')); + const getColors = Private(VislibComponentsColorColorPaletteProvider); return { restrict: 'E', diff --git a/src/plugins/kibana/public/visualize/saved_visualizations/_saved_vis.js b/src/plugins/kibana/public/visualize/saved_visualizations/_saved_vis.js index 1f87b09c3c6fa4..38e841e1f5c698 100644 --- a/src/plugins/kibana/public/visualize/saved_visualizations/_saved_vis.js +++ b/src/plugins/kibana/public/visualize/saved_visualizations/_saved_vis.js @@ -1,9 +1,10 @@ import _ from 'lodash'; +import VisProvider from 'ui/Vis'; define(function (require) { require('ui/modules') .get('app/visualize') .factory('SavedVis', function (config, $injector, courier, Promise, savedSearches, Private, Notifier) { - const Vis = Private(require('ui/Vis')); + const Vis = Private(VisProvider); const notify = new Notifier({ location: 'SavedVis' diff --git a/src/plugins/kibana/public/visualize/saved_visualizations/saved_visualizations.js b/src/plugins/kibana/public/visualize/saved_visualizations/saved_visualizations.js index 52263fb48ac513..25bacdd12a50f2 100644 --- a/src/plugins/kibana/public/visualize/saved_visualizations/saved_visualizations.js +++ b/src/plugins/kibana/public/visualize/saved_visualizations/saved_visualizations.js @@ -1,6 +1,7 @@ import _ from 'lodash'; import Scanner from 'ui/utils/scanner'; import 'plugins/kibana/visualize/saved_visualizations/_saved_vis'; +import RegistryVisTypesProvider from 'ui/registry/vis_types'; define(function (require) { const app = require('ui/modules').get('app/visualize'); @@ -13,7 +14,7 @@ define(function (require) { }); app.service('savedVisualizations', function (Promise, es, kbnIndex, SavedVis, Private, Notifier, kbnUrl) { - const visTypes = Private(require('ui/registry/vis_types')); + const visTypes = Private(RegistryVisTypesProvider); const scanner = new Scanner(es, { index: kbnIndex, diff --git a/src/plugins/kibana/public/visualize/wizard/wizard.js b/src/plugins/kibana/public/visualize/wizard/wizard.js index a6ede3fbba2d49..77e4373e2a9269 100644 --- a/src/plugins/kibana/public/visualize/wizard/wizard.js +++ b/src/plugins/kibana/public/visualize/wizard/wizard.js @@ -3,6 +3,7 @@ import 'plugins/kibana/visualize/saved_visualizations/saved_visualizations'; import 'ui/directives/saved_object_finder'; import 'plugins/kibana/discover/saved_searches/saved_searches'; import routes from 'ui/routes'; +import RegistryVisTypesProvider from 'ui/registry/vis_types'; define(function (require) { @@ -22,7 +23,7 @@ define(function (require) { module.controller('VisualizeWizardStep1', function ($scope, $route, $location, timefilter, Private) { timefilter.enabled = false; - $scope.visTypes = Private(require('ui/registry/vis_types')); + $scope.visTypes = Private(RegistryVisTypesProvider); $scope.visTypeUrl = function (visType) { if (!visType.requiresSearch) return '#/visualize/create?type=' + encodeURIComponent(visType.name); else return '#/visualize/step/2?type=' + encodeURIComponent(visType.name); diff --git a/src/plugins/markdown_vis/public/markdown_vis.js b/src/plugins/markdown_vis/public/markdown_vis.js index 538b5dd146e15c..588a16c4ce1532 100644 --- a/src/plugins/markdown_vis/public/markdown_vis.js +++ b/src/plugins/markdown_vis/public/markdown_vis.js @@ -1,5 +1,6 @@ import 'plugins/markdown_vis/markdown_vis.less'; import 'plugins/markdown_vis/markdown_vis_controller'; +import TemplateVisTypeTemplateVisTypeProvider from 'ui/template_vis_type/TemplateVisType'; define(function (require) { // we need to load the css ourselves @@ -9,7 +10,7 @@ define(function (require) { require('ui/registry/vis_types').register(MarkdownVisProvider); function MarkdownVisProvider(Private) { - const TemplateVisType = Private(require('ui/template_vis_type/TemplateVisType')); + const TemplateVisType = Private(TemplateVisTypeTemplateVisTypeProvider); // return the visType object, which kibana will use to display and configure new // Vis object of this type. diff --git a/src/plugins/metric_vis/public/metric_vis.js b/src/plugins/metric_vis/public/metric_vis.js index 5b4e2ca71c1857..38d9a27fe5956c 100644 --- a/src/plugins/metric_vis/public/metric_vis.js +++ b/src/plugins/metric_vis/public/metric_vis.js @@ -1,5 +1,7 @@ import 'plugins/metric_vis/metric_vis.less'; import 'plugins/metric_vis/metric_vis_controller'; +import TemplateVisTypeTemplateVisTypeProvider from 'ui/template_vis_type/TemplateVisType'; +import VisSchemasProvider from 'ui/Vis/Schemas'; define(function (require) { // we need to load the css ourselves @@ -9,8 +11,8 @@ define(function (require) { require('ui/registry/vis_types').register(MetricVisProvider); function MetricVisProvider(Private) { - const TemplateVisType = Private(require('ui/template_vis_type/TemplateVisType')); - const Schemas = Private(require('ui/Vis/Schemas')); + const TemplateVisType = Private(TemplateVisTypeTemplateVisTypeProvider); + const Schemas = Private(VisSchemasProvider); // return the visType object, which kibana will use to display and configure new // Vis object of this type. diff --git a/src/plugins/metric_vis/public/metric_vis_controller.js b/src/plugins/metric_vis/public/metric_vis_controller.js index 6387c83ab9c4ec..7d57cf1ec1a7a8 100644 --- a/src/plugins/metric_vis/public/metric_vis_controller.js +++ b/src/plugins/metric_vis/public/metric_vis_controller.js @@ -1,11 +1,12 @@ import _ from 'lodash'; +import AggResponseTabifyTabifyProvider from 'ui/agg_response/tabify/tabify'; define(function (require) { // get the kibana/metric_vis module, and make sure that it requires the "kibana" module if it // didn't already const module = require('ui/modules').get('kibana/metric_vis', ['kibana']); module.controller('KbnMetricVisController', function ($scope, Private) { - const tabifyAggResponse = Private(require('ui/agg_response/tabify/tabify')); + const tabifyAggResponse = Private(AggResponseTabifyTabifyProvider); const metrics = $scope.metrics = []; diff --git a/src/plugins/spyModes/public/tableSpyMode.js b/src/plugins/spyModes/public/tableSpyMode.js index aaba19098c5c8a..1a528b1ed46708 100644 --- a/src/plugins/spyModes/public/tableSpyMode.js +++ b/src/plugins/spyModes/public/tableSpyMode.js @@ -1,9 +1,10 @@ import { saveAs } from '@spalger/filesaver'; import _ from 'lodash'; import 'ui/agg_table'; +import AggResponseTabifyTabifyProvider from 'ui/agg_response/tabify/tabify'; define(function (require) { function VisSpyTableProvider(Notifier, $filter, $rootScope, config, Private) { - const tabifyAggResponse = Private(require('ui/agg_response/tabify/tabify')); + const tabifyAggResponse = Private(AggResponseTabifyTabifyProvider); const PER_PAGE_DEFAULT = 10; diff --git a/src/plugins/table_vis/public/__tests__/_table_vis.js b/src/plugins/table_vis/public/__tests__/_table_vis.js index 06b0f578d0c7e4..de4ba73f1d4ad0 100644 --- a/src/plugins/table_vis/public/__tests__/_table_vis.js +++ b/src/plugins/table_vis/public/__tests__/_table_vis.js @@ -3,6 +3,9 @@ import _ from 'lodash'; import expect from 'expect.js'; import ngMock from 'ngMock'; import sinon from 'auto-release-sinon'; +import AggResponseTabifyTableGroupProvider from 'ui/agg_response/tabify/_table_group'; +import VisProvider from 'ui/Vis'; +import FixturesStubbedLogstashIndexPatternProvider from 'fixtures/stubbed_logstash_index_pattern'; describe('Integration', function () { let $rootScope; @@ -19,9 +22,9 @@ describe('Integration', function () { $rootScope = $injector.get('$rootScope'); $compile = $injector.get('$compile'); fixtures = require('fixtures/fake_hierarchical_data'); - TableGroup = Private(require('ui/agg_response/tabify/_table_group')); - Vis = Private(require('ui/Vis')); - indexPattern = Private(require('fixtures/stubbed_logstash_index_pattern')); + TableGroup = Private(AggResponseTabifyTableGroupProvider); + Vis = Private(VisProvider); + indexPattern = Private(FixturesStubbedLogstashIndexPatternProvider); })); // basically a parameterized beforeEach diff --git a/src/plugins/table_vis/public/__tests__/_table_vis_controller.js b/src/plugins/table_vis/public/__tests__/_table_vis_controller.js index 013962ddaa1faa..a0bee84cc43a83 100644 --- a/src/plugins/table_vis/public/__tests__/_table_vis_controller.js +++ b/src/plugins/table_vis/public/__tests__/_table_vis_controller.js @@ -4,6 +4,9 @@ import expect from 'expect.js'; import ngMock from 'ngMock'; import sinon from 'auto-release-sinon'; import tabifyPm from 'ui/agg_response/tabify/tabify'; +import AggResponseTabifyTableGroupProvider from 'ui/agg_response/tabify/_table_group'; +import VisProvider from 'ui/Vis'; +import FixturesStubbedLogstashIndexPatternProvider from 'fixtures/stubbed_logstash_index_pattern'; describe('Controller', function () { let $rootScope; @@ -21,13 +24,13 @@ describe('Controller', function () { $rootScope = $injector.get('$rootScope'); $compile = $injector.get('$compile'); fixtures = require('fixtures/fake_hierarchical_data'); - TableGroup = Private(require('ui/agg_response/tabify/_table_group')); - Vis = Private(require('ui/Vis')); + TableGroup = Private(AggResponseTabifyTableGroupProvider); + Vis = Private(VisProvider); })); function OneRangeVis(params) { return new Vis( - Private(require('fixtures/stubbed_logstash_index_pattern')), + Private(FixturesStubbedLogstashIndexPatternProvider), { type: 'table', params: params || {}, diff --git a/src/plugins/table_vis/public/table_vis.js b/src/plugins/table_vis/public/table_vis.js index 0efe20d95d96f7..f0ecbf69ae8acc 100644 --- a/src/plugins/table_vis/public/table_vis.js +++ b/src/plugins/table_vis/public/table_vis.js @@ -3,6 +3,8 @@ import 'plugins/table_vis/table_vis_controller'; import 'plugins/table_vis/table_vis_params'; import 'ui/agg_table'; import 'ui/agg_table/agg_table_group'; +import TemplateVisTypeTemplateVisTypeProvider from 'ui/template_vis_type/TemplateVisType'; +import VisSchemasProvider from 'ui/Vis/Schemas'; define(function (require) { // we need to load the css ourselves @@ -17,8 +19,8 @@ define(function (require) { // define the TableVisType function TableVisTypeProvider(Private) { - const TemplateVisType = Private(require('ui/template_vis_type/TemplateVisType')); - const Schemas = Private(require('ui/Vis/Schemas')); + const TemplateVisType = Private(TemplateVisTypeTemplateVisTypeProvider); + const Schemas = Private(VisSchemasProvider); // define the TableVisController which is used in the template // by angular's ng-controller directive diff --git a/src/plugins/table_vis/public/table_vis_controller.js b/src/plugins/table_vis/public/table_vis_controller.js index 7f398cad107ebc..8b3540b9ead340 100644 --- a/src/plugins/table_vis/public/table_vis_controller.js +++ b/src/plugins/table_vis/public/table_vis_controller.js @@ -1,3 +1,5 @@ +import AggResponseTabifyTabifyProvider from 'ui/agg_response/tabify/tabify'; + define(function (require) { // get the kibana/table_vis module, and make sure that it requires the "kibana" module if it // didn't already @@ -6,7 +8,7 @@ define(function (require) { // add a controller to tha module, which will transform the esResponse into a // tabular format that we can pass to the table directive module.controller('KbnTableVisController', function ($scope, Private) { - const tabifyAggResponse = Private(require('ui/agg_response/tabify/tabify')); + const tabifyAggResponse = Private(AggResponseTabifyTabifyProvider); $scope.$watch('esResponse', function (resp, oldResp) { let tableGroups = $scope.tableGroups = null; diff --git a/src/testUtils/stub_index_pattern.js b/src/testUtils/stub_index_pattern.js index bd5654d0455711..17960536ce2340 100644 --- a/src/testUtils/stub_index_pattern.js +++ b/src/testUtils/stub_index_pattern.js @@ -5,12 +5,15 @@ import IndexedArray from 'ui/IndexedArray'; import IndexPattern from 'ui/index_patterns/_index_pattern'; import formatHit from 'ui/index_patterns/_format_hit'; import getComputedFields from 'ui/index_patterns/_get_computed_fields'; +import RegistryFieldFormatsProvider from 'ui/registry/field_formats'; +import IndexPatternsFlattenHitProvider from 'ui/index_patterns/_flatten_hit'; +import IndexPatternsFieldProvider from 'ui/index_patterns/_field'; define(function (require) { return function (Private) { - var fieldFormats = Private(require('ui/registry/field_formats')); - var flattenHit = Private(require('ui/index_patterns/_flatten_hit')); + var fieldFormats = Private(RegistryFieldFormatsProvider); + var flattenHit = Private(IndexPatternsFlattenHitProvider); - var Field = Private(require('ui/index_patterns/_field')); + var Field = Private(IndexPatternsFieldProvider); function StubIndexPattern(pattern, timeField, fields) { this.id = pattern; diff --git a/src/ui/public/Vis/AggConfig.js b/src/ui/public/Vis/AggConfig.js index 4f55e9e16dd390..98bdae8ffb9680 100644 --- a/src/ui/public/Vis/AggConfig.js +++ b/src/ui/public/Vis/AggConfig.js @@ -1,7 +1,8 @@ import _ from 'lodash'; +import RegistryFieldFormatsProvider from 'ui/registry/field_formats'; define(function (require) { return function AggConfigFactory(Private, fieldTypeFilter) { - var fieldFormats = Private(require('ui/registry/field_formats')); + var fieldFormats = Private(RegistryFieldFormatsProvider); function AggConfig(vis, opts) { var self = this; diff --git a/src/ui/public/Vis/AggConfigs.js b/src/ui/public/Vis/AggConfigs.js index 8e8ec2bf212155..9e1fb3d127ccbe 100644 --- a/src/ui/public/Vis/AggConfigs.js +++ b/src/ui/public/Vis/AggConfigs.js @@ -1,10 +1,12 @@ import _ from 'lodash'; import IndexedArray from 'ui/IndexedArray'; +import VisAggConfigProvider from 'ui/Vis/AggConfig'; +import AggTypesIndexProvider from 'ui/agg_types/index'; define(function (require) { return function AggConfigsFactory(Private) { - var AggConfig = Private(require('ui/Vis/AggConfig')); + var AggConfig = Private(VisAggConfigProvider); - AggConfig.aggTypes = Private(require('ui/agg_types/index')); + AggConfig.aggTypes = Private(AggTypesIndexProvider); _.class(AggConfigs).inherits(IndexedArray); function AggConfigs(vis, configStates) { diff --git a/src/ui/public/Vis/Schemas.js b/src/ui/public/Vis/Schemas.js index 2eccf8e462ab79..5ab1075534bc0d 100644 --- a/src/ui/public/Vis/Schemas.js +++ b/src/ui/public/Vis/Schemas.js @@ -1,8 +1,9 @@ import _ from 'lodash'; import IndexedArray from 'ui/IndexedArray'; +import AggTypesAggParamsProvider from 'ui/agg_types/AggParams'; define(function (require) { return function VisTypeSchemasFactory(Private) { - var AggParams = Private(require('ui/agg_types/AggParams')); + var AggParams = Private(AggTypesAggParamsProvider); function Schemas(schemas) { var self = this; diff --git a/src/ui/public/Vis/Vis.js b/src/ui/public/Vis/Vis.js index 41ee3fe8970d97..30c2d157480329 100644 --- a/src/ui/public/Vis/Vis.js +++ b/src/ui/public/Vis/Vis.js @@ -1,9 +1,12 @@ import _ from 'lodash'; +import AggTypesIndexProvider from 'ui/agg_types/index'; +import RegistryVisTypesProvider from 'ui/registry/vis_types'; +import VisAggConfigsProvider from 'ui/Vis/AggConfigs'; define(function (require) { return function VisFactory(Notifier, Private) { - var aggTypes = Private(require('ui/agg_types/index')); - var visTypes = Private(require('ui/registry/vis_types')); - var AggConfigs = Private(require('ui/Vis/AggConfigs')); + var aggTypes = Private(AggTypesIndexProvider); + var visTypes = Private(RegistryVisTypesProvider); + var AggConfigs = Private(VisAggConfigsProvider); var notify = new Notifier({ location: 'Vis' diff --git a/src/ui/public/Vis/VisType.js b/src/ui/public/Vis/VisType.js index 0c995bd108b14b..bb2148d96629e9 100644 --- a/src/ui/public/Vis/VisType.js +++ b/src/ui/public/Vis/VisType.js @@ -1,6 +1,8 @@ +import VisSchemasProvider from 'ui/Vis/Schemas'; + define(function (require) { return function VisTypeFactory(Private) { - var VisTypeSchemas = Private(require('ui/Vis/Schemas')); + var VisTypeSchemas = Private(VisSchemasProvider); function VisType(opts) { opts = opts || {}; diff --git a/src/ui/public/Vis/__tests__/_AggConfig.js b/src/ui/public/Vis/__tests__/_AggConfig.js index 95dd8a82a60ae7..1922242338ad89 100644 --- a/src/ui/public/Vis/__tests__/_AggConfig.js +++ b/src/ui/public/Vis/__tests__/_AggConfig.js @@ -1,6 +1,11 @@ import sinon from 'auto-release-sinon'; import expect from 'expect.js'; import ngMock from 'ngMock'; +import VisProvider from 'ui/Vis'; +import AggTypesAggTypeProvider from 'ui/agg_types/AggType'; +import VisAggConfigProvider from 'ui/Vis/AggConfig'; +import FixturesStubbedLogstashIndexPatternProvider from 'fixtures/stubbed_logstash_index_pattern'; +import RegistryFieldFormatsProvider from 'ui/registry/field_formats'; describe('AggConfig', function () { var Vis; @@ -11,11 +16,11 @@ describe('AggConfig', function () { beforeEach(ngMock.module('kibana')); beforeEach(ngMock.inject(function (Private) { - Vis = Private(require('ui/Vis')); - AggType = Private(require('ui/agg_types/AggType')); - AggConfig = Private(require('ui/Vis/AggConfig')); - indexPattern = Private(require('fixtures/stubbed_logstash_index_pattern')); - fieldFormat = Private(require('ui/registry/field_formats')); + Vis = Private(VisProvider); + AggType = Private(AggTypesAggTypeProvider); + AggConfig = Private(VisAggConfigProvider); + indexPattern = Private(FixturesStubbedLogstashIndexPatternProvider); + fieldFormat = Private(RegistryFieldFormatsProvider); })); describe('#toDsl', function () { diff --git a/src/ui/public/Vis/__tests__/_AggConfigResult.js b/src/ui/public/Vis/__tests__/_AggConfigResult.js index f0887ed8f36894..d63c19fab25d64 100644 --- a/src/ui/public/Vis/__tests__/_AggConfigResult.js +++ b/src/ui/public/Vis/__tests__/_AggConfigResult.js @@ -2,6 +2,9 @@ import _ from 'lodash'; import AggConfigResult from 'ui/Vis/AggConfigResult'; import expect from 'expect.js'; import ngMock from 'ngMock'; +import VisProvider from 'ui/Vis'; +import VisAggConfigProvider from 'ui/Vis/AggConfig'; +import FixturesStubbedLogstashIndexPatternProvider from 'fixtures/stubbed_logstash_index_pattern'; describe('AggConfigResult', function () { var AggConfig; @@ -10,9 +13,9 @@ describe('AggConfigResult', function () { beforeEach(ngMock.module('kibana')); beforeEach(ngMock.inject(function (Private) { - Vis = Private(require('ui/Vis')); - AggConfig = Private(require('ui/Vis/AggConfig')); - indexPattern = Private(require('fixtures/stubbed_logstash_index_pattern')); + Vis = Private(VisProvider); + AggConfig = Private(VisAggConfigProvider); + indexPattern = Private(FixturesStubbedLogstashIndexPatternProvider); })); describe('initialization', function () { diff --git a/src/ui/public/Vis/__tests__/_AggConfigs.js b/src/ui/public/Vis/__tests__/_AggConfigs.js index 3900c5323cf9eb..3bb2e6c576cf5a 100644 --- a/src/ui/public/Vis/__tests__/_AggConfigs.js +++ b/src/ui/public/Vis/__tests__/_AggConfigs.js @@ -3,6 +3,11 @@ import sinon from 'auto-release-sinon'; import expect from 'expect.js'; import ngMock from 'ngMock'; import RealAggConfigPM from 'ui/Vis/AggConfig'; +import VisProvider from 'ui/Vis'; +import VisAggConfigProvider from 'ui/Vis/AggConfig'; +import VisAggConfigsProvider from 'ui/Vis/AggConfigs'; +import FixturesStubbedLogstashIndexPatternProvider from 'fixtures/stubbed_logstash_index_pattern'; +import VisSchemasProvider from 'ui/Vis/Schemas'; describe('AggConfigs', function () { var Vis; @@ -26,12 +31,12 @@ describe('AggConfigs', function () { Private.stub(RealAggConfigPM, spy); // load main deps - Vis = Private(require('ui/Vis')); - SpiedAggConfig = Private(require('ui/Vis/AggConfig')); - AggConfigs = Private(require('ui/Vis/AggConfigs')); + Vis = Private(VisProvider); + SpiedAggConfig = Private(VisAggConfigProvider); + AggConfigs = Private(VisAggConfigsProvider); IndexedArray = require('ui/IndexedArray'); - indexPattern = Private(require('fixtures/stubbed_logstash_index_pattern')); - Schemas = Private(require('ui/Vis/Schemas')); + indexPattern = Private(FixturesStubbedLogstashIndexPatternProvider); + Schemas = Private(VisSchemasProvider); })); it('extends IndexedArray', function () { diff --git a/src/ui/public/Vis/__tests__/_Renderbot.js b/src/ui/public/Vis/__tests__/_Renderbot.js index 5d19ea4b6599ae..e92317af6159fc 100644 --- a/src/ui/public/Vis/__tests__/_Renderbot.js +++ b/src/ui/public/Vis/__tests__/_Renderbot.js @@ -1,5 +1,6 @@ import expect from 'expect.js'; import ngMock from 'ngMock'; +import VisRenderbotProvider from 'ui/Vis/Renderbot'; describe('renderbot', function () { var Renderbot; @@ -7,7 +8,7 @@ describe('renderbot', function () { ngMock.module('kibana'); ngMock.inject(function (Private) { - Renderbot = Private(require('ui/Vis/Renderbot')); + Renderbot = Private(VisRenderbotProvider); }); } diff --git a/src/ui/public/Vis/__tests__/_Vis.js b/src/ui/public/Vis/__tests__/_Vis.js index 7507b1700b8016..ce243f81ebda8b 100644 --- a/src/ui/public/Vis/__tests__/_Vis.js +++ b/src/ui/public/Vis/__tests__/_Vis.js @@ -1,6 +1,9 @@ import _ from 'lodash'; import ngMock from 'ngMock'; import expect from 'expect.js'; +import VisProvider from 'ui/Vis'; +import FixturesStubbedLogstashIndexPatternProvider from 'fixtures/stubbed_logstash_index_pattern'; +import RegistryVisTypesProvider from 'ui/registry/vis_types'; describe('Vis Class', function () { @@ -22,9 +25,9 @@ describe('Vis Class', function () { beforeEach(ngMock.module('kibana')); beforeEach(ngMock.inject(function (Private) { - Vis = Private(require('ui/Vis')); - indexPattern = Private(require('fixtures/stubbed_logstash_index_pattern')); - visTypes = Private(require('ui/registry/vis_types')); + Vis = Private(VisProvider); + indexPattern = Private(FixturesStubbedLogstashIndexPatternProvider); + visTypes = Private(RegistryVisTypesProvider); })); beforeEach(function () { diff --git a/src/ui/public/agg_response/geo_json/__tests__/geo_json.js b/src/ui/public/agg_response/geo_json/__tests__/geo_json.js index 51b13ff8821d82..914f0f2036f1ab 100644 --- a/src/ui/public/agg_response/geo_json/__tests__/geo_json.js +++ b/src/ui/public/agg_response/geo_json/__tests__/geo_json.js @@ -2,6 +2,11 @@ import _ from 'lodash'; import expect from 'expect.js'; import ngMock from 'ngMock'; +import VisProvider from 'ui/Vis'; +import FixturesStubbedLogstashIndexPatternProvider from 'fixtures/stubbed_logstash_index_pattern'; +import FixturesAggRespGeohashGridProvider from 'fixtures/agg_resp/geohash_grid'; +import AggResponseTabifyTabifyProvider from 'ui/agg_response/tabify/tabify'; +import AggResponseGeoJsonGeoJsonProvider from 'ui/agg_response/geo_json/geo_json'; describe('GeoJson Agg Response Converter', function () { var vis; @@ -12,12 +17,12 @@ describe('GeoJson Agg Response Converter', function () { beforeEach(ngMock.module('kibana')); beforeEach(ngMock.inject(function (Private) { - var Vis = Private(require('ui/Vis')); - var indexPattern = Private(require('fixtures/stubbed_logstash_index_pattern')); + var Vis = Private(VisProvider); + var indexPattern = Private(FixturesStubbedLogstashIndexPatternProvider); - esResponse = Private(require('fixtures/agg_resp/geohash_grid')); - tabify = Private(require('ui/agg_response/tabify/tabify')); - convert = Private(require('ui/agg_response/geo_json/geo_json')); + esResponse = Private(FixturesAggRespGeohashGridProvider); + tabify = Private(AggResponseTabifyTabifyProvider); + convert = Private(AggResponseGeoJsonGeoJsonProvider); vis = new Vis(indexPattern, { type: 'tile_map', diff --git a/src/ui/public/agg_response/geo_json/_tooltip_formatter.js b/src/ui/public/agg_response/geo_json/_tooltip_formatter.js index 70e6de1dac1479..4cd5d387f369dc 100644 --- a/src/ui/public/agg_response/geo_json/_tooltip_formatter.js +++ b/src/ui/public/agg_response/geo_json/_tooltip_formatter.js @@ -1,9 +1,10 @@ import $ from 'jquery'; import _ from 'lodash'; +import RegistryFieldFormatsProvider from 'ui/registry/field_formats'; define(function (require) { return function TileMapTooltipFormatter($compile, $rootScope, Private) { - var fieldFormats = Private(require('ui/registry/field_formats')); + var fieldFormats = Private(RegistryFieldFormatsProvider); var $tooltipScope = $rootScope.$new(); var $el = $('
').html(require('ui/agg_response/geo_json/_tooltip.html')); $compile($el)($tooltipScope); diff --git a/src/ui/public/agg_response/geo_json/geo_json.js b/src/ui/public/agg_response/geo_json/geo_json.js index 55cf951a87dfe8..1d26d9b123bd19 100644 --- a/src/ui/public/agg_response/geo_json/geo_json.js +++ b/src/ui/public/agg_response/geo_json/geo_json.js @@ -1,9 +1,10 @@ import _ from 'lodash'; import rowsToFeatures from 'ui/agg_response/geo_json/rowsToFeatures'; +import AggResponseGeoJsonTooltipFormatterProvider from 'ui/agg_response/geo_json/_tooltip_formatter'; define(function (require) { return function TileMapConverterFn(Private, timefilter, $compile, $rootScope) { - var tooltipFormatter = Private(require('ui/agg_response/geo_json/_tooltip_formatter')); + var tooltipFormatter = Private(AggResponseGeoJsonTooltipFormatterProvider); return function (vis, table) { diff --git a/src/ui/public/agg_response/hierarchical/__tests__/build_hierarchical_data.js b/src/ui/public/agg_response/hierarchical/__tests__/build_hierarchical_data.js index 7757c200da1db6..dc444ce6500408 100644 --- a/src/ui/public/agg_response/hierarchical/__tests__/build_hierarchical_data.js +++ b/src/ui/public/agg_response/hierarchical/__tests__/build_hierarchical_data.js @@ -4,6 +4,10 @@ import fixtures from 'fixtures/fake_hierarchical_data'; import sinon from 'auto-release-sinon'; import expect from 'expect.js'; import ngMock from 'ngMock'; +import VisProvider from 'ui/Vis'; +import VisAggConfigsProvider from 'ui/Vis/AggConfigs'; +import FixturesStubbedLogstashIndexPatternProvider from 'fixtures/stubbed_logstash_index_pattern'; +import AggResponseHierarchicalBuildHierarchicalDataProvider from 'ui/agg_response/hierarchical/build_hierarchical_data'; var Vis; var Notifier; @@ -19,10 +23,10 @@ describe('buildHierarchicalData', function () { Notifier = $injector.get('Notifier'); sinon.stub(Notifier.prototype, 'error'); - Vis = Private(require('ui/Vis')); - AggConfigs = Private(require('ui/Vis/AggConfigs')); - indexPattern = Private(require('fixtures/stubbed_logstash_index_pattern')); - buildHierarchicalData = Private(require('ui/agg_response/hierarchical/build_hierarchical_data')); + Vis = Private(VisProvider); + AggConfigs = Private(VisAggConfigsProvider); + indexPattern = Private(FixturesStubbedLogstashIndexPatternProvider); + buildHierarchicalData = Private(AggResponseHierarchicalBuildHierarchicalDataProvider); })); diff --git a/src/ui/public/agg_response/hierarchical/__tests__/create_raw_data.js b/src/ui/public/agg_response/hierarchical/__tests__/create_raw_data.js index 7df28ff7ff9a01..fcf386cc73109c 100644 --- a/src/ui/public/agg_response/hierarchical/__tests__/create_raw_data.js +++ b/src/ui/public/agg_response/hierarchical/__tests__/create_raw_data.js @@ -5,6 +5,9 @@ import createRawData from 'ui/agg_response/hierarchical/_create_raw_data'; import arrayToLinkedList from 'ui/agg_response/hierarchical/_array_to_linked_list'; import expect from 'expect.js'; import ngMock from 'ngMock'; +import VisProvider from 'ui/Vis'; +import VisAggConfigsProvider from 'ui/Vis/AggConfigs'; +import FixturesStubbedLogstashIndexPatternProvider from 'fixtures/stubbed_logstash_index_pattern'; var AggConfigs; var Vis; @@ -18,9 +21,9 @@ describe('buildHierarchicalData()', function () { beforeEach(ngMock.module('kibana')); beforeEach(ngMock.inject(function (Private) { - Vis = Private(require('ui/Vis')); - AggConfigs = Private(require('ui/Vis/AggConfigs')); - indexPattern = Private(require('fixtures/stubbed_logstash_index_pattern')); + Vis = Private(VisProvider); + AggConfigs = Private(VisAggConfigsProvider); + indexPattern = Private(FixturesStubbedLogstashIndexPatternProvider); })); beforeEach(function () { diff --git a/src/ui/public/agg_response/hierarchical/__tests__/transform_aggregation.js b/src/ui/public/agg_response/hierarchical/__tests__/transform_aggregation.js index 7d76b16561858c..3e524f7c7517b4 100644 --- a/src/ui/public/agg_response/hierarchical/__tests__/transform_aggregation.js +++ b/src/ui/public/agg_response/hierarchical/__tests__/transform_aggregation.js @@ -1,6 +1,7 @@ import _ from 'lodash'; import expect from 'expect.js'; import ngMock from 'ngMock'; +import AggResponseHierarchicalTransformAggregationProvider from 'ui/agg_response/hierarchical/_transform_aggregation'; describe('buildHierarchicalData()', function () { describe('transformAggregation()', function () { @@ -9,7 +10,7 @@ describe('buildHierarchicalData()', function () { beforeEach(ngMock.module('kibana')); beforeEach(ngMock.inject(function (Private) { - transform = Private(require('ui/agg_response/hierarchical/_transform_aggregation')); + transform = Private(AggResponseHierarchicalTransformAggregationProvider); })); beforeEach(function () { diff --git a/src/ui/public/agg_response/hierarchical/_build_split.js b/src/ui/public/agg_response/hierarchical/_build_split.js index 6b28a965f91cc0..e43fdeab2b5fd0 100644 --- a/src/ui/public/agg_response/hierarchical/_build_split.js +++ b/src/ui/public/agg_response/hierarchical/_build_split.js @@ -1,7 +1,8 @@ import collectKeys from 'ui/agg_response/hierarchical/_collect_keys'; +import AggResponseHierarchicalTransformAggregationProvider from 'ui/agg_response/hierarchical/_transform_aggregation'; define(function (require) { return function biuldSplitProvider(Private) { - var transformer = Private(require('ui/agg_response/hierarchical/_transform_aggregation')); + var transformer = Private(AggResponseHierarchicalTransformAggregationProvider); return function (agg, metric, aggData) { // Ceate the split structure var split = { label: '', slices: { children: [] } }; diff --git a/src/ui/public/agg_response/hierarchical/build_hierarchical_data.js b/src/ui/public/agg_response/hierarchical/build_hierarchical_data.js index 8c013938974889..4a0c33cb442e04 100644 --- a/src/ui/public/agg_response/hierarchical/build_hierarchical_data.js +++ b/src/ui/public/agg_response/hierarchical/build_hierarchical_data.js @@ -3,10 +3,12 @@ import extractBuckets from 'ui/agg_response/hierarchical/_extract_buckets'; import createRawData from 'ui/agg_response/hierarchical/_create_raw_data'; import arrayToLinkedList from 'ui/agg_response/hierarchical/_array_to_linked_list'; import AggConfigResult from 'ui/Vis/AggConfigResult'; +import AggResponseHierarchicalBuildSplitProvider from 'ui/agg_response/hierarchical/_build_split'; +import AggResponseHierarchicalHierarchicalTooltipFormatterProvider from 'ui/agg_response/hierarchical/_hierarchical_tooltip_formatter'; define(function (require) { return function buildHierarchicalDataProvider(Private, Notifier) { - var buildSplit = Private(require('ui/agg_response/hierarchical/_build_split')); - var tooltipFormatter = Private(require('ui/agg_response/hierarchical/_hierarchical_tooltip_formatter')); + var buildSplit = Private(AggResponseHierarchicalBuildSplitProvider); + var tooltipFormatter = Private(AggResponseHierarchicalHierarchicalTooltipFormatterProvider); var notify = new Notifier({ diff --git a/src/ui/public/agg_response/index.js b/src/ui/public/agg_response/index.js index 1d9aeecc101245..072cb304bb8baf 100644 --- a/src/ui/public/agg_response/index.js +++ b/src/ui/public/agg_response/index.js @@ -1,10 +1,15 @@ +import AggResponseHierarchicalBuildHierarchicalDataProvider from 'ui/agg_response/hierarchical/build_hierarchical_data'; +import AggResponsePointSeriesPointSeriesProvider from 'ui/agg_response/point_series/point_series'; +import AggResponseTabifyTabifyProvider from 'ui/agg_response/tabify/tabify'; +import AggResponseGeoJsonGeoJsonProvider from 'ui/agg_response/geo_json/geo_json'; + define(function (require) { return function NormalizeChartDataFactory(Private) { return { - hierarchical: Private(require('ui/agg_response/hierarchical/build_hierarchical_data')), - pointSeries: Private(require('ui/agg_response/point_series/point_series')), - tabify: Private(require('ui/agg_response/tabify/tabify')), - geoJson: Private(require('ui/agg_response/geo_json/geo_json')) + hierarchical: Private(AggResponseHierarchicalBuildHierarchicalDataProvider), + pointSeries: Private(AggResponsePointSeriesPointSeriesProvider), + tabify: Private(AggResponseTabifyTabifyProvider), + geoJson: Private(AggResponseGeoJsonGeoJsonProvider) }; }; }); diff --git a/src/ui/public/agg_response/point_series/__tests__/_add_to_siri.js b/src/ui/public/agg_response/point_series/__tests__/_add_to_siri.js index edb78b36c3c041..4fdb81c605ae76 100644 --- a/src/ui/public/agg_response/point_series/__tests__/_add_to_siri.js +++ b/src/ui/public/agg_response/point_series/__tests__/_add_to_siri.js @@ -1,11 +1,12 @@ import expect from 'expect.js'; import ngMock from 'ngMock'; +import AggResponsePointSeriesAddToSiriProvider from 'ui/agg_response/point_series/_add_to_siri'; describe('addToSiri', function () { var addToSiri; beforeEach(ngMock.module('kibana')); beforeEach(ngMock.inject(function (Private) { - addToSiri = Private(require('ui/agg_response/point_series/_add_to_siri')); + addToSiri = Private(AggResponsePointSeriesAddToSiriProvider); })); it('creates a new series the first time it sees an id', function () { diff --git a/src/ui/public/agg_response/point_series/__tests__/_fake_x_aspect.js b/src/ui/public/agg_response/point_series/__tests__/_fake_x_aspect.js index 9679cb610653c8..d98b80b3a17726 100644 --- a/src/ui/public/agg_response/point_series/__tests__/_fake_x_aspect.js +++ b/src/ui/public/agg_response/point_series/__tests__/_fake_x_aspect.js @@ -1,5 +1,9 @@ import expect from 'expect.js'; import ngMock from 'ngMock'; +import VisProvider from 'ui/Vis'; +import VisAggConfigProvider from 'ui/Vis/AggConfig'; +import AggTypesAggTypeProvider from 'ui/agg_types/AggType'; +import AggResponsePointSeriesFakeXAspectProvider from 'ui/agg_response/point_series/_fake_x_aspect'; describe('makeFakeXAspect', function () { var makeFakeXAspect; @@ -10,11 +14,11 @@ describe('makeFakeXAspect', function () { beforeEach(ngMock.module('kibana')); beforeEach(ngMock.inject(function (Private) { - Vis = Private(require('ui/Vis')); - AggConfig = Private(require('ui/Vis/AggConfig')); - AggType = Private(require('ui/agg_types/AggType')); - indexPattern = Private(require('ui/Vis')); - makeFakeXAspect = Private(require('ui/agg_response/point_series/_fake_x_aspect')); + Vis = Private(VisProvider); + AggConfig = Private(VisAggConfigProvider); + AggType = Private(AggTypesAggTypeProvider); + indexPattern = Private(VisProvider); + makeFakeXAspect = Private(AggResponsePointSeriesFakeXAspectProvider); })); it('creates an object that looks like an aspect', function () { diff --git a/src/ui/public/agg_response/point_series/__tests__/_get_aspects.js b/src/ui/public/agg_response/point_series/__tests__/_get_aspects.js index 12954add1c20f7..6e0ed60cacb34f 100644 --- a/src/ui/public/agg_response/point_series/__tests__/_get_aspects.js +++ b/src/ui/public/agg_response/point_series/__tests__/_get_aspects.js @@ -2,6 +2,11 @@ import _ from 'lodash'; import moment from 'moment'; import expect from 'expect.js'; import ngMock from 'ngMock'; +import VisProvider from 'ui/Vis'; +import AggResponsePointSeriesAddToSiriProvider from 'ui/agg_response/point_series/_add_to_siri'; +import VisAggConfigProvider from 'ui/Vis/AggConfig'; +import AggResponsePointSeriesGetAspectsProvider from 'ui/agg_response/point_series/_get_aspects'; +import FixturesStubbedLogstashIndexPatternProvider from 'fixtures/stubbed_logstash_index_pattern'; describe('getAspects', function () { var Vis; @@ -12,11 +17,11 @@ describe('getAspects', function () { beforeEach(ngMock.module('kibana')); beforeEach(ngMock.inject(function (Private) { - Vis = Private(require('ui/Vis')); - Table = Private(require('ui/agg_response/point_series/_add_to_siri')); - AggConfig = Private(require('ui/Vis/AggConfig')); - getAspects = Private(require('ui/agg_response/point_series/_get_aspects')); - indexPattern = Private(require('fixtures/stubbed_logstash_index_pattern')); + Vis = Private(VisProvider); + Table = Private(AggResponsePointSeriesAddToSiriProvider); + AggConfig = Private(VisAggConfigProvider); + getAspects = Private(AggResponsePointSeriesGetAspectsProvider); + indexPattern = Private(FixturesStubbedLogstashIndexPatternProvider); })); var vis; diff --git a/src/ui/public/agg_response/point_series/__tests__/_get_point.js b/src/ui/public/agg_response/point_series/__tests__/_get_point.js index 23b3607476a4a1..90c69d46d9b036 100644 --- a/src/ui/public/agg_response/point_series/__tests__/_get_point.js +++ b/src/ui/public/agg_response/point_series/__tests__/_get_point.js @@ -1,6 +1,7 @@ import _ from 'lodash'; import expect from 'expect.js'; import ngMock from 'ngMock'; +import AggResponsePointSeriesGetPointProvider from 'ui/agg_response/point_series/_get_point'; describe('getPoint', function () { @@ -11,7 +12,7 @@ describe('getPoint', function () { beforeEach(ngMock.module('kibana')); beforeEach(ngMock.inject(function (Private) { - getPoint = Private(require('ui/agg_response/point_series/_get_point')); + getPoint = Private(AggResponsePointSeriesGetPointProvider); })); describe('Without series aspect', function () { diff --git a/src/ui/public/agg_response/point_series/__tests__/_get_series.js b/src/ui/public/agg_response/point_series/__tests__/_get_series.js index 5ce959e5f1928e..07939ac0f3b34e 100644 --- a/src/ui/public/agg_response/point_series/__tests__/_get_series.js +++ b/src/ui/public/agg_response/point_series/__tests__/_get_series.js @@ -1,6 +1,7 @@ import _ from 'lodash'; import expect from 'expect.js'; import ngMock from 'ngMock'; +import AggResponsePointSeriesGetSeriesProvider from 'ui/agg_response/point_series/_get_series'; describe('getSeries', function () { var getSeries; @@ -8,7 +9,7 @@ describe('getSeries', function () { beforeEach(ngMock.module('kibana')); beforeEach(ngMock.inject(function (Private) { - getSeries = Private(require('ui/agg_response/point_series/_get_series')); + getSeries = Private(AggResponsePointSeriesGetSeriesProvider); })); function wrapRows(row) { diff --git a/src/ui/public/agg_response/point_series/__tests__/_init_x_axis.js b/src/ui/public/agg_response/point_series/__tests__/_init_x_axis.js index 9a8d43b1b728a9..dc1b9ab27684d6 100644 --- a/src/ui/public/agg_response/point_series/__tests__/_init_x_axis.js +++ b/src/ui/public/agg_response/point_series/__tests__/_init_x_axis.js @@ -1,13 +1,14 @@ import _ from 'lodash'; import expect from 'expect.js'; import ngMock from 'ngMock'; +import AggResponsePointSeriesInitXAxisProvider from 'ui/agg_response/point_series/_init_x_axis'; describe('initXAxis', function () { var initXAxis; beforeEach(ngMock.module('kibana')); beforeEach(ngMock.inject(function (Private) { - initXAxis = Private(require('ui/agg_response/point_series/_init_x_axis')); + initXAxis = Private(AggResponsePointSeriesInitXAxisProvider); })); var baseChart = { diff --git a/src/ui/public/agg_response/point_series/__tests__/_init_y_axis.js b/src/ui/public/agg_response/point_series/__tests__/_init_y_axis.js index 0435403fb251ae..c15a4aa3147424 100644 --- a/src/ui/public/agg_response/point_series/__tests__/_init_y_axis.js +++ b/src/ui/public/agg_response/point_series/__tests__/_init_y_axis.js @@ -1,13 +1,14 @@ import _ from 'lodash'; import expect from 'expect.js'; import ngMock from 'ngMock'; +import AggResponsePointSeriesInitYAxisProvider from 'ui/agg_response/point_series/_init_y_axis'; describe('initYAxis', function () { var initYAxis; beforeEach(ngMock.module('kibana')); beforeEach(ngMock.inject(function (Private) { - initYAxis = Private(require('ui/agg_response/point_series/_init_y_axis')); + initYAxis = Private(AggResponsePointSeriesInitYAxisProvider); })); function agg() { diff --git a/src/ui/public/agg_response/point_series/__tests__/_main.js b/src/ui/public/agg_response/point_series/__tests__/_main.js index 5cf151f223c81c..e8ab322b893959 100644 --- a/src/ui/public/agg_response/point_series/__tests__/_main.js +++ b/src/ui/public/agg_response/point_series/__tests__/_main.js @@ -3,6 +3,10 @@ import moment from 'moment'; import AggConfigResult from 'ui/Vis/AggConfigResult'; import expect from 'expect.js'; import ngMock from 'ngMock'; +import VisProvider from 'ui/Vis'; +import AggResponseTabifyTableProvider from 'ui/agg_response/tabify/_table'; +import FixturesStubbedLogstashIndexPatternProvider from 'fixtures/stubbed_logstash_index_pattern'; +import AggResponsePointSeriesPointSeriesProvider from 'ui/agg_response/point_series/point_series'; describe('pointSeriesChartDataFromTable', function () { this.slow(1000); @@ -14,10 +18,10 @@ describe('pointSeriesChartDataFromTable', function () { beforeEach(ngMock.module('kibana')); beforeEach(ngMock.inject(function (Private) { - Vis = Private(require('ui/Vis')); - Table = Private(require('ui/agg_response/tabify/_table')); - indexPattern = Private(require('fixtures/stubbed_logstash_index_pattern')); - pointSeriesChartDataFromTable = Private(require('ui/agg_response/point_series/point_series')); + Vis = Private(VisProvider); + Table = Private(AggResponseTabifyTableProvider); + indexPattern = Private(FixturesStubbedLogstashIndexPatternProvider); + pointSeriesChartDataFromTable = Private(AggResponsePointSeriesPointSeriesProvider); })); it('handles a table with just a count', function () { diff --git a/src/ui/public/agg_response/point_series/__tests__/_ordered_date_axis.js b/src/ui/public/agg_response/point_series/__tests__/_ordered_date_axis.js index 2176511befa0fc..040ee2ddce21ee 100644 --- a/src/ui/public/agg_response/point_series/__tests__/_ordered_date_axis.js +++ b/src/ui/public/agg_response/point_series/__tests__/_ordered_date_axis.js @@ -3,6 +3,7 @@ import _ from 'lodash'; import sinon from 'auto-release-sinon'; import expect from 'expect.js'; import ngMock from 'ngMock'; +import AggResponsePointSeriesOrderedDateAxisProvider from 'ui/agg_response/point_series/_ordered_date_axis'; describe('orderedDateAxis', function () { var baseArgs = { @@ -31,7 +32,7 @@ describe('orderedDateAxis', function () { beforeEach(ngMock.module('kibana')); beforeEach(ngMock.inject(function (Private) { - orderedDateAxis = Private(require('ui/agg_response/point_series/_ordered_date_axis')); + orderedDateAxis = Private(AggResponsePointSeriesOrderedDateAxisProvider); })); describe('xAxisFormatter', function () { diff --git a/src/ui/public/agg_response/point_series/__tests__/_tooltip_formatter.js b/src/ui/public/agg_response/point_series/__tests__/_tooltip_formatter.js index 8c68bed9ca1998..3bd12d0298c9ba 100644 --- a/src/ui/public/agg_response/point_series/__tests__/_tooltip_formatter.js +++ b/src/ui/public/agg_response/point_series/__tests__/_tooltip_formatter.js @@ -2,13 +2,14 @@ import _ from 'lodash'; import $ from 'jquery'; import expect from 'expect.js'; import ngMock from 'ngMock'; +import AggResponsePointSeriesTooltipFormatterProvider from 'ui/agg_response/point_series/_tooltip_formatter'; describe('tooltipFormatter', function () { var tooltipFormatter; beforeEach(ngMock.module('kibana')); beforeEach(ngMock.inject(function (Private) { - tooltipFormatter = Private(require('ui/agg_response/point_series/_tooltip_formatter')); + tooltipFormatter = Private(AggResponsePointSeriesTooltipFormatterProvider); })); function agg(name) { diff --git a/src/ui/public/agg_response/point_series/_fake_x_aspect.js b/src/ui/public/agg_response/point_series/_fake_x_aspect.js index 5de2c4928aff9b..c05998b7d5290f 100644 --- a/src/ui/public/agg_response/point_series/_fake_x_aspect.js +++ b/src/ui/public/agg_response/point_series/_fake_x_aspect.js @@ -1,7 +1,10 @@ +import VisAggConfigProvider from 'ui/Vis/AggConfig'; +import AggTypesAggTypeProvider from 'ui/agg_types/AggType'; + define(function (require) { return function PointSeriesFakeXAxis(Private) { - var AggConfig = Private(require('ui/Vis/AggConfig')); - var AggType = Private(require('ui/agg_types/AggType')); + var AggConfig = Private(VisAggConfigProvider); + var AggType = Private(AggTypesAggTypeProvider); var allAgg = new AggType({ name: 'all', diff --git a/src/ui/public/agg_response/point_series/_get_aspects.js b/src/ui/public/agg_response/point_series/_get_aspects.js index 55f6fc6d857632..f9e7bb3a3dbf75 100644 --- a/src/ui/public/agg_response/point_series/_get_aspects.js +++ b/src/ui/public/agg_response/point_series/_get_aspects.js @@ -1,7 +1,8 @@ import _ from 'lodash'; +import AggResponsePointSeriesFakeXAspectProvider from 'ui/agg_response/point_series/_fake_x_aspect'; define(function (require) { return function PointSeriesGetAspects(Private) { - var fakeXAspect = Private(require('ui/agg_response/point_series/_fake_x_aspect')); + var fakeXAspect = Private(AggResponsePointSeriesFakeXAspectProvider); var map = { segment: 'x', diff --git a/src/ui/public/agg_response/point_series/_get_series.js b/src/ui/public/agg_response/point_series/_get_series.js index e3d4f67d4c8913..4b3d37b4366a34 100644 --- a/src/ui/public/agg_response/point_series/_get_series.js +++ b/src/ui/public/agg_response/point_series/_get_series.js @@ -1,8 +1,10 @@ import _ from 'lodash'; +import AggResponsePointSeriesGetPointProvider from 'ui/agg_response/point_series/_get_point'; +import AggResponsePointSeriesAddToSiriProvider from 'ui/agg_response/point_series/_add_to_siri'; define(function (require) { return function PointSeriesGetSeries(Private) { - var getPoint = Private(require('ui/agg_response/point_series/_get_point')); - var addToSiri = Private(require('ui/agg_response/point_series/_add_to_siri')); + var getPoint = Private(AggResponsePointSeriesGetPointProvider); + var addToSiri = Private(AggResponsePointSeriesAddToSiriProvider); return function getSeries(rows, chart) { var aspects = chart.aspects; diff --git a/src/ui/public/agg_response/point_series/point_series.js b/src/ui/public/agg_response/point_series/point_series.js index d4933cc259fdf7..13cf16e65b4f20 100644 --- a/src/ui/public/agg_response/point_series/point_series.js +++ b/src/ui/public/agg_response/point_series/point_series.js @@ -1,13 +1,19 @@ import _ from 'lodash'; +import AggResponsePointSeriesGetSeriesProvider from 'ui/agg_response/point_series/_get_series'; +import AggResponsePointSeriesGetAspectsProvider from 'ui/agg_response/point_series/_get_aspects'; +import AggResponsePointSeriesInitYAxisProvider from 'ui/agg_response/point_series/_init_y_axis'; +import AggResponsePointSeriesInitXAxisProvider from 'ui/agg_response/point_series/_init_x_axis'; +import AggResponsePointSeriesOrderedDateAxisProvider from 'ui/agg_response/point_series/_ordered_date_axis'; +import AggResponsePointSeriesTooltipFormatterProvider from 'ui/agg_response/point_series/_tooltip_formatter'; define(function (require) { return function PointSeriesProvider(Private) { - var getSeries = Private(require('ui/agg_response/point_series/_get_series')); - var getAspects = Private(require('ui/agg_response/point_series/_get_aspects')); - var initYAxis = Private(require('ui/agg_response/point_series/_init_y_axis')); - var initXAxis = Private(require('ui/agg_response/point_series/_init_x_axis')); - var setupOrderedDateXAxis = Private(require('ui/agg_response/point_series/_ordered_date_axis')); - var tooltipFormatter = Private(require('ui/agg_response/point_series/_tooltip_formatter')); + var getSeries = Private(AggResponsePointSeriesGetSeriesProvider); + var getAspects = Private(AggResponsePointSeriesGetAspectsProvider); + var initYAxis = Private(AggResponsePointSeriesInitYAxisProvider); + var initXAxis = Private(AggResponsePointSeriesInitXAxisProvider); + var setupOrderedDateXAxis = Private(AggResponsePointSeriesOrderedDateAxisProvider); + var tooltipFormatter = Private(AggResponsePointSeriesTooltipFormatterProvider); return function pointSeriesChartDataFromTable(vis, table) { var chart = {}; diff --git a/src/ui/public/agg_response/tabify/__tests__/_buckets.js b/src/ui/public/agg_response/tabify/__tests__/_buckets.js index 9e4053114a5351..c6ce328e166a1f 100644 --- a/src/ui/public/agg_response/tabify/__tests__/_buckets.js +++ b/src/ui/public/agg_response/tabify/__tests__/_buckets.js @@ -1,11 +1,12 @@ import expect from 'expect.js'; import ngMock from 'ngMock'; +import AggResponseTabifyBucketsProvider from 'ui/agg_response/tabify/_buckets'; describe('Buckets wrapper', function () { var Buckets; beforeEach(ngMock.module('kibana')); beforeEach(ngMock.inject(function (Private, $injector) { - Buckets = Private(require('ui/agg_response/tabify/_buckets')); + Buckets = Private(AggResponseTabifyBucketsProvider); })); diff --git a/src/ui/public/agg_response/tabify/__tests__/_get_columns.js b/src/ui/public/agg_response/tabify/__tests__/_get_columns.js index 65a64a064d105d..4af94e212f284b 100644 --- a/src/ui/public/agg_response/tabify/__tests__/_get_columns.js +++ b/src/ui/public/agg_response/tabify/__tests__/_get_columns.js @@ -1,5 +1,8 @@ import expect from 'expect.js'; import ngMock from 'ngMock'; +import AggResponseTabifyGetColumnsProvider from 'ui/agg_response/tabify/_get_columns'; +import VisProvider from 'ui/Vis'; +import FixturesStubbedLogstashIndexPatternProvider from 'fixtures/stubbed_logstash_index_pattern'; describe('get columns', function () { var getColumns; var Vis; @@ -7,9 +10,9 @@ describe('get columns', function () { beforeEach(ngMock.module('kibana')); beforeEach(ngMock.inject(function (Private, $injector) { - getColumns = Private(require('ui/agg_response/tabify/_get_columns')); - Vis = Private(require('ui/Vis')); - indexPattern = Private(require('fixtures/stubbed_logstash_index_pattern')); + getColumns = Private(AggResponseTabifyGetColumnsProvider); + Vis = Private(VisProvider); + indexPattern = Private(FixturesStubbedLogstashIndexPatternProvider); })); it('should inject a count metric if no aggs exist', function () { diff --git a/src/ui/public/agg_response/tabify/__tests__/_integration.js b/src/ui/public/agg_response/tabify/__tests__/_integration.js index 4c5177ea29967c..b686d30ac5f46d 100644 --- a/src/ui/public/agg_response/tabify/__tests__/_integration.js +++ b/src/ui/public/agg_response/tabify/__tests__/_integration.js @@ -2,6 +2,9 @@ import _ from 'lodash'; import fixtures from 'fixtures/fake_hierarchical_data'; import expect from 'expect.js'; import ngMock from 'ngMock'; +import AggResponseTabifyTabifyProvider from 'ui/agg_response/tabify/tabify'; +import VisProvider from 'ui/Vis'; +import FixturesStubbedLogstashIndexPatternProvider from 'fixtures/stubbed_logstash_index_pattern'; describe('tabifyAggResponse Integration', function () { var Vis; @@ -11,9 +14,9 @@ describe('tabifyAggResponse Integration', function () { beforeEach(ngMock.module('kibana')); beforeEach(ngMock.inject(function (Private, $injector) { - tabifyAggResponse = Private(require('ui/agg_response/tabify/tabify')); - Vis = Private(require('ui/Vis')); - indexPattern = Private(require('fixtures/stubbed_logstash_index_pattern')); + tabifyAggResponse = Private(AggResponseTabifyTabifyProvider); + Vis = Private(VisProvider); + indexPattern = Private(FixturesStubbedLogstashIndexPatternProvider); })); function normalizeIds(vis) { diff --git a/src/ui/public/agg_response/tabify/__tests__/_response_writer.js b/src/ui/public/agg_response/tabify/__tests__/_response_writer.js index d01edeb5b29e53..d325a51f739ece 100644 --- a/src/ui/public/agg_response/tabify/__tests__/_response_writer.js +++ b/src/ui/public/agg_response/tabify/__tests__/_response_writer.js @@ -2,6 +2,12 @@ import _ from 'lodash'; import sinon from 'auto-release-sinon'; import expect from 'expect.js'; import ngMock from 'ngMock'; +import AggResponseTabifyResponseWriterProvider from 'ui/agg_response/tabify/_response_writer'; +import AggResponseTabifyTableGroupProvider from 'ui/agg_response/tabify/_table_group'; +import AggResponseTabifyBucketsProvider from 'ui/agg_response/tabify/_buckets'; +import AggResponseTabifyTableProvider from 'ui/agg_response/tabify/_table'; +import VisProvider from 'ui/Vis'; +import FixturesStubbedLogstashIndexPatternProvider from 'fixtures/stubbed_logstash_index_pattern'; describe('ResponseWriter class', function () { var Vis; @@ -23,12 +29,12 @@ describe('ResponseWriter class', function () { Private.stub(require('ui/agg_response/tabify/_get_columns'), getColumns); } - ResponseWriter = Private(require('ui/agg_response/tabify/_response_writer')); - TableGroup = Private(require('ui/agg_response/tabify/_table_group')); - Buckets = Private(require('ui/agg_response/tabify/_buckets')); - Table = Private(require('ui/agg_response/tabify/_table')); - Vis = Private(require('ui/Vis')); - indexPattern = Private(require('fixtures/stubbed_logstash_index_pattern')); + ResponseWriter = Private(AggResponseTabifyResponseWriterProvider); + TableGroup = Private(AggResponseTabifyTableGroupProvider); + Buckets = Private(AggResponseTabifyBucketsProvider); + Table = Private(AggResponseTabifyTableProvider); + Vis = Private(VisProvider); + indexPattern = Private(FixturesStubbedLogstashIndexPatternProvider); })); } diff --git a/src/ui/public/agg_response/tabify/__tests__/_table.js b/src/ui/public/agg_response/tabify/__tests__/_table.js index d42722cbafda9f..ea734c967c3279 100644 --- a/src/ui/public/agg_response/tabify/__tests__/_table.js +++ b/src/ui/public/agg_response/tabify/__tests__/_table.js @@ -1,13 +1,14 @@ import _ from 'lodash'; import expect from 'expect.js'; import ngMock from 'ngMock'; +import AggResponseTabifyTableProvider from 'ui/agg_response/tabify/_table'; describe('Table class', function () { var Table; beforeEach(ngMock.module('kibana')); beforeEach(ngMock.inject(function (Private, $injector) { - Table = Private(require('ui/agg_response/tabify/_table')); + Table = Private(AggResponseTabifyTableProvider); })); it('exposes rows array, but not the columns', function () { diff --git a/src/ui/public/agg_response/tabify/__tests__/_table_group.js b/src/ui/public/agg_response/tabify/__tests__/_table_group.js index 07b493a276c4cd..f37756dd75ae54 100644 --- a/src/ui/public/agg_response/tabify/__tests__/_table_group.js +++ b/src/ui/public/agg_response/tabify/__tests__/_table_group.js @@ -1,11 +1,12 @@ import expect from 'expect.js'; import ngMock from 'ngMock'; +import AggResponseTabifyTableGroupProvider from 'ui/agg_response/tabify/_table_group'; describe('Table Group class', function () { var TableGroup; beforeEach(ngMock.module('kibana')); beforeEach(ngMock.inject(function (Private, $injector) { - TableGroup = Private(require('ui/agg_response/tabify/_table_group')); + TableGroup = Private(AggResponseTabifyTableGroupProvider); })); it('exposes tables array and empty aggConfig, key and title', function () { diff --git a/src/ui/public/agg_response/tabify/_get_columns.js b/src/ui/public/agg_response/tabify/_get_columns.js index 059d4e535ae0e9..d617252d85beda 100644 --- a/src/ui/public/agg_response/tabify/_get_columns.js +++ b/src/ui/public/agg_response/tabify/_get_columns.js @@ -1,7 +1,8 @@ import _ from 'lodash'; +import VisAggConfigProvider from 'ui/Vis/AggConfig'; define(function (require) { return function GetColumnsProvider(Private) { - var AggConfig = Private(require('ui/Vis/AggConfig')); + var AggConfig = Private(VisAggConfigProvider); return function getColumns(vis, minimal) { var aggs = vis.aggs.getResponseAggs(); diff --git a/src/ui/public/agg_response/tabify/_response_writer.js b/src/ui/public/agg_response/tabify/_response_writer.js index 8d0a4abfcc0170..4612fc01a6ecee 100644 --- a/src/ui/public/agg_response/tabify/_response_writer.js +++ b/src/ui/public/agg_response/tabify/_response_writer.js @@ -1,10 +1,13 @@ import _ from 'lodash'; import AggConfigResult from 'ui/Vis/AggConfigResult'; +import AggResponseTabifyTableProvider from 'ui/agg_response/tabify/_table'; +import AggResponseTabifyTableGroupProvider from 'ui/agg_response/tabify/_table_group'; +import AggResponseTabifyGetColumnsProvider from 'ui/agg_response/tabify/_get_columns'; define(function (require) { return function TabbedAggResponseWriterProvider(Private) { - var Table = Private(require('ui/agg_response/tabify/_table')); - var TableGroup = Private(require('ui/agg_response/tabify/_table_group')); - var getColumns = Private(require('ui/agg_response/tabify/_get_columns')); + var Table = Private(AggResponseTabifyTableProvider); + var TableGroup = Private(AggResponseTabifyTableGroupProvider); + var getColumns = Private(AggResponseTabifyGetColumnsProvider); _.class(SplitAcr).inherits(AggConfigResult); diff --git a/src/ui/public/agg_response/tabify/tabify.js b/src/ui/public/agg_response/tabify/tabify.js index b8da4a3d0a9735..980feb96d238e9 100644 --- a/src/ui/public/agg_response/tabify/tabify.js +++ b/src/ui/public/agg_response/tabify/tabify.js @@ -1,10 +1,13 @@ import _ from 'lodash'; +import VisAggConfigProvider from 'ui/Vis/AggConfig'; +import AggResponseTabifyResponseWriterProvider from 'ui/agg_response/tabify/_response_writer'; +import AggResponseTabifyBucketsProvider from 'ui/agg_response/tabify/_buckets'; define(function (require) { return function tabifyAggResponseProvider(Private, Notifier) { - var AggConfig = Private(require('ui/Vis/AggConfig')); - var TabbedAggResponseWriter = Private(require('ui/agg_response/tabify/_response_writer')); - var Buckets = Private(require('ui/agg_response/tabify/_buckets')); + var AggConfig = Private(VisAggConfigProvider); + var TabbedAggResponseWriter = Private(AggResponseTabifyResponseWriterProvider); + var Buckets = Private(AggResponseTabifyBucketsProvider); var notify = new Notifier({ location: 'agg_response/tabify'}); function tabifyAggResponse(vis, esResponse, respOpts) { diff --git a/src/ui/public/agg_table/__tests__/_group.js b/src/ui/public/agg_table/__tests__/_group.js index da3bdf1c5a4e25..bbc8bc4bd869c9 100644 --- a/src/ui/public/agg_table/__tests__/_group.js +++ b/src/ui/public/agg_table/__tests__/_group.js @@ -3,6 +3,9 @@ import $ from 'jquery'; import ngMock from 'ngMock'; import expect from 'expect.js'; import fixtures from 'fixtures/fake_hierarchical_data'; +import AggResponseTabifyTabifyProvider from 'ui/agg_response/tabify/tabify'; +import FixturesStubbedLogstashIndexPatternProvider from 'fixtures/stubbed_logstash_index_pattern'; +import VisProvider from 'ui/Vis'; describe('AggTableGroup Directive', function () { var $rootScope; @@ -13,9 +16,9 @@ describe('AggTableGroup Directive', function () { beforeEach(ngMock.module('kibana')); beforeEach(ngMock.inject(function ($injector, Private) { - tabifyAggResponse = Private(require('ui/agg_response/tabify/tabify')); - indexPattern = Private(require('fixtures/stubbed_logstash_index_pattern')); - Vis = Private(require('ui/Vis')); + tabifyAggResponse = Private(AggResponseTabifyTabifyProvider); + indexPattern = Private(FixturesStubbedLogstashIndexPatternProvider); + Vis = Private(VisProvider); $rootScope = $injector.get('$rootScope'); $compile = $injector.get('$compile'); diff --git a/src/ui/public/agg_table/__tests__/_table.js b/src/ui/public/agg_table/__tests__/_table.js index a9406bb615f015..f5a385bf49976f 100644 --- a/src/ui/public/agg_table/__tests__/_table.js +++ b/src/ui/public/agg_table/__tests__/_table.js @@ -4,6 +4,9 @@ import ngMock from 'ngMock'; import expect from 'expect.js'; import fixtures from 'fixtures/fake_hierarchical_data'; import sinon from 'auto-release-sinon'; +import AggResponseTabifyTabifyProvider from 'ui/agg_response/tabify/tabify'; +import FixturesStubbedLogstashIndexPatternProvider from 'fixtures/stubbed_logstash_index_pattern'; +import VisProvider from 'ui/Vis'; describe('AggTable Directive', function () { var $rootScope; @@ -14,9 +17,9 @@ describe('AggTable Directive', function () { beforeEach(ngMock.module('kibana')); beforeEach(ngMock.inject(function ($injector, Private) { - tabifyAggResponse = Private(require('ui/agg_response/tabify/tabify')); - indexPattern = Private(require('fixtures/stubbed_logstash_index_pattern')); - Vis = Private(require('ui/Vis')); + tabifyAggResponse = Private(AggResponseTabifyTabifyProvider); + indexPattern = Private(FixturesStubbedLogstashIndexPatternProvider); + Vis = Private(VisProvider); $rootScope = $injector.get('$rootScope'); $compile = $injector.get('$compile'); diff --git a/src/ui/public/agg_types/AggParams.js b/src/ui/public/agg_types/AggParams.js index c312eb8666f97c..fcce3f5f121749 100644 --- a/src/ui/public/agg_types/AggParams.js +++ b/src/ui/public/agg_types/AggParams.js @@ -1,17 +1,23 @@ import 'ui/filters/label'; import _ from 'lodash'; import IndexedArray from 'ui/IndexedArray'; +import AggTypesParamTypesFieldProvider from 'ui/agg_types/param_types/field'; +import AggTypesParamTypesOptionedProvider from 'ui/agg_types/param_types/optioned'; +import AggTypesParamTypesRegexProvider from 'ui/agg_types/param_types/regex'; +import AggTypesParamTypesStringProvider from 'ui/agg_types/param_types/string'; +import AggTypesParamTypesRawJsonProvider from 'ui/agg_types/param_types/raw_json'; +import AggTypesParamTypesBaseProvider from 'ui/agg_types/param_types/base'; define(function (require) { return function AggParamsFactory(Private) { var paramTypeMap = { - field: Private(require('ui/agg_types/param_types/field')), - optioned: Private(require('ui/agg_types/param_types/optioned')), - regex: Private(require('ui/agg_types/param_types/regex')), - string: Private(require('ui/agg_types/param_types/string')), - json: Private(require('ui/agg_types/param_types/raw_json')), - _default: Private(require('ui/agg_types/param_types/base')) + field: Private(AggTypesParamTypesFieldProvider), + optioned: Private(AggTypesParamTypesOptionedProvider), + regex: Private(AggTypesParamTypesRegexProvider), + string: Private(AggTypesParamTypesStringProvider), + json: Private(AggTypesParamTypesRawJsonProvider), + _default: Private(AggTypesParamTypesBaseProvider) }; /** diff --git a/src/ui/public/agg_types/AggType.js b/src/ui/public/agg_types/AggType.js index 79d74eb6d58571..316d0fec84e498 100644 --- a/src/ui/public/agg_types/AggType.js +++ b/src/ui/public/agg_types/AggType.js @@ -1,8 +1,10 @@ import _ from 'lodash'; +import AggTypesAggParamsProvider from 'ui/agg_types/AggParams'; +import RegistryFieldFormatsProvider from 'ui/registry/field_formats'; define(function (require) { return function AggTypeFactory(Private) { - var AggParams = Private(require('ui/agg_types/AggParams')); - var fieldFormats = Private(require('ui/registry/field_formats')); + var AggParams = Private(AggTypesAggParamsProvider); + var fieldFormats = Private(RegistryFieldFormatsProvider); /** * Generic AggType Constructor diff --git a/src/ui/public/agg_types/__tests__/AggParamWriter.js b/src/ui/public/agg_types/__tests__/AggParamWriter.js index b451d16445518c..4ff401f28b2c03 100644 --- a/src/ui/public/agg_types/__tests__/AggParamWriter.js +++ b/src/ui/public/agg_types/__tests__/AggParamWriter.js @@ -1,9 +1,13 @@ import _ from 'lodash'; +import VisProvider from 'ui/Vis'; +import AggTypesIndexProvider from 'ui/agg_types/index'; +import RegistryVisTypesProvider from 'ui/registry/vis_types'; +import FixturesStubbedLogstashIndexPatternProvider from 'fixtures/stubbed_logstash_index_pattern'; module.exports = function AggParamWriterHelper(Private) { - var Vis = Private(require('ui/Vis')); - var aggTypes = Private(require('ui/agg_types/index')); - var visTypes = Private(require('ui/registry/vis_types')); - var stubbedLogstashIndexPattern = Private(require('fixtures/stubbed_logstash_index_pattern')); + var Vis = Private(VisProvider); + var aggTypes = Private(AggTypesIndexProvider); + var visTypes = Private(RegistryVisTypesProvider); + var stubbedLogstashIndexPattern = Private(FixturesStubbedLogstashIndexPatternProvider); /** * Helper object for writing aggParams. Specify an aggType and it will find a vis & schema, and diff --git a/src/ui/public/agg_types/__tests__/AggParams.js b/src/ui/public/agg_types/__tests__/AggParams.js index 64ca6edeef2573..45d28dfe0d8510 100644 --- a/src/ui/public/agg_types/__tests__/AggParams.js +++ b/src/ui/public/agg_types/__tests__/AggParams.js @@ -1,6 +1,11 @@ import _ from 'lodash'; import ngMock from 'ngMock'; import expect from 'expect.js'; +import AggTypesAggParamsProvider from 'ui/agg_types/AggParams'; +import AggTypesParamTypesBaseProvider from 'ui/agg_types/param_types/base'; +import AggTypesParamTypesFieldProvider from 'ui/agg_types/param_types/field'; +import AggTypesParamTypesOptionedProvider from 'ui/agg_types/param_types/optioned'; +import AggTypesParamTypesRegexProvider from 'ui/agg_types/param_types/regex'; describe('AggParams class', function () { var AggParams; @@ -14,11 +19,11 @@ describe('AggParams class', function () { beforeEach(ngMock.inject(require('./utils/_stub_agg_params'))); // fetch out deps beforeEach(ngMock.inject(function (Private) { - AggParams = Private(require('ui/agg_types/AggParams')); - BaseAggParam = Private(require('ui/agg_types/param_types/base')); - FieldAggParam = Private(require('ui/agg_types/param_types/field')); - OptionedAggParam = Private(require('ui/agg_types/param_types/optioned')); - RegexAggParam = Private(require('ui/agg_types/param_types/regex')); + AggParams = Private(AggTypesAggParamsProvider); + BaseAggParam = Private(AggTypesParamTypesBaseProvider); + FieldAggParam = Private(AggTypesParamTypesFieldProvider); + OptionedAggParam = Private(AggTypesParamTypesOptionedProvider); + RegexAggParam = Private(AggTypesParamTypesRegexProvider); })); describe('constructor args', function () { diff --git a/src/ui/public/agg_types/__tests__/AggType.js b/src/ui/public/agg_types/__tests__/AggType.js index 379dd1afdf9eb5..5af85a362e33f1 100644 --- a/src/ui/public/agg_types/__tests__/AggType.js +++ b/src/ui/public/agg_types/__tests__/AggType.js @@ -4,6 +4,11 @@ import ngMock from 'ngMock'; import sinon from 'auto-release-sinon'; import 'ui/private'; import AggParamsPM from 'ui/agg_types/AggParams'; +import VisProvider from 'ui/Vis'; +import RegistryFieldFormatsProvider from 'ui/registry/field_formats'; +import AggTypesAggTypeProvider from 'ui/agg_types/AggType'; +import VisAggConfigProvider from 'ui/Vis/AggConfig'; +import FixturesStubbedLogstashIndexPatternProvider from 'fixtures/stubbed_logstash_index_pattern'; describe('AggType Class', function () { var AggType; var AggParams; @@ -18,11 +23,11 @@ describe('AggType Class', function () { AggParams = sinon.spy(Private(AggParamsPM)); Private.stub(AggParamsPM, AggParams); - Vis = Private(require('ui/Vis')); - fieldFormat = Private(require('ui/registry/field_formats')); - AggType = Private(require('ui/agg_types/AggType')); - AggConfig = Private(require('ui/Vis/AggConfig')); - indexPattern = Private(require('fixtures/stubbed_logstash_index_pattern')); + Vis = Private(VisProvider); + fieldFormat = Private(RegistryFieldFormatsProvider); + AggType = Private(AggTypesAggTypeProvider); + AggConfig = Private(VisAggConfigProvider); + indexPattern = Private(FixturesStubbedLogstashIndexPatternProvider); })); describe('constructor', function () { diff --git a/src/ui/public/agg_types/__tests__/bucketCountBetween.js b/src/ui/public/agg_types/__tests__/bucketCountBetween.js index b72d0e6151a910..67fdddc537fe73 100644 --- a/src/ui/public/agg_types/__tests__/bucketCountBetween.js +++ b/src/ui/public/agg_types/__tests__/bucketCountBetween.js @@ -1,6 +1,12 @@ import _ from 'lodash'; import expect from 'expect.js'; import ngMock from 'ngMock'; +import FixturesStubbedLogstashIndexPatternProvider from 'fixtures/stubbed_logstash_index_pattern'; +import VisProvider from 'ui/Vis'; +import RegistryVisTypesProvider from 'ui/registry/vis_types'; +import AggTypesIndexProvider from 'ui/agg_types/index'; +import VisAggConfigProvider from 'ui/Vis/AggConfig'; +import AggTypesBucketsBucketCountBetweenProvider from 'ui/agg_types/buckets/_bucket_count_between'; describe('bucketCountBetween util', function () { var indexPattern; var Vis; @@ -17,12 +23,12 @@ describe('bucketCountBetween util', function () { beforeEach(ngMock.module('kibana')); beforeEach(ngMock.inject(function (Private) { - indexPattern = Private(require('fixtures/stubbed_logstash_index_pattern')); - Vis = Private(require('ui/Vis')); - visTypes = Private(require('ui/registry/vis_types')); - aggTypes = Private(require('ui/agg_types/index')); - AggConfig = Private(require('ui/Vis/AggConfig')); - bucketCountBetween = Private(require('ui/agg_types/buckets/_bucket_count_between')); + indexPattern = Private(FixturesStubbedLogstashIndexPatternProvider); + Vis = Private(VisProvider); + visTypes = Private(RegistryVisTypesProvider); + aggTypes = Private(AggTypesIndexProvider); + AggConfig = Private(VisAggConfigProvider); + bucketCountBetween = Private(AggTypesBucketsBucketCountBetweenProvider); })); it('returns a positive number when a is before b', function () { diff --git a/src/ui/public/agg_types/__tests__/buckets/_histogram.js b/src/ui/public/agg_types/__tests__/buckets/_histogram.js index bca81871c70882..0aa6a3122bd5bb 100644 --- a/src/ui/public/agg_types/__tests__/buckets/_histogram.js +++ b/src/ui/public/agg_types/__tests__/buckets/_histogram.js @@ -1,6 +1,8 @@ import _ from 'lodash'; import expect from 'expect.js'; import ngMock from 'ngMock'; +import AggTypesIndexProvider from 'ui/agg_types/index'; +import AggParamWriterProvider from '../AggParamWriter'; describe('Histogram Agg', function () { describe('ordered', function () { @@ -8,7 +10,7 @@ describe('Histogram Agg', function () { beforeEach(ngMock.module('kibana')); beforeEach(ngMock.inject(function (Private) { - histogram = Private(require('ui/agg_types/index')).byName.histogram; + histogram = Private(AggTypesIndexProvider).byName.histogram; })); it('is ordered', function () { @@ -26,7 +28,7 @@ describe('Histogram Agg', function () { beforeEach(ngMock.module('kibana')); beforeEach(ngMock.inject(function (Private) { - var AggParamWriter = Private(require('../AggParamWriter')); + var AggParamWriter = Private(AggParamWriterProvider); paramWriter = new AggParamWriter({ aggType: 'histogram' }); })); diff --git a/src/ui/public/agg_types/__tests__/buckets/_range.js b/src/ui/public/agg_types/__tests__/buckets/_range.js index 88d4fa046e1b8a..bc80276961b96f 100644 --- a/src/ui/public/agg_types/__tests__/buckets/_range.js +++ b/src/ui/public/agg_types/__tests__/buckets/_range.js @@ -3,6 +3,10 @@ import _ from 'lodash'; import ngMock from 'ngMock'; import expect from 'expect.js'; import resp from 'fixtures/agg_resp/range'; +import AggTypesIndexProvider from 'ui/agg_types/index'; +import VisProvider from 'ui/Vis'; +import FixturesStubbedLogstashIndexPatternProvider from 'fixtures/stubbed_logstash_index_pattern'; +import RegistryFieldFormatsProvider from 'ui/registry/field_formats'; describe('Range Agg', function () { var buckets = values(resp.aggregations[1].buckets); @@ -13,11 +17,11 @@ describe('Range Agg', function () { beforeEach(ngMock.module('kibana')); beforeEach(ngMock.inject(function (Private) { - range = Private(require('ui/agg_types/index')).byName.range; - Vis = Private(require('ui/Vis')); - indexPattern = Private(require('fixtures/stubbed_logstash_index_pattern')); + range = Private(AggTypesIndexProvider).byName.range; + Vis = Private(VisProvider); + indexPattern = Private(FixturesStubbedLogstashIndexPatternProvider); - var BytesFormat = Private(require('ui/registry/field_formats')).byId.bytes; + var BytesFormat = Private(RegistryFieldFormatsProvider).byId.bytes; indexPattern.fieldFormatMap.bytes = new BytesFormat({ pattern: '0,0.[000] b' diff --git a/src/ui/public/agg_types/__tests__/buckets/create_filter/date_histogram.js b/src/ui/public/agg_types/__tests__/buckets/create_filter/date_histogram.js index d717c77652d96c..5ffc20e4e81f92 100644 --- a/src/ui/public/agg_types/__tests__/buckets/create_filter/date_histogram.js +++ b/src/ui/public/agg_types/__tests__/buckets/create_filter/date_histogram.js @@ -4,6 +4,11 @@ import sinon from 'auto-release-sinon'; import aggResp from 'fixtures/agg_resp/date_histogram'; import ngMock from 'ngMock'; import expect from 'expect.js'; +import VisProvider from 'ui/Vis'; +import FixturesStubbedLogstashIndexPatternProvider from 'fixtures/stubbed_logstash_index_pattern'; +import AggTypesBucketsCreateFilterDateHistogramProvider from 'ui/agg_types/buckets/create_filter/date_histogram'; +import TimeBucketsProvider from 'ui/time_buckets'; +import AggTypesBucketsIntervalOptionsProvider from 'ui/agg_types/buckets/_interval_options'; describe('AggConfig Filters', function () { describe('date_histogram', function () { @@ -20,11 +25,11 @@ describe('AggConfig Filters', function () { beforeEach(ngMock.module('kibana')); beforeEach(ngMock.inject(function (Private, $injector) { - var Vis = Private(require('ui/Vis')); - var indexPattern = Private(require('fixtures/stubbed_logstash_index_pattern')); - var createFilter = Private(require('ui/agg_types/buckets/create_filter/date_histogram')); - var TimeBuckets = Private(require('ui/time_buckets')); - intervalOptions = Private(require('ui/agg_types/buckets/_interval_options')); + var Vis = Private(VisProvider); + var indexPattern = Private(FixturesStubbedLogstashIndexPatternProvider); + var createFilter = Private(AggTypesBucketsCreateFilterDateHistogramProvider); + var TimeBuckets = Private(TimeBucketsProvider); + intervalOptions = Private(AggTypesBucketsIntervalOptionsProvider); init = function (interval, duration) { interval = interval || 'auto'; diff --git a/src/ui/public/agg_types/__tests__/buckets/create_filter/date_range.js b/src/ui/public/agg_types/__tests__/buckets/create_filter/date_range.js index e3d5e6aeb6049d..55b37c2001ab85 100644 --- a/src/ui/public/agg_types/__tests__/buckets/create_filter/date_range.js +++ b/src/ui/public/agg_types/__tests__/buckets/create_filter/date_range.js @@ -2,6 +2,10 @@ import moment from 'moment'; import expect from 'expect.js'; import ngMock from 'ngMock'; +import VisProvider from 'ui/Vis'; +import VisAggConfigProvider from 'ui/Vis/AggConfig'; +import FixturesStubbedLogstashIndexPatternProvider from 'fixtures/stubbed_logstash_index_pattern'; +import AggTypesBucketsCreateFilterDateRangeProvider from 'ui/agg_types/buckets/create_filter/date_range'; describe('AggConfig Filters', function () { describe('Date range', function () { @@ -12,10 +16,10 @@ describe('AggConfig Filters', function () { beforeEach(ngMock.module('kibana')); beforeEach(ngMock.inject(function (Private) { - Vis = Private(require('ui/Vis')); - AggConfig = Private(require('ui/Vis/AggConfig')); - indexPattern = Private(require('fixtures/stubbed_logstash_index_pattern')); - createFilter = Private(require('ui/agg_types/buckets/create_filter/date_range')); + Vis = Private(VisProvider); + AggConfig = Private(VisAggConfigProvider); + indexPattern = Private(FixturesStubbedLogstashIndexPatternProvider); + createFilter = Private(AggTypesBucketsCreateFilterDateRangeProvider); })); it('should return a range filter for date_range agg', function () { diff --git a/src/ui/public/agg_types/__tests__/buckets/create_filter/filters.js b/src/ui/public/agg_types/__tests__/buckets/create_filter/filters.js index 2f15c852db822a..1694908238cd69 100644 --- a/src/ui/public/agg_types/__tests__/buckets/create_filter/filters.js +++ b/src/ui/public/agg_types/__tests__/buckets/create_filter/filters.js @@ -2,6 +2,10 @@ import _ from 'lodash'; import expect from 'expect.js'; import ngMock from 'ngMock'; +import VisProvider from 'ui/Vis'; +import VisAggConfigProvider from 'ui/Vis/AggConfig'; +import FixturesStubbedLogstashIndexPatternProvider from 'fixtures/stubbed_logstash_index_pattern'; +import AggTypesBucketsCreateFilterFiltersProvider from 'ui/agg_types/buckets/create_filter/filters'; describe('AggConfig Filters', function () { describe('filters', function () { @@ -12,10 +16,10 @@ describe('AggConfig Filters', function () { beforeEach(ngMock.module('kibana')); beforeEach(ngMock.inject(function (Private) { - Vis = Private(require('ui/Vis')); - AggConfig = Private(require('ui/Vis/AggConfig')); - indexPattern = Private(require('fixtures/stubbed_logstash_index_pattern')); - createFilter = Private(require('ui/agg_types/buckets/create_filter/filters')); + Vis = Private(VisProvider); + AggConfig = Private(VisAggConfigProvider); + indexPattern = Private(FixturesStubbedLogstashIndexPatternProvider); + createFilter = Private(AggTypesBucketsCreateFilterFiltersProvider); })); it('should return a filters filter', function () { diff --git a/src/ui/public/agg_types/__tests__/buckets/create_filter/histogram.js b/src/ui/public/agg_types/__tests__/buckets/create_filter/histogram.js index 7d09eccc59c4f3..9cb00383b49f05 100644 --- a/src/ui/public/agg_types/__tests__/buckets/create_filter/histogram.js +++ b/src/ui/public/agg_types/__tests__/buckets/create_filter/histogram.js @@ -2,6 +2,10 @@ import _ from 'lodash'; import expect from 'expect.js'; import ngMock from 'ngMock'; +import VisProvider from 'ui/Vis'; +import VisAggConfigProvider from 'ui/Vis/AggConfig'; +import FixturesStubbedLogstashIndexPatternProvider from 'fixtures/stubbed_logstash_index_pattern'; +import AggTypesBucketsCreateFilterHistogramProvider from 'ui/agg_types/buckets/create_filter/histogram'; describe('AggConfig Filters', function () { describe('histogram', function () { @@ -12,10 +16,10 @@ describe('AggConfig Filters', function () { beforeEach(ngMock.module('kibana')); beforeEach(ngMock.inject(function (Private) { - Vis = Private(require('ui/Vis')); - AggConfig = Private(require('ui/Vis/AggConfig')); - indexPattern = Private(require('fixtures/stubbed_logstash_index_pattern')); - createFilter = Private(require('ui/agg_types/buckets/create_filter/histogram')); + Vis = Private(VisProvider); + AggConfig = Private(VisAggConfigProvider); + indexPattern = Private(FixturesStubbedLogstashIndexPatternProvider); + createFilter = Private(AggTypesBucketsCreateFilterHistogramProvider); })); it('should return an range filter for histogram', function () { diff --git a/src/ui/public/agg_types/__tests__/buckets/create_filter/ip_range.js b/src/ui/public/agg_types/__tests__/buckets/create_filter/ip_range.js index 5af1fa7e865436..e394b19345cfd9 100644 --- a/src/ui/public/agg_types/__tests__/buckets/create_filter/ip_range.js +++ b/src/ui/public/agg_types/__tests__/buckets/create_filter/ip_range.js @@ -1,5 +1,9 @@ import expect from 'expect.js'; import ngMock from 'ngMock'; +import VisProvider from 'ui/Vis'; +import VisAggConfigProvider from 'ui/Vis/AggConfig'; +import FixturesStubbedLogstashIndexPatternProvider from 'fixtures/stubbed_logstash_index_pattern'; +import AggTypesBucketsCreateFilterIpRangeProvider from 'ui/agg_types/buckets/create_filter/ip_range'; describe('AggConfig Filters', function () { describe('IP range', function () { @@ -10,10 +14,10 @@ describe('AggConfig Filters', function () { beforeEach(ngMock.module('kibana')); beforeEach(ngMock.inject(function (Private) { - Vis = Private(require('ui/Vis')); - AggConfig = Private(require('ui/Vis/AggConfig')); - indexPattern = Private(require('fixtures/stubbed_logstash_index_pattern')); - createFilter = Private(require('ui/agg_types/buckets/create_filter/ip_range')); + Vis = Private(VisProvider); + AggConfig = Private(VisAggConfigProvider); + indexPattern = Private(FixturesStubbedLogstashIndexPatternProvider); + createFilter = Private(AggTypesBucketsCreateFilterIpRangeProvider); })); it('should return a range filter for ip_range agg', function () { diff --git a/src/ui/public/agg_types/__tests__/buckets/create_filter/range.js b/src/ui/public/agg_types/__tests__/buckets/create_filter/range.js index eaa56de80d35c4..d5fb7013adad9d 100644 --- a/src/ui/public/agg_types/__tests__/buckets/create_filter/range.js +++ b/src/ui/public/agg_types/__tests__/buckets/create_filter/range.js @@ -1,5 +1,9 @@ import expect from 'expect.js'; import ngMock from 'ngMock'; +import VisProvider from 'ui/Vis'; +import VisAggConfigProvider from 'ui/Vis/AggConfig'; +import FixturesStubbedLogstashIndexPatternProvider from 'fixtures/stubbed_logstash_index_pattern'; +import AggTypesBucketsCreateFilterRangeProvider from 'ui/agg_types/buckets/create_filter/range'; describe('AggConfig Filters', function () { describe('range', function () { @@ -10,10 +14,10 @@ describe('AggConfig Filters', function () { beforeEach(ngMock.module('kibana')); beforeEach(ngMock.inject(function (Private) { - Vis = Private(require('ui/Vis')); - AggConfig = Private(require('ui/Vis/AggConfig')); - indexPattern = Private(require('fixtures/stubbed_logstash_index_pattern')); - createFilter = Private(require('ui/agg_types/buckets/create_filter/range')); + Vis = Private(VisProvider); + AggConfig = Private(VisAggConfigProvider); + indexPattern = Private(FixturesStubbedLogstashIndexPatternProvider); + createFilter = Private(AggTypesBucketsCreateFilterRangeProvider); })); it('should return a range filter for range agg', function () { diff --git a/src/ui/public/agg_types/__tests__/buckets/create_filter/terms.js b/src/ui/public/agg_types/__tests__/buckets/create_filter/terms.js index 97a26d489d434d..e6c636afe900a0 100644 --- a/src/ui/public/agg_types/__tests__/buckets/create_filter/terms.js +++ b/src/ui/public/agg_types/__tests__/buckets/create_filter/terms.js @@ -1,5 +1,9 @@ import expect from 'expect.js'; import ngMock from 'ngMock'; +import VisProvider from 'ui/Vis'; +import VisAggConfigProvider from 'ui/Vis/AggConfig'; +import FixturesStubbedLogstashIndexPatternProvider from 'fixtures/stubbed_logstash_index_pattern'; +import AggTypesBucketsCreateFilterTermsProvider from 'ui/agg_types/buckets/create_filter/terms'; describe('AggConfig Filters', function () { describe('terms', function () { @@ -10,10 +14,10 @@ describe('AggConfig Filters', function () { beforeEach(ngMock.module('kibana')); beforeEach(ngMock.inject(function (Private) { - Vis = Private(require('ui/Vis')); - AggConfig = Private(require('ui/Vis/AggConfig')); - indexPattern = Private(require('fixtures/stubbed_logstash_index_pattern')); - createFilter = Private(require('ui/agg_types/buckets/create_filter/terms')); + Vis = Private(VisProvider); + AggConfig = Private(VisAggConfigProvider); + indexPattern = Private(FixturesStubbedLogstashIndexPatternProvider); + createFilter = Private(AggTypesBucketsCreateFilterTermsProvider); })); it('should return a match filter for terms', function () { diff --git a/src/ui/public/agg_types/__tests__/buckets/date_histogram/_editor.js b/src/ui/public/agg_types/__tests__/buckets/date_histogram/_editor.js index 2ae1ccad2f5979..18a5d0ff37cf49 100644 --- a/src/ui/public/agg_types/__tests__/buckets/date_histogram/_editor.js +++ b/src/ui/public/agg_types/__tests__/buckets/date_histogram/_editor.js @@ -2,6 +2,9 @@ import _ from 'lodash'; import $ from 'jquery'; import ngMock from 'ngMock'; import expect from 'expect.js'; +import FixturesStubbedLogstashIndexPatternProvider from 'fixtures/stubbed_logstash_index_pattern'; +import VisProvider from 'ui/Vis'; +import AggTypesBucketsIntervalOptionsProvider from 'ui/agg_types/buckets/_interval_options'; describe('editor', function () { var indexPattern; @@ -12,9 +15,9 @@ describe('editor', function () { beforeEach(ngMock.module('kibana')); beforeEach(ngMock.inject(function (Private, $injector, $compile) { - indexPattern = Private(require('fixtures/stubbed_logstash_index_pattern')); + indexPattern = Private(FixturesStubbedLogstashIndexPatternProvider); - var Vis = Private(require('ui/Vis')); + var Vis = Private(VisProvider); /** * Render the AggParams editor for the date histogram aggregation @@ -72,7 +75,7 @@ describe('editor', function () { beforeEach(ngMock.inject(function (Private) { field = _.sample(indexPattern.fields); - interval = _.sample(Private(require('ui/agg_types/buckets/_interval_options'))); + interval = _.sample(Private(AggTypesBucketsIntervalOptionsProvider)); params = render({ field: field, interval: interval }); })); diff --git a/src/ui/public/agg_types/__tests__/buckets/date_histogram/_params.js b/src/ui/public/agg_types/__tests__/buckets/date_histogram/_params.js index 1152b702fa9e80..406e0484313c99 100644 --- a/src/ui/public/agg_types/__tests__/buckets/date_histogram/_params.js +++ b/src/ui/public/agg_types/__tests__/buckets/date_histogram/_params.js @@ -2,6 +2,10 @@ import _ from 'lodash'; import moment from 'moment'; import expect from 'expect.js'; import ngMock from 'ngMock'; +import AggParamWriterProvider from '../../AggParamWriter'; +import FixturesStubbedLogstashIndexPatternProvider from 'fixtures/stubbed_logstash_index_pattern'; +import AggTypesIndexProvider from 'ui/agg_types/index'; +import VisAggConfigProvider from 'ui/Vis/AggConfig'; describe('params', function () { var paramWriter; @@ -14,13 +18,13 @@ describe('params', function () { beforeEach(ngMock.module('kibana')); beforeEach(ngMock.inject(function (Private, $injector) { - var AggParamWriter = Private(require('../../AggParamWriter')); - var indexPattern = Private(require('fixtures/stubbed_logstash_index_pattern')); + var AggParamWriter = Private(AggParamWriterProvider); + var indexPattern = Private(FixturesStubbedLogstashIndexPatternProvider); var timefilter = $injector.get('timefilter'); timeField = indexPattern.timeFieldName; - aggTypes = Private(require('ui/agg_types/index')); - AggConfig = Private(require('ui/Vis/AggConfig')); + aggTypes = Private(AggTypesIndexProvider); + AggConfig = Private(VisAggConfigProvider); paramWriter = new AggParamWriter({ aggType: 'date_histogram' }); writeInterval = function (interval) { diff --git a/src/ui/public/agg_types/__tests__/index.js b/src/ui/public/agg_types/__tests__/index.js index b9d03bf2d4c4f9..a180083ae82c05 100644 --- a/src/ui/public/agg_types/__tests__/index.js +++ b/src/ui/public/agg_types/__tests__/index.js @@ -5,6 +5,9 @@ import './AggParams'; import './bucketCountBetween'; import './buckets/_histogram'; import './buckets/_range'; +import AggTypesIndexProvider from 'ui/agg_types/index'; +import AggTypesBucketsBucketAggTypeProvider from 'ui/agg_types/buckets/_bucket_agg_type'; +import AggTypesMetricsMetricAggTypeProvider from 'ui/agg_types/metrics/MetricAggType'; describe('AggTypesComponent', function () { @@ -14,8 +17,8 @@ describe('AggTypesComponent', function () { beforeEach(ngMock.module('kibana')); beforeEach(ngMock.inject(function (Private) { - bucketAggs = Private(require('ui/agg_types/index')).byType.buckets; - BucketAggType = Private(require('ui/agg_types/buckets/_bucket_agg_type')); + bucketAggs = Private(AggTypesIndexProvider).byType.buckets; + BucketAggType = Private(AggTypesBucketsBucketAggTypeProvider); })); it('all extend BucketAggType', function () { @@ -31,8 +34,8 @@ describe('AggTypesComponent', function () { beforeEach(ngMock.module('kibana')); beforeEach(ngMock.inject(function (Private) { - metricAggs = Private(require('ui/agg_types/index')).byType.metrics; - MetricAggType = Private(require('ui/agg_types/metrics/MetricAggType')); + metricAggs = Private(AggTypesIndexProvider).byType.metrics; + MetricAggType = Private(AggTypesMetricsMetricAggTypeProvider); })); it('all extend MetricAggType', function () { diff --git a/src/ui/public/agg_types/__tests__/param_types/_calculate_interval.js b/src/ui/public/agg_types/__tests__/param_types/_calculate_interval.js index a6b7e11f9c116b..19c993cca8e901 100644 --- a/src/ui/public/agg_types/__tests__/param_types/_calculate_interval.js +++ b/src/ui/public/agg_types/__tests__/param_types/_calculate_interval.js @@ -1,6 +1,10 @@ import _ from 'lodash'; import expect from 'expect.js'; import ngMock from 'ngMock'; +import VisProvider from 'ui/Vis'; +import VisAggConfigProvider from 'ui/Vis/AggConfig'; +import FixturesStubbedLogstashIndexPatternProvider from 'fixtures/stubbed_logstash_index_pattern'; +import AggTypesParamTypesCalculateIntervalProvider from 'ui/agg_types/param_types/_calculate_interval'; describe('calculateInterval()', function () { var AggConfig; @@ -11,10 +15,10 @@ describe('calculateInterval()', function () { beforeEach(ngMock.module('kibana')); beforeEach(ngMock.inject(function (Private) { - Vis = Private(require('ui/Vis')); - AggConfig = Private(require('ui/Vis/AggConfig')); - indexPattern = Private(require('fixtures/stubbed_logstash_index_pattern')); - calculateInterval = Private(require('ui/agg_types/param_types/_calculate_interval')); + Vis = Private(VisProvider); + AggConfig = Private(VisAggConfigProvider); + indexPattern = Private(FixturesStubbedLogstashIndexPatternProvider); + calculateInterval = Private(AggTypesParamTypesCalculateIntervalProvider); })); var testInterval = function (option, expected) { diff --git a/src/ui/public/agg_types/__tests__/param_types/_field.js b/src/ui/public/agg_types/__tests__/param_types/_field.js index 6cccef2b8d149b..2ffff305145834 100644 --- a/src/ui/public/agg_types/__tests__/param_types/_field.js +++ b/src/ui/public/agg_types/__tests__/param_types/_field.js @@ -1,6 +1,8 @@ import _ from 'lodash'; import expect from 'expect.js'; import ngMock from 'ngMock'; +import AggTypesParamTypesBaseProvider from 'ui/agg_types/param_types/base'; +import AggTypesParamTypesFieldProvider from 'ui/agg_types/param_types/field'; describe('Field', function () { var BaseAggParam; @@ -9,8 +11,8 @@ describe('Field', function () { beforeEach(ngMock.module('kibana')); // fetch out deps beforeEach(ngMock.inject(function (Private) { - BaseAggParam = Private(require('ui/agg_types/param_types/base')); - FieldAggParam = Private(require('ui/agg_types/param_types/field')); + BaseAggParam = Private(AggTypesParamTypesBaseProvider); + FieldAggParam = Private(AggTypesParamTypesFieldProvider); })); describe('constructor', function () { diff --git a/src/ui/public/agg_types/__tests__/param_types/_optioned.js b/src/ui/public/agg_types/__tests__/param_types/_optioned.js index 0d31eff536f002..8404b16f75945b 100644 --- a/src/ui/public/agg_types/__tests__/param_types/_optioned.js +++ b/src/ui/public/agg_types/__tests__/param_types/_optioned.js @@ -1,6 +1,8 @@ import _ from 'lodash'; import expect from 'expect.js'; import ngMock from 'ngMock'; +import AggTypesParamTypesBaseProvider from 'ui/agg_types/param_types/base'; +import AggTypesParamTypesOptionedProvider from 'ui/agg_types/param_types/optioned'; describe('Optioned', function () { var BaseAggParam; @@ -9,8 +11,8 @@ describe('Optioned', function () { beforeEach(ngMock.module('kibana')); // fetch out deps beforeEach(ngMock.inject(function (Private) { - BaseAggParam = Private(require('ui/agg_types/param_types/base')); - OptionedAggParam = Private(require('ui/agg_types/param_types/optioned')); + BaseAggParam = Private(AggTypesParamTypesBaseProvider); + OptionedAggParam = Private(AggTypesParamTypesOptionedProvider); })); describe('constructor', function () { diff --git a/src/ui/public/agg_types/__tests__/param_types/_raw_json.js b/src/ui/public/agg_types/__tests__/param_types/_raw_json.js index cc2d8e5c22009c..af69dfefd2bcce 100644 --- a/src/ui/public/agg_types/__tests__/param_types/_raw_json.js +++ b/src/ui/public/agg_types/__tests__/param_types/_raw_json.js @@ -1,6 +1,8 @@ import _ from 'lodash'; import expect from 'expect.js'; import ngMock from 'ngMock'; +import AggTypesParamTypesBaseProvider from 'ui/agg_types/param_types/base'; +import AggTypesParamTypesRawJsonProvider from 'ui/agg_types/param_types/raw_json'; module.exports = describe('JSON', function () { @@ -28,8 +30,8 @@ module.exports = describe('JSON', function () { aggConfig = { params: {} }; output = { params: {} }; - BaseAggParam = Private(require('ui/agg_types/param_types/base')); - JsonAggParam = Private(require('ui/agg_types/param_types/raw_json')); + BaseAggParam = Private(AggTypesParamTypesBaseProvider); + JsonAggParam = Private(AggTypesParamTypesRawJsonProvider); initAggParam(); })); diff --git a/src/ui/public/agg_types/__tests__/param_types/_regex.js b/src/ui/public/agg_types/__tests__/param_types/_regex.js index 02b3196cf1e16e..9f89bc6a3e9e36 100644 --- a/src/ui/public/agg_types/__tests__/param_types/_regex.js +++ b/src/ui/public/agg_types/__tests__/param_types/_regex.js @@ -1,6 +1,10 @@ import _ from 'lodash'; import expect from 'expect.js'; import ngMock from 'ngMock'; +import AggTypesParamTypesBaseProvider from 'ui/agg_types/param_types/base'; +import AggTypesParamTypesRegexProvider from 'ui/agg_types/param_types/regex'; +import VisProvider from 'ui/Vis'; +import FixturesStubbedLogstashIndexPatternProvider from 'fixtures/stubbed_logstash_index_pattern'; describe('Regex', function () { var BaseAggParam; @@ -11,10 +15,10 @@ describe('Regex', function () { beforeEach(ngMock.module('kibana')); // fetch out deps beforeEach(ngMock.inject(function (Private) { - BaseAggParam = Private(require('ui/agg_types/param_types/base')); - RegexAggParam = Private(require('ui/agg_types/param_types/regex')); - Vis = Private(require('ui/Vis')); - indexPattern = Private(require('fixtures/stubbed_logstash_index_pattern')); + BaseAggParam = Private(AggTypesParamTypesBaseProvider); + RegexAggParam = Private(AggTypesParamTypesRegexProvider); + Vis = Private(VisProvider); + indexPattern = Private(FixturesStubbedLogstashIndexPatternProvider); })); describe('constructor', function () { diff --git a/src/ui/public/agg_types/__tests__/param_types/_string.js b/src/ui/public/agg_types/__tests__/param_types/_string.js index 28c9d20760f655..26f71d9fbc7dc2 100644 --- a/src/ui/public/agg_types/__tests__/param_types/_string.js +++ b/src/ui/public/agg_types/__tests__/param_types/_string.js @@ -1,6 +1,8 @@ import _ from 'lodash'; import expect from 'expect.js'; import ngMock from 'ngMock'; +import AggTypesParamTypesBaseProvider from 'ui/agg_types/param_types/base'; +import AggTypesParamTypesStringProvider from 'ui/agg_types/param_types/string'; module.exports = describe('String', function () { var paramName = 'json_test'; @@ -24,8 +26,8 @@ module.exports = describe('String', function () { // fetch our deps beforeEach(ngMock.inject(function (Private) { - BaseAggParam = Private(require('ui/agg_types/param_types/base')); - StringAggParam = Private(require('ui/agg_types/param_types/string')); + BaseAggParam = Private(AggTypesParamTypesBaseProvider); + StringAggParam = Private(AggTypesParamTypesStringProvider); aggConfig = { params: {} }; output = { params: {} }; diff --git a/src/ui/public/agg_types/buckets/_bucket_agg_type.js b/src/ui/public/agg_types/buckets/_bucket_agg_type.js index 86ca3fca962a0c..cc16227d886550 100644 --- a/src/ui/public/agg_types/buckets/_bucket_agg_type.js +++ b/src/ui/public/agg_types/buckets/_bucket_agg_type.js @@ -1,7 +1,8 @@ import _ from 'lodash'; +import AggTypesAggTypeProvider from 'ui/agg_types/AggType'; define(function (require) { return function BucketAggTypeProvider(Private) { - var AggType = Private(require('ui/agg_types/AggType')); + var AggType = Private(AggTypesAggTypeProvider); _.class(BucketAggType).inherits(AggType); function BucketAggType(config) { diff --git a/src/ui/public/agg_types/buckets/date_histogram.js b/src/ui/public/agg_types/buckets/date_histogram.js index 67e83ac3cf45bb..75f785953d78a3 100644 --- a/src/ui/public/agg_types/buckets/date_histogram.js +++ b/src/ui/public/agg_types/buckets/date_histogram.js @@ -3,13 +3,18 @@ import _ from 'lodash'; import moment from 'moment'; import 'ui/filters/field_type'; import 'ui/validateDateInterval'; +import AggTypesBucketsBucketAggTypeProvider from 'ui/agg_types/buckets/_bucket_agg_type'; +import TimeBucketsProvider from 'ui/time_buckets'; +import AggTypesBucketsCreateFilterDateHistogramProvider from 'ui/agg_types/buckets/create_filter/date_histogram'; +import AggTypesBucketsIntervalOptionsProvider from 'ui/agg_types/buckets/_interval_options'; +import ConfigDefaultsProvider from 'ui/config/defaults'; define(function (require) { return function DateHistogramAggType(timefilter, config, Private) { - var BucketAggType = Private(require('ui/agg_types/buckets/_bucket_agg_type')); - var TimeBuckets = Private(require('ui/time_buckets')); - var createFilter = Private(require('ui/agg_types/buckets/create_filter/date_histogram')); - var intervalOptions = Private(require('ui/agg_types/buckets/_interval_options')); - var configDefaults = Private(require('ui/config/defaults')); + var BucketAggType = Private(AggTypesBucketsBucketAggTypeProvider); + var TimeBuckets = Private(TimeBucketsProvider); + var createFilter = Private(AggTypesBucketsCreateFilterDateHistogramProvider); + var intervalOptions = Private(AggTypesBucketsIntervalOptionsProvider); + var configDefaults = Private(ConfigDefaultsProvider); var detectedTimezone = tzDetect.determine().name(); var tzOffset = moment().format('Z'); diff --git a/src/ui/public/agg_types/buckets/date_range.js b/src/ui/public/agg_types/buckets/date_range.js index 6b810dc892584b..932443986a206c 100644 --- a/src/ui/public/agg_types/buckets/date_range.js +++ b/src/ui/public/agg_types/buckets/date_range.js @@ -1,12 +1,15 @@ import moment from 'moment'; import dateRange from 'ui/utils/date_range'; import 'ui/directives/validate_date_math'; +import AggTypesBucketsBucketAggTypeProvider from 'ui/agg_types/buckets/_bucket_agg_type'; +import AggTypesBucketsCreateFilterDateRangeProvider from 'ui/agg_types/buckets/create_filter/date_range'; +import RegistryFieldFormatsProvider from 'ui/registry/field_formats'; define(function (require) { return function DateRangeAggDefinition(Private, config) { - var BucketAggType = Private(require('ui/agg_types/buckets/_bucket_agg_type')); - var createFilter = Private(require('ui/agg_types/buckets/create_filter/date_range')); - var fieldFormats = Private(require('ui/registry/field_formats')); + var BucketAggType = Private(AggTypesBucketsBucketAggTypeProvider); + var createFilter = Private(AggTypesBucketsCreateFilterDateRangeProvider); + var fieldFormats = Private(RegistryFieldFormatsProvider); return new BucketAggType({ diff --git a/src/ui/public/agg_types/buckets/filters.js b/src/ui/public/agg_types/buckets/filters.js index c60cfeee111336..19683f4bfbb5f4 100644 --- a/src/ui/public/agg_types/buckets/filters.js +++ b/src/ui/public/agg_types/buckets/filters.js @@ -1,10 +1,13 @@ import _ from 'lodash'; import angular from 'angular'; +import AggTypesBucketsBucketAggTypeProvider from 'ui/agg_types/buckets/_bucket_agg_type'; +import AggTypesBucketsCreateFilterFiltersProvider from 'ui/agg_types/buckets/create_filter/filters'; +import CourierDataSourceDecorateQueryProvider from 'ui/courier/data_source/_decorate_query'; define(function (require) { return function FiltersAggDefinition(Private, Notifier) { - var BucketAggType = Private(require('ui/agg_types/buckets/_bucket_agg_type')); - var createFilter = Private(require('ui/agg_types/buckets/create_filter/filters')); - var decorateQuery = Private(require('ui/courier/data_source/_decorate_query')); + var BucketAggType = Private(AggTypesBucketsBucketAggTypeProvider); + var createFilter = Private(AggTypesBucketsCreateFilterFiltersProvider); + var decorateQuery = Private(CourierDataSourceDecorateQueryProvider); var notif = new Notifier({ location: 'Filters Agg' }); return new BucketAggType({ diff --git a/src/ui/public/agg_types/buckets/geo_hash.js b/src/ui/public/agg_types/buckets/geo_hash.js index 89afc27585a8f3..d4f4b6d4051f62 100644 --- a/src/ui/public/agg_types/buckets/geo_hash.js +++ b/src/ui/public/agg_types/buckets/geo_hash.js @@ -1,8 +1,9 @@ import _ from 'lodash'; import moment from 'moment'; +import AggTypesBucketsBucketAggTypeProvider from 'ui/agg_types/buckets/_bucket_agg_type'; define(function (require) { return function GeoHashAggDefinition(Private, config) { - var BucketAggType = Private(require('ui/agg_types/buckets/_bucket_agg_type')); + var BucketAggType = Private(AggTypesBucketsBucketAggTypeProvider); var defaultPrecision = 2; function getPrecision(precision) { diff --git a/src/ui/public/agg_types/buckets/histogram.js b/src/ui/public/agg_types/buckets/histogram.js index 2bf328ed4fb8ad..7c680a4466be0a 100644 --- a/src/ui/public/agg_types/buckets/histogram.js +++ b/src/ui/public/agg_types/buckets/histogram.js @@ -1,10 +1,12 @@ import _ from 'lodash'; import moment from 'moment'; import 'ui/validateDateInterval'; +import AggTypesBucketsBucketAggTypeProvider from 'ui/agg_types/buckets/_bucket_agg_type'; +import AggTypesBucketsCreateFilterHistogramProvider from 'ui/agg_types/buckets/create_filter/histogram'; define(function (require) { return function HistogramAggDefinition(Private) { - var BucketAggType = Private(require('ui/agg_types/buckets/_bucket_agg_type')); - var createFilter = Private(require('ui/agg_types/buckets/create_filter/histogram')); + var BucketAggType = Private(AggTypesBucketsBucketAggTypeProvider); + var createFilter = Private(AggTypesBucketsCreateFilterHistogramProvider); return new BucketAggType({ diff --git a/src/ui/public/agg_types/buckets/ip_range.js b/src/ui/public/agg_types/buckets/ip_range.js index c4ba5fa250c528..346f6e9a8f2efd 100644 --- a/src/ui/public/agg_types/buckets/ip_range.js +++ b/src/ui/public/agg_types/buckets/ip_range.js @@ -1,11 +1,13 @@ import _ from 'lodash'; import 'ui/directives/validate_ip'; import 'ui/directives/validate_cidr_mask'; +import AggTypesBucketsBucketAggTypeProvider from 'ui/agg_types/buckets/_bucket_agg_type'; +import AggTypesBucketsCreateFilterIpRangeProvider from 'ui/agg_types/buckets/create_filter/ip_range'; define(function (require) { return function RangeAggDefinition(Private) { - var BucketAggType = Private(require('ui/agg_types/buckets/_bucket_agg_type')); - var createFilter = Private(require('ui/agg_types/buckets/create_filter/ip_range')); + var BucketAggType = Private(AggTypesBucketsBucketAggTypeProvider); + var createFilter = Private(AggTypesBucketsCreateFilterIpRangeProvider); return new BucketAggType({ name: 'ip_range', diff --git a/src/ui/public/agg_types/buckets/range.js b/src/ui/public/agg_types/buckets/range.js index bcc7e1238be9b8..e348fa3ab29968 100644 --- a/src/ui/public/agg_types/buckets/range.js +++ b/src/ui/public/agg_types/buckets/range.js @@ -1,10 +1,14 @@ import _ from 'lodash'; +import AggTypesBucketsBucketAggTypeProvider from 'ui/agg_types/buckets/_bucket_agg_type'; +import AggTypesBucketsCreateFilterRangeProvider from 'ui/agg_types/buckets/create_filter/range'; +import IndexPatternsFieldFormatFieldFormatProvider from 'ui/index_patterns/_field_format/FieldFormat'; +import RangeKeyProvider from './RangeKey'; define(function (require) { return function RangeAggDefinition(Private) { - var BucketAggType = Private(require('ui/agg_types/buckets/_bucket_agg_type')); - var createFilter = Private(require('ui/agg_types/buckets/create_filter/range')); - var FieldFormat = Private(require('ui/index_patterns/_field_format/FieldFormat')); - var RangeKey = Private(require('./RangeKey')); + var BucketAggType = Private(AggTypesBucketsBucketAggTypeProvider); + var createFilter = Private(AggTypesBucketsCreateFilterRangeProvider); + var FieldFormat = Private(IndexPatternsFieldFormatFieldFormatProvider); + var RangeKey = Private(RangeKeyProvider); var keyCaches = new WeakMap(); var formats = new WeakMap(); diff --git a/src/ui/public/agg_types/buckets/significant_terms.js b/src/ui/public/agg_types/buckets/significant_terms.js index be44232d937669..e746f76700a925 100644 --- a/src/ui/public/agg_types/buckets/significant_terms.js +++ b/src/ui/public/agg_types/buckets/significant_terms.js @@ -1,8 +1,10 @@ import _ from 'lodash'; +import AggTypesBucketsBucketAggTypeProvider from 'ui/agg_types/buckets/_bucket_agg_type'; +import AggTypesBucketsCreateFilterTermsProvider from 'ui/agg_types/buckets/create_filter/terms'; define(function (require) { return function SignificantTermsAggDefinition(Private) { - var BucketAggType = Private(require('ui/agg_types/buckets/_bucket_agg_type')); - var createFilter = Private(require('ui/agg_types/buckets/create_filter/terms')); + var BucketAggType = Private(AggTypesBucketsBucketAggTypeProvider); + var createFilter = Private(AggTypesBucketsCreateFilterTermsProvider); return new BucketAggType({ name: 'significant_terms', diff --git a/src/ui/public/agg_types/buckets/terms.js b/src/ui/public/agg_types/buckets/terms.js index e6c0cb62853d06..86302eb6bbd08a 100644 --- a/src/ui/public/agg_types/buckets/terms.js +++ b/src/ui/public/agg_types/buckets/terms.js @@ -1,11 +1,16 @@ import _ from 'lodash'; +import AggTypesBucketsBucketAggTypeProvider from 'ui/agg_types/buckets/_bucket_agg_type'; +import AggTypesBucketsBucketCountBetweenProvider from 'ui/agg_types/buckets/_bucket_count_between'; +import VisAggConfigProvider from 'ui/Vis/AggConfig'; +import VisSchemasProvider from 'ui/Vis/Schemas'; +import AggTypesBucketsCreateFilterTermsProvider from 'ui/agg_types/buckets/create_filter/terms'; define(function (require) { return function TermsAggDefinition(Private) { - var BucketAggType = Private(require('ui/agg_types/buckets/_bucket_agg_type')); - var bucketCountBetween = Private(require('ui/agg_types/buckets/_bucket_count_between')); - var AggConfig = Private(require('ui/Vis/AggConfig')); - var Schemas = Private(require('ui/Vis/Schemas')); - var createFilter = Private(require('ui/agg_types/buckets/create_filter/terms')); + var BucketAggType = Private(AggTypesBucketsBucketAggTypeProvider); + var bucketCountBetween = Private(AggTypesBucketsBucketCountBetweenProvider); + var AggConfig = Private(VisAggConfigProvider); + var Schemas = Private(VisSchemasProvider); + var createFilter = Private(AggTypesBucketsCreateFilterTermsProvider); var orderAggSchema = (new Schemas([ { diff --git a/src/ui/public/agg_types/index.js b/src/ui/public/agg_types/index.js index 996b7929156a47..fd2efdd2b0d0f9 100644 --- a/src/ui/public/agg_types/index.js +++ b/src/ui/public/agg_types/index.js @@ -1,31 +1,50 @@ import IndexedArray from 'ui/IndexedArray'; import 'ui/agg_types/AggParams'; +import AggTypesMetricsCountProvider from 'ui/agg_types/metrics/count'; +import AggTypesMetricsAvgProvider from 'ui/agg_types/metrics/avg'; +import AggTypesMetricsSumProvider from 'ui/agg_types/metrics/sum'; +import AggTypesMetricsMedianProvider from 'ui/agg_types/metrics/median'; +import AggTypesMetricsMinProvider from 'ui/agg_types/metrics/min'; +import AggTypesMetricsMaxProvider from 'ui/agg_types/metrics/max'; +import AggTypesMetricsStdDeviationProvider from 'ui/agg_types/metrics/stdDeviation'; +import AggTypesMetricsCardinalityProvider from 'ui/agg_types/metrics/cardinality'; +import AggTypesMetricsPercentilesProvider from 'ui/agg_types/metrics/percentiles'; +import AggTypesMetricsPercentileRanksProvider from 'ui/agg_types/metrics/percentile_ranks'; +import AggTypesBucketsDateHistogramProvider from 'ui/agg_types/buckets/date_histogram'; +import AggTypesBucketsHistogramProvider from 'ui/agg_types/buckets/histogram'; +import AggTypesBucketsRangeProvider from 'ui/agg_types/buckets/range'; +import AggTypesBucketsDateRangeProvider from 'ui/agg_types/buckets/date_range'; +import AggTypesBucketsIpRangeProvider from 'ui/agg_types/buckets/ip_range'; +import AggTypesBucketsTermsProvider from 'ui/agg_types/buckets/terms'; +import AggTypesBucketsFiltersProvider from 'ui/agg_types/buckets/filters'; +import AggTypesBucketsSignificantTermsProvider from 'ui/agg_types/buckets/significant_terms'; +import AggTypesBucketsGeoHashProvider from 'ui/agg_types/buckets/geo_hash'; define(function (require) { return function AggTypeService(Private) { var aggs = { metrics: [ - Private(require('ui/agg_types/metrics/count')), - Private(require('ui/agg_types/metrics/avg')), - Private(require('ui/agg_types/metrics/sum')), - Private(require('ui/agg_types/metrics/median')), - Private(require('ui/agg_types/metrics/min')), - Private(require('ui/agg_types/metrics/max')), - Private(require('ui/agg_types/metrics/stdDeviation')), - Private(require('ui/agg_types/metrics/cardinality')), - Private(require('ui/agg_types/metrics/percentiles')), - Private(require('ui/agg_types/metrics/percentile_ranks')) + Private(AggTypesMetricsCountProvider), + Private(AggTypesMetricsAvgProvider), + Private(AggTypesMetricsSumProvider), + Private(AggTypesMetricsMedianProvider), + Private(AggTypesMetricsMinProvider), + Private(AggTypesMetricsMaxProvider), + Private(AggTypesMetricsStdDeviationProvider), + Private(AggTypesMetricsCardinalityProvider), + Private(AggTypesMetricsPercentilesProvider), + Private(AggTypesMetricsPercentileRanksProvider) ], buckets: [ - Private(require('ui/agg_types/buckets/date_histogram')), - Private(require('ui/agg_types/buckets/histogram')), - Private(require('ui/agg_types/buckets/range')), - Private(require('ui/agg_types/buckets/date_range')), - Private(require('ui/agg_types/buckets/ip_range')), - Private(require('ui/agg_types/buckets/terms')), - Private(require('ui/agg_types/buckets/filters')), - Private(require('ui/agg_types/buckets/significant_terms')), - Private(require('ui/agg_types/buckets/geo_hash')) + Private(AggTypesBucketsDateHistogramProvider), + Private(AggTypesBucketsHistogramProvider), + Private(AggTypesBucketsRangeProvider), + Private(AggTypesBucketsDateRangeProvider), + Private(AggTypesBucketsIpRangeProvider), + Private(AggTypesBucketsTermsProvider), + Private(AggTypesBucketsFiltersProvider), + Private(AggTypesBucketsSignificantTermsProvider), + Private(AggTypesBucketsGeoHashProvider) ] }; diff --git a/src/ui/public/agg_types/metrics/MetricAggType.js b/src/ui/public/agg_types/metrics/MetricAggType.js index f7ab278e660d0a..67d442cfc1306f 100644 --- a/src/ui/public/agg_types/metrics/MetricAggType.js +++ b/src/ui/public/agg_types/metrics/MetricAggType.js @@ -1,8 +1,10 @@ import _ from 'lodash'; +import AggTypesAggTypeProvider from 'ui/agg_types/AggType'; +import RegistryFieldFormatsProvider from 'ui/registry/field_formats'; define(function (require) { return function MetricAggTypeProvider(Private) { - var AggType = Private(require('ui/agg_types/AggType')); - var fieldFormats = Private(require('ui/registry/field_formats')); + var AggType = Private(AggTypesAggTypeProvider); + var fieldFormats = Private(RegistryFieldFormatsProvider); _.class(MetricAggType).inherits(AggType); function MetricAggType(config) { diff --git a/src/ui/public/agg_types/metrics/avg.js b/src/ui/public/agg_types/metrics/avg.js index 1a7a1abb755c76..0aaa1818202f4b 100644 --- a/src/ui/public/agg_types/metrics/avg.js +++ b/src/ui/public/agg_types/metrics/avg.js @@ -1,6 +1,8 @@ +import AggTypesMetricsMetricAggTypeProvider from 'ui/agg_types/metrics/MetricAggType'; + define(function (require) { return function AggTypeMetricAvgProvider(Private) { - var MetricAggType = Private(require('ui/agg_types/metrics/MetricAggType')); + var MetricAggType = Private(AggTypesMetricsMetricAggTypeProvider); return new MetricAggType({ name: 'avg', diff --git a/src/ui/public/agg_types/metrics/cardinality.js b/src/ui/public/agg_types/metrics/cardinality.js index f4eef38de8b420..2b8c365f7669a7 100644 --- a/src/ui/public/agg_types/metrics/cardinality.js +++ b/src/ui/public/agg_types/metrics/cardinality.js @@ -1,7 +1,10 @@ +import AggTypesMetricsMetricAggTypeProvider from 'ui/agg_types/metrics/MetricAggType'; +import RegistryFieldFormatsProvider from 'ui/registry/field_formats'; + define(function (require) { return function AggTypeMetricCardinalityProvider(Private) { - var MetricAggType = Private(require('ui/agg_types/metrics/MetricAggType')); - var fieldFormats = Private(require('ui/registry/field_formats')); + var MetricAggType = Private(AggTypesMetricsMetricAggTypeProvider); + var fieldFormats = Private(RegistryFieldFormatsProvider); return new MetricAggType({ name: 'cardinality', diff --git a/src/ui/public/agg_types/metrics/count.js b/src/ui/public/agg_types/metrics/count.js index a4d49d3084dcb7..2552c54672795c 100644 --- a/src/ui/public/agg_types/metrics/count.js +++ b/src/ui/public/agg_types/metrics/count.js @@ -1,7 +1,10 @@ +import AggTypesMetricsMetricAggTypeProvider from 'ui/agg_types/metrics/MetricAggType'; +import RegistryFieldFormatsProvider from 'ui/registry/field_formats'; + define(function (require) { return function AggTypeMetricCountProvider(Private) { - var MetricAggType = Private(require('ui/agg_types/metrics/MetricAggType')); - var fieldFormats = Private(require('ui/registry/field_formats')); + var MetricAggType = Private(AggTypesMetricsMetricAggTypeProvider); + var fieldFormats = Private(RegistryFieldFormatsProvider); return new MetricAggType({ name: 'count', diff --git a/src/ui/public/agg_types/metrics/max.js b/src/ui/public/agg_types/metrics/max.js index aef10513b421c2..76228f16aa42cb 100644 --- a/src/ui/public/agg_types/metrics/max.js +++ b/src/ui/public/agg_types/metrics/max.js @@ -1,6 +1,8 @@ +import AggTypesMetricsMetricAggTypeProvider from 'ui/agg_types/metrics/MetricAggType'; + define(function (require) { return function AggTypeMetricMaxProvider(Private) { - var MetricAggType = Private(require('ui/agg_types/metrics/MetricAggType')); + var MetricAggType = Private(AggTypesMetricsMetricAggTypeProvider); return new MetricAggType({ name: 'max', diff --git a/src/ui/public/agg_types/metrics/median.js b/src/ui/public/agg_types/metrics/median.js index 826fe4588afa48..dade065475d298 100644 --- a/src/ui/public/agg_types/metrics/median.js +++ b/src/ui/public/agg_types/metrics/median.js @@ -1,9 +1,12 @@ import _ from 'lodash'; +import AggTypesMetricsMetricAggTypeProvider from 'ui/agg_types/metrics/MetricAggType'; +import AggTypesMetricsGetResponseAggConfigClassProvider from 'ui/agg_types/metrics/getResponseAggConfigClass'; +import AggTypesMetricsPercentilesProvider from 'ui/agg_types/metrics/percentiles'; define(function (require) { return function AggTypeMetricMaxProvider(Private) { - var MetricAggType = Private(require('ui/agg_types/metrics/MetricAggType')); - var getResponseAggConfigClass = Private(require('ui/agg_types/metrics/getResponseAggConfigClass')); - var percentiles = Private(require('ui/agg_types/metrics/percentiles')); + var MetricAggType = Private(AggTypesMetricsMetricAggTypeProvider); + var getResponseAggConfigClass = Private(AggTypesMetricsGetResponseAggConfigClassProvider); + var percentiles = Private(AggTypesMetricsPercentilesProvider); return new MetricAggType({ name: 'median', diff --git a/src/ui/public/agg_types/metrics/min.js b/src/ui/public/agg_types/metrics/min.js index 250a5001b14890..0c34de3768e15c 100644 --- a/src/ui/public/agg_types/metrics/min.js +++ b/src/ui/public/agg_types/metrics/min.js @@ -1,6 +1,8 @@ +import AggTypesMetricsMetricAggTypeProvider from 'ui/agg_types/metrics/MetricAggType'; + define(function (require) { return function AggTypeMetricMinProvider(Private) { - var MetricAggType = Private(require('ui/agg_types/metrics/MetricAggType')); + var MetricAggType = Private(AggTypesMetricsMetricAggTypeProvider); return new MetricAggType({ name: 'min', diff --git a/src/ui/public/agg_types/metrics/percentile_ranks.js b/src/ui/public/agg_types/metrics/percentile_ranks.js index eb5407fd675e3e..ce4e8dc5a3ba90 100644 --- a/src/ui/public/agg_types/metrics/percentile_ranks.js +++ b/src/ui/public/agg_types/metrics/percentile_ranks.js @@ -1,12 +1,15 @@ import _ from 'lodash'; import valuesEditor from 'ui/agg_types/controls/percentile_ranks.html'; import 'ui/number_list'; +import AggTypesMetricsMetricAggTypeProvider from 'ui/agg_types/metrics/MetricAggType'; +import AggTypesMetricsGetResponseAggConfigClassProvider from 'ui/agg_types/metrics/getResponseAggConfigClass'; +import RegistryFieldFormatsProvider from 'ui/registry/field_formats'; define(function (require) { return function AggTypeMetricPercentileRanksProvider(Private) { - var MetricAggType = Private(require('ui/agg_types/metrics/MetricAggType')); - var getResponseAggConfigClass = Private(require('ui/agg_types/metrics/getResponseAggConfigClass')); - var fieldFormats = Private(require('ui/registry/field_formats')); + var MetricAggType = Private(AggTypesMetricsMetricAggTypeProvider); + var getResponseAggConfigClass = Private(AggTypesMetricsGetResponseAggConfigClassProvider); + var fieldFormats = Private(RegistryFieldFormatsProvider); // required by the values editor diff --git a/src/ui/public/agg_types/metrics/percentiles.js b/src/ui/public/agg_types/metrics/percentiles.js index ad0c2262123c3e..a417a438059e37 100644 --- a/src/ui/public/agg_types/metrics/percentiles.js +++ b/src/ui/public/agg_types/metrics/percentiles.js @@ -2,12 +2,15 @@ import _ from 'lodash'; import ordinalSuffix from 'ui/utils/ordinal_suffix'; import percentsEditor from 'ui/agg_types/controls/percentiles.html'; import 'ui/number_list'; +import AggTypesMetricsMetricAggTypeProvider from 'ui/agg_types/metrics/MetricAggType'; +import AggTypesMetricsGetResponseAggConfigClassProvider from 'ui/agg_types/metrics/getResponseAggConfigClass'; +import RegistryFieldFormatsProvider from 'ui/registry/field_formats'; define(function (require) { return function AggTypeMetricPercentilesProvider(Private) { - var MetricAggType = Private(require('ui/agg_types/metrics/MetricAggType')); - var getResponseAggConfigClass = Private(require('ui/agg_types/metrics/getResponseAggConfigClass')); - var fieldFormats = Private(require('ui/registry/field_formats')); + var MetricAggType = Private(AggTypesMetricsMetricAggTypeProvider); + var getResponseAggConfigClass = Private(AggTypesMetricsGetResponseAggConfigClassProvider); + var fieldFormats = Private(RegistryFieldFormatsProvider); // required by the percentiles editor diff --git a/src/ui/public/agg_types/metrics/stdDeviation.js b/src/ui/public/agg_types/metrics/stdDeviation.js index 37c4a8a47ab5d5..4d80e5d3cc4309 100644 --- a/src/ui/public/agg_types/metrics/stdDeviation.js +++ b/src/ui/public/agg_types/metrics/stdDeviation.js @@ -1,8 +1,10 @@ import _ from 'lodash'; +import AggTypesMetricsMetricAggTypeProvider from 'ui/agg_types/metrics/MetricAggType'; +import AggTypesMetricsGetResponseAggConfigClassProvider from 'ui/agg_types/metrics/getResponseAggConfigClass'; define(function (require) { return function AggTypeMetricStandardDeviationProvider(Private) { - var MetricAggType = Private(require('ui/agg_types/metrics/MetricAggType')); - var getResponseAggConfigClass = Private(require('ui/agg_types/metrics/getResponseAggConfigClass')); + var MetricAggType = Private(AggTypesMetricsMetricAggTypeProvider); + var getResponseAggConfigClass = Private(AggTypesMetricsGetResponseAggConfigClassProvider); var responseAggConfigProps = { valProp: function () { diff --git a/src/ui/public/agg_types/metrics/sum.js b/src/ui/public/agg_types/metrics/sum.js index 5eced3aea75b89..b51e264913b982 100644 --- a/src/ui/public/agg_types/metrics/sum.js +++ b/src/ui/public/agg_types/metrics/sum.js @@ -1,6 +1,8 @@ +import AggTypesMetricsMetricAggTypeProvider from 'ui/agg_types/metrics/MetricAggType'; + define(function (require) { return function AggTypeMetricSumProvider(Private) { - var MetricAggType = Private(require('ui/agg_types/metrics/MetricAggType')); + var MetricAggType = Private(AggTypesMetricsMetricAggTypeProvider); return new MetricAggType({ name: 'sum', diff --git a/src/ui/public/agg_types/param_types/field.js b/src/ui/public/agg_types/param_types/field.js index fd8f1d8fe9b9d6..4eeeb38e348e21 100644 --- a/src/ui/public/agg_types/param_types/field.js +++ b/src/ui/public/agg_types/param_types/field.js @@ -1,10 +1,11 @@ import { SavedObjectNotFound } from 'ui/errors'; import _ from 'lodash'; import editorHtml from 'ui/agg_types/controls/field.html'; +import AggTypesParamTypesBaseProvider from 'ui/agg_types/param_types/base'; define(function (require) { return function FieldAggParamFactory(Private) { - var BaseAggParam = Private(require('ui/agg_types/param_types/base')); + var BaseAggParam = Private(AggTypesParamTypesBaseProvider); _.class(FieldAggParam).inherits(BaseAggParam); function FieldAggParam(config) { diff --git a/src/ui/public/agg_types/param_types/optioned.js b/src/ui/public/agg_types/param_types/optioned.js index f72ef4e2fb9565..6d3d51687691d8 100644 --- a/src/ui/public/agg_types/param_types/optioned.js +++ b/src/ui/public/agg_types/param_types/optioned.js @@ -1,9 +1,10 @@ import _ from 'lodash'; import IndexedArray from 'ui/IndexedArray'; +import AggTypesParamTypesBaseProvider from 'ui/agg_types/param_types/base'; define(function (require) { return function OptionedAggParamFactory(Private) { - var BaseAggParam = Private(require('ui/agg_types/param_types/base')); + var BaseAggParam = Private(AggTypesParamTypesBaseProvider); _.class(OptionedAggParam).inherits(BaseAggParam); function OptionedAggParam(config) { diff --git a/src/ui/public/agg_types/param_types/raw_json.js b/src/ui/public/agg_types/param_types/raw_json.js index 8e5ce33f3579fc..5f4c6d81a3159e 100644 --- a/src/ui/public/agg_types/param_types/raw_json.js +++ b/src/ui/public/agg_types/param_types/raw_json.js @@ -1,9 +1,10 @@ import _ from 'lodash'; import editorHtml from 'ui/agg_types/controls/raw_json.html'; +import AggTypesParamTypesBaseProvider from 'ui/agg_types/param_types/base'; define(function (require) { return function RawJSONAggParamFactory(Private) { - var BaseAggParam = Private(require('ui/agg_types/param_types/base')); + var BaseAggParam = Private(AggTypesParamTypesBaseProvider); _.class(RawJSONAggParam).inherits(BaseAggParam); function RawJSONAggParam(config) { diff --git a/src/ui/public/agg_types/param_types/regex.js b/src/ui/public/agg_types/param_types/regex.js index 43cad9a6a04a38..46f5e1a6febaa1 100644 --- a/src/ui/public/agg_types/param_types/regex.js +++ b/src/ui/public/agg_types/param_types/regex.js @@ -1,9 +1,10 @@ import _ from 'lodash'; import editorHtml from 'ui/agg_types/controls/regular_expression.html'; +import AggTypesParamTypesBaseProvider from 'ui/agg_types/param_types/base'; define(function (require) { return function RegexAggParamFactory(Private) { - var BaseAggParam = Private(require('ui/agg_types/param_types/base')); + var BaseAggParam = Private(AggTypesParamTypesBaseProvider); _.class(RegexAggParam).inherits(BaseAggParam); function RegexAggParam(config) { diff --git a/src/ui/public/agg_types/param_types/string.js b/src/ui/public/agg_types/param_types/string.js index 991441ce0635c8..9c14f02ca04ded 100644 --- a/src/ui/public/agg_types/param_types/string.js +++ b/src/ui/public/agg_types/param_types/string.js @@ -1,9 +1,10 @@ import _ from 'lodash'; import editorHtml from 'ui/agg_types/controls/string.html'; +import AggTypesParamTypesBaseProvider from 'ui/agg_types/param_types/base'; define(function (require) { return function FieldAggParamFactory(Private) { - var BaseAggParam = Private(require('ui/agg_types/param_types/base')); + var BaseAggParam = Private(AggTypesParamTypesBaseProvider); _.class(ScriptAggParam).inherits(BaseAggParam); function ScriptAggParam(config) { diff --git a/src/ui/public/config/__tests__/config.js b/src/ui/public/config/__tests__/config.js index 63dd3b5dfff0d0..03f26c4b6707fd 100644 --- a/src/ui/public/config/__tests__/config.js +++ b/src/ui/public/config/__tests__/config.js @@ -1,5 +1,6 @@ import expect from 'expect.js'; import ngMock from 'ngMock'; +import ConfigDefaultsProvider from 'ui/config/defaults'; describe('config component', function () { var $scope; var config; @@ -9,7 +10,7 @@ describe('config component', function () { beforeEach(ngMock.inject(function ($injector, Private) { config = $injector.get('config'); $scope = $injector.get('$rootScope'); - defaults = Private(require('ui/config/defaults')); + defaults = Private(ConfigDefaultsProvider); })); describe('#get', function () { diff --git a/src/ui/public/config/_delayed_updater.js b/src/ui/public/config/_delayed_updater.js index 0c67ea3a48c4fc..33a82b1c323f4c 100644 --- a/src/ui/public/config/_delayed_updater.js +++ b/src/ui/public/config/_delayed_updater.js @@ -1,10 +1,11 @@ import _ from 'lodash'; import angular from 'angular'; +import ConfigValsProvider from 'ui/config/_vals'; define(function (require) { return function DelayedUpdaterFactory(Private, $rootScope, Promise, Notifier) { var notify = new Notifier(); - var vals = Private(require('ui/config/_vals')); + var vals = Private(ConfigValsProvider); return function DelayedUpdater(doc) { var updater = this; diff --git a/src/ui/public/config/config.js b/src/ui/public/config/config.js index 524494873f36d6..63cd51f61982d6 100644 --- a/src/ui/public/config/config.js +++ b/src/ui/public/config/config.js @@ -1,5 +1,9 @@ import angular from 'angular'; import _ from 'lodash'; +import ConfigDefaultsProvider from 'ui/config/defaults'; +import ConfigDelayedUpdaterProvider from 'ui/config/_delayed_updater'; +import ConfigValsProvider from 'ui/config/_vals'; +import CourierDataSourceDocSourceProvider from 'ui/courier/data_source/doc_source'; define(function (require) { var module = require('ui/modules').get('kibana/config', [ 'kibana/notify' @@ -13,9 +17,9 @@ define(function (require) { module.service('config', function (Private, Notifier, kbnVersion, kbnIndex, $rootScope, buildNum) { var config = this; - var defaults = Private(require('ui/config/defaults')); - var DelayedUpdater = Private(require('ui/config/_delayed_updater')); - var vals = Private(require('ui/config/_vals')); + var defaults = Private(ConfigDefaultsProvider); + var DelayedUpdater = Private(ConfigDelayedUpdaterProvider); + var vals = Private(ConfigValsProvider); var notify = new Notifier({ location: 'Config' @@ -25,7 +29,7 @@ define(function (require) { // update once it is requested by calling #set() or #clear(). var updater; - var DocSource = Private(require('ui/courier/data_source/doc_source')); + var DocSource = Private(CourierDataSourceDocSourceProvider); var doc = (new DocSource()) .index(kbnIndex) .type('config') diff --git a/src/ui/public/courier/courier.js b/src/ui/public/courier/courier.js index 0b839b90fab92d..17185c3d9fbd96 100644 --- a/src/ui/public/courier/courier.js +++ b/src/ui/public/courier/courier.js @@ -4,6 +4,17 @@ import 'ui/es'; import 'ui/promises'; import 'ui/safe_confirm'; import 'ui/index_patterns'; +import CourierDataSourceDocSourceProvider from 'ui/courier/data_source/doc_source'; +import CourierDataSourceSearchSourceProvider from 'ui/courier/data_source/search_source'; +import CourierFetchStrategySearchProvider from 'ui/courier/fetch/strategy/search'; +import CourierRequestQueueProvider from 'ui/courier/_request_queue'; +import CourierErrorHandlersProvider from 'ui/courier/_error_handlers'; +import CourierFetchFetchProvider from 'ui/courier/fetch/fetch'; +import CourierLooperDocProvider from 'ui/courier/looper/doc'; +import CourierLooperSearchProvider from 'ui/courier/looper/search'; +import CourierDataSourceRootSearchSourceProvider from 'ui/courier/data_source/_root_search_source'; +import CourierSavedObjectSavedObjectProvider from 'ui/courier/saved_object/saved_object'; +import CourierRedirectWhenMissingProvider from 'ui/courier/_redirect_when_missing'; define(function (require) { @@ -12,23 +23,23 @@ define(function (require) { function Courier() { var self = this; - var DocSource = Private(require('ui/courier/data_source/doc_source')); - var SearchSource = Private(require('ui/courier/data_source/search_source')); - var searchStrategy = Private(require('ui/courier/fetch/strategy/search')); + var DocSource = Private(CourierDataSourceDocSourceProvider); + var SearchSource = Private(CourierDataSourceSearchSourceProvider); + var searchStrategy = Private(CourierFetchStrategySearchProvider); - var requestQueue = Private(require('ui/courier/_request_queue')); - var errorHandlers = Private(require('ui/courier/_error_handlers')); + var requestQueue = Private(CourierRequestQueueProvider); + var errorHandlers = Private(CourierErrorHandlersProvider); - var fetch = Private(require('ui/courier/fetch/fetch')); - var docLooper = self.docLooper = Private(require('ui/courier/looper/doc')); - var searchLooper = self.searchLooper = Private(require('ui/courier/looper/search')); + var fetch = Private(CourierFetchFetchProvider); + var docLooper = self.docLooper = Private(CourierLooperDocProvider); + var searchLooper = self.searchLooper = Private(CourierLooperSearchProvider); // expose some internal modules - self.setRootSearchSource = Private(require('ui/courier/data_source/_root_search_source')).set; + self.setRootSearchSource = Private(CourierDataSourceRootSearchSourceProvider).set; - self.SavedObject = Private(require('ui/courier/saved_object/saved_object')); + self.SavedObject = Private(CourierSavedObjectSavedObjectProvider); self.indexPatterns = indexPatterns; - self.redirectWhenMissing = Private(require('ui/courier/_redirect_when_missing')); + self.redirectWhenMissing = Private(CourierRedirectWhenMissingProvider); self.DocSource = DocSource; self.SearchSource = SearchSource; diff --git a/src/ui/public/courier/data_source/__tests__/decorate_query.js b/src/ui/public/courier/data_source/__tests__/decorate_query.js index fa019daf0dbdfe..68faabfe947ebf 100644 --- a/src/ui/public/courier/data_source/__tests__/decorate_query.js +++ b/src/ui/public/courier/data_source/__tests__/decorate_query.js @@ -2,6 +2,7 @@ import moment from 'moment'; import expect from 'expect.js'; import ngMock from 'ngMock'; import _ from 'lodash'; +import CourierDataSourceDecorateQueryProvider from 'ui/courier/data_source/_decorate_query'; describe('Query decorator', function () { @@ -28,7 +29,7 @@ describe('Query decorator', function () { beforeEach(ngMock.inject(function (Private, $injector, _config_) { config = _config_; - fn = Private(require('ui/courier/data_source/_decorate_query')); + fn = Private(CourierDataSourceDecorateQueryProvider); })); it('should be a function', function () { diff --git a/src/ui/public/courier/data_source/__tests__/normalize_sort_request.js b/src/ui/public/courier/data_source/__tests__/normalize_sort_request.js index 26ca3642618f89..1c255c8383db58 100644 --- a/src/ui/public/courier/data_source/__tests__/normalize_sort_request.js +++ b/src/ui/public/courier/data_source/__tests__/normalize_sort_request.js @@ -1,6 +1,8 @@ import 'ui/private'; import ngMock from 'ngMock'; import expect from 'expect.js'; +import CourierDataSourceNormalizeSortRequestProvider from 'ui/courier/data_source/_normalize_sort_request'; +import FixturesStubbedLogstashIndexPatternProvider from 'fixtures/stubbed_logstash_index_pattern'; describe('SearchSource#normalizeSortRequest', function () { @@ -11,8 +13,8 @@ describe('SearchSource#normalizeSortRequest', function () { beforeEach(ngMock.module('kibana')); beforeEach(ngMock.inject(function (Private) { - normalizeSortRequest = Private(require('ui/courier/data_source/_normalize_sort_request')); - indexPattern = Private(require('fixtures/stubbed_logstash_index_pattern')); + normalizeSortRequest = Private(CourierDataSourceNormalizeSortRequestProvider); + indexPattern = Private(FixturesStubbedLogstashIndexPatternProvider); normalizedSort = [{ someField: { diff --git a/src/ui/public/courier/data_source/_abstract.js b/src/ui/public/courier/data_source/_abstract.js index d00d03b039feaa..ad4410bfb517d7 100644 --- a/src/ui/public/courier/data_source/_abstract.js +++ b/src/ui/public/courier/data_source/_abstract.js @@ -1,11 +1,15 @@ import _ from 'lodash'; import angular from 'angular'; +import CourierRequestQueueProvider from 'ui/courier/_request_queue'; +import CourierErrorHandlersProvider from 'ui/courier/_error_handlers'; +import CourierFetchFetchProvider from 'ui/courier/fetch/fetch'; +import CourierDataSourceDecorateQueryProvider from 'ui/courier/data_source/_decorate_query'; define(function (require) { return function SourceAbstractFactory(Private, Promise, PromiseEmitter) { - var requestQueue = Private(require('ui/courier/_request_queue')); - var errorHandlers = Private(require('ui/courier/_error_handlers')); - var courierFetch = Private(require('ui/courier/fetch/fetch')); + var requestQueue = Private(CourierRequestQueueProvider); + var errorHandlers = Private(CourierErrorHandlersProvider); + var courierFetch = Private(CourierFetchFetchProvider); function SourceAbstract(initialState, strategy) { var self = this; @@ -265,7 +269,7 @@ define(function (require) { .then(function () { if (type === 'search') { // This is down here to prevent the circular dependency - var decorateQuery = Private(require('ui/courier/data_source/_decorate_query')); + var decorateQuery = Private(CourierDataSourceDecorateQueryProvider); flatState.body = flatState.body || {}; diff --git a/src/ui/public/courier/data_source/_doc_send_to_es.js b/src/ui/public/courier/data_source/_doc_send_to_es.js index 5c76f69c4fef7a..9fc20bf6234dd4 100644 --- a/src/ui/public/courier/data_source/_doc_send_to_es.js +++ b/src/ui/public/courier/data_source/_doc_send_to_es.js @@ -1,10 +1,12 @@ import _ from 'lodash'; import errors from 'ui/errors'; +import CourierRequestQueueProvider from 'ui/courier/_request_queue'; +import CourierFetchFetchProvider from 'ui/courier/fetch/fetch'; define(function (require) { return function (Promise, Private, es) { - var requestQueue = Private(require('ui/courier/_request_queue')); - var courierFetch = Private(require('ui/courier/fetch/fetch')); + var requestQueue = Private(CourierRequestQueueProvider); + var courierFetch = Private(CourierFetchFetchProvider); /** * Backend for doUpdate and doIndex diff --git a/src/ui/public/courier/data_source/_root_search_source.js b/src/ui/public/courier/data_source/_root_search_source.js index 1c53f6771dd460..70d01d3caf1b52 100644 --- a/src/ui/public/courier/data_source/_root_search_source.js +++ b/src/ui/public/courier/data_source/_root_search_source.js @@ -1,6 +1,8 @@ +import CourierDataSourceSearchSourceProvider from 'ui/courier/data_source/search_source'; + define(function (require) { return function RootSearchSource(Private, $rootScope, timefilter, Notifier) { - var SearchSource = Private(require('ui/courier/data_source/search_source')); + var SearchSource = Private(CourierDataSourceSearchSourceProvider); var notify = new Notifier({ location: 'Root Search Source' }); diff --git a/src/ui/public/courier/data_source/doc_source.js b/src/ui/public/courier/data_source/doc_source.js index e5c793d71dc50f..01815baaf939dc 100644 --- a/src/ui/public/courier/data_source/doc_source.js +++ b/src/ui/public/courier/data_source/doc_source.js @@ -1,11 +1,15 @@ import _ from 'lodash'; +import CourierDataSourceDocSendToEsProvider from 'ui/courier/data_source/_doc_send_to_es'; +import CourierDataSourceAbstractProvider from 'ui/courier/data_source/_abstract'; +import CourierFetchRequestDocProvider from 'ui/courier/fetch/request/doc'; +import CourierFetchStrategyDocProvider from 'ui/courier/fetch/strategy/doc'; define(function (require) { return function DocSourceFactory(Private, Promise, es, sessionStorage) { - var sendToEs = Private(require('ui/courier/data_source/_doc_send_to_es')); - var SourceAbstract = Private(require('ui/courier/data_source/_abstract')); - var DocRequest = Private(require('ui/courier/fetch/request/doc')); - var docStrategy = Private(require('ui/courier/fetch/strategy/doc')); + var sendToEs = Private(CourierDataSourceDocSendToEsProvider); + var SourceAbstract = Private(CourierDataSourceAbstractProvider); + var DocRequest = Private(CourierFetchRequestDocProvider); + var docStrategy = Private(CourierFetchStrategyDocProvider); _.class(DocSource).inherits(SourceAbstract); function DocSource(initialState) { diff --git a/src/ui/public/courier/data_source/search_source.js b/src/ui/public/courier/data_source/search_source.js index 8059de4368a34b..40f81ad78d101f 100644 --- a/src/ui/public/courier/data_source/search_source.js +++ b/src/ui/public/courier/data_source/search_source.js @@ -1,12 +1,17 @@ import _ from 'lodash'; import rootSearchSource from 'ui/courier/data_source/_root_search_source'; +import CourierDataSourceAbstractProvider from 'ui/courier/data_source/_abstract'; +import CourierFetchRequestSearchProvider from 'ui/courier/fetch/request/search'; +import CourierFetchRequestSegmentedProvider from 'ui/courier/fetch/request/segmented'; +import CourierFetchStrategySearchProvider from 'ui/courier/fetch/strategy/search'; +import CourierDataSourceNormalizeSortRequestProvider from 'ui/courier/data_source/_normalize_sort_request'; define(function (require) { return function SearchSourceFactory(Promise, Private) { - var SourceAbstract = Private(require('ui/courier/data_source/_abstract')); - var SearchRequest = Private(require('ui/courier/fetch/request/search')); - var SegmentedRequest = Private(require('ui/courier/fetch/request/segmented')); - var searchStrategy = Private(require('ui/courier/fetch/strategy/search')); - var normalizeSortRequest = Private(require('ui/courier/data_source/_normalize_sort_request')); + var SourceAbstract = Private(CourierDataSourceAbstractProvider); + var SearchRequest = Private(CourierFetchRequestSearchProvider); + var SegmentedRequest = Private(CourierFetchRequestSegmentedProvider); + var searchStrategy = Private(CourierFetchStrategySearchProvider); + var normalizeSortRequest = Private(CourierDataSourceNormalizeSortRequestProvider); _.class(SearchSource).inherits(SourceAbstract); function SearchSource(initialState) { diff --git a/src/ui/public/courier/fetch/__tests__/doc.js b/src/ui/public/courier/fetch/__tests__/doc.js index 50c92cf81941e9..25c7e78677912c 100644 --- a/src/ui/public/courier/fetch/__tests__/doc.js +++ b/src/ui/public/courier/fetch/__tests__/doc.js @@ -1,6 +1,8 @@ import sinon from 'auto-release-sinon'; import expect from 'expect.js'; import ngMock from 'ngMock'; +import CourierDataSourceDocSourceProvider from 'ui/courier/data_source/doc_source'; +import CourierFetchRequestDocProvider from 'ui/courier/fetch/request/doc'; describe('Courier DocFetchRequest class', function () { @@ -13,8 +15,8 @@ describe('Courier DocFetchRequest class', function () { beforeEach(ngMock.module('kibana')); beforeEach(ngMock.inject(function (Private, Promise, $injector) { - var DocSource = Private(require('ui/courier/data_source/doc_source')); - var DocFetchRequest = Private(require('ui/courier/fetch/request/doc')); + var DocSource = Private(CourierDataSourceDocSourceProvider); + var DocFetchRequest = Private(CourierFetchRequestDocProvider); storage = $injector.get('localStorage').store = diff --git a/src/ui/public/courier/fetch/__tests__/fetch.js b/src/ui/public/courier/fetch/__tests__/fetch.js index 82ba398805c97c..dad88dd6c93dea 100644 --- a/src/ui/public/courier/fetch/__tests__/fetch.js +++ b/src/ui/public/courier/fetch/__tests__/fetch.js @@ -5,6 +5,8 @@ import sinon from 'auto-release-sinon'; import FetchProvider from 'ui/courier/fetch'; import IndexPatternProvider from 'fixtures/stubbed_logstash_index_pattern'; import searchResp from 'fixtures/search_response'; +import CourierDataSourceDocSourceProvider from 'ui/courier/data_source/doc_source'; +import CourierDataSourceSearchSourceProvider from 'ui/courier/data_source/search_source'; describe('Fetch service', function () { require('testUtils/noDigestPromises').activateForSuite(); @@ -22,8 +24,8 @@ describe('Fetch service', function () { Promise = $injector.get('Promise'); fetch = Private(FetchProvider); indexPattern = Private(IndexPatternProvider); - DocSource = Private(require('ui/courier/data_source/doc_source')); - SearchSource = Private(require('ui/courier/data_source/search_source')); + DocSource = Private(CourierDataSourceDocSourceProvider); + SearchSource = Private(CourierDataSourceSearchSourceProvider); })); describe('#doc(docSource)', function () { diff --git a/src/ui/public/courier/fetch/__tests__/fetch_these.js b/src/ui/public/courier/fetch/__tests__/fetch_these.js index 28fd8f32894a0e..57d085394bb02f 100644 --- a/src/ui/public/courier/fetch/__tests__/fetch_these.js +++ b/src/ui/public/courier/fetch/__tests__/fetch_these.js @@ -2,6 +2,7 @@ import _ from 'lodash'; import sinon from 'auto-release-sinon'; import expect from 'expect.js'; import ngMock from 'ngMock'; +import CourierFetchFetchTheseProvider from 'ui/courier/fetch/_fetch_these'; describe('ui/courier/fetch/_fetch_these', () => { let Promise; @@ -29,7 +30,7 @@ describe('ui/courier/fetch/_fetch_these', () => { beforeEach(ngMock.inject((Private, $injector) => { $rootScope = $injector.get('$rootScope'); Promise = $injector.get('Promise'); - fetchThese = Private(require('ui/courier/fetch/_fetch_these')); + fetchThese = Private(CourierFetchFetchTheseProvider); request = mockRequest(); requests = [ request ]; })); diff --git a/src/ui/public/courier/fetch/_call_client.js b/src/ui/public/courier/fetch/_call_client.js index 3c02fc88f29e9b..0a00df82e379d6 100644 --- a/src/ui/public/courier/fetch/_call_client.js +++ b/src/ui/public/courier/fetch/_call_client.js @@ -1,12 +1,15 @@ import _ from 'lodash'; +import CourierFetchIsRequestProvider from 'ui/courier/fetch/_is_request'; +import CourierFetchMergeDuplicateRequestsProvider from 'ui/courier/fetch/_merge_duplicate_requests'; +import CourierFetchReqStatusProvider from 'ui/courier/fetch/_req_status'; define(function (require) { return function CourierFetchCallClient(Private, Promise, es, esShardTimeout, sessionId) { - var isRequest = Private(require('ui/courier/fetch/_is_request')); - var mergeDuplicateRequests = Private(require('ui/courier/fetch/_merge_duplicate_requests')); + var isRequest = Private(CourierFetchIsRequestProvider); + var mergeDuplicateRequests = Private(CourierFetchMergeDuplicateRequestsProvider); - var ABORTED = Private(require('ui/courier/fetch/_req_status')).ABORTED; - var DUPLICATE = Private(require('ui/courier/fetch/_req_status')).DUPLICATE; + var ABORTED = Private(CourierFetchReqStatusProvider).ABORTED; + var DUPLICATE = Private(CourierFetchReqStatusProvider).DUPLICATE; function callClient(strategy, requests) { // merging docs can change status to DUPLICATE, capture new statuses diff --git a/src/ui/public/courier/fetch/_call_response_handlers.js b/src/ui/public/courier/fetch/_call_response_handlers.js index bee86023bfbf06..88317cd07d06fa 100644 --- a/src/ui/public/courier/fetch/_call_response_handlers.js +++ b/src/ui/public/courier/fetch/_call_response_handlers.js @@ -1,11 +1,13 @@ import { SearchTimeout } from 'ui/errors'; import { RequestFailure } from 'ui/errors'; import { ShardFailure } from 'ui/errors'; +import CourierFetchReqStatusProvider from 'ui/courier/fetch/_req_status'; +import CourierFetchNotifierProvider from 'ui/courier/fetch/_notifier'; define(function (require) { return function CourierFetchCallResponseHandlers(Private, Promise) { - var ABORTED = Private(require('ui/courier/fetch/_req_status')).ABORTED; - var INCOMPLETE = Private(require('ui/courier/fetch/_req_status')).INCOMPLETE; - var notify = Private(require('ui/courier/fetch/_notifier')); + var ABORTED = Private(CourierFetchReqStatusProvider).ABORTED; + var INCOMPLETE = Private(CourierFetchReqStatusProvider).INCOMPLETE; + var notify = Private(CourierFetchNotifierProvider); function callResponseHandlers(requests, responses) { diff --git a/src/ui/public/courier/fetch/_continue_incomplete.js b/src/ui/public/courier/fetch/_continue_incomplete.js index 45f911c6915273..7b5cc3937db9f2 100644 --- a/src/ui/public/courier/fetch/_continue_incomplete.js +++ b/src/ui/public/courier/fetch/_continue_incomplete.js @@ -1,6 +1,8 @@ +import CourierFetchReqStatusProvider from 'ui/courier/fetch/_req_status'; + define(function (require) { return function CourierFetchContinueIncompleteRequests(Private) { - var INCOMPLETE = Private(require('ui/courier/fetch/_req_status')).INCOMPLETE; + var INCOMPLETE = Private(CourierFetchReqStatusProvider).INCOMPLETE; function continueIncompleteRequests(strategy, requests, responses, fetchWithStrategy) { var incomplete = []; diff --git a/src/ui/public/courier/fetch/_fetch_these.js b/src/ui/public/courier/fetch/_fetch_these.js index a629c9920187fe..7dd05ae3baa2a0 100644 --- a/src/ui/public/courier/fetch/_fetch_these.js +++ b/src/ui/public/courier/fetch/_fetch_these.js @@ -1,16 +1,23 @@ +import CourierFetchNotifierProvider from 'ui/courier/fetch/_notifier'; +import CourierFetchForEachStrategyProvider from 'ui/courier/fetch/_for_each_strategy'; +import CourierFetchCallClientProvider from 'ui/courier/fetch/_call_client'; +import CourierFetchCallResponseHandlersProvider from 'ui/courier/fetch/_call_response_handlers'; +import CourierFetchContinueIncompleteProvider from 'ui/courier/fetch/_continue_incomplete'; +import CourierFetchReqStatusProvider from 'ui/courier/fetch/_req_status'; + define(function (require) { return function FetchTheseProvider(Private, Promise) { - var notify = Private(require('ui/courier/fetch/_notifier')); - var forEachStrategy = Private(require('ui/courier/fetch/_for_each_strategy')); + var notify = Private(CourierFetchNotifierProvider); + var forEachStrategy = Private(CourierFetchForEachStrategyProvider); // core tasks - var callClient = Private(require('ui/courier/fetch/_call_client')); - var callResponseHandlers = Private(require('ui/courier/fetch/_call_response_handlers')); - var continueIncomplete = Private(require('ui/courier/fetch/_continue_incomplete')); + var callClient = Private(CourierFetchCallClientProvider); + var callResponseHandlers = Private(CourierFetchCallResponseHandlersProvider); + var continueIncomplete = Private(CourierFetchContinueIncompleteProvider); - var ABORTED = Private(require('ui/courier/fetch/_req_status')).ABORTED; - var DUPLICATE = Private(require('ui/courier/fetch/_req_status')).DUPLICATE; - var INCOMPLETE = Private(require('ui/courier/fetch/_req_status')).INCOMPLETE; + var ABORTED = Private(CourierFetchReqStatusProvider).ABORTED; + var DUPLICATE = Private(CourierFetchReqStatusProvider).DUPLICATE; + var INCOMPLETE = Private(CourierFetchReqStatusProvider).INCOMPLETE; function fetchThese(requests) { return forEachStrategy(requests, function (strategy, reqsForStrategy) { diff --git a/src/ui/public/courier/fetch/_is_request.js b/src/ui/public/courier/fetch/_is_request.js index 4a0eab4019cfab..00d0c0c0cdd7f4 100644 --- a/src/ui/public/courier/fetch/_is_request.js +++ b/src/ui/public/courier/fetch/_is_request.js @@ -1,6 +1,8 @@ +import CourierFetchRequestRequestProvider from 'ui/courier/fetch/request/request'; + define(function (require) { return function CourierFetchIsRequestProvider(Private) { - var AbstractRequest = Private(require('ui/courier/fetch/request/request')); + var AbstractRequest = Private(CourierFetchRequestRequestProvider); return function isRequest(obj) { return obj instanceof AbstractRequest; diff --git a/src/ui/public/courier/fetch/_merge_duplicate_requests.js b/src/ui/public/courier/fetch/_merge_duplicate_requests.js index fb79e6bf6148d8..e31473022b3b3a 100644 --- a/src/ui/public/courier/fetch/_merge_duplicate_requests.js +++ b/src/ui/public/courier/fetch/_merge_duplicate_requests.js @@ -1,7 +1,10 @@ +import CourierFetchIsRequestProvider from 'ui/courier/fetch/_is_request'; +import CourierFetchReqStatusProvider from 'ui/courier/fetch/_req_status'; + define(function (require) { return function FetchMergeDuplicateRequests(Private) { - var isRequest = Private(require('ui/courier/fetch/_is_request')); - var DUPLICATE = Private(require('ui/courier/fetch/_req_status')).DUPLICATE; + var isRequest = Private(CourierFetchIsRequestProvider); + var DUPLICATE = Private(CourierFetchReqStatusProvider).DUPLICATE; function mergeDuplicateRequests(requests) { // dedupe requests diff --git a/src/ui/public/courier/fetch/fetch.js b/src/ui/public/courier/fetch/fetch.js index e40b166f143f76..b8791e342c1e78 100644 --- a/src/ui/public/courier/fetch/fetch.js +++ b/src/ui/public/courier/fetch/fetch.js @@ -1,12 +1,16 @@ import _ from 'lodash'; +import CourierRequestQueueProvider from 'ui/courier/_request_queue'; +import CourierFetchFetchTheseProvider from 'ui/courier/fetch/_fetch_these'; +import CourierFetchCallResponseHandlersProvider from 'ui/courier/fetch/_call_response_handlers'; +import CourierFetchReqStatusProvider from 'ui/courier/fetch/_req_status'; define(function (require) { return function fetchService(Private, Promise) { - var requestQueue = Private(require('ui/courier/_request_queue')); - var fetchThese = Private(require('ui/courier/fetch/_fetch_these')); + var requestQueue = Private(CourierRequestQueueProvider); + var fetchThese = Private(CourierFetchFetchTheseProvider); - var callResponseHandlers = Private(require('ui/courier/fetch/_call_response_handlers')); - var INCOMPLETE = Private(require('ui/courier/fetch/_req_status')).INCOMPLETE; + var callResponseHandlers = Private(CourierFetchCallResponseHandlersProvider); + var INCOMPLETE = Private(CourierFetchReqStatusProvider).INCOMPLETE; function fetchQueued(strategy) { var requests = requestQueue.getStartable(strategy); diff --git a/src/ui/public/courier/fetch/request/__tests__/segmented.js b/src/ui/public/courier/fetch/request/__tests__/segmented.js index 715ec27b3d272e..9f2a45d5ad8bed 100644 --- a/src/ui/public/courier/fetch/request/__tests__/segmented.js +++ b/src/ui/public/courier/fetch/request/__tests__/segmented.js @@ -1,6 +1,8 @@ import sinon from 'auto-release-sinon'; import expect from 'expect.js'; import ngMock from 'ngMock'; +import CourierFetchRequestSegmentedProvider from 'ui/courier/fetch/request/segmented'; +import CourierFetchRequestSearchProvider from 'ui/courier/fetch/request/search'; describe('ui/courier/fetch/request/segmented', () => { let Promise; @@ -14,8 +16,8 @@ describe('ui/courier/fetch/request/segmented', () => { beforeEach(ngMock.inject((Private, $injector) => { Promise = $injector.get('Promise'); $rootScope = $injector.get('$rootScope'); - SegmentedReq = Private(require('ui/courier/fetch/request/segmented')); - searchReqStart = sinon.spy(Private(require('ui/courier/fetch/request/search')).prototype, 'start'); + SegmentedReq = Private(CourierFetchRequestSegmentedProvider); + searchReqStart = sinon.spy(Private(CourierFetchRequestSearchProvider).prototype, 'start'); })); describe('#start()', () => { diff --git a/src/ui/public/courier/fetch/request/__tests__/segmented_create_queue.js b/src/ui/public/courier/fetch/request/__tests__/segmented_create_queue.js index 07f9f2d919e59e..c63cc5d0db3253 100644 --- a/src/ui/public/courier/fetch/request/__tests__/segmented_create_queue.js +++ b/src/ui/public/courier/fetch/request/__tests__/segmented_create_queue.js @@ -2,6 +2,7 @@ import sinon from 'auto-release-sinon'; import expect from 'expect.js'; import ngMock from 'ngMock'; import StubbedSearchSourceProvider from 'fixtures/stubbed_search_source'; +import CourierFetchRequestSegmentedProvider from 'ui/courier/fetch/request/segmented'; describe('ui/courier/fetch/request/segmented/_createQueue', () => { let Promise; @@ -15,7 +16,7 @@ describe('ui/courier/fetch/request/segmented/_createQueue', () => { beforeEach(ngMock.inject((Private, $injector) => { Promise = $injector.get('Promise'); $rootScope = $injector.get('$rootScope'); - SegmentedReq = Private(require('ui/courier/fetch/request/segmented')); + SegmentedReq = Private(CourierFetchRequestSegmentedProvider); MockSource = class { constructor() { diff --git a/src/ui/public/courier/fetch/request/__tests__/segmented_index_selection.js b/src/ui/public/courier/fetch/request/__tests__/segmented_index_selection.js index 0ef97d933c10b7..336d7e95708395 100644 --- a/src/ui/public/courier/fetch/request/__tests__/segmented_index_selection.js +++ b/src/ui/public/courier/fetch/request/__tests__/segmented_index_selection.js @@ -6,6 +6,7 @@ import sinon from 'auto-release-sinon'; import HitSortFnProv from 'plugins/kibana/discover/_hit_sort_fn'; import NoDigestPromises from 'testUtils/noDigestPromises'; import StubbedSearchSourceProvider from 'fixtures/stubbed_search_source'; +import CourierFetchRequestSegmentedProvider from 'ui/courier/fetch/request/segmented'; describe('Segmented Request Index Selection', function () { let Promise; @@ -21,7 +22,7 @@ describe('Segmented Request Index Selection', function () { Promise = $injector.get('Promise'); HitSortFn = Private(HitSortFnProv); $rootScope = $injector.get('$rootScope'); - SegmentedReq = Private(require('ui/courier/fetch/request/segmented')); + SegmentedReq = Private(CourierFetchRequestSegmentedProvider); MockSource = class { constructor() { diff --git a/src/ui/public/courier/fetch/request/__tests__/segmented_size_picking.js b/src/ui/public/courier/fetch/request/__tests__/segmented_size_picking.js index 91afdbaeb19077..7e40a44dea7775 100644 --- a/src/ui/public/courier/fetch/request/__tests__/segmented_size_picking.js +++ b/src/ui/public/courier/fetch/request/__tests__/segmented_size_picking.js @@ -6,6 +6,7 @@ import sinon from 'auto-release-sinon'; import HitSortFnProv from 'plugins/kibana/discover/_hit_sort_fn'; import NoDigestPromises from 'testUtils/noDigestPromises'; import StubbedSearchSourceProvider from 'fixtures/stubbed_search_source'; +import CourierFetchRequestSegmentedProvider from 'ui/courier/fetch/request/segmented'; describe('Segmented Request Size Picking', function () { let Promise; @@ -21,7 +22,7 @@ describe('Segmented Request Size Picking', function () { Promise = $injector.get('Promise'); HitSortFn = Private(HitSortFnProv); $rootScope = $injector.get('$rootScope'); - SegmentedReq = Private(require('ui/courier/fetch/request/segmented')); + SegmentedReq = Private(CourierFetchRequestSegmentedProvider); MockSource = class { constructor() { diff --git a/src/ui/public/courier/fetch/request/_error_handler.js b/src/ui/public/courier/fetch/request/_error_handler.js index b4f8deba1823d8..d3f024509db793 100644 --- a/src/ui/public/courier/fetch/request/_error_handler.js +++ b/src/ui/public/courier/fetch/request/_error_handler.js @@ -1,6 +1,8 @@ +import CourierErrorHandlersProvider from 'ui/courier/_error_handlers'; + define(function (require) { return function RequestErrorHandlerFactory(Private, Notifier) { - var errHandlers = Private(require('ui/courier/_error_handlers')); + var errHandlers = Private(CourierErrorHandlersProvider); var notify = new Notifier({ location: 'Courier Fetch Error' diff --git a/src/ui/public/courier/fetch/request/_segmented_handle.js b/src/ui/public/courier/fetch/request/_segmented_handle.js index 5a7254dc472a1e..041eecbca0c8dd 100644 --- a/src/ui/public/courier/fetch/request/_segmented_handle.js +++ b/src/ui/public/courier/fetch/request/_segmented_handle.js @@ -1,7 +1,8 @@ import _ from 'lodash'; +import EventsProvider from 'ui/events'; define(function (require) { return function CourierSegmentedReqHandle(Private) { - var Events = Private(require('ui/events')); + var Events = Private(EventsProvider); /** diff --git a/src/ui/public/courier/fetch/request/doc.js b/src/ui/public/courier/fetch/request/doc.js index 763c4b817f6597..d16a093cef726a 100644 --- a/src/ui/public/courier/fetch/request/doc.js +++ b/src/ui/public/courier/fetch/request/doc.js @@ -1,9 +1,11 @@ import _ from 'lodash'; +import CourierFetchStrategyDocProvider from 'ui/courier/fetch/strategy/doc'; +import CourierFetchRequestRequestProvider from 'ui/courier/fetch/request/request'; define(function (require) { return function DocRequestProvider(Private) { - var docStrategy = Private(require('ui/courier/fetch/strategy/doc')); - var AbstractRequest = Private(require('ui/courier/fetch/request/request')); + var docStrategy = Private(CourierFetchStrategyDocProvider); + var AbstractRequest = Private(CourierFetchRequestRequestProvider); _.class(DocRequest).inherits(AbstractRequest); function DocRequest(source, defer) { diff --git a/src/ui/public/courier/fetch/request/request.js b/src/ui/public/courier/fetch/request/request.js index cb04a95930a157..7385daba4e4778 100644 --- a/src/ui/public/courier/fetch/request/request.js +++ b/src/ui/public/courier/fetch/request/request.js @@ -1,10 +1,12 @@ import _ from 'lodash'; import moment from 'moment'; import errors from 'ui/errors'; +import CourierRequestQueueProvider from 'ui/courier/_request_queue'; +import CourierFetchRequestErrorHandlerProvider from 'ui/courier/fetch/request/_error_handler'; define(function (require) { return function AbstractReqProvider(Private, Promise) { - var requestQueue = Private(require('ui/courier/_request_queue')); - var requestErrorHandler = Private(require('ui/courier/fetch/request/_error_handler')); + var requestQueue = Private(CourierRequestQueueProvider); + var requestErrorHandler = Private(CourierFetchRequestErrorHandlerProvider); function AbstractReq(source, defer) { if (!(this instanceof AbstractReq) || !this.constructor || this.constructor === AbstractReq) { diff --git a/src/ui/public/courier/fetch/request/search.js b/src/ui/public/courier/fetch/request/search.js index 58c463ed53d8c5..959d7c01bc05d5 100644 --- a/src/ui/public/courier/fetch/request/search.js +++ b/src/ui/public/courier/fetch/request/search.js @@ -1,9 +1,11 @@ import _ from 'lodash'; +import CourierFetchStrategySearchProvider from 'ui/courier/fetch/strategy/search'; +import CourierFetchRequestRequestProvider from 'ui/courier/fetch/request/request'; define(function (require) { return function SearchReqProvider(Private) { - var searchStrategy = Private(require('ui/courier/fetch/strategy/search')); - var AbstractRequest = Private(require('ui/courier/fetch/request/request')); + var searchStrategy = Private(CourierFetchStrategySearchProvider); + var AbstractRequest = Private(CourierFetchRequestRequestProvider); _.class(SearchReq).inherits(AbstractRequest); var Super = SearchReq.Super; diff --git a/src/ui/public/courier/fetch/request/segmented.js b/src/ui/public/courier/fetch/request/segmented.js index b224584fbf25cf..0b3430b7faad9b 100644 --- a/src/ui/public/courier/fetch/request/segmented.js +++ b/src/ui/public/courier/fetch/request/segmented.js @@ -1,9 +1,11 @@ import { isNumber } from 'lodash'; import _ from 'lodash'; +import CourierFetchRequestSearchProvider from 'ui/courier/fetch/request/search'; +import CourierFetchRequestSegmentedHandleProvider from 'ui/courier/fetch/request/_segmented_handle'; define(function (require) { return function CourierSegmentedReqProvider(es, Private, Promise, Notifier, timefilter, config) { - var SearchReq = Private(require('ui/courier/fetch/request/search')); - var SegmentedHandle = Private(require('ui/courier/fetch/request/_segmented_handle')); + var SearchReq = Private(CourierFetchRequestSearchProvider); + var SegmentedHandle = Private(CourierFetchRequestSegmentedHandleProvider); var notify = new Notifier({ location: 'Segmented Fetch' diff --git a/src/ui/public/courier/fetch/strategy/__tests__/search.js b/src/ui/public/courier/fetch/strategy/__tests__/search.js index a27f17c7ddaaee..e7140079124823 100644 --- a/src/ui/public/courier/fetch/strategy/__tests__/search.js +++ b/src/ui/public/courier/fetch/strategy/__tests__/search.js @@ -2,6 +2,7 @@ import _ from 'lodash'; import sinon from 'auto-release-sinon'; import expect from 'expect.js'; import ngMock from 'ngMock'; +import CourierFetchStrategySearchProvider from 'ui/courier/fetch/strategy/search'; describe('ui/courier/fetch/strategy/search', () => { let Promise; @@ -14,7 +15,7 @@ describe('ui/courier/fetch/strategy/search', () => { beforeEach(ngMock.inject((Private, $injector) => { Promise = $injector.get('Promise'); $rootScope = $injector.get('$rootScope'); - search = Private(require('ui/courier/fetch/strategy/search')); + search = Private(CourierFetchStrategySearchProvider); reqsFetchParams = [ { index: ['logstash-123'], diff --git a/src/ui/public/courier/looper/doc.js b/src/ui/public/courier/looper/doc.js index 1bb9bf23ae5e75..5f3aa3c8faf737 100644 --- a/src/ui/public/courier/looper/doc.js +++ b/src/ui/public/courier/looper/doc.js @@ -1,8 +1,12 @@ +import CourierFetchFetchProvider from 'ui/courier/fetch/fetch'; +import CourierLooperLooperProvider from 'ui/courier/looper/_looper'; +import CourierFetchStrategyDocProvider from 'ui/courier/fetch/strategy/doc'; + define(function (require) { return function DocLooperService(Private) { - var fetch = Private(require('ui/courier/fetch/fetch')); - var Looper = Private(require('ui/courier/looper/_looper')); - var docStrategy = Private(require('ui/courier/fetch/strategy/doc')); + var fetch = Private(CourierFetchFetchProvider); + var Looper = Private(CourierLooperLooperProvider); + var docStrategy = Private(CourierFetchStrategyDocProvider); /** * The Looper which will manage the doc fetch interval diff --git a/src/ui/public/courier/looper/search.js b/src/ui/public/courier/looper/search.js index 11ddc5f2fa1b2f..6d93e7ccc31dec 100644 --- a/src/ui/public/courier/looper/search.js +++ b/src/ui/public/courier/looper/search.js @@ -1,10 +1,15 @@ +import CourierFetchFetchProvider from 'ui/courier/fetch/fetch'; +import CourierFetchStrategySearchProvider from 'ui/courier/fetch/strategy/search'; +import CourierRequestQueueProvider from 'ui/courier/_request_queue'; +import CourierLooperLooperProvider from 'ui/courier/looper/_looper'; + define(function (require) { return function SearchLooperService(Private, Promise, Notifier, $rootScope) { - var fetch = Private(require('ui/courier/fetch/fetch')); - var searchStrategy = Private(require('ui/courier/fetch/strategy/search')); - var requestQueue = Private(require('ui/courier/_request_queue')); + var fetch = Private(CourierFetchFetchProvider); + var searchStrategy = Private(CourierFetchStrategySearchProvider); + var requestQueue = Private(CourierRequestQueueProvider); - var Looper = Private(require('ui/courier/looper/_looper')); + var Looper = Private(CourierLooperLooperProvider); var notif = new Notifier({ location: 'Search Looper' }); /** diff --git a/src/ui/public/courier/saved_object/saved_object.js b/src/ui/public/courier/saved_object/saved_object.js index afdf534ccaf8dd..361e089d836234 100644 --- a/src/ui/public/courier/saved_object/saved_object.js +++ b/src/ui/public/courier/saved_object/saved_object.js @@ -2,12 +2,15 @@ import angular from 'angular'; import errors from 'ui/errors'; import _ from 'lodash'; import slugifyId from 'ui/utils/slugify_id'; +import CourierDataSourceDocSourceProvider from 'ui/courier/data_source/doc_source'; +import CourierDataSourceSearchSourceProvider from 'ui/courier/data_source/search_source'; +import UtilsMappingSetupProvider from 'ui/utils/mapping_setup'; define(function (require) { return function SavedObjectFactory(es, kbnIndex, Promise, Private, Notifier, safeConfirm, indexPatterns) { - var DocSource = Private(require('ui/courier/data_source/doc_source')); - var SearchSource = Private(require('ui/courier/data_source/search_source')); - var mappingSetup = Private(require('ui/utils/mapping_setup')); + var DocSource = Private(CourierDataSourceDocSourceProvider); + var SearchSource = Private(CourierDataSourceSearchSourceProvider); + var mappingSetup = Private(UtilsMappingSetupProvider); function SavedObject(config) { if (!_.isObject(config)) config = {}; diff --git a/src/ui/public/directives/__tests__/parse_query.js b/src/ui/public/directives/__tests__/parse_query.js index e2e34e06553d5d..d1f07d33eea200 100644 --- a/src/ui/public/directives/__tests__/parse_query.js +++ b/src/ui/public/directives/__tests__/parse_query.js @@ -19,6 +19,7 @@ var markup = ''; var fromUser; import toUser from 'ui/parse_query/lib/to_user'; import 'ui/parse_query'; +import ParseQueryLibFromUserProvider from 'ui/parse_query/lib/from_user'; var init = function () { // Load the application @@ -65,7 +66,7 @@ describe('parse-query directive', function () { describe('user input parser', function () { beforeEach(function () { - fromUser = Private(require('ui/parse_query/lib/from_user')); + fromUser = Private(ParseQueryLibFromUserProvider); config.set('query:queryString:options', {}); }); diff --git a/src/ui/public/directives/rows.js b/src/ui/public/directives/rows.js index 5b1131a546600b..ce48cae84af0c9 100644 --- a/src/ui/public/directives/rows.js +++ b/src/ui/public/directives/rows.js @@ -1,11 +1,12 @@ import $ from 'jquery'; import _ from 'lodash'; import AggConfigResult from 'ui/Vis/AggConfigResult'; +import FilterBarFilterBarClickHandlerProvider from 'ui/filter_bar/filter_bar_click_handler'; define(function (require) { var module = require('ui/modules').get('kibana'); module.directive('kbnRows', function ($compile, $rootScope, getAppState, Private) { - var filterBarClickHandler = Private(require('ui/filter_bar/filter_bar_click_handler')); + var filterBarClickHandler = Private(FilterBarFilterBarClickHandlerProvider); return { restrict: 'A', link: function ($scope, $el, attr) { diff --git a/src/ui/public/directives/saved_object_finder.js b/src/ui/public/directives/saved_object_finder.js index f9244d8b99ac75..020fb9d87c1e7a 100644 --- a/src/ui/public/directives/saved_object_finder.js +++ b/src/ui/public/directives/saved_object_finder.js @@ -1,12 +1,13 @@ import _ from 'lodash'; import rison from 'ui/utils/rison'; import keymap from 'ui/utils/key_map'; +import SavedObjectsSavedObjectRegistryProvider from 'ui/saved_objects/saved_object_registry'; define(function (require) { var module = require('ui/modules').get('kibana'); module.directive('savedObjectFinder', function ($location, $injector, kbnUrl, Private) { - var services = Private(require('ui/saved_objects/saved_object_registry')).byLoaderPropertiesName; + var services = Private(SavedObjectsSavedObjectRegistryProvider).byLoaderPropertiesName; return { restrict: 'E', diff --git a/src/ui/public/doc_table/__tests__/doc_table.js b/src/ui/public/doc_table/__tests__/doc_table.js index 343c9f2f994cfd..5963ad7dc689fa 100644 --- a/src/ui/public/doc_table/__tests__/doc_table.js +++ b/src/ui/public/doc_table/__tests__/doc_table.js @@ -7,6 +7,7 @@ import ngMock from 'ngMock'; import $ from 'jquery'; import 'ui/private'; import 'ui/doc_table'; +import FixturesStubbedSearchSourceProvider from 'fixtures/stubbed_search_source'; // Load the kibana app dependencies. @@ -52,7 +53,7 @@ describe('docTable', function () { beforeEach(function () { $elem = angular.element(''); ngMock.inject(function (Private) { - searchSource = Private(require('fixtures/stubbed_search_source')); + searchSource = Private(FixturesStubbedSearchSourceProvider); }); init($elem, { searchSource: searchSource, diff --git a/src/ui/public/doc_table/__tests__/lib/get_sort.js b/src/ui/public/doc_table/__tests__/lib/get_sort.js index 9a5ae693016c60..7c3f95e177f6b2 100644 --- a/src/ui/public/doc_table/__tests__/lib/get_sort.js +++ b/src/ui/public/doc_table/__tests__/lib/get_sort.js @@ -2,13 +2,14 @@ import getSort from 'ui/doc_table/lib/get_sort'; var defaultSort = {time: 'desc'}; import expect from 'expect.js'; import ngMock from 'ngMock'; +import FixturesStubbedLogstashIndexPatternProvider from 'fixtures/stubbed_logstash_index_pattern'; var indexPattern; describe('docTable', function () { beforeEach(ngMock.module('kibana')); beforeEach(ngMock.inject(function (Private, _$rootScope_, Promise) { - indexPattern = Private(require('fixtures/stubbed_logstash_index_pattern')); + indexPattern = Private(FixturesStubbedLogstashIndexPatternProvider); })); describe('getSort function', function () { diff --git a/src/ui/public/doc_table/__tests__/lib/rows_headers.js b/src/ui/public/doc_table/__tests__/lib/rows_headers.js index 204bc695938866..c2f80a43574244 100644 --- a/src/ui/public/doc_table/__tests__/lib/rows_headers.js +++ b/src/ui/public/doc_table/__tests__/lib/rows_headers.js @@ -6,6 +6,7 @@ import ngMock from 'ngMock'; import getFakeRow from 'fixtures/fake_row'; import $ from 'jquery'; import 'plugins/kibana/discover/index'; +import FixturesStubbedLogstashIndexPatternProvider from 'fixtures/stubbed_logstash_index_pattern'; describe('Doc Table', function () { @@ -22,7 +23,7 @@ describe('Doc Table', function () { beforeEach(ngMock.inject(function (_config_, $rootScope, Private) { config = _config_; $parentScope = $rootScope; - $parentScope.indexPattern = Private(require('fixtures/stubbed_logstash_index_pattern')); + $parentScope.indexPattern = Private(FixturesStubbedLogstashIndexPatternProvider); mapping = $parentScope.indexPattern.fields.byName; })); @@ -324,7 +325,7 @@ describe('Doc Table', function () { $root.filtering = sinon.spy(); $root.maxLength = 50; $root.mapping = mapping; - $root.indexPattern = Private(require('fixtures/stubbed_logstash_index_pattern')); + $root.indexPattern = Private(FixturesStubbedLogstashIndexPatternProvider); $row = $('') .attr({ diff --git a/src/ui/public/doc_title/__tests__/doc_title.js b/src/ui/public/doc_title/__tests__/doc_title.js index a41cbace70ffe1..a064ab78b64a9c 100644 --- a/src/ui/public/doc_title/__tests__/doc_title.js +++ b/src/ui/public/doc_title/__tests__/doc_title.js @@ -2,6 +2,7 @@ import _ from 'lodash'; import sinon from 'auto-release-sinon'; import expect from 'expect.js'; import ngMock from 'ngMock'; +import DocTitleProvider from 'ui/doc_title'; describe('docTitle Service', function () { var initialDocTitle; @@ -27,7 +28,7 @@ describe('docTitle Service', function () { if (_.random(0, 1)) { docTitle = $injector.get('docTitle'); } else { - docTitle = Private(require('ui/doc_title')); + docTitle = Private(DocTitleProvider); } $rootScope = $injector.get('$rootScope'); diff --git a/src/ui/public/doc_viewer/__tests__/doc_viewer.js b/src/ui/public/doc_viewer/__tests__/doc_viewer.js index aa6cca57ce3bb8..deb15898ace7ab 100644 --- a/src/ui/public/doc_viewer/__tests__/doc_viewer.js +++ b/src/ui/public/doc_viewer/__tests__/doc_viewer.js @@ -6,6 +6,7 @@ import ngMock from 'ngMock'; import $ from 'jquery'; import 'ui/private'; import 'ui/doc_viewer'; +import FixturesStubbedLogstashIndexPatternProvider from 'fixtures/stubbed_logstash_index_pattern'; var hit = { '_index': 'logstash-2014.09.09', '_type': 'apache', @@ -57,7 +58,7 @@ describe('docViewer', function () { beforeEach(function () { $elem = angular.element(''); ngMock.inject(function (Private) { - indexPattern = Private(require('fixtures/stubbed_logstash_index_pattern')); + indexPattern = Private(FixturesStubbedLogstashIndexPatternProvider); flattened = indexPattern.flattenHit(hit); }); init($elem, { diff --git a/src/ui/public/factories/__tests__/events.js b/src/ui/public/factories/__tests__/events.js index ebe0e41822310d..a9bde866fb06b5 100644 --- a/src/ui/public/factories/__tests__/events.js +++ b/src/ui/public/factories/__tests__/events.js @@ -5,6 +5,7 @@ import sinon from 'auto-release-sinon'; import expect from 'expect.js'; import ngMock from 'ngMock'; import 'ui/private'; +import EventsProvider from 'ui/events'; describe('Events', function () { require('testUtils/noDigestPromises').activateForSuite(); @@ -19,7 +20,7 @@ describe('Events', function () { $rootScope = $injector.get('$rootScope'); Notifier = $injector.get('Notifier'); Promise = $injector.get('Promise'); - Events = Private(require('ui/events')); + Events = Private(EventsProvider); })); it('should handle on events', function () { diff --git a/src/ui/public/field_editor/__tests__/field_editor.js b/src/ui/public/field_editor/__tests__/field_editor.js index 9a4302ba4665e6..89b54cd4c06097 100644 --- a/src/ui/public/field_editor/__tests__/field_editor.js +++ b/src/ui/public/field_editor/__tests__/field_editor.js @@ -1,6 +1,9 @@ import $ from 'jquery'; import ngMock from 'ngMock'; import expect from 'expect.js'; +import IndexPatternsFieldProvider from 'ui/index_patterns/_field'; +import RegistryFieldFormatsProvider from 'ui/registry/field_formats'; +import FixturesStubbedLogstashIndexPatternProvider from 'fixtures/stubbed_logstash_index_pattern'; describe('FieldEditor directive', function () { var Field; @@ -14,10 +17,10 @@ describe('FieldEditor directive', function () { beforeEach(ngMock.module('kibana')); beforeEach(ngMock.inject(function ($compile, $injector, Private) { $rootScope = $injector.get('$rootScope'); - Field = Private(require('ui/index_patterns/_field')); - StringFormat = Private(require('ui/registry/field_formats')).getType('string'); + Field = Private(IndexPatternsFieldProvider); + StringFormat = Private(RegistryFieldFormatsProvider).getType('string'); - $rootScope.indexPattern = Private(require('fixtures/stubbed_logstash_index_pattern')); + $rootScope.indexPattern = Private(FixturesStubbedLogstashIndexPatternProvider); // set the field format for this field $rootScope.indexPattern.fieldFormatMap.time = new StringFormat({ foo: 1, bar: 2 }); $rootScope.indexPattern._indexFields(); diff --git a/src/ui/public/field_editor/field_editor.js b/src/ui/public/field_editor/field_editor.js index d84dcdc56d3db8..ff789081bfc515 100644 --- a/src/ui/public/field_editor/field_editor.js +++ b/src/ui/public/field_editor/field_editor.js @@ -2,14 +2,16 @@ import 'ui/field_format_editor'; import 'angular-bootstrap-colorpicker'; import 'angular-bootstrap-colorpicker/css/colorpicker.css'; import _ from 'lodash'; +import RegistryFieldFormatsProvider from 'ui/registry/field_formats'; +import IndexPatternsFieldProvider from 'ui/index_patterns/_field'; define(function (require) { require('ui/modules') .get('kibana', ['colorpicker.module']) .directive('fieldEditor', function (Private, $sce) { - var fieldFormats = Private(require('ui/registry/field_formats')); - var Field = Private(require('ui/index_patterns/_field')); + var fieldFormats = Private(RegistryFieldFormatsProvider); + var Field = Private(IndexPatternsFieldProvider); var scriptingInfo = $sce.trustAsHtml(require('ui/field_editor/scripting_info.html')); var scriptingWarning = $sce.trustAsHtml(require('ui/field_editor/scripting_warning.html')); diff --git a/src/ui/public/filter_bar/__tests__/_addFilters.js b/src/ui/public/filter_bar/__tests__/_addFilters.js index 8ec4096d1fd978..656adabc502bf1 100644 --- a/src/ui/public/filter_bar/__tests__/_addFilters.js +++ b/src/ui/public/filter_bar/__tests__/_addFilters.js @@ -3,6 +3,7 @@ import sinon from 'auto-release-sinon'; import expect from 'expect.js'; import ngMock from 'ngMock'; import MockState from 'fixtures/mock_state'; +import FilterBarQueryFilterProvider from 'ui/filter_bar/query_filter'; describe('add filters', function () { var storeNames = { app: 'appState', @@ -35,7 +36,7 @@ describe('add filters', function () { beforeEach(ngMock.inject(function (_$rootScope_, Private) { $rootScope = _$rootScope_; - queryFilter = Private(require('ui/filter_bar/query_filter')); + queryFilter = Private(FilterBarQueryFilterProvider); })); beforeEach(function () { diff --git a/src/ui/public/filter_bar/__tests__/_getFilters.js b/src/ui/public/filter_bar/__tests__/_getFilters.js index 0f7d81d703f03a..38dd7f8cd04763 100644 --- a/src/ui/public/filter_bar/__tests__/_getFilters.js +++ b/src/ui/public/filter_bar/__tests__/_getFilters.js @@ -2,6 +2,7 @@ import _ from 'lodash'; import ngMock from 'ngMock'; import expect from 'expect.js'; import MockState from 'fixtures/mock_state'; +import FilterBarQueryFilterProvider from 'ui/filter_bar/query_filter'; describe('get filters', function () { var storeNames = { app: 'appState', @@ -30,7 +31,7 @@ describe('get filters', function () { beforeEach(ngMock.inject(function (_$rootScope_, Private) { $rootScope = _$rootScope_; - queryFilter = Private(require('ui/filter_bar/query_filter')); + queryFilter = Private(FilterBarQueryFilterProvider); })); describe('getFilters method', function () { diff --git a/src/ui/public/filter_bar/__tests__/_invertFilters.js b/src/ui/public/filter_bar/__tests__/_invertFilters.js index 94616b61af5486..f1b44054d47640 100644 --- a/src/ui/public/filter_bar/__tests__/_invertFilters.js +++ b/src/ui/public/filter_bar/__tests__/_invertFilters.js @@ -3,6 +3,7 @@ import sinon from 'auto-release-sinon'; import expect from 'expect.js'; import ngMock from 'ngMock'; import MockState from 'fixtures/mock_state'; +import FilterBarQueryFilterProvider from 'ui/filter_bar/query_filter'; describe('invert filters', function () { var storeNames = { app: 'appState', @@ -35,7 +36,7 @@ describe('invert filters', function () { beforeEach(ngMock.inject(function (_$rootScope_, Private) { $rootScope = _$rootScope_; - queryFilter = Private(require('ui/filter_bar/query_filter')); + queryFilter = Private(FilterBarQueryFilterProvider); filters = [ { diff --git a/src/ui/public/filter_bar/__tests__/_pinFilters.js b/src/ui/public/filter_bar/__tests__/_pinFilters.js index 48ff660c6933cd..273ecb626ec7a4 100644 --- a/src/ui/public/filter_bar/__tests__/_pinFilters.js +++ b/src/ui/public/filter_bar/__tests__/_pinFilters.js @@ -3,6 +3,7 @@ import sinon from 'auto-release-sinon'; import expect from 'expect.js'; import ngMock from 'ngMock'; import MockState from 'fixtures/mock_state'; +import FilterBarQueryFilterProvider from 'ui/filter_bar/query_filter'; describe('pin filters', function () { var storeNames = { app: 'appState', @@ -35,7 +36,7 @@ describe('pin filters', function () { beforeEach(ngMock.inject(function (_$rootScope_, Private) { $rootScope = _$rootScope_; - queryFilter = Private(require('ui/filter_bar/query_filter')); + queryFilter = Private(FilterBarQueryFilterProvider); filters = [ { diff --git a/src/ui/public/filter_bar/__tests__/_removeFilters.js b/src/ui/public/filter_bar/__tests__/_removeFilters.js index f5e035378d2c5a..9a04c2a30d07ec 100644 --- a/src/ui/public/filter_bar/__tests__/_removeFilters.js +++ b/src/ui/public/filter_bar/__tests__/_removeFilters.js @@ -3,6 +3,7 @@ import sinon from 'auto-release-sinon'; import expect from 'expect.js'; import ngMock from 'ngMock'; import MockState from 'fixtures/mock_state'; +import FilterBarQueryFilterProvider from 'ui/filter_bar/query_filter'; describe('remove filters', function () { var storeNames = { app: 'appState', @@ -35,7 +36,7 @@ describe('remove filters', function () { beforeEach(ngMock.inject(function (_$rootScope_, Private) { $rootScope = _$rootScope_; - queryFilter = Private(require('ui/filter_bar/query_filter')); + queryFilter = Private(FilterBarQueryFilterProvider); filters = [ { query: { match: { extension: { query: 'jpg', type: 'phrase' } } }, diff --git a/src/ui/public/filter_bar/__tests__/_toggleFilters.js b/src/ui/public/filter_bar/__tests__/_toggleFilters.js index 5f20569869d020..a05a41e6346e48 100644 --- a/src/ui/public/filter_bar/__tests__/_toggleFilters.js +++ b/src/ui/public/filter_bar/__tests__/_toggleFilters.js @@ -3,6 +3,7 @@ import expect from 'expect.js'; import ngMock from 'ngMock'; import sinon from 'auto-release-sinon'; import MockState from 'fixtures/mock_state'; +import FilterBarQueryFilterProvider from 'ui/filter_bar/query_filter'; describe('toggle filters', function () { var storeNames = { app: 'appState', @@ -35,7 +36,7 @@ describe('toggle filters', function () { beforeEach(ngMock.inject(function (_$rootScope_, Private) { $rootScope = _$rootScope_; - queryFilter = Private(require('ui/filter_bar/query_filter')); + queryFilter = Private(FilterBarQueryFilterProvider); filters = [ { query: { match: { extension: { query: 'jpg', type: 'phrase' } } }, diff --git a/src/ui/public/filter_bar/__tests__/_updateFilters.js b/src/ui/public/filter_bar/__tests__/_updateFilters.js index 16d0d0acb9a963..5de414606aa654 100644 --- a/src/ui/public/filter_bar/__tests__/_updateFilters.js +++ b/src/ui/public/filter_bar/__tests__/_updateFilters.js @@ -3,6 +3,7 @@ import sinon from 'auto-release-sinon'; import expect from 'expect.js'; import ngMock from 'ngMock'; import MockState from 'fixtures/mock_state'; +import FilterBarQueryFilterProvider from 'ui/filter_bar/query_filter'; describe('update filters', function () { var storeNames = { app: 'appState', @@ -34,7 +35,7 @@ describe('update filters', function () { beforeEach(ngMock.inject(function (Private, _$rootScope_) { $rootScope = _$rootScope_; - queryFilter = Private(require('ui/filter_bar/query_filter')); + queryFilter = Private(FilterBarQueryFilterProvider); })); describe('updating', function () { diff --git a/src/ui/public/filter_bar/__tests__/filter_bar.js b/src/ui/public/filter_bar/__tests__/filter_bar.js index 6dd8545638b06e..ea8977a8062604 100644 --- a/src/ui/public/filter_bar/__tests__/filter_bar.js +++ b/src/ui/public/filter_bar/__tests__/filter_bar.js @@ -7,6 +7,8 @@ import sinon from 'sinon'; import MockState from 'fixtures/mock_state'; import $ from 'jquery'; import 'ui/filter_bar'; +import FilterBarLibMapFilterProvider from 'ui/filter_bar/lib/mapFilter'; +import FilterBarQueryFilterProvider from 'ui/filter_bar/query_filter'; describe('Filter Bar Directive', function () { var $rootScope; @@ -39,9 +41,9 @@ describe('Filter Bar Directive', function () { $compile = _$compile_; $timeout = _$timeout_; Promise = $injector.get('Promise'); - mapFilter = Private(require('ui/filter_bar/lib/mapFilter')); + mapFilter = Private(FilterBarLibMapFilterProvider); - var queryFilter = Private(require('ui/filter_bar/query_filter')); + var queryFilter = Private(FilterBarQueryFilterProvider); queryFilter.getFilters = function () { return appState.filters; }; diff --git a/src/ui/public/filter_bar/__tests__/push_filter.js b/src/ui/public/filter_bar/__tests__/push_filter.js index 78abf3c62da6b5..f885acd245071f 100644 --- a/src/ui/public/filter_bar/__tests__/push_filter.js +++ b/src/ui/public/filter_bar/__tests__/push_filter.js @@ -1,13 +1,14 @@ import _ from 'lodash'; import expect from 'expect.js'; import ngMock from 'ngMock'; +import FilterBarPushFilterProvider from 'ui/filter_bar/push_filter'; describe('Filter Bar pushFilter()', function () { var pushFilterFn; beforeEach(ngMock.module('kibana')); beforeEach(ngMock.inject(function (Private, $injector) { - pushFilterFn = Private(require('ui/filter_bar/push_filter')); + pushFilterFn = Private(FilterBarPushFilterProvider); })); it('is a function that returns a function', function () { diff --git a/src/ui/public/filter_bar/__tests__/query_filter.js b/src/ui/public/filter_bar/__tests__/query_filter.js index 400470286c8842..b73631c65788fc 100644 --- a/src/ui/public/filter_bar/__tests__/query_filter.js +++ b/src/ui/public/filter_bar/__tests__/query_filter.js @@ -8,6 +8,8 @@ import './_updateFilters'; import './_toggleFilters'; import './_invertFilters'; import './_pinFilters'; +import FilterBarQueryFilterProvider from 'ui/filter_bar/query_filter'; +import EventsProvider from 'ui/events'; var queryFilter; var EventEmitter; var $rootScope; @@ -17,8 +19,8 @@ describe('Query Filter', function () { beforeEach(ngMock.module('kibana')); beforeEach(ngMock.inject(function (_$rootScope_, Private) { $rootScope = _$rootScope_; - queryFilter = Private(require('ui/filter_bar/query_filter')); - EventEmitter = Private(require('ui/events')); + queryFilter = Private(FilterBarQueryFilterProvider); + EventEmitter = Private(EventsProvider); })); describe('module instance', function () { diff --git a/src/ui/public/filter_bar/filter_bar.js b/src/ui/public/filter_bar/filter_bar.js index f5c78bd67e69b0..381bb4b6110c1f 100644 --- a/src/ui/public/filter_bar/filter_bar.js +++ b/src/ui/public/filter_bar/filter_bar.js @@ -4,17 +4,23 @@ import moment from 'moment'; import angular from 'angular'; import 'ui/directives/json_input'; import filterAppliedAndUnwrap from 'ui/filter_bar/lib/filterAppliedAndUnwrap'; +import FilterBarLibMapAndFlattenFiltersProvider from 'ui/filter_bar/lib/mapAndFlattenFilters'; +import FilterBarLibMapFlattenAndWrapFiltersProvider from 'ui/filter_bar/lib/mapFlattenAndWrapFilters'; +import FilterBarLibExtractTimeFilterProvider from 'ui/filter_bar/lib/extractTimeFilter'; +import FilterBarLibFilterOutTimeBasedFilterProvider from 'ui/filter_bar/lib/filterOutTimeBasedFilter'; +import FilterBarLibChangeTimeFilterProvider from 'ui/filter_bar/lib/changeTimeFilter'; +import FilterBarQueryFilterProvider from 'ui/filter_bar/query_filter'; define(function (require) { var module = require('ui/modules').get('kibana'); module.directive('filterBar', function (Private, Promise, getAppState) { - var mapAndFlattenFilters = Private(require('ui/filter_bar/lib/mapAndFlattenFilters')); - var mapFlattenAndWrapFilters = Private(require('ui/filter_bar/lib/mapFlattenAndWrapFilters')); - var extractTimeFilter = Private(require('ui/filter_bar/lib/extractTimeFilter')); - var filterOutTimeBasedFilter = Private(require('ui/filter_bar/lib/filterOutTimeBasedFilter')); - var changeTimeFilter = Private(require('ui/filter_bar/lib/changeTimeFilter')); - var queryFilter = Private(require('ui/filter_bar/query_filter')); + var mapAndFlattenFilters = Private(FilterBarLibMapAndFlattenFiltersProvider); + var mapFlattenAndWrapFilters = Private(FilterBarLibMapFlattenAndWrapFiltersProvider); + var extractTimeFilter = Private(FilterBarLibExtractTimeFilterProvider); + var filterOutTimeBasedFilter = Private(FilterBarLibFilterOutTimeBasedFilterProvider); + var changeTimeFilter = Private(FilterBarLibChangeTimeFilterProvider); + var queryFilter = Private(FilterBarQueryFilterProvider); var privateFilterFieldRegex = /(^\$|meta)/; return { diff --git a/src/ui/public/filter_bar/lib/__tests__/changeTimeFilter.js b/src/ui/public/filter_bar/lib/__tests__/changeTimeFilter.js index 18bc8fd176f770..93531a2be83345 100644 --- a/src/ui/public/filter_bar/lib/__tests__/changeTimeFilter.js +++ b/src/ui/public/filter_bar/lib/__tests__/changeTimeFilter.js @@ -2,6 +2,7 @@ import moment from 'moment'; import ngMock from 'ngMock'; import expect from 'expect.js'; +import FilterBarLibChangeTimeFilterProvider from 'ui/filter_bar/lib/changeTimeFilter'; describe('Filter Bar Directive', function () { describe('changeTimeFilter()', function () { @@ -12,7 +13,7 @@ describe('Filter Bar Directive', function () { beforeEach(ngMock.module('kibana')); beforeEach(ngMock.inject(function (Private, _timefilter_) { - changeTimeFilter = Private(require('ui/filter_bar/lib/changeTimeFilter')); + changeTimeFilter = Private(FilterBarLibChangeTimeFilterProvider); timefilter = _timefilter_; })); diff --git a/src/ui/public/filter_bar/lib/__tests__/extractTimeFilter.js b/src/ui/public/filter_bar/lib/__tests__/extractTimeFilter.js index 322cf163cb9d68..72af2d1408f888 100644 --- a/src/ui/public/filter_bar/lib/__tests__/extractTimeFilter.js +++ b/src/ui/public/filter_bar/lib/__tests__/extractTimeFilter.js @@ -1,6 +1,7 @@ import sinon from 'auto-release-sinon'; import expect from 'expect.js'; import ngMock from 'ngMock'; +import FilterBarLibExtractTimeFilterProvider from 'ui/filter_bar/lib/extractTimeFilter'; describe('Filter Bar Directive', function () { describe('extractTimeFilter()', function () { @@ -16,7 +17,7 @@ describe('Filter Bar Directive', function () { )); beforeEach(ngMock.inject(function (Private, _$rootScope_, Promise) { - extractTimeFilter = Private(require('ui/filter_bar/lib/extractTimeFilter')); + extractTimeFilter = Private(FilterBarLibExtractTimeFilterProvider); $rootScope = _$rootScope_; })); diff --git a/src/ui/public/filter_bar/lib/__tests__/filterOutTimeBasedFilter.js b/src/ui/public/filter_bar/lib/__tests__/filterOutTimeBasedFilter.js index c199777aa1e033..7bd5eb25e755c9 100644 --- a/src/ui/public/filter_bar/lib/__tests__/filterOutTimeBasedFilter.js +++ b/src/ui/public/filter_bar/lib/__tests__/filterOutTimeBasedFilter.js @@ -1,6 +1,7 @@ import expect from 'expect.js'; import ngMock from 'ngMock'; import sinon from 'auto-release-sinon'; +import FilterBarLibFilterOutTimeBasedFilterProvider from 'ui/filter_bar/lib/filterOutTimeBasedFilter'; describe('Filter Bar Directive', function () { describe('filterOutTimeBasedFilter()', function () { @@ -17,7 +18,7 @@ describe('Filter Bar Directive', function () { )); beforeEach(ngMock.inject(function (Private, _$rootScope_, Promise) { - filterOutTimeBasedFilter = Private(require('ui/filter_bar/lib/filterOutTimeBasedFilter')); + filterOutTimeBasedFilter = Private(FilterBarLibFilterOutTimeBasedFilterProvider); $rootScope = _$rootScope_; })); diff --git a/src/ui/public/filter_bar/lib/__tests__/generateMappingChain.js b/src/ui/public/filter_bar/lib/__tests__/generateMappingChain.js index 93aca0be17f991..50df4a1be7ca53 100644 --- a/src/ui/public/filter_bar/lib/__tests__/generateMappingChain.js +++ b/src/ui/public/filter_bar/lib/__tests__/generateMappingChain.js @@ -1,6 +1,7 @@ import sinon from 'auto-release-sinon'; import expect from 'expect.js'; import ngMock from 'ngMock'; +import FilterBarLibGenerateMappingChainProvider from 'ui/filter_bar/lib/generateMappingChain'; describe('Filter Bar Directive', function () { describe('generateMappingChain()', function () { @@ -13,7 +14,7 @@ describe('Filter Bar Directive', function () { beforeEach(ngMock.inject(function (Private, _$rootScope_, _Promise_) { $rootScope = _$rootScope_; Promise = _Promise_; - generateMappingChain = Private(require('ui/filter_bar/lib/generateMappingChain')); + generateMappingChain = Private(FilterBarLibGenerateMappingChainProvider); })); diff --git a/src/ui/public/filter_bar/lib/__tests__/mapAndFlattenFilters.js b/src/ui/public/filter_bar/lib/__tests__/mapAndFlattenFilters.js index 17a51e432d7c36..5b89292b6930a4 100644 --- a/src/ui/public/filter_bar/lib/__tests__/mapAndFlattenFilters.js +++ b/src/ui/public/filter_bar/lib/__tests__/mapAndFlattenFilters.js @@ -1,6 +1,7 @@ import expect from 'expect.js'; import ngMock from 'ngMock'; import sinon from 'auto-release-sinon'; +import FilterBarLibMapAndFlattenFiltersProvider from 'ui/filter_bar/lib/mapAndFlattenFilters'; describe('Filter Bar Directive', function () { describe('mapAndFlattenFilters()', function () { @@ -16,7 +17,7 @@ describe('Filter Bar Directive', function () { )); beforeEach(ngMock.inject(function (Private, _$rootScope_) { - mapAndFlattenFilters = Private(require('ui/filter_bar/lib/mapAndFlattenFilters')); + mapAndFlattenFilters = Private(FilterBarLibMapAndFlattenFiltersProvider); $rootScope = _$rootScope_; })); diff --git a/src/ui/public/filter_bar/lib/__tests__/mapDefault.js b/src/ui/public/filter_bar/lib/__tests__/mapDefault.js index 6c50280ad17d4c..1cc10f807434cb 100644 --- a/src/ui/public/filter_bar/lib/__tests__/mapDefault.js +++ b/src/ui/public/filter_bar/lib/__tests__/mapDefault.js @@ -1,5 +1,6 @@ import expect from 'expect.js'; import ngMock from 'ngMock'; +import FilterBarLibMapDefaultProvider from 'ui/filter_bar/lib/mapDefault'; describe('Filter Bar Directive', function () { describe('mapDefault()', function () { @@ -8,7 +9,7 @@ describe('Filter Bar Directive', function () { beforeEach(ngMock.module('kibana')); beforeEach(ngMock.inject(function (Private, _$rootScope_) { $rootScope = _$rootScope_; - mapDefault = Private(require('ui/filter_bar/lib/mapDefault')); + mapDefault = Private(FilterBarLibMapDefaultProvider); })); it('should return the key and value for matching filters', function (done) { diff --git a/src/ui/public/filter_bar/lib/__tests__/mapExists.js b/src/ui/public/filter_bar/lib/__tests__/mapExists.js index 4363ec533ebc7a..6a8c3edd46ea02 100644 --- a/src/ui/public/filter_bar/lib/__tests__/mapExists.js +++ b/src/ui/public/filter_bar/lib/__tests__/mapExists.js @@ -1,5 +1,6 @@ import expect from 'expect.js'; import ngMock from 'ngMock'; +import FilterBarLibMapExistsProvider from 'ui/filter_bar/lib/mapExists'; describe('Filter Bar Directive', function () { describe('mapExists()', function () { @@ -8,7 +9,7 @@ describe('Filter Bar Directive', function () { beforeEach(ngMock.module('kibana')); beforeEach(ngMock.inject(function (Private, _$rootScope_) { $rootScope = _$rootScope_; - mapExists = Private(require('ui/filter_bar/lib/mapExists')); + mapExists = Private(FilterBarLibMapExistsProvider); })); it('should return the key and value for matching filters', function (done) { diff --git a/src/ui/public/filter_bar/lib/__tests__/mapFilter.js b/src/ui/public/filter_bar/lib/__tests__/mapFilter.js index 3d255b6a981bec..e69f4ab1251f03 100644 --- a/src/ui/public/filter_bar/lib/__tests__/mapFilter.js +++ b/src/ui/public/filter_bar/lib/__tests__/mapFilter.js @@ -1,6 +1,7 @@ import sinon from 'auto-release-sinon'; import expect from 'expect.js'; import ngMock from 'ngMock'; +import FilterBarLibMapFilterProvider from 'ui/filter_bar/lib/mapFilter'; describe('Filter Bar Directive', function () { var mapFilter; @@ -16,7 +17,7 @@ describe('Filter Bar Directive', function () { )); beforeEach(ngMock.inject(function (_$rootScope_, Private) { - mapFilter = Private(require('ui/filter_bar/lib/mapFilter')); + mapFilter = Private(FilterBarLibMapFilterProvider); $rootScope = _$rootScope_; })); diff --git a/src/ui/public/filter_bar/lib/__tests__/mapFlattenAndWrapFilters.js b/src/ui/public/filter_bar/lib/__tests__/mapFlattenAndWrapFilters.js index 2d4d24f864e73b..97bc0c3ba67e0a 100644 --- a/src/ui/public/filter_bar/lib/__tests__/mapFlattenAndWrapFilters.js +++ b/src/ui/public/filter_bar/lib/__tests__/mapFlattenAndWrapFilters.js @@ -3,6 +3,7 @@ import _ from 'lodash'; import sinon from 'auto-release-sinon'; import expect from 'expect.js'; import ngMock from 'ngMock'; +import FilterBarLibMapFlattenAndWrapFiltersProvider from 'ui/filter_bar/lib/mapFlattenAndWrapFilters'; describe('Filter Bar Directive', function () { describe('mapFlattenAndWrapFilters()', function () { var mapFlattenAndWrapFilters; @@ -17,7 +18,7 @@ describe('Filter Bar Directive', function () { )); beforeEach(ngMock.inject(function (Private, _$rootScope_) { - mapFlattenAndWrapFilters = Private(require('ui/filter_bar/lib/mapFlattenAndWrapFilters')); + mapFlattenAndWrapFilters = Private(FilterBarLibMapFlattenAndWrapFiltersProvider); $rootScope = _$rootScope_; })); diff --git a/src/ui/public/filter_bar/lib/__tests__/mapGeoBoundingBox.js b/src/ui/public/filter_bar/lib/__tests__/mapGeoBoundingBox.js index 1d4ac2920d4aaf..30d3e1e8c5293e 100644 --- a/src/ui/public/filter_bar/lib/__tests__/mapGeoBoundingBox.js +++ b/src/ui/public/filter_bar/lib/__tests__/mapGeoBoundingBox.js @@ -1,6 +1,7 @@ import sinon from 'auto-release-sinon'; import expect from 'expect.js'; import ngMock from 'ngMock'; +import FilterBarLibMapGeoBoundingBoxProvider from 'ui/filter_bar/lib/mapGeoBoundingBox'; describe('Filter Bar Directive', function () { describe('mapGeoBoundingBox()', function () { @@ -16,7 +17,7 @@ describe('Filter Bar Directive', function () { )); beforeEach(ngMock.inject(function (Private, _$rootScope_) { - mapGeoBoundingBox = Private(require('ui/filter_bar/lib/mapGeoBoundingBox')); + mapGeoBoundingBox = Private(FilterBarLibMapGeoBoundingBoxProvider); $rootScope = _$rootScope_; })); diff --git a/src/ui/public/filter_bar/lib/__tests__/mapMatchAll.js b/src/ui/public/filter_bar/lib/__tests__/mapMatchAll.js index 0ff30bfa1f2e21..3fcc107f38f7ec 100644 --- a/src/ui/public/filter_bar/lib/__tests__/mapMatchAll.js +++ b/src/ui/public/filter_bar/lib/__tests__/mapMatchAll.js @@ -1,5 +1,6 @@ import expect from 'expect.js'; import ngMock from 'ngMock'; +import FilterBarLibMapMatchAllProvider from 'ui/filter_bar/lib/mapMatchAll'; describe('ui/filter_bar/lib', function () { describe('mapMatchAll()', function () { @@ -11,7 +12,7 @@ describe('ui/filter_bar/lib', function () { beforeEach(ngMock.module('kibana')); beforeEach(ngMock.inject(function (Private, _$rootScope_) { $rootScope = _$rootScope_; - mapMatchAll = Private(require('ui/filter_bar/lib/mapMatchAll')); + mapMatchAll = Private(FilterBarLibMapMatchAllProvider); filter = { match_all: {}, meta: { diff --git a/src/ui/public/filter_bar/lib/__tests__/mapMissing.js b/src/ui/public/filter_bar/lib/__tests__/mapMissing.js index fd549ac9230225..721c1116398a3b 100644 --- a/src/ui/public/filter_bar/lib/__tests__/mapMissing.js +++ b/src/ui/public/filter_bar/lib/__tests__/mapMissing.js @@ -1,5 +1,6 @@ import ngMock from 'ngMock'; import expect from 'expect.js'; +import FilterBarLibMapMissingProvider from 'ui/filter_bar/lib/mapMissing'; describe('Filter Bar Directive', function () { describe('mapMissing()', function () { @@ -9,7 +10,7 @@ describe('Filter Bar Directive', function () { beforeEach(ngMock.module('kibana')); beforeEach(ngMock.inject(function (Private, _$rootScope_) { $rootScope = _$rootScope_; - mapMissing = Private(require('ui/filter_bar/lib/mapMissing')); + mapMissing = Private(FilterBarLibMapMissingProvider); })); it('should return the key and value for matching filters', function (done) { diff --git a/src/ui/public/filter_bar/lib/__tests__/mapQueryString.js b/src/ui/public/filter_bar/lib/__tests__/mapQueryString.js index 4747f8e2231c74..f4acd1eb3b9c48 100644 --- a/src/ui/public/filter_bar/lib/__tests__/mapQueryString.js +++ b/src/ui/public/filter_bar/lib/__tests__/mapQueryString.js @@ -1,5 +1,6 @@ import expect from 'expect.js'; import ngMock from 'ngMock'; +import FilterBarLibMapQueryStringProvider from 'ui/filter_bar/lib/mapQueryString'; describe('Filter Bar Directive', function () { describe('mapQueryString()', function () { var mapQueryString; @@ -7,7 +8,7 @@ describe('Filter Bar Directive', function () { beforeEach(ngMock.module('kibana')); beforeEach(ngMock.inject(function (Private, _$rootScope_) { $rootScope = _$rootScope_; - mapQueryString = Private(require('ui/filter_bar/lib/mapQueryString')); + mapQueryString = Private(FilterBarLibMapQueryStringProvider); })); it('should return the key and value for matching filters', function (done) { diff --git a/src/ui/public/filter_bar/lib/__tests__/mapRange.js b/src/ui/public/filter_bar/lib/__tests__/mapRange.js index 02d794b35ee51a..3c4cb1484c8b7e 100644 --- a/src/ui/public/filter_bar/lib/__tests__/mapRange.js +++ b/src/ui/public/filter_bar/lib/__tests__/mapRange.js @@ -1,6 +1,7 @@ import sinon from 'auto-release-sinon'; import expect from 'expect.js'; import ngMock from 'ngMock'; +import FilterBarLibMapRangeProvider from 'ui/filter_bar/lib/mapRange'; describe('Filter Bar Directive', function () { describe('mapRange()', function () { @@ -16,7 +17,7 @@ describe('Filter Bar Directive', function () { )); beforeEach(ngMock.inject(function (Private, _$rootScope_) { - mapRange = Private(require('ui/filter_bar/lib/mapRange')); + mapRange = Private(FilterBarLibMapRangeProvider); $rootScope = _$rootScope_; })); diff --git a/src/ui/public/filter_bar/lib/__tests__/mapScript.js b/src/ui/public/filter_bar/lib/__tests__/mapScript.js index c75ffef0c27ade..3a7e2713aadca1 100644 --- a/src/ui/public/filter_bar/lib/__tests__/mapScript.js +++ b/src/ui/public/filter_bar/lib/__tests__/mapScript.js @@ -1,6 +1,7 @@ import sinon from 'auto-release-sinon'; import expect from 'expect.js'; import ngMock from 'ngMock'; +import FilterBarLibMapScriptProvider from 'ui/filter_bar/lib/mapScript'; describe('Filter Bar Directive', function () { describe('mapScript()', function () { @@ -17,7 +18,7 @@ describe('Filter Bar Directive', function () { beforeEach(ngMock.inject(function (Private, _$rootScope_) { $rootScope = _$rootScope_; - mapScript = Private(require('ui/filter_bar/lib/mapScript')); + mapScript = Private(FilterBarLibMapScriptProvider); })); it('should return the key and value for matching filters', function (done) { diff --git a/src/ui/public/filter_bar/lib/__tests__/mapTerms.js b/src/ui/public/filter_bar/lib/__tests__/mapTerms.js index fa08092ccf8e9d..9bc0ab67377425 100644 --- a/src/ui/public/filter_bar/lib/__tests__/mapTerms.js +++ b/src/ui/public/filter_bar/lib/__tests__/mapTerms.js @@ -1,6 +1,7 @@ import sinon from 'auto-release-sinon'; import expect from 'expect.js'; import ngMock from 'ngMock'; +import FilterBarLibMapTermsProvider from 'ui/filter_bar/lib/mapTerms'; describe('Filter Bar Directive', function () { describe('mapTerms()', function () { @@ -17,7 +18,7 @@ describe('Filter Bar Directive', function () { beforeEach(ngMock.inject(function (Private, _$rootScope_) { $rootScope = _$rootScope_; - mapTerms = Private(require('ui/filter_bar/lib/mapTerms')); + mapTerms = Private(FilterBarLibMapTermsProvider); })); it('should return the key and value for matching filters', function (done) { diff --git a/src/ui/public/filter_bar/lib/mapAndFlattenFilters.js b/src/ui/public/filter_bar/lib/mapAndFlattenFilters.js index fafa72bb9c7c09..8d101e9182f304 100644 --- a/src/ui/public/filter_bar/lib/mapAndFlattenFilters.js +++ b/src/ui/public/filter_bar/lib/mapAndFlattenFilters.js @@ -1,7 +1,8 @@ import _ from 'lodash'; +import FilterBarLibMapFilterProvider from 'ui/filter_bar/lib/mapFilter'; define(function (require) { return function mapAndFlattenFiltersProvider(Private, Promise) { - var mapFilter = Private(require('ui/filter_bar/lib/mapFilter')); + var mapFilter = Private(FilterBarLibMapFilterProvider); return function (filters) { return _(filters) .flatten() diff --git a/src/ui/public/filter_bar/lib/mapFilter.js b/src/ui/public/filter_bar/lib/mapFilter.js index 4e75d85dc422ec..29d353519b7680 100644 --- a/src/ui/public/filter_bar/lib/mapFilter.js +++ b/src/ui/public/filter_bar/lib/mapFilter.js @@ -1,8 +1,18 @@ import _ from 'lodash'; +import GenerateMappingChainProvider from './generateMappingChain'; +import MapMatchAllProvider from './mapMatchAll'; +import MapTermsProvider from './mapTerms'; +import MapRangeProvider from './mapRange'; +import MapExistsProvider from './mapExists'; +import MapMissingProvider from './mapMissing'; +import MapQueryStringProvider from './mapQueryString'; +import MapGeoBoundingBoxProvider from './mapGeoBoundingBox'; +import MapScriptProvider from './mapScript'; +import MapDefaultProvider from './mapDefault'; define(function (require) { return function mapFilterProvider(Promise, Private) { - var generateMappingChain = Private(require('./generateMappingChain')); + var generateMappingChain = Private(GenerateMappingChainProvider); /** Mappers **/ @@ -21,15 +31,15 @@ define(function (require) { // that either handles the mapping operation or not // and add it here. ProTip: These are executed in order listed var mappers = [ - Private(require('./mapMatchAll')), - Private(require('./mapTerms')), - Private(require('./mapRange')), - Private(require('./mapExists')), - Private(require('./mapMissing')), - Private(require('./mapQueryString')), - Private(require('./mapGeoBoundingBox')), - Private(require('./mapScript')), - Private(require('./mapDefault')) + Private(MapMatchAllProvider), + Private(MapTermsProvider), + Private(MapRangeProvider), + Private(MapExistsProvider), + Private(MapMissingProvider), + Private(MapQueryStringProvider), + Private(MapGeoBoundingBoxProvider), + Private(MapScriptProvider), + Private(MapDefaultProvider) ]; var noop = function () { diff --git a/src/ui/public/filter_bar/lib/mapFlattenAndWrapFilters.js b/src/ui/public/filter_bar/lib/mapFlattenAndWrapFilters.js index 4cb5d619251c83..4be7336429fdf5 100644 --- a/src/ui/public/filter_bar/lib/mapFlattenAndWrapFilters.js +++ b/src/ui/public/filter_bar/lib/mapFlattenAndWrapFilters.js @@ -1,7 +1,8 @@ import _ from 'lodash'; +import FilterBarLibMapAndFlattenFiltersProvider from 'ui/filter_bar/lib/mapAndFlattenFilters'; define(function (require) { return function mapFlattenAndWrapFilters(Private) { - var mapAndFlattenFilters = Private(require('ui/filter_bar/lib/mapAndFlattenFilters')); + var mapAndFlattenFilters = Private(FilterBarLibMapAndFlattenFiltersProvider); return function (filters) { return mapAndFlattenFilters(filters).then(function (filters) { return _.map(filters, function (filter) { diff --git a/src/ui/public/filter_bar/query_filter.js b/src/ui/public/filter_bar/query_filter.js index e7de1716006709..03063cb8214fa3 100644 --- a/src/ui/public/filter_bar/query_filter.js +++ b/src/ui/public/filter_bar/query_filter.js @@ -4,11 +4,13 @@ import onlyStateChanged from 'ui/filter_bar/lib/onlyStateChanged'; import uniqFilters from 'ui/filter_bar/lib/uniqFilters'; import compareFilters from 'ui/filter_bar/lib/compareFilters'; import angular from 'angular'; +import EventsProvider from 'ui/events'; +import FilterBarLibMapAndFlattenFiltersProvider from 'ui/filter_bar/lib/mapAndFlattenFilters'; define(function (require) { return function (Private, $rootScope, getAppState, globalState, config) { - var EventEmitter = Private(require('ui/events')); - var mapAndFlattenFilters = Private(require('ui/filter_bar/lib/mapAndFlattenFilters')); + var EventEmitter = Private(EventsProvider); + var mapAndFlattenFilters = Private(FilterBarLibMapAndFlattenFiltersProvider); var queryFilter = new EventEmitter(); diff --git a/src/ui/public/filter_manager/__tests__/filter_manager.js b/src/ui/public/filter_manager/__tests__/filter_manager.js index 13f016e7b51929..4caa67cf2b6d3f 100644 --- a/src/ui/public/filter_manager/__tests__/filter_manager.js +++ b/src/ui/public/filter_manager/__tests__/filter_manager.js @@ -3,6 +3,8 @@ import sinon from 'auto-release-sinon'; import MockState from 'fixtures/mock_state'; import expect from 'expect.js'; import ngMock from 'ngMock'; +import FilterManagerProvider from 'ui/filter_manager'; +import FilterBarQueryFilterProvider from 'ui/filter_bar/query_filter'; var $rootScope; var queryFilter; var filterManager; @@ -36,10 +38,10 @@ describe('Filter Manager', function () { beforeEach(ngMock.inject(function (_$rootScope_, Private) { $rootScope = _$rootScope_; - filterManager = Private(require('ui/filter_manager')); + filterManager = Private(FilterManagerProvider); // mock required queryFilter methods, used in the manager - queryFilter = Private(require('ui/filter_bar/query_filter')); + queryFilter = Private(FilterBarQueryFilterProvider); sinon.stub(queryFilter, 'getAppFilters', function () { return appState.filters; }); diff --git a/src/ui/public/filter_manager/filter_manager.js b/src/ui/public/filter_manager/filter_manager.js index d6c3fc5097318d..02fed92551d694 100644 --- a/src/ui/public/filter_manager/filter_manager.js +++ b/src/ui/public/filter_manager/filter_manager.js @@ -1,8 +1,9 @@ import _ from 'lodash'; +import FilterBarQueryFilterProvider from 'ui/filter_bar/query_filter'; // Adds a filter to a passed state define(function (require) { return function (Private) { - var queryFilter = Private(require('ui/filter_bar/query_filter')); + var queryFilter = Private(FilterBarQueryFilterProvider); var filterManager = {}; filterManager.add = function (field, values, operation, index) { diff --git a/src/ui/public/filter_manager/lib/__tests__/phrase.js b/src/ui/public/filter_manager/lib/__tests__/phrase.js index 774285b817f029..891b6f66048f38 100644 --- a/src/ui/public/filter_manager/lib/__tests__/phrase.js +++ b/src/ui/public/filter_manager/lib/__tests__/phrase.js @@ -3,13 +3,14 @@ import fn from 'ui/filter_manager/lib/phrase'; import expect from 'expect.js'; import _ from 'lodash'; import ngMock from 'ngMock'; +import FixturesStubbedLogstashIndexPatternProvider from 'fixtures/stubbed_logstash_index_pattern'; var indexPattern; var expected; describe('Filter Manager', function () { describe('Phrase filter builder', function () { beforeEach(ngMock.module('kibana')); beforeEach(ngMock.inject(function (Private, _$rootScope_, Promise) { - indexPattern = Private(require('fixtures/stubbed_logstash_index_pattern')); + indexPattern = Private(FixturesStubbedLogstashIndexPatternProvider); expected = _.cloneDeep(require('fixtures/filter_skeleton')); })); diff --git a/src/ui/public/filter_manager/lib/__tests__/query.js b/src/ui/public/filter_manager/lib/__tests__/query.js index 5f1c045e8c24ea..5cbd0db0b60bb0 100644 --- a/src/ui/public/filter_manager/lib/__tests__/query.js +++ b/src/ui/public/filter_manager/lib/__tests__/query.js @@ -3,13 +3,14 @@ import fn from 'ui/filter_manager/lib/query'; import expect from 'expect.js'; import _ from 'lodash'; import ngMock from 'ngMock'; +import FixturesStubbedLogstashIndexPatternProvider from 'fixtures/stubbed_logstash_index_pattern'; var indexPattern; var expected; describe('Filter Manager', function () { describe('Phrase filter builder', function () { beforeEach(ngMock.module('kibana')); beforeEach(ngMock.inject(function (Private, _$rootScope_, Promise) { - indexPattern = Private(require('fixtures/stubbed_logstash_index_pattern')); + indexPattern = Private(FixturesStubbedLogstashIndexPatternProvider); expected = _.cloneDeep(require('fixtures/filter_skeleton')); })); diff --git a/src/ui/public/filter_manager/lib/__tests__/range.js b/src/ui/public/filter_manager/lib/__tests__/range.js index af422997d53320..f6981972ca5656 100644 --- a/src/ui/public/filter_manager/lib/__tests__/range.js +++ b/src/ui/public/filter_manager/lib/__tests__/range.js @@ -3,13 +3,14 @@ import fn from 'ui/filter_manager/lib/range'; import expect from 'expect.js'; import _ from 'lodash'; import ngMock from 'ngMock'; +import FixturesStubbedLogstashIndexPatternProvider from 'fixtures/stubbed_logstash_index_pattern'; var indexPattern; var expected; describe('Filter Manager', function () { describe('Range filter builder', function () { beforeEach(ngMock.module('kibana')); beforeEach(ngMock.inject(function (Private, _$rootScope_, Promise) { - indexPattern = Private(require('fixtures/stubbed_logstash_index_pattern')); + indexPattern = Private(FixturesStubbedLogstashIndexPatternProvider); expected = _.cloneDeep(require('fixtures/filter_skeleton')); })); diff --git a/src/ui/public/index_patterns/__tests__/_FieldFormat.js b/src/ui/public/index_patterns/__tests__/_FieldFormat.js index cbad45f52fe140..26d5c9669f50c6 100644 --- a/src/ui/public/index_patterns/__tests__/_FieldFormat.js +++ b/src/ui/public/index_patterns/__tests__/_FieldFormat.js @@ -1,6 +1,7 @@ import _ from 'lodash'; import expect from 'expect.js'; import ngMock from 'ngMock'; +import IndexPatternsFieldFormatFieldFormatProvider from 'ui/index_patterns/_field_format/FieldFormat'; describe('FieldFormat class', function () { var FieldFormat; @@ -8,7 +9,7 @@ describe('FieldFormat class', function () { beforeEach(ngMock.module('kibana')); beforeEach(ngMock.inject(function (Private) { - FieldFormat = Private(require('ui/index_patterns/_field_format/FieldFormat')); + FieldFormat = Private(IndexPatternsFieldFormatFieldFormatProvider); TestFormat = function (params) { TestFormat.Super.call(this, params); diff --git a/src/ui/public/index_patterns/__tests__/_cast_mapping_type.js b/src/ui/public/index_patterns/__tests__/_cast_mapping_type.js index 20fbc597b5a8f9..34b94ff448cedf 100644 --- a/src/ui/public/index_patterns/__tests__/_cast_mapping_type.js +++ b/src/ui/public/index_patterns/__tests__/_cast_mapping_type.js @@ -1,13 +1,14 @@ import _ from 'lodash'; import ngMock from 'ngMock'; import expect from 'expect.js'; +import IndexPatternsCastMappingTypeProvider from 'ui/index_patterns/_cast_mapping_type'; describe('type normalizer (castMappingType)', function () { var fn; var fields; beforeEach(ngMock.module('kibana')); beforeEach(ngMock.inject(function (Private, $injector) { - fn = Private(require('ui/index_patterns/_cast_mapping_type')); + fn = Private(IndexPatternsCastMappingTypeProvider); })); it('should be a function', function () { diff --git a/src/ui/public/index_patterns/__tests__/_get_computed_fields.js b/src/ui/public/index_patterns/__tests__/_get_computed_fields.js index 26aa91a74c9a02..046f7dc283828d 100644 --- a/src/ui/public/index_patterns/__tests__/_get_computed_fields.js +++ b/src/ui/public/index_patterns/__tests__/_get_computed_fields.js @@ -1,6 +1,7 @@ import _ from 'lodash'; import expect from 'expect.js'; import ngMock from 'ngMock'; +import FixturesStubbedLogstashIndexPatternProvider from 'fixtures/stubbed_logstash_index_pattern'; describe('get computed fields', function () { var indexPattern; @@ -10,7 +11,7 @@ describe('get computed fields', function () { var fn; beforeEach(ngMock.module('kibana')); beforeEach(ngMock.inject(function (Private, $injector) { - indexPattern = Private(require('fixtures/stubbed_logstash_index_pattern')); + indexPattern = Private(FixturesStubbedLogstashIndexPatternProvider); getComputedFields = require('ui/index_patterns/_get_computed_fields'); indexPattern.getComputedFields = getComputedFields.bind(indexPattern); fn = indexPattern.getComputedFields; diff --git a/src/ui/public/index_patterns/__tests__/_index_pattern.js b/src/ui/public/index_patterns/__tests__/_index_pattern.js index ee8b961932676d..79585e3728c1a4 100644 --- a/src/ui/public/index_patterns/__tests__/_index_pattern.js +++ b/src/ui/public/index_patterns/__tests__/_index_pattern.js @@ -5,6 +5,13 @@ import expect from 'expect.js'; import Promise from 'bluebird'; import errors from 'ui/errors'; import IndexedArray from 'ui/IndexedArray'; +import FixturesLogstashFieldsProvider from 'fixtures/logstash_fields'; +import FixturesStubbedDocSourceResponseProvider from 'fixtures/stubbed_doc_source_response'; +import CourierDataSourceDocSourceProvider from 'ui/courier/data_source/doc_source'; +import IndexPatternsMapperProvider from 'ui/index_patterns/_mapper'; +import UtilsMappingSetupProvider from 'ui/utils/mapping_setup'; +import IndexPatternsIntervalsProvider from 'ui/index_patterns/_intervals'; +import IndexPatternsIndexPatternProvider from 'ui/index_patterns/_index_pattern'; describe('index pattern', function () { var IndexPattern; var mapper; @@ -23,21 +30,21 @@ describe('index pattern', function () { beforeEach(ngMock.inject(function (Private, $injector, _config_) { $rootScope = $injector.get('$rootScope'); config = _config_; - mockLogstashFields = Private(require('fixtures/logstash_fields')); - docSourceResponse = Private(require('fixtures/stubbed_doc_source_response')); + mockLogstashFields = Private(FixturesLogstashFieldsProvider); + docSourceResponse = Private(FixturesStubbedDocSourceResponseProvider); - DocSource = Private(require('ui/courier/data_source/doc_source')); + DocSource = Private(CourierDataSourceDocSourceProvider); sinon.stub(DocSource.prototype, 'doIndex'); sinon.stub(DocSource.prototype, 'fetch'); // stub mapper - mapper = Private(require('ui/index_patterns/_mapper')); + mapper = Private(IndexPatternsMapperProvider); sinon.stub(mapper, 'getFieldsForIndexPattern', function () { return Promise.resolve(_.filter(mockLogstashFields, { scripted: false })); }); // stub mappingSetup - mappingSetup = Private(require('ui/utils/mapping_setup')); + mappingSetup = Private(UtilsMappingSetupProvider); sinon.stub(mappingSetup, 'isDefined', function () { return Promise.resolve(true); }); @@ -52,13 +59,13 @@ describe('index pattern', function () { Private.stub(require('ui/index_patterns/_calculate_indices'), calculateIndices); // spy on intervals - intervals = Private(require('ui/index_patterns/_intervals')); + intervals = Private(IndexPatternsIntervalsProvider); sinon.stub(intervals, 'toIndexList').returns([ { index: 'foo', max: Infinity, min: -Infinity }, { index: 'bar', max: Infinity, min: -Infinity } ]); - IndexPattern = Private(require('ui/index_patterns/_index_pattern')); + IndexPattern = Private(IndexPatternsIndexPatternProvider); })); // create an indexPattern instance for each test diff --git a/src/ui/public/index_patterns/__tests__/_map_field.js b/src/ui/public/index_patterns/__tests__/_map_field.js index 82dc2317eaaf82..b795ab53a85068 100644 --- a/src/ui/public/index_patterns/__tests__/_map_field.js +++ b/src/ui/public/index_patterns/__tests__/_map_field.js @@ -1,6 +1,7 @@ import _ from 'lodash'; import expect from 'expect.js'; import ngMock from 'ngMock'; +import IndexPatternsMapFieldProvider from 'ui/index_patterns/_map_field'; describe('field mapping normalizer (mapField)', function () { var fn; @@ -8,7 +9,7 @@ describe('field mapping normalizer (mapField)', function () { beforeEach(ngMock.module('kibana')); beforeEach(ngMock.inject(function (Private, $injector, config) { config.set('metaFields', ['_id', '_timestamp']); - fn = Private(require('ui/index_patterns/_map_field')); + fn = Private(IndexPatternsMapFieldProvider); fields = require('fixtures/field_mapping').test.mappings.testType; })); diff --git a/src/ui/public/index_patterns/__tests__/calculate_indices.js b/src/ui/public/index_patterns/__tests__/calculate_indices.js index b1336433ef167c..050574d9782057 100644 --- a/src/ui/public/index_patterns/__tests__/calculate_indices.js +++ b/src/ui/public/index_patterns/__tests__/calculate_indices.js @@ -4,6 +4,7 @@ import sinon from 'auto-release-sinon'; import expect from 'expect.js'; import ngMock from 'ngMock'; import moment from 'moment'; +import IndexPatternsCalculateIndicesProvider from 'ui/index_patterns/_calculate_indices'; describe('ui/index_patterns/_calculate_indices', () => { let Promise; @@ -36,7 +37,7 @@ describe('ui/index_patterns/_calculate_indices', () => { $rootScope = $injector.get('$rootScope'); es = $injector.get('es'); Promise = $injector.get('Promise'); - calculateIndices = Private(require('ui/index_patterns/_calculate_indices')); + calculateIndices = Private(IndexPatternsCalculateIndicesProvider); })); function run({ start = undefined, stop = undefined } = {}) { diff --git a/src/ui/public/index_patterns/__tests__/flatten_hit.js b/src/ui/public/index_patterns/__tests__/flatten_hit.js index 1aae31d49b158a..bfeb19148b720d 100644 --- a/src/ui/public/index_patterns/__tests__/flatten_hit.js +++ b/src/ui/public/index_patterns/__tests__/flatten_hit.js @@ -1,6 +1,7 @@ import _ from 'lodash'; import expect from 'expect.js'; import ngMock from 'ngMock'; +import IndexPatternsFlattenHitProvider from 'ui/index_patterns/_flatten_hit'; describe('IndexPattern#flattenHit()', function () { @@ -32,7 +33,7 @@ describe('IndexPattern#flattenHit()', function () { } }; - flattenHit = Private(require('ui/index_patterns/_flatten_hit'))(indexPattern).uncached; + flattenHit = Private(IndexPatternsFlattenHitProvider)(indexPattern).uncached; config = $injector.get('config'); hit = { diff --git a/src/ui/public/index_patterns/__tests__/index_patterns.js b/src/ui/public/index_patterns/__tests__/index_patterns.js index bdbf5d391bdc85..7146e94f2e27a4 100644 --- a/src/ui/public/index_patterns/__tests__/index_patterns.js +++ b/src/ui/public/index_patterns/__tests__/index_patterns.js @@ -1,14 +1,16 @@ import ngMock from 'ngMock'; import expect from 'expect.js'; import sinon from 'auto-release-sinon'; +import IndexPatternProvider from '../_index_pattern'; +import IndexPatternsProvider from '../index_patterns'; describe('IndexPatterns service', function () { let indexPatterns; beforeEach(ngMock.module('kibana')); beforeEach(ngMock.inject(function (Private) { - const IndexPattern = Private(require('../_index_pattern')); - indexPatterns = Private(require('../index_patterns')); + const IndexPattern = Private(IndexPatternProvider); + indexPatterns = Private(IndexPatternsProvider); // prevent IndexPattern initialization from doing anything Private.stub( diff --git a/src/ui/public/index_patterns/__tests__/intervals.js b/src/ui/public/index_patterns/__tests__/intervals.js index ce6ee737a15fdc..d46ecbd8223713 100644 --- a/src/ui/public/index_patterns/__tests__/intervals.js +++ b/src/ui/public/index_patterns/__tests__/intervals.js @@ -2,6 +2,7 @@ import moment from 'moment'; import { pluck } from 'lodash'; import expect from 'expect.js'; import ngMock from 'ngMock'; +import IndexPatternsIntervalsProvider from 'ui/index_patterns/_intervals'; describe('Index Patterns', function () { describe('interval.toIndexList()', function () { @@ -9,7 +10,7 @@ describe('Index Patterns', function () { var intervals; beforeEach(ngMock.module('kibana')); beforeEach(ngMock.inject(function (Private) { - intervals = Private(require('ui/index_patterns/_intervals')); + intervals = Private(IndexPatternsIntervalsProvider); })); it('should return correct indices for hourly [logstash-]YYYY.MM.DD.HH', function () { diff --git a/src/ui/public/index_patterns/_field.js b/src/ui/public/index_patterns/_field.js index 6e89a0a41e8212..c8cdce67ab0c97 100644 --- a/src/ui/public/index_patterns/_field.js +++ b/src/ui/public/index_patterns/_field.js @@ -1,10 +1,13 @@ import ObjDefine from 'ui/utils/ObjDefine'; +import IndexPatternsFieldFormatFieldFormatProvider from 'ui/index_patterns/_field_format/FieldFormat'; +import IndexPatternsFieldTypesProvider from 'ui/index_patterns/_field_types'; +import RegistryFieldFormatsProvider from 'ui/registry/field_formats'; define(function (require) { return function FieldObjectProvider(Private, shortDotsFilter, $rootScope, Notifier) { var notify = new Notifier({ location: 'IndexPattern Field' }); - var FieldFormat = Private(require('ui/index_patterns/_field_format/FieldFormat')); - var fieldTypes = Private(require('ui/index_patterns/_field_types')); - var fieldFormats = Private(require('ui/registry/field_formats')); + var FieldFormat = Private(IndexPatternsFieldFormatFieldFormatProvider); + var fieldTypes = Private(IndexPatternsFieldTypesProvider); + var fieldFormats = Private(RegistryFieldFormatsProvider); function Field(indexPattern, spec) { // unwrap old instances of Field diff --git a/src/ui/public/index_patterns/_field_format/FieldFormat.js b/src/ui/public/index_patterns/_field_format/FieldFormat.js index 9ff4946f32803a..e4fd10e54539f2 100644 --- a/src/ui/public/index_patterns/_field_format/FieldFormat.js +++ b/src/ui/public/index_patterns/_field_format/FieldFormat.js @@ -1,7 +1,8 @@ import _ from 'lodash'; +import IndexPatternsFieldFormatContentTypesProvider from 'ui/index_patterns/_field_format/contentTypes'; define(function (require) { return function FieldFormatClassProvider(config, $rootScope, Private) { - var contentTypes = Private(require('ui/index_patterns/_field_format/contentTypes')); + var contentTypes = Private(IndexPatternsFieldFormatContentTypesProvider); function FieldFormat(params) { var self = this; diff --git a/src/ui/public/index_patterns/_field_list.js b/src/ui/public/index_patterns/_field_list.js index beb8b02e83cc5d..2306c1215529ec 100644 --- a/src/ui/public/index_patterns/_field_list.js +++ b/src/ui/public/index_patterns/_field_list.js @@ -1,8 +1,9 @@ import IndexedArray from 'ui/IndexedArray'; import _ from 'lodash'; +import IndexPatternsFieldProvider from 'ui/index_patterns/_field'; define(function (require) { return function FieldListProvider(Private) { - var Field = Private(require('ui/index_patterns/_field')); + var Field = Private(IndexPatternsFieldProvider); _.class(FieldList).inherits(IndexedArray); function FieldList(indexPattern, specs) { diff --git a/src/ui/public/index_patterns/_index_pattern.js b/src/ui/public/index_patterns/_index_pattern.js index abd481733c4f3f..36d2308715da40 100644 --- a/src/ui/public/index_patterns/_index_pattern.js +++ b/src/ui/public/index_patterns/_index_pattern.js @@ -3,20 +3,30 @@ import errors from 'ui/errors'; import angular from 'angular'; import getComputedFields from 'ui/index_patterns/_get_computed_fields'; import formatHit from 'ui/index_patterns/_format_hit'; +import RegistryFieldFormatsProvider from 'ui/registry/field_formats'; +import IndexPatternsGetIdsProvider from 'ui/index_patterns/_get_ids'; +import IndexPatternsMapperProvider from 'ui/index_patterns/_mapper'; +import IndexPatternsIntervalsProvider from 'ui/index_patterns/_intervals'; +import CourierDataSourceDocSourceProvider from 'ui/courier/data_source/doc_source'; +import UtilsMappingSetupProvider from 'ui/utils/mapping_setup'; +import IndexPatternsFieldListProvider from 'ui/index_patterns/_field_list'; +import IndexPatternsFlattenHitProvider from 'ui/index_patterns/_flatten_hit'; +import IndexPatternsCalculateIndicesProvider from 'ui/index_patterns/_calculate_indices'; +import IndexPatternsPatternCacheProvider from 'ui/index_patterns/_pattern_cache'; define(function (require) { return function IndexPatternFactory(Private, timefilter, Notifier, config, kbnIndex, Promise, $rootScope, safeConfirm) { - var fieldformats = Private(require('ui/registry/field_formats')); - var getIds = Private(require('ui/index_patterns/_get_ids')); - var mapper = Private(require('ui/index_patterns/_mapper')); - var intervals = Private(require('ui/index_patterns/_intervals')); - var DocSource = Private(require('ui/courier/data_source/doc_source')); - var mappingSetup = Private(require('ui/utils/mapping_setup')); - var FieldList = Private(require('ui/index_patterns/_field_list')); - - var flattenHit = Private(require('ui/index_patterns/_flatten_hit')); - var calculateIndices = Private(require('ui/index_patterns/_calculate_indices')); - var patternCache = Private(require('ui/index_patterns/_pattern_cache')); + var fieldformats = Private(RegistryFieldFormatsProvider); + var getIds = Private(IndexPatternsGetIdsProvider); + var mapper = Private(IndexPatternsMapperProvider); + var intervals = Private(IndexPatternsIntervalsProvider); + var DocSource = Private(CourierDataSourceDocSourceProvider); + var mappingSetup = Private(UtilsMappingSetupProvider); + var FieldList = Private(IndexPatternsFieldListProvider); + + var flattenHit = Private(IndexPatternsFlattenHitProvider); + var calculateIndices = Private(IndexPatternsCalculateIndicesProvider); + var patternCache = Private(IndexPatternsPatternCacheProvider); var type = 'index-pattern'; diff --git a/src/ui/public/index_patterns/_map_field.js b/src/ui/public/index_patterns/_map_field.js index ad0e8153530706..60f967749bd826 100644 --- a/src/ui/public/index_patterns/_map_field.js +++ b/src/ui/public/index_patterns/_map_field.js @@ -1,7 +1,8 @@ import _ from 'lodash'; +import IndexPatternsCastMappingTypeProvider from 'ui/index_patterns/_cast_mapping_type'; define(function (require) { return function MapFieldFn(Private, config) { - var castMappingType = Private(require('ui/index_patterns/_cast_mapping_type')); + var castMappingType = Private(IndexPatternsCastMappingTypeProvider); /** * Accepts a field object and its name, and tries to give it a mapping diff --git a/src/ui/public/index_patterns/_mapper.js b/src/ui/public/index_patterns/_mapper.js index aed5e99cf0665c..6fec0200da70d9 100644 --- a/src/ui/public/index_patterns/_mapper.js +++ b/src/ui/public/index_patterns/_mapper.js @@ -1,14 +1,18 @@ import { IndexPatternMissingIndices } from 'ui/errors'; import _ from 'lodash'; import moment from 'moment'; +import IndexPatternsTransformMappingIntoFieldsProvider from 'ui/index_patterns/_transform_mapping_into_fields'; +import IndexPatternsIntervalsProvider from 'ui/index_patterns/_intervals'; +import IndexPatternsPatternToWildcardProvider from 'ui/index_patterns/_pattern_to_wildcard'; +import IndexPatternsLocalCacheProvider from 'ui/index_patterns/_local_cache'; define(function (require) { return function MapperService(Private, Promise, es, config, kbnIndex) { - var transformMappingIntoFields = Private(require('ui/index_patterns/_transform_mapping_into_fields')); - var intervals = Private(require('ui/index_patterns/_intervals')); - var patternToWildcard = Private(require('ui/index_patterns/_pattern_to_wildcard')); + var transformMappingIntoFields = Private(IndexPatternsTransformMappingIntoFieldsProvider); + var intervals = Private(IndexPatternsIntervalsProvider); + var patternToWildcard = Private(IndexPatternsPatternToWildcardProvider); - var LocalCache = Private(require('ui/index_patterns/_local_cache')); + var LocalCache = Private(IndexPatternsLocalCacheProvider); function Mapper() { diff --git a/src/ui/public/index_patterns/_transform_mapping_into_fields.js b/src/ui/public/index_patterns/_transform_mapping_into_fields.js index e32bc51efa14b9..d94c38235f9d3b 100644 --- a/src/ui/public/index_patterns/_transform_mapping_into_fields.js +++ b/src/ui/public/index_patterns/_transform_mapping_into_fields.js @@ -1,7 +1,8 @@ import _ from 'lodash'; +import IndexPatternsMapFieldProvider from 'ui/index_patterns/_map_field'; define(function (require) { return function transformMappingIntoFields(Private, kbnIndex, config) { - var mapField = Private(require('ui/index_patterns/_map_field')); + var mapField = Private(IndexPatternsMapFieldProvider); /** diff --git a/src/ui/public/index_patterns/index_patterns.js b/src/ui/public/index_patterns/index_patterns.js index 9001da4595a6fc..961e13d7cedad7 100644 --- a/src/ui/public/index_patterns/index_patterns.js +++ b/src/ui/public/index_patterns/index_patterns.js @@ -1,14 +1,21 @@ import 'ui/filters/short_dots'; import _ from 'lodash'; import errors from 'ui/errors'; +import IndexPatternsIndexPatternProvider from 'ui/index_patterns/_index_pattern'; +import IndexPatternsPatternCacheProvider from 'ui/index_patterns/_pattern_cache'; +import IndexPatternsGetIdsProvider from 'ui/index_patterns/_get_ids'; +import IndexPatternsIntervalsProvider from 'ui/index_patterns/_intervals'; +import IndexPatternsMapperProvider from 'ui/index_patterns/_mapper'; +import IndexPatternsPatternToWildcardProvider from 'ui/index_patterns/_pattern_to_wildcard'; +import RegistryFieldFormatsProvider from 'ui/registry/field_formats'; define(function (require) { var module = require('ui/modules').get('kibana/index_patterns'); function IndexPatternsProvider(es, Notifier, Private, Promise, kbnIndex) { var self = this; - var IndexPattern = Private(require('ui/index_patterns/_index_pattern')); - var patternCache = Private(require('ui/index_patterns/_pattern_cache')); + var IndexPattern = Private(IndexPatternsIndexPatternProvider); + var patternCache = Private(IndexPatternsPatternCacheProvider); var notify = new Notifier({ location: 'IndexPatterns Service'}); @@ -39,11 +46,11 @@ define(function (require) { }; self.cache = patternCache; - self.getIds = Private(require('ui/index_patterns/_get_ids')); - self.intervals = Private(require('ui/index_patterns/_intervals')); - self.mapper = Private(require('ui/index_patterns/_mapper')); - self.patternToWildcard = Private(require('ui/index_patterns/_pattern_to_wildcard')); - self.fieldFormats = Private(require('ui/registry/field_formats')); + self.getIds = Private(IndexPatternsGetIdsProvider); + self.intervals = Private(IndexPatternsIntervalsProvider); + self.mapper = Private(IndexPatternsMapperProvider); + self.patternToWildcard = Private(IndexPatternsPatternToWildcardProvider); + self.fieldFormats = Private(RegistryFieldFormatsProvider); self.IndexPattern = IndexPattern; } diff --git a/src/ui/public/index_patterns/routeSetup/loadDefault.js b/src/ui/public/index_patterns/routeSetup/loadDefault.js index 90f02a942dedd3..58131ba1fe9b7d 100644 --- a/src/ui/public/index_patterns/routeSetup/loadDefault.js +++ b/src/ui/public/index_patterns/routeSetup/loadDefault.js @@ -1,6 +1,8 @@ import _ from 'lodash'; import Notifier from 'ui/notify/notifier'; import { NoDefaultIndexPattern, NoDefinedIndexPatterns } from 'ui/errors'; +import GetIdsProvider from '../_get_ids'; +import CourierDataSourceRootSearchSourceProvider from 'ui/courier/data_source/_root_search_source'; let notify = new Notifier({ location: 'Index Patterns' }); @@ -13,8 +15,8 @@ module.exports = function (opts) { require('ui/routes') .addSetupWork(function loadDefaultIndexPattern(Private, Promise, $route, config, indexPatterns) { - let getIds = Private(require('../_get_ids')); - let rootSearchSource = Private(require('ui/courier/data_source/_root_search_source')); + let getIds = Private(GetIdsProvider); + let rootSearchSource = Private(CourierDataSourceRootSearchSourceProvider); let path = _.get($route, 'current.$$route.originalPath'); return config.init() diff --git a/src/ui/public/listen/__tests__/listen.js b/src/ui/public/listen/__tests__/listen.js index 8e62e8eb3b7abf..0970a511b4f64c 100644 --- a/src/ui/public/listen/__tests__/listen.js +++ b/src/ui/public/listen/__tests__/listen.js @@ -2,6 +2,7 @@ import sinon from 'auto-release-sinon'; import expect from 'expect.js'; import ngMock from 'ngMock'; import 'ui/listen'; +import EventsProvider from 'ui/events'; describe('listen component', function () { @@ -12,7 +13,7 @@ describe('listen component', function () { beforeEach(ngMock.module('kibana')); beforeEach(ngMock.inject(function ($injector, Private) { $rootScope = $injector.get('$rootScope'); - Events = Private(require('ui/events')); + Events = Private(EventsProvider); })); it('exposes the $listen method on all scopes', function () { diff --git a/src/ui/public/navbar/navbar.js b/src/ui/public/navbar/navbar.js index 1a76c12da6a857..3d786bd3a9b4ee 100644 --- a/src/ui/public/navbar/navbar.js +++ b/src/ui/public/navbar/navbar.js @@ -1,11 +1,12 @@ import _ from 'lodash'; import $ from 'jquery'; import 'ui/render_directive'; +import RegistryNavbarExtensionsProvider from 'ui/registry/navbar_extensions'; const navbar = require('ui/modules').get('kibana/navbar'); navbar.directive('navbar', function (Private, $compile) { - const navbarExtensions = Private(require('ui/registry/navbar_extensions')); + const navbarExtensions = Private(RegistryNavbarExtensionsProvider); const getExtensions = _.memoize(function (name) { if (!name) throw new Error('navbar directive requires a name attribute'); return _.sortBy(navbarExtensions.byAppName[name], 'order'); diff --git a/src/ui/public/parse_query/lib/from_user.js b/src/ui/public/parse_query/lib/from_user.js index 54b9e5045df7c6..e71b46fd5f37f0 100644 --- a/src/ui/public/parse_query/lib/from_user.js +++ b/src/ui/public/parse_query/lib/from_user.js @@ -1,7 +1,8 @@ import _ from 'lodash'; +import CourierDataSourceDecorateQueryProvider from 'ui/courier/data_source/_decorate_query'; define(function (require) { return function GetQueryFromUser(es, Private) { - var decorateQuery = Private(require('ui/courier/data_source/_decorate_query')); + var decorateQuery = Private(CourierDataSourceDecorateQueryProvider); /** * Take text from the user and make it into a query object diff --git a/src/ui/public/parse_query/parse_query.js b/src/ui/public/parse_query/parse_query.js index 97ca8fc9ce4530..eac39c0bce61b4 100644 --- a/src/ui/public/parse_query/parse_query.js +++ b/src/ui/public/parse_query/parse_query.js @@ -1,9 +1,10 @@ import toUser from 'ui/parse_query/lib/to_user'; +import ParseQueryLibFromUserProvider from 'ui/parse_query/lib/from_user'; define(function (require) { require('ui/modules') .get('kibana') .directive('parseQuery', function (Private) { - var fromUser = Private(require('ui/parse_query/lib/from_user')); + var fromUser = Private(ParseQueryLibFromUserProvider); return { restrict: 'A', diff --git a/src/ui/public/persisted_state/__tests__/persisted_state.js b/src/ui/public/persisted_state/__tests__/persisted_state.js index 12b4d7b975ce8f..dabc4af72f3a73 100644 --- a/src/ui/public/persisted_state/__tests__/persisted_state.js +++ b/src/ui/public/persisted_state/__tests__/persisted_state.js @@ -4,6 +4,8 @@ import noDigestPromises from 'testUtils/noDigestPromises'; import ngMock from 'ngMock'; import expect from 'expect.js'; import errors from 'ui/errors'; +import PersistedStatePersistedStateProvider from 'ui/persisted_state/persisted_state'; +import EventsProvider from 'ui/events'; var PersistedState; var Events; @@ -15,8 +17,8 @@ describe('Persisted State', function () { ngMock.module('kibana'); ngMock.inject(function (Private) { - PersistedState = Private(require('ui/persisted_state/persisted_state')); - Events = Private(require('ui/events')); + PersistedState = Private(PersistedStatePersistedStateProvider); + Events = Private(EventsProvider); }); }); diff --git a/src/ui/public/persisted_state/persisted_state.js b/src/ui/public/persisted_state/persisted_state.js index 075aaa4c3eba61..414b299dc95798 100644 --- a/src/ui/public/persisted_state/persisted_state.js +++ b/src/ui/public/persisted_state/persisted_state.js @@ -2,10 +2,11 @@ import _ from 'lodash'; import toPath from 'lodash/internal/toPath'; import errors from 'ui/errors'; import SimpleEmitter from 'ui/utils/SimpleEmitter'; +import EventsProvider from 'ui/events'; define(function (require) { return function (Private) { - var Events = Private(require('ui/events')); + var Events = Private(EventsProvider); function validateParent(parent, path) { if (path.length <= 0) { diff --git a/src/ui/public/reflow_watcher/__tests__/reflow_watcher.js b/src/ui/public/reflow_watcher/__tests__/reflow_watcher.js index 33e2627f0994ae..f06b0e82ab6464 100644 --- a/src/ui/public/reflow_watcher/__tests__/reflow_watcher.js +++ b/src/ui/public/reflow_watcher/__tests__/reflow_watcher.js @@ -4,6 +4,8 @@ import _ from 'lodash'; import expect from 'expect.js'; import sinon from 'auto-release-sinon'; import ngMock from 'ngMock'; +import EventsProvider from 'ui/events'; +import ReflowWatcherProvider from 'ui/reflow_watcher'; describe('Reflow watcher', function () { var $body = $(document.body); @@ -23,11 +25,11 @@ describe('Reflow watcher', function () { beforeEach(ngMock.module('kibana')); beforeEach(ngMock.inject(function (Private, $injector) { $rootScope = $injector.get('$rootScope'); - EventEmitter = Private(require('ui/events')); + EventEmitter = Private(EventsProvider); // stub jQuery's $.on method while creating the reflowWatcher $onStub = sinon.stub($.fn, 'on'); - reflowWatcher = Private(require('ui/reflow_watcher')); + reflowWatcher = Private(ReflowWatcherProvider); $onStub.restore(); // setup the reflowWatchers $http watcher diff --git a/src/ui/public/reflow_watcher/reflow_watcher.js b/src/ui/public/reflow_watcher/reflow_watcher.js index c8b8c4919270cf..5a8cd3d3ca7d79 100644 --- a/src/ui/public/reflow_watcher/reflow_watcher.js +++ b/src/ui/public/reflow_watcher/reflow_watcher.js @@ -1,10 +1,11 @@ import angular from 'angular'; import $ from 'jquery'; import _ from 'lodash'; +import EventsProvider from 'ui/events'; define(function (require) { return function ReflowWatcherService(Private, $rootScope, $http) { - var EventEmitter = Private(require('ui/events')); + var EventEmitter = Private(EventsProvider); var $body = $(document.body); var $window = $(window); diff --git a/src/ui/public/registry/_registry.js b/src/ui/public/registry/_registry.js index b68ccfd1872531..2fc7505853fa6b 100644 --- a/src/ui/public/registry/_registry.js +++ b/src/ui/public/registry/_registry.js @@ -1,5 +1,6 @@ import _ from 'lodash'; import IndexedArray from 'ui/IndexedArray'; +import RegistryVisTypesProvider from 'ui/registry/vis_types'; define(function (require) { var notPropsOptNames = IndexedArray.OPT_NAMES.concat('constructor'); @@ -24,7 +25,7 @@ define(function (require) { * * + get all registered modules * ```js - * var visTypes = Private(require('ui/registry/vis_types')); + * var visTypes = Private(RegistryVisTypesProvider); * ``` * * diff --git a/src/ui/public/share/directives/share_object_url.js b/src/ui/public/share/directives/share_object_url.js index 3efb69407c2059..86059d05ab6e31 100644 --- a/src/ui/public/share/directives/share_object_url.js +++ b/src/ui/public/share/directives/share_object_url.js @@ -1,10 +1,11 @@ const app = require('ui/modules').get('kibana'); import Clipboard from 'clipboard'; import '../styles/index.less'; +import LibUrlShortenerProvider from '../lib/url_shortener'; app.directive('shareObjectUrl', function (Private, Notifier) { - const urlShortener = Private(require('../lib/url_shortener')); + const urlShortener = Private(LibUrlShortenerProvider); return { restrict: 'E', diff --git a/src/ui/public/state_management/__tests__/app_state.js b/src/ui/public/state_management/__tests__/app_state.js index 00aa996cadf2d1..7cfb82be082020 100644 --- a/src/ui/public/state_management/__tests__/app_state.js +++ b/src/ui/public/state_management/__tests__/app_state.js @@ -2,6 +2,7 @@ import sinon from 'auto-release-sinon'; import expect from 'expect.js'; import ngMock from 'ngMock'; import 'ui/state_management/app_state'; +import StateManagementAppStateProvider from 'ui/state_management/app_state'; describe('State Management', function () { var $rootScope; @@ -10,7 +11,7 @@ describe('State Management', function () { beforeEach(ngMock.module('kibana')); beforeEach(ngMock.inject(function (_$rootScope_, _$location_, Private) { $rootScope = _$rootScope_; - AppState = Private(require('ui/state_management/app_state')); + AppState = Private(StateManagementAppStateProvider); })); describe('App State', function () { diff --git a/src/ui/public/state_management/__tests__/state.js b/src/ui/public/state_management/__tests__/state.js index 4e601d0730f48d..43b538ee3f308b 100644 --- a/src/ui/public/state_management/__tests__/state.js +++ b/src/ui/public/state_management/__tests__/state.js @@ -4,6 +4,8 @@ import sinon from 'sinon'; import expect from 'expect.js'; import ngMock from 'ngMock'; import 'ui/private'; +import StateManagementStateProvider from 'ui/state_management/state'; +import EventsProvider from 'ui/events'; describe('State Management', function () { var $rootScope; @@ -15,8 +17,8 @@ describe('State Management', function () { beforeEach(ngMock.inject(function (_$rootScope_, _$location_, Private) { $location = _$location_; $rootScope = _$rootScope_; - State = Private(require('ui/state_management/state')); - Events = Private(require('ui/events')); + State = Private(StateManagementStateProvider); + Events = Private(EventsProvider); })); describe('Provider', function () { diff --git a/src/ui/public/state_management/app_state.js b/src/ui/public/state_management/app_state.js index baec43826097cc..017854adb00ea4 100644 --- a/src/ui/public/state_management/app_state.js +++ b/src/ui/public/state_management/app_state.js @@ -1,11 +1,13 @@ import _ from 'lodash'; import modules from 'ui/modules'; +import StateManagementStateProvider from 'ui/state_management/state'; +import PersistedStatePersistedStateProvider from 'ui/persisted_state/persisted_state'; define(function (require) { var urlParam = '_a'; function AppStateProvider(Private, $rootScope, getAppState) { - var State = Private(require('ui/state_management/state')); - var PersistedState = Private(require('ui/persisted_state/persisted_state')); + var State = Private(StateManagementStateProvider); + var PersistedState = Private(PersistedStatePersistedStateProvider); var persistedStates; var eventUnsubscribers; diff --git a/src/ui/public/state_management/global_state.js b/src/ui/public/state_management/global_state.js index f46da91a06ce9c..742cdcaae01231 100644 --- a/src/ui/public/state_management/global_state.js +++ b/src/ui/public/state_management/global_state.js @@ -2,12 +2,13 @@ import _ from 'lodash'; import angular from 'angular'; import qs from 'ui/utils/query_string'; import rison from 'ui/utils/rison'; +import StateManagementStateProvider from 'ui/state_management/state'; define(function (require) { var module = require('ui/modules').get('kibana/global_state'); module.service('globalState', function (Private, $rootScope, $location) { - var State = Private(require('ui/state_management/state')); + var State = Private(StateManagementStateProvider); _.class(GlobalState).inherits(State); function GlobalState(defaults) { diff --git a/src/ui/public/state_management/state.js b/src/ui/public/state_management/state.js index 60cabd548af027..3c852d27a8bc2c 100644 --- a/src/ui/public/state_management/state.js +++ b/src/ui/public/state_management/state.js @@ -2,11 +2,12 @@ import _ from 'lodash'; import rison from 'ui/utils/rison'; import applyDiff from 'ui/utils/diff_object'; import qs from 'ui/utils/query_string'; +import EventsProvider from 'ui/events'; define(function (require) { return function StateProvider(Notifier, Private, $rootScope, $location) { - var Events = Private(require('ui/events')); + var Events = Private(EventsProvider); _.class(State).inherits(Events); function State(urlParam, defaults) { diff --git a/src/ui/public/stringify/__tests__/_color.js b/src/ui/public/stringify/__tests__/_color.js index bce4430d11cd8f..1a1bcbf45d8aa7 100644 --- a/src/ui/public/stringify/__tests__/_color.js +++ b/src/ui/public/stringify/__tests__/_color.js @@ -1,12 +1,13 @@ import expect from 'expect.js'; import ngMock from 'ngMock'; +import RegistryFieldFormatsProvider from 'ui/registry/field_formats'; describe('Color Format', function () { var fieldFormats; var ColorFormat; beforeEach(ngMock.module('kibana')); beforeEach(ngMock.inject(function (Private) { - fieldFormats = Private(require('ui/registry/field_formats')); + fieldFormats = Private(RegistryFieldFormatsProvider); ColorFormat = fieldFormats.getType('color'); })); diff --git a/src/ui/public/stringify/__tests__/_conformance.js b/src/ui/public/stringify/__tests__/_conformance.js index 79b7c037947c49..6218e5a49c0e8d 100644 --- a/src/ui/public/stringify/__tests__/_conformance.js +++ b/src/ui/public/stringify/__tests__/_conformance.js @@ -1,6 +1,8 @@ import _ from 'lodash'; import expect from 'expect.js'; import ngMock from 'ngMock'; +import RegistryFieldFormatsProvider from 'ui/registry/field_formats'; +import IndexPatternsFieldFormatFieldFormatProvider from 'ui/index_patterns/_field_format/FieldFormat'; var fieldFormats; var FieldFormat; @@ -22,8 +24,8 @@ var formatIds = [ module.exports = describe('conformance', function () { beforeEach(ngMock.module('kibana')); beforeEach(ngMock.inject(function (Private, $injector) { - fieldFormats = Private(require('ui/registry/field_formats')); - FieldFormat = Private(require('ui/index_patterns/_field_format/FieldFormat')); + fieldFormats = Private(RegistryFieldFormatsProvider); + FieldFormat = Private(IndexPatternsFieldFormatFieldFormatProvider); config = $injector.get('config'); })); diff --git a/src/ui/public/stringify/__tests__/_date.js b/src/ui/public/stringify/__tests__/_date.js index da77785464dfd9..52783f0ee2bfc0 100644 --- a/src/ui/public/stringify/__tests__/_date.js +++ b/src/ui/public/stringify/__tests__/_date.js @@ -1,6 +1,7 @@ import expect from 'expect.js'; import ngMock from 'ngMock'; import moment from 'moment-timezone'; +import RegistryFieldFormatsProvider from 'ui/registry/field_formats'; describe('Date Format', function () { var fieldFormats; var settings; @@ -13,7 +14,7 @@ describe('Date Format', function () { $scope = $rootScope; settings = config; - fieldFormats = Private(require('ui/registry/field_formats')); + fieldFormats = Private(RegistryFieldFormatsProvider); var DateFormat = fieldFormats.getType('date'); var date = new DateFormat(); diff --git a/src/ui/public/stringify/__tests__/_ip.js b/src/ui/public/stringify/__tests__/_ip.js index b94f0243a0bc61..9ac9d11728930e 100644 --- a/src/ui/public/stringify/__tests__/_ip.js +++ b/src/ui/public/stringify/__tests__/_ip.js @@ -1,11 +1,12 @@ import expect from 'expect.js'; import ngMock from 'ngMock'; +import RegistryFieldFormatsProvider from 'ui/registry/field_formats'; describe('IP Address Format', function () { var fieldFormats; beforeEach(ngMock.module('kibana')); beforeEach(ngMock.inject(function (Private) { - fieldFormats = Private(require('ui/registry/field_formats')); + fieldFormats = Private(RegistryFieldFormatsProvider); })); it('convers a value from a decimal to a string', function () { diff --git a/src/ui/public/stringify/__tests__/_source.js b/src/ui/public/stringify/__tests__/_source.js index 80ddbd36be3a76..52ac3cea361ba4 100644 --- a/src/ui/public/stringify/__tests__/_source.js +++ b/src/ui/public/stringify/__tests__/_source.js @@ -2,13 +2,16 @@ import $ from 'jquery'; import _ from 'lodash'; import expect from 'expect.js'; import ngMock from 'ngMock'; +import RegistryFieldFormatsProvider from 'ui/registry/field_formats'; +import FixturesStubbedLogstashIndexPatternProvider from 'fixtures/stubbed_logstash_index_pattern'; +import FixturesHitsProvider from 'fixtures/hits'; describe('_source formatting', function () { var fieldFormats; beforeEach(ngMock.module('kibana')); beforeEach(ngMock.inject(function (Private) { - fieldFormats = Private(require('ui/registry/field_formats')); + fieldFormats = Private(RegistryFieldFormatsProvider); })); describe('Source format', function () { @@ -18,8 +21,8 @@ describe('_source formatting', function () { var convertHtml; beforeEach(ngMock.inject(function (Private) { - indexPattern = Private(require('fixtures/stubbed_logstash_index_pattern')); - hits = Private(require('fixtures/hits')); + indexPattern = Private(FixturesStubbedLogstashIndexPatternProvider); + hits = Private(FixturesHitsProvider); format = fieldFormats.getInstance('_source'); convertHtml = format.getConverterFor('html'); })); diff --git a/src/ui/public/stringify/__tests__/_string.js b/src/ui/public/stringify/__tests__/_string.js index 733cff112888bb..9f9f4fd7900ada 100644 --- a/src/ui/public/stringify/__tests__/_string.js +++ b/src/ui/public/stringify/__tests__/_string.js @@ -1,11 +1,12 @@ import expect from 'expect.js'; import ngMock from 'ngMock'; +import RegistryFieldFormatsProvider from 'ui/registry/field_formats'; describe('String Format', function () { var fieldFormats; beforeEach(ngMock.module('kibana')); beforeEach(ngMock.inject(function (Private) { - fieldFormats = Private(require('ui/registry/field_formats')); + fieldFormats = Private(RegistryFieldFormatsProvider); })); it('decode a base64 string', function () { diff --git a/src/ui/public/stringify/__tests__/_truncate.js b/src/ui/public/stringify/__tests__/_truncate.js index 6d0f7b6a49884a..cea68621e4de39 100644 --- a/src/ui/public/stringify/__tests__/_truncate.js +++ b/src/ui/public/stringify/__tests__/_truncate.js @@ -1,11 +1,12 @@ import expect from 'expect.js'; import ngMock from 'ngMock'; +import RegistryFieldFormatsProvider from 'ui/registry/field_formats'; describe('String Truncate Format', function () { var fieldFormats; beforeEach(ngMock.module('kibana')); beforeEach(ngMock.inject(function (Private) { - fieldFormats = Private(require('ui/registry/field_formats')); + fieldFormats = Private(RegistryFieldFormatsProvider); })); it('truncate large string', function () { diff --git a/src/ui/public/stringify/__tests__/_url.js b/src/ui/public/stringify/__tests__/_url.js index 348e87bb5eb2c9..4cf2ad880a4924 100644 --- a/src/ui/public/stringify/__tests__/_url.js +++ b/src/ui/public/stringify/__tests__/_url.js @@ -1,13 +1,14 @@ import $ from 'jquery'; import expect from 'expect.js'; import ngMock from 'ngMock'; +import RegistryFieldFormatsProvider from 'ui/registry/field_formats'; describe('Url Format', function () { var fieldFormats; beforeEach(ngMock.module('kibana')); beforeEach(ngMock.inject(function (Private) { - fieldFormats = Private(require('ui/registry/field_formats')); + fieldFormats = Private(RegistryFieldFormatsProvider); })); describe('Url Format', function () { diff --git a/src/ui/public/stringify/types/Bytes.js b/src/ui/public/stringify/types/Bytes.js index a164545ab08bb4..af7dbc0b66b95d 100644 --- a/src/ui/public/stringify/types/Bytes.js +++ b/src/ui/public/stringify/types/Bytes.js @@ -1,6 +1,8 @@ +import StringifyTypesNumeralProvider from 'ui/stringify/types/_Numeral'; + define(function (require) { return function BytesFormatProvider(Private) { - var Numeral = Private(require('ui/stringify/types/_Numeral')); + var Numeral = Private(StringifyTypesNumeralProvider); return Numeral.factory({ id: 'bytes', title: 'Bytes', diff --git a/src/ui/public/stringify/types/Color.js b/src/ui/public/stringify/types/Color.js index f7855f2ec71d3c..b9bfa48deb4008 100644 --- a/src/ui/public/stringify/types/Color.js +++ b/src/ui/public/stringify/types/Color.js @@ -1,9 +1,10 @@ import 'ui/stringify/editors/color.less'; import _ from 'lodash'; +import IndexPatternsFieldFormatFieldFormatProvider from 'ui/index_patterns/_field_format/FieldFormat'; define(function (require) { return function _StringProvider(Private) { - const FieldFormat = Private(require('ui/index_patterns/_field_format/FieldFormat')); + const FieldFormat = Private(IndexPatternsFieldFormatFieldFormatProvider); const DEFAULT_COLOR = { range: `${Number.NEGATIVE_INFINITY}:${Number.POSITIVE_INFINITY}`, text: '#000000', diff --git a/src/ui/public/stringify/types/Date.js b/src/ui/public/stringify/types/Date.js index e3d24c12e69ba8..a62f38a3b64388 100644 --- a/src/ui/public/stringify/types/Date.js +++ b/src/ui/public/stringify/types/Date.js @@ -1,10 +1,12 @@ import _ from 'lodash'; import moment from 'moment'; import 'ui/field_format_editor/pattern/pattern'; +import IndexPatternsFieldFormatFieldFormatProvider from 'ui/index_patterns/_field_format/FieldFormat'; +import BoundToConfigObjProvider from 'ui/bound_to_config_obj'; define(function (require) { return function DateTimeFormatProvider(Private) { - var FieldFormat = Private(require('ui/index_patterns/_field_format/FieldFormat')); - var BoundToConfigObj = Private(require('ui/bound_to_config_obj')); + var FieldFormat = Private(IndexPatternsFieldFormatFieldFormatProvider); + var BoundToConfigObj = Private(BoundToConfigObjProvider); _.class(DateTime).inherits(FieldFormat); diff --git a/src/ui/public/stringify/types/Ip.js b/src/ui/public/stringify/types/Ip.js index 5c7cdf0bdda468..b293b7746524cd 100644 --- a/src/ui/public/stringify/types/Ip.js +++ b/src/ui/public/stringify/types/Ip.js @@ -1,7 +1,8 @@ import _ from 'lodash'; +import IndexPatternsFieldFormatFieldFormatProvider from 'ui/index_patterns/_field_format/FieldFormat'; define(function (require) { return function IpFormatProvider(Private) { - var FieldFormat = Private(require('ui/index_patterns/_field_format/FieldFormat')); + var FieldFormat = Private(IndexPatternsFieldFormatFieldFormatProvider); _.class(Ip).inherits(FieldFormat); function Ip(params) { diff --git a/src/ui/public/stringify/types/Number.js b/src/ui/public/stringify/types/Number.js index 84bb74d2362347..b55fecf45d3cc5 100644 --- a/src/ui/public/stringify/types/Number.js +++ b/src/ui/public/stringify/types/Number.js @@ -1,6 +1,8 @@ +import StringifyTypesNumeralProvider from 'ui/stringify/types/_Numeral'; + define(function (require) { return function NumberFormatProvider(Private) { - var Numeral = Private(require('ui/stringify/types/_Numeral')); + var Numeral = Private(StringifyTypesNumeralProvider); return Numeral.factory({ id: 'number', title: 'Number', diff --git a/src/ui/public/stringify/types/Percent.js b/src/ui/public/stringify/types/Percent.js index de1f83a55a7624..cc4fdbfd858c74 100644 --- a/src/ui/public/stringify/types/Percent.js +++ b/src/ui/public/stringify/types/Percent.js @@ -1,8 +1,10 @@ import _ from 'lodash'; +import BoundToConfigObjProvider from 'ui/bound_to_config_obj'; +import StringifyTypesNumeralProvider from 'ui/stringify/types/_Numeral'; define(function (require) { return function NumberFormatProvider(Private) { - var BoundToConfigObj = Private(require('ui/bound_to_config_obj')); - var Numeral = Private(require('ui/stringify/types/_Numeral')); + var BoundToConfigObj = Private(BoundToConfigObjProvider); + var Numeral = Private(StringifyTypesNumeralProvider); return Numeral.factory({ id: 'percent', diff --git a/src/ui/public/stringify/types/Source.js b/src/ui/public/stringify/types/Source.js index 850134a598aafe..29de66e7e4af9b 100644 --- a/src/ui/public/stringify/types/Source.js +++ b/src/ui/public/stringify/types/Source.js @@ -1,9 +1,10 @@ import _ from 'lodash'; import noWhiteSpace from 'ui/utils/no_white_space'; import angular from 'angular'; +import IndexPatternsFieldFormatFieldFormatProvider from 'ui/index_patterns/_field_format/FieldFormat'; define(function (require) { return function _SourceProvider(Private, shortDotsFilter) { - var FieldFormat = Private(require('ui/index_patterns/_field_format/FieldFormat')); + var FieldFormat = Private(IndexPatternsFieldFormatFieldFormatProvider); var template = _.template(noWhiteSpace(require('ui/stringify/types/_source.html'))); _.class(Source).inherits(FieldFormat); diff --git a/src/ui/public/stringify/types/String.js b/src/ui/public/stringify/types/String.js index 67b0ef1cd151d6..757f149b6b0b72 100644 --- a/src/ui/public/stringify/types/String.js +++ b/src/ui/public/stringify/types/String.js @@ -1,8 +1,9 @@ import _ from 'lodash'; import 'ui/field_format_editor/samples/samples'; +import IndexPatternsFieldFormatFieldFormatProvider from 'ui/index_patterns/_field_format/FieldFormat'; define(function (require) { return function _StringProvider(Private) { - var FieldFormat = Private(require('ui/index_patterns/_field_format/FieldFormat')); + var FieldFormat = Private(IndexPatternsFieldFormatFieldFormatProvider); _.class(_String).inherits(FieldFormat); diff --git a/src/ui/public/stringify/types/Url.js b/src/ui/public/stringify/types/Url.js index 57ed95f4693544..dbbc90e9cae12a 100644 --- a/src/ui/public/stringify/types/Url.js +++ b/src/ui/public/stringify/types/Url.js @@ -1,10 +1,11 @@ import _ from 'lodash'; import 'ui/field_format_editor/pattern/pattern'; import 'ui/stringify/icons'; +import IndexPatternsFieldFormatFieldFormatProvider from 'ui/index_patterns/_field_format/FieldFormat'; define(function (require) { return function UrlFormatProvider(Private, highlightFilter) { - var FieldFormat = Private(require('ui/index_patterns/_field_format/FieldFormat')); + var FieldFormat = Private(IndexPatternsFieldFormatFieldFormatProvider); _.class(Url).inherits(FieldFormat); diff --git a/src/ui/public/stringify/types/_Numeral.js b/src/ui/public/stringify/types/_Numeral.js index 17e92a3250726b..20b809fa2028b4 100644 --- a/src/ui/public/stringify/types/_Numeral.js +++ b/src/ui/public/stringify/types/_Numeral.js @@ -1,9 +1,11 @@ import _ from 'lodash'; import 'ui/field_format_editor/numeral/numeral'; +import IndexPatternsFieldFormatFieldFormatProvider from 'ui/index_patterns/_field_format/FieldFormat'; +import BoundToConfigObjProvider from 'ui/bound_to_config_obj'; define(function (require) { return function AbstractNumeralFormatProvider(Private) { - var FieldFormat = Private(require('ui/index_patterns/_field_format/FieldFormat')); - var BoundToConfigObj = Private(require('ui/bound_to_config_obj')); + var FieldFormat = Private(IndexPatternsFieldFormatFieldFormatProvider); + var BoundToConfigObj = Private(BoundToConfigObjProvider); var numeral = require('numeral')(); _.class(Numeral).inherits(FieldFormat); diff --git a/src/ui/public/stringify/types/truncate.js b/src/ui/public/stringify/types/truncate.js index ca42ce25ab3e57..ba0a7d8b503323 100644 --- a/src/ui/public/stringify/types/truncate.js +++ b/src/ui/public/stringify/types/truncate.js @@ -1,7 +1,8 @@ import _ from 'lodash'; +import IndexPatternsFieldFormatFieldFormatProvider from 'ui/index_patterns/_field_format/FieldFormat'; define(function (require) { return function TruncateFormatProvider(Private) { - var FieldFormat = Private(require('ui/index_patterns/_field_format/FieldFormat')); + var FieldFormat = Private(IndexPatternsFieldFormatFieldFormatProvider); var omission = '...'; _.class(Truncate).inherits(FieldFormat); diff --git a/src/ui/public/template_vis_type/TemplateRenderbot.js b/src/ui/public/template_vis_type/TemplateRenderbot.js index 31de8efca53186..af5ea0e144b685 100644 --- a/src/ui/public/template_vis_type/TemplateRenderbot.js +++ b/src/ui/public/template_vis_type/TemplateRenderbot.js @@ -1,7 +1,8 @@ import _ from 'lodash'; +import VisRenderbotProvider from 'ui/Vis/Renderbot'; define(function (require) { return function TemplateRenderbotFactory(Private, $compile, $rootScope) { - var Renderbot = Private(require('ui/Vis/Renderbot')); + var Renderbot = Private(VisRenderbotProvider); _.class(TemplateRenderbot).inherits(Renderbot); function TemplateRenderbot(vis, $el, uiState) { diff --git a/src/ui/public/template_vis_type/TemplateVisType.js b/src/ui/public/template_vis_type/TemplateVisType.js index a857aadb85dcf4..b36bc723cb10af 100644 --- a/src/ui/public/template_vis_type/TemplateVisType.js +++ b/src/ui/public/template_vis_type/TemplateVisType.js @@ -1,8 +1,10 @@ import _ from 'lodash'; +import VisVisTypeProvider from 'ui/Vis/VisType'; +import TemplateVisTypeTemplateRenderbotProvider from 'ui/template_vis_type/TemplateRenderbot'; define(function (require) { return function TemplateVisTypeFactory(Private) { - var VisType = Private(require('ui/Vis/VisType')); - var TemplateRenderbot = Private(require('ui/template_vis_type/TemplateRenderbot')); + var VisType = Private(VisVisTypeProvider); + var TemplateRenderbot = Private(TemplateVisTypeTemplateRenderbotProvider); _.class(TemplateVisType).inherits(VisType); function TemplateVisType(opts) { diff --git a/src/ui/public/time_buckets/time_buckets.js b/src/ui/public/time_buckets/time_buckets.js index e01833e4800b71..d4e81b747c5edc 100644 --- a/src/ui/public/time_buckets/time_buckets.js +++ b/src/ui/public/time_buckets/time_buckets.js @@ -2,11 +2,13 @@ import _ from 'lodash'; import moment from 'moment'; import dateMath from 'ui/utils/dateMath'; import parseInterval from 'ui/utils/parse_interval'; +import TimeBucketsCalcAutoIntervalProvider from 'ui/time_buckets/calc_auto_interval'; +import TimeBucketsCalcEsIntervalProvider from 'ui/time_buckets/calc_es_interval'; define(function (require) { return function IntervalHelperProvider(Private, timefilter, config) { - var calcAuto = Private(require('ui/time_buckets/calc_auto_interval')); - var calcEsInterval = Private(require('ui/time_buckets/calc_es_interval')); + var calcAuto = Private(TimeBucketsCalcAutoIntervalProvider); + var calcEsInterval = Private(TimeBucketsCalcEsIntervalProvider); var tzOffset = moment().format('Z'); function isValidMoment(m) { diff --git a/src/ui/public/timefilter/__tests__/diff_interval.js b/src/ui/public/timefilter/__tests__/diff_interval.js index b0c2a293110175..69a35ed9db3ba9 100644 --- a/src/ui/public/timefilter/__tests__/diff_interval.js +++ b/src/ui/public/timefilter/__tests__/diff_interval.js @@ -1,6 +1,7 @@ import sinon from 'auto-release-sinon'; import expect from 'expect.js'; import ngMock from 'ngMock'; +import TimefilterLibDiffIntervalProvider from 'ui/timefilter/lib/diff_interval'; describe('Timefilter service', function () { describe('Refresh interval diff watcher', function () { @@ -26,7 +27,7 @@ describe('Timefilter service', function () { } }; - fn = Private(require('ui/timefilter/lib/diff_interval'))(timefilter); + fn = Private(TimefilterLibDiffIntervalProvider)(timefilter); })); it('not emit anything if nothing has changed', function () { diff --git a/src/ui/public/timefilter/__tests__/diff_time.js b/src/ui/public/timefilter/__tests__/diff_time.js index 591e17c22b98cd..b5a57ee883238a 100644 --- a/src/ui/public/timefilter/__tests__/diff_time.js +++ b/src/ui/public/timefilter/__tests__/diff_time.js @@ -1,6 +1,7 @@ import sinon from 'auto-release-sinon'; import expect from 'expect.js'; import ngMock from 'ngMock'; +import TimefilterLibDiffTimeProvider from 'ui/timefilter/lib/diff_time'; describe('Timefilter service', function () { describe('time diff watcher', function () { @@ -25,7 +26,7 @@ describe('Timefilter service', function () { } }; - fn = Private(require('ui/timefilter/lib/diff_time'))(timefilter); + fn = Private(TimefilterLibDiffTimeProvider)(timefilter); })); it('not emit anything if the time has not changed', function () { diff --git a/src/ui/public/timefilter/lib/diff_interval.js b/src/ui/public/timefilter/lib/diff_interval.js index ef7cd51861079e..785c6b84b5e5e1 100644 --- a/src/ui/public/timefilter/lib/diff_interval.js +++ b/src/ui/public/timefilter/lib/diff_interval.js @@ -1,7 +1,8 @@ import _ from 'lodash'; +import UtilsDiffTimePickerValsProvider from 'ui/utils/diff_time_picker_vals'; define(function (require) { return function diffTimeProvider(Private) { - var diff = Private(require('ui/utils/diff_time_picker_vals')); + var diff = Private(UtilsDiffTimePickerValsProvider); return function (self) { var oldRefreshInterval = _.clone(self.refreshInterval); diff --git a/src/ui/public/timefilter/lib/diff_time.js b/src/ui/public/timefilter/lib/diff_time.js index 46563cca1d6e83..7e5ba26282e23d 100644 --- a/src/ui/public/timefilter/lib/diff_time.js +++ b/src/ui/public/timefilter/lib/diff_time.js @@ -1,7 +1,8 @@ import _ from 'lodash'; +import UtilsDiffTimePickerValsProvider from 'ui/utils/diff_time_picker_vals'; define(function (require) { return function diffTimeProvider(Private) { - var diff = Private(require('ui/utils/diff_time_picker_vals')); + var diff = Private(UtilsDiffTimePickerValsProvider); return function (self) { var oldTime = _.clone(self.time); diff --git a/src/ui/public/timefilter/timefilter.js b/src/ui/public/timefilter/timefilter.js index d5f17a182494ab..71bcdaa4a288a3 100644 --- a/src/ui/public/timefilter/timefilter.js +++ b/src/ui/public/timefilter/timefilter.js @@ -3,6 +3,10 @@ import angular from 'angular'; import moment from 'moment'; import dateMath from 'ui/utils/dateMath'; import 'ui/state_management/global_state'; +import EventsProvider from 'ui/events'; +import UtilsDiffTimePickerValsProvider from 'ui/utils/diff_time_picker_vals'; +import TimefilterLibDiffTimeProvider from 'ui/timefilter/lib/diff_time'; +import TimefilterLibDiffIntervalProvider from 'ui/timefilter/lib/diff_interval'; define(function (require) { require('ui/routes') .addSetupWork(function (timefilter) { @@ -13,8 +17,8 @@ define(function (require) { .get('kibana') .service('timefilter', function (Private, globalState, $rootScope, config) { - var Events = Private(require('ui/events')); - var diff = Private(require('ui/utils/diff_time_picker_vals')); + var Events = Private(EventsProvider); + var diff = Private(UtilsDiffTimePickerValsProvider); function convertISO8601(stringTime) { @@ -27,8 +31,8 @@ define(function (require) { Timefilter.Super.call(this); var self = this; - var diffTime = Private(require('ui/timefilter/lib/diff_time'))(self); - var diffInterval = Private(require('ui/timefilter/lib/diff_interval'))(self); + var diffTime = Private(TimefilterLibDiffTimeProvider)(self); + var diffInterval = Private(TimefilterLibDiffIntervalProvider)(self); self.enabled = false; diff --git a/src/ui/public/utils/__tests__/diff_time_picker_vals.js b/src/ui/public/utils/__tests__/diff_time_picker_vals.js index eb0470b75d0b97..414dfa7a034cac 100644 --- a/src/ui/public/utils/__tests__/diff_time_picker_vals.js +++ b/src/ui/public/utils/__tests__/diff_time_picker_vals.js @@ -2,13 +2,14 @@ import moment from 'moment'; import ngMock from 'ngMock'; import expect from 'expect.js'; +import UtilsDiffTimePickerValsProvider from 'ui/utils/diff_time_picker_vals'; describe('Diff Time Picker Values', function () { var diffTimePickerValues; beforeEach(ngMock.module('kibana')); beforeEach(ngMock.inject(function (Private) { - diffTimePickerValues = Private(require('ui/utils/diff_time_picker_vals')); + diffTimePickerValues = Private(UtilsDiffTimePickerValsProvider); })); it('accepts two undefined values', function () { diff --git a/src/ui/public/utils/__tests__/mapping_setup.js b/src/ui/public/utils/__tests__/mapping_setup.js index 365ea285efdd70..530f014a7958fe 100644 --- a/src/ui/public/utils/__tests__/mapping_setup.js +++ b/src/ui/public/utils/__tests__/mapping_setup.js @@ -1,13 +1,14 @@ import _ from 'lodash'; import ngMock from 'ngMock'; import expect from 'expect.js'; +import UtilsMappingSetupProvider from 'ui/utils/mapping_setup'; let mappingSetup; describe('ui/utils/mapping_setup', function () { beforeEach(ngMock.module('kibana')); beforeEach(ngMock.inject(function (Private) { - mappingSetup = Private(require('ui/utils/mapping_setup')); + mappingSetup = Private(UtilsMappingSetupProvider); })); describe('#expandShorthand()', function () { diff --git a/src/ui/public/vislib/__tests__/components/color.js b/src/ui/public/vislib/__tests__/components/color.js index 95a5de910305f3..8fb892235914d0 100644 --- a/src/ui/public/vislib/__tests__/components/color.js +++ b/src/ui/public/vislib/__tests__/components/color.js @@ -3,6 +3,10 @@ import expect from 'expect.js'; import ngMock from 'ngMock'; import _ from 'lodash'; import d3 from 'd3'; +import VislibComponentsColorSeedColorsProvider from 'ui/vislib/components/color/seed_colors'; +import VislibComponentsColorColorProvider from 'ui/vislib/components/color/color'; +import VislibComponentsColorMappedColorsProvider from 'ui/vislib/components/color/mapped_colors'; +import VislibComponentsColorColorPaletteProvider from 'ui/vislib/components/color/color_palette'; describe('Vislib Color Module Test Suite', function () { var seedColors; @@ -27,9 +31,9 @@ describe('Vislib Color Module Test Suite', function () { beforeEach(ngMock.inject((Private, config) => { previousConfig = config.get('visualization:colorMapping'); config.set('visualization:colorMapping', {}); - seedColors = Private(require('ui/vislib/components/color/seed_colors')); - getColors = Private(require('ui/vislib/components/color/color')); - mappedColors = Private(require('ui/vislib/components/color/mapped_colors')); + seedColors = Private(VislibComponentsColorSeedColorsProvider); + getColors = Private(VislibComponentsColorColorProvider); + mappedColors = Private(VislibComponentsColorMappedColorsProvider); color = getColors(arr, {}); })); @@ -129,8 +133,8 @@ describe('Vislib Color Module Test Suite', function () { beforeEach(ngMock.module('kibana')); beforeEach(ngMock.inject((Private, config) => { previousConfig = config.get('visualization:colorMapping'); - mappedColors = Private(require('ui/vislib/components/color/mapped_colors')); - seedColors = Private(require('ui/vislib/components/color/seed_colors')); + mappedColors = Private(VislibComponentsColorMappedColorsProvider); + seedColors = Private(VislibComponentsColorSeedColorsProvider); mappedColors.mapping = {}; })); @@ -253,8 +257,8 @@ describe('Vislib Color Module Test Suite', function () { beforeEach(ngMock.module('kibana')); beforeEach(ngMock.inject(function (Private) { - seedColors = Private(require('ui/vislib/components/color/seed_colors')); - createColorPalette = Private(require('ui/vislib/components/color/color_palette')); + seedColors = Private(VislibComponentsColorSeedColorsProvider); + createColorPalette = Private(VislibComponentsColorColorPaletteProvider); colorPalette = createColorPalette(num1); })); diff --git a/src/ui/public/vislib/__tests__/components/labels.js b/src/ui/public/vislib/__tests__/components/labels.js index c9639a898e71fa..e73bb27a7bbc28 100644 --- a/src/ui/public/vislib/__tests__/components/labels.js +++ b/src/ui/public/vislib/__tests__/components/labels.js @@ -2,6 +2,10 @@ import angular from 'angular'; import _ from 'lodash'; import expect from 'expect.js'; import ngMock from 'ngMock'; +import VislibComponentsLabelsLabelsProvider from 'ui/vislib/components/labels/labels'; +import VislibComponentsLabelsDataArrayProvider from 'ui/vislib/components/labels/data_array'; +import VislibComponentsLabelsUniqLabelsProvider from 'ui/vislib/components/labels/uniq_labels'; +import VislibComponentsLabelsFlattenSeriesProvider from 'ui/vislib/components/labels/flatten_series'; var getLabels; var seriesLabels; @@ -108,7 +112,7 @@ describe('Vislib Labels Module Test Suite', function () { describe('Labels (main)', function () { beforeEach(ngMock.module('kibana')); beforeEach(ngMock.inject(function (Private) { - getLabels = Private(require('ui/vislib/components/labels/labels')); + getLabels = Private(VislibComponentsLabelsLabelsProvider); seriesLabels = getLabels(seriesData); rowsLabels = getLabels(rowsData); seriesArr = _.isArray(seriesLabels); @@ -172,7 +176,7 @@ describe('Vislib Labels Module Test Suite', function () { beforeEach(ngMock.module('kibana')); beforeEach(ngMock.inject(function (Private) { - dataArray = Private(require('ui/vislib/components/labels/data_array')); + dataArray = Private(VislibComponentsLabelsDataArrayProvider); seriesLabels = dataArray(seriesData); rowsLabels = dataArray(rowsData); testSeries = _.isArray(seriesLabels); @@ -284,7 +288,7 @@ describe('Vislib Labels Module Test Suite', function () { beforeEach(ngMock.module('kibana')); beforeEach(ngMock.inject(function (Private) { - uniqLabels = Private(require('ui/vislib/components/labels/uniq_labels')); + uniqLabels = Private(VislibComponentsLabelsUniqLabelsProvider); uniq = uniqLabels(arrObj, function (d) { return d; }); testArr = _.isArray(uniq); })); @@ -357,7 +361,7 @@ describe('Vislib Labels Module Test Suite', function () { beforeEach(ngMock.module('kibana')); beforeEach(ngMock.inject(function (Private) { - getSeries = Private(require('ui/vislib/components/labels/flatten_series')); + getSeries = Private(VislibComponentsLabelsFlattenSeriesProvider); columnsLabels = getSeries(columnsData); rowsLabels = getSeries(rowsData); columnsArr = _.isArray(columnsLabels); diff --git a/src/ui/public/vislib/__tests__/components/zero_injection.js b/src/ui/public/vislib/__tests__/components/zero_injection.js index b9cb1c8a32cc4d..12dbb38b4a483b 100644 --- a/src/ui/public/vislib/__tests__/components/zero_injection.js +++ b/src/ui/public/vislib/__tests__/components/zero_injection.js @@ -3,6 +3,12 @@ import angular from 'angular'; import _ from 'lodash'; import expect from 'expect.js'; import ngMock from 'ngMock'; +import VislibComponentsZeroInjectionInjectZerosProvider from 'ui/vislib/components/zero_injection/inject_zeros'; +import VislibComponentsZeroInjectionOrderedXKeysProvider from 'ui/vislib/components/zero_injection/ordered_x_keys'; +import VislibComponentsZeroInjectionUniqKeysProvider from 'ui/vislib/components/zero_injection/uniq_keys'; +import VislibComponentsZeroInjectionFlattenDataProvider from 'ui/vislib/components/zero_injection/flatten_data'; +import VislibComponentsZeroInjectionZeroFilledArrayProvider from 'ui/vislib/components/zero_injection/zero_filled_array'; +import VislibComponentsZeroInjectionZeroFillDataArrayProvider from 'ui/vislib/components/zero_injection/zero_fill_data_array'; describe('Vislib Zero Injection Module Test Suite', function () { var dateHistogramRows = { @@ -256,7 +262,7 @@ describe('Vislib Zero Injection Module Test Suite', function () { beforeEach(ngMock.module('kibana')); beforeEach(ngMock.inject(function (Private) { - injectZeros = Private(require('ui/vislib/components/zero_injection/inject_zeros')); + injectZeros = Private(VislibComponentsZeroInjectionInjectZerosProvider); sample1 = injectZeros(seriesData); sample2 = injectZeros(multiSeriesData); sample3 = injectZeros(multiSeriesNumberedData); @@ -362,7 +368,7 @@ describe('Vislib Zero Injection Module Test Suite', function () { beforeEach(ngMock.module('kibana')); beforeEach(ngMock.inject(function (Private) { - orderXValues = Private(require('ui/vislib/components/zero_injection/ordered_x_keys')); + orderXValues = Private(VislibComponentsZeroInjectionOrderedXKeysProvider); results = orderXValues(multiSeriesData); numberedResults = orderXValues(multiSeriesNumberedData); })); @@ -421,7 +427,7 @@ describe('Vislib Zero Injection Module Test Suite', function () { beforeEach(ngMock.module('kibana')); beforeEach(ngMock.inject(function (Private) { - uniqueKeys = Private(require('ui/vislib/components/zero_injection/uniq_keys')); + uniqueKeys = Private(VislibComponentsZeroInjectionUniqKeysProvider); results = uniqueKeys(multiSeriesData); })); @@ -470,7 +476,7 @@ describe('Vislib Zero Injection Module Test Suite', function () { beforeEach(ngMock.module('kibana')); beforeEach(ngMock.inject(function (Private) { - flattenData = Private(require('ui/vislib/components/zero_injection/flatten_data')); + flattenData = Private(VislibComponentsZeroInjectionFlattenDataProvider); results = flattenData(multiSeriesData); })); @@ -498,7 +504,7 @@ describe('Vislib Zero Injection Module Test Suite', function () { beforeEach(ngMock.module('kibana')); beforeEach(ngMock.inject(function (Private) { - createZeroArray = Private(require('ui/vislib/components/zero_injection/zero_filled_array')); + createZeroArray = Private(VislibComponentsZeroInjectionZeroFilledArrayProvider); results1 = createZeroArray(arr1); results2 = createZeroArray(arr2); })); @@ -580,8 +586,8 @@ describe('Vislib Zero Injection Module Test Suite', function () { beforeEach(ngMock.module('kibana')); beforeEach(ngMock.inject(function (Private) { - zeroFillArray = Private(require('ui/vislib/components/zero_injection/zero_fill_data_array')); - createZeroArray = Private(require('ui/vislib/components/zero_injection/zero_filled_array')); + zeroFillArray = Private(VislibComponentsZeroInjectionZeroFillDataArrayProvider); + createZeroArray = Private(VislibComponentsZeroInjectionZeroFilledArrayProvider); arr1 = createZeroArray(xValueArr); // Takes zero array as 1st arg and data array as 2nd arg @@ -642,7 +648,7 @@ describe('Vislib Zero Injection Module Test Suite', function () { beforeEach(ngMock.module('kibana')); beforeEach(ngMock.inject(function (Private) { - injectZeros = Private(require('ui/vislib/components/zero_injection/inject_zeros')); + injectZeros = Private(VislibComponentsZeroInjectionInjectZerosProvider); results = injectZeros(dateHistogramRows); })); diff --git a/src/ui/public/vislib/__tests__/index.js b/src/ui/public/vislib/__tests__/index.js index 08fa5f95051c40..c47e481c28aea7 100644 --- a/src/ui/public/vislib/__tests__/index.js +++ b/src/ui/public/vislib/__tests__/index.js @@ -6,13 +6,14 @@ import d3 from 'd3'; import angular from 'angular'; import 'ui/vislib/styles/main.less'; +import VislibProvider from 'ui/vislib'; describe('Vislib Index Test Suite', function () { var vislib; beforeEach(ngMock.module('kibana')); beforeEach(ngMock.inject(function (Private) { - vislib = Private(require('ui/vislib')); + vislib = Private(VislibProvider); })); it('should return an object', function () { diff --git a/src/ui/public/vislib/__tests__/lib/axis_title.js b/src/ui/public/vislib/__tests__/lib/axis_title.js index 7052a4fdeeab37..f34ba9b8036e19 100644 --- a/src/ui/public/vislib/__tests__/lib/axis_title.js +++ b/src/ui/public/vislib/__tests__/lib/axis_title.js @@ -4,6 +4,9 @@ import _ from 'lodash'; import ngMock from 'ngMock'; import expect from 'expect.js'; import $ from 'jquery'; +import VislibLibAxisTitleProvider from 'ui/vislib/lib/axis_title'; +import VislibLibDataProvider from 'ui/vislib/lib/data'; +import PersistedStatePersistedStateProvider from 'ui/persisted_state/persisted_state'; describe('Vislib AxisTitle Class Test Suite', function () { var AxisTitle; @@ -75,9 +78,9 @@ describe('Vislib AxisTitle Class Test Suite', function () { beforeEach(ngMock.module('kibana')); beforeEach(ngMock.inject(function (Private) { - AxisTitle = Private(require('ui/vislib/lib/axis_title')); - Data = Private(require('ui/vislib/lib/data')); - PersistedState = Private(require('ui/persisted_state/persisted_state')); + AxisTitle = Private(VislibLibAxisTitleProvider); + Data = Private(VislibLibDataProvider); + PersistedState = Private(PersistedStatePersistedStateProvider); el = d3.select('body').append('div') .attr('class', 'vis-wrapper'); diff --git a/src/ui/public/vislib/__tests__/lib/chart_title.js b/src/ui/public/vislib/__tests__/lib/chart_title.js index fb189a0a7ddc0a..9ca7ac7d4d70a4 100644 --- a/src/ui/public/vislib/__tests__/lib/chart_title.js +++ b/src/ui/public/vislib/__tests__/lib/chart_title.js @@ -4,6 +4,9 @@ import _ from 'lodash'; import ngMock from 'ngMock'; import expect from 'expect.js'; import $ from 'jquery'; +import VislibLibChartTitleProvider from 'ui/vislib/lib/chart_title'; +import VislibLibDataProvider from 'ui/vislib/lib/data'; +import PersistedStatePersistedStateProvider from 'ui/persisted_state/persisted_state'; describe('Vislib ChartTitle Class Test Suite', function () { var ChartTitle; @@ -73,9 +76,9 @@ describe('Vislib ChartTitle Class Test Suite', function () { beforeEach(ngMock.module('kibana')); beforeEach(ngMock.inject(function (Private) { - ChartTitle = Private(require('ui/vislib/lib/chart_title')); - Data = Private(require('ui/vislib/lib/data')); - persistedState = new (Private(require('ui/persisted_state/persisted_state')))(); + ChartTitle = Private(VislibLibChartTitleProvider); + Data = Private(VislibLibDataProvider); + persistedState = new (Private(PersistedStatePersistedStateProvider))(); el = d3.select('body').append('div') .attr('class', 'vis-wrapper') diff --git a/src/ui/public/vislib/__tests__/lib/data.js b/src/ui/public/vislib/__tests__/lib/data.js index 1e96f4eb30467b..d53c4cf5499d38 100644 --- a/src/ui/public/vislib/__tests__/lib/data.js +++ b/src/ui/public/vislib/__tests__/lib/data.js @@ -6,6 +6,8 @@ import expect from 'expect.js'; import dataSeries from 'fixtures/vislib/mock_data/date_histogram/_series'; import dataSeriesNeg from 'fixtures/vislib/mock_data/date_histogram/_series_neg'; import dataStacked from 'fixtures/vislib/mock_data/stacked/_stacked'; +import VislibLibDataProvider from 'ui/vislib/lib/data'; +import PersistedStatePersistedStateProvider from 'ui/persisted_state/persisted_state'; var seriesData = { 'label': '', @@ -105,8 +107,8 @@ describe('Vislib Data Class Test Suite', function () { beforeEach(ngMock.module('kibana')); beforeEach(ngMock.inject(function (Private) { - Data = Private(require('ui/vislib/lib/data')); - persistedState = new (Private(require('ui/persisted_state/persisted_state')))(); + Data = Private(VislibLibDataProvider); + persistedState = new (Private(PersistedStatePersistedStateProvider))(); })); describe('Data Class (main)', function () { diff --git a/src/ui/public/vislib/__tests__/lib/dispatch.js b/src/ui/public/vislib/__tests__/lib/dispatch.js index 5ca196b13ee6b0..f1b9a4fe7d4208 100644 --- a/src/ui/public/vislib/__tests__/lib/dispatch.js +++ b/src/ui/public/vislib/__tests__/lib/dispatch.js @@ -7,6 +7,8 @@ import expect from 'expect.js'; // Data import data from 'fixtures/vislib/mock_data/date_histogram/_series'; import $ from 'jquery'; +import FixturesVislibVisFixtureProvider from 'fixtures/vislib/_vis_fixture'; +import PersistedStatePersistedStateProvider from 'ui/persisted_state/persisted_state'; describe('Vislib Dispatch Class Test Suite', function () { @@ -26,8 +28,8 @@ describe('Vislib Dispatch Class Test Suite', function () { beforeEach(ngMock.module('kibana')); beforeEach(ngMock.inject(function (Private) { - vis = Private(require('fixtures/vislib/_vis_fixture'))(); - persistedState = new (Private(require('ui/persisted_state/persisted_state')))(); + vis = Private(FixturesVislibVisFixtureProvider)(); + persistedState = new (Private(PersistedStatePersistedStateProvider))(); vis.render(data, persistedState); SimpleEmitter = require('ui/utils/SimpleEmitter'); })); @@ -51,8 +53,8 @@ describe('Vislib Dispatch Class Test Suite', function () { beforeEach(ngMock.module('kibana')); beforeEach(ngMock.inject(function (Private) { - vis = Private(require('fixtures/vislib/_vis_fixture'))(); - persistedState = new (Private(require('ui/persisted_state/persisted_state')))(); + vis = Private(FixturesVislibVisFixtureProvider)(); + persistedState = new (Private(PersistedStatePersistedStateProvider))(); vis.on('brush', _.noop); vis.render(data, persistedState); })); @@ -122,8 +124,8 @@ describe('Vislib Dispatch Class Test Suite', function () { var chart; ngMock.module('kibana'); ngMock.inject(function (Private) { - vis = Private(require('fixtures/vislib/_vis_fixture'))(); - persistedState = new (Private(require('ui/persisted_state/persisted_state')))(); + vis = Private(FixturesVislibVisFixtureProvider)(); + persistedState = new (Private(PersistedStatePersistedStateProvider))(); vis.on('someEvent', _.noop); vis.render(data, persistedState); @@ -142,8 +144,8 @@ describe('Vislib Dispatch Class Test Suite', function () { var chart; ngMock.module('kibana'); ngMock.inject(function (Private) { - vis = Private(require('fixtures/vislib/_vis_fixture'))(); - persistedState = new (Private(require('ui/persisted_state/persisted_state')))(); + vis = Private(FixturesVislibVisFixtureProvider)(); + persistedState = new (Private(PersistedStatePersistedStateProvider))(); vis.render(data, persistedState); vis.on('someEvent', _.noop); diff --git a/src/ui/public/vislib/__tests__/lib/error_handler.js b/src/ui/public/vislib/__tests__/lib/error_handler.js index 8a532538043b14..f60fc2626b051d 100644 --- a/src/ui/public/vislib/__tests__/lib/error_handler.js +++ b/src/ui/public/vislib/__tests__/lib/error_handler.js @@ -2,6 +2,7 @@ import expect from 'expect.js'; import angular from 'angular'; import ngMock from 'ngMock'; +import VislibLibErrorHandlerProvider from 'ui/vislib/lib/_error_handler'; describe('Vislib ErrorHandler Test Suite', function () { var ErrorHandler; @@ -9,7 +10,7 @@ describe('Vislib ErrorHandler Test Suite', function () { beforeEach(ngMock.module('kibana')); beforeEach(ngMock.inject(function (Private) { - ErrorHandler = Private(require('ui/vislib/lib/_error_handler')); + ErrorHandler = Private(VislibLibErrorHandlerProvider); errorHandler = new ErrorHandler(); })); diff --git a/src/ui/public/vislib/__tests__/lib/handler/handler.js b/src/ui/public/vislib/__tests__/lib/handler/handler.js index e239d0e6d634e7..2954ef9ddaca8c 100644 --- a/src/ui/public/vislib/__tests__/lib/handler/handler.js +++ b/src/ui/public/vislib/__tests__/lib/handler/handler.js @@ -9,6 +9,9 @@ import columns from 'fixtures/vislib/mock_data/date_histogram/_columns'; import rows from 'fixtures/vislib/mock_data/date_histogram/_rows'; import stackedSeries from 'fixtures/vislib/mock_data/date_histogram/_stacked_series'; import $ from 'jquery'; +import VislibLibHandlerHandlerProvider from 'ui/vislib/lib/handler/handler'; +import FixturesVislibVisFixtureProvider from 'fixtures/vislib/_vis_fixture'; +import PersistedStatePersistedStateProvider from 'ui/persisted_state/persisted_state'; var dateHistogramArray = [ series, columns, @@ -34,9 +37,9 @@ dateHistogramArray.forEach(function (data, i) { beforeEach(ngMock.module('kibana')); beforeEach(ngMock.inject(function (Private) { - Handler = Private(require('ui/vislib/lib/handler/handler')); - vis = Private(require('fixtures/vislib/_vis_fixture'))(); - persistedState = new (Private(require('ui/persisted_state/persisted_state')))(); + Handler = Private(VislibLibHandlerHandlerProvider); + vis = Private(FixturesVislibVisFixtureProvider)(); + persistedState = new (Private(PersistedStatePersistedStateProvider))(); vis.render(data, persistedState); })); diff --git a/src/ui/public/vislib/__tests__/lib/layout/layout.js b/src/ui/public/vislib/__tests__/lib/layout/layout.js index 8aa3f1b34a61b8..e4d9a8514583f6 100644 --- a/src/ui/public/vislib/__tests__/lib/layout/layout.js +++ b/src/ui/public/vislib/__tests__/lib/layout/layout.js @@ -9,6 +9,9 @@ import columns from 'fixtures/vislib/mock_data/date_histogram/_columns'; import rows from 'fixtures/vislib/mock_data/date_histogram/_rows'; import stackedSeries from 'fixtures/vislib/mock_data/date_histogram/_stacked_series'; import $ from 'jquery'; +import VislibLibLayoutLayoutProvider from 'ui/vislib/lib/layout/layout'; +import FixturesVislibVisFixtureProvider from 'fixtures/vislib/_vis_fixture'; +import PersistedStatePersistedStateProvider from 'ui/persisted_state/persisted_state'; var dateHistogramArray = [ series, columns, @@ -34,9 +37,9 @@ dateHistogramArray.forEach(function (data, i) { beforeEach(function () { ngMock.inject(function (Private) { - Layout = Private(require('ui/vislib/lib/layout/layout')); - vis = Private(require('fixtures/vislib/_vis_fixture'))(); - persistedState = new (Private(require('ui/persisted_state/persisted_state')))(); + Layout = Private(VislibLibLayoutLayoutProvider); + vis = Private(FixturesVislibVisFixtureProvider)(); + persistedState = new (Private(PersistedStatePersistedStateProvider))(); vis.render(data, persistedState); numberOfCharts = vis.handler.charts.length; }); diff --git a/src/ui/public/vislib/__tests__/lib/layout/layout_types.js b/src/ui/public/vislib/__tests__/lib/layout/layout_types.js index 8f5583dea13ab7..00383384e425bc 100644 --- a/src/ui/public/vislib/__tests__/lib/layout/layout_types.js +++ b/src/ui/public/vislib/__tests__/lib/layout/layout_types.js @@ -2,6 +2,7 @@ import angular from 'angular'; import _ from 'lodash'; import ngMock from 'ngMock'; import expect from 'expect.js'; +import VislibLibLayoutLayoutTypesProvider from 'ui/vislib/lib/layout/layout_types'; describe('Vislib Layout Types Test Suite', function () { var layoutType; @@ -9,7 +10,7 @@ describe('Vislib Layout Types Test Suite', function () { beforeEach(ngMock.module('kibana')); beforeEach(ngMock.inject(function (Private) { - layoutType = Private(require('ui/vislib/lib/layout/layout_types')); + layoutType = Private(VislibLibLayoutLayoutTypesProvider); layoutFunc = layoutType.histogram; })); diff --git a/src/ui/public/vislib/__tests__/lib/layout/splits/column_chart/splits.js b/src/ui/public/vislib/__tests__/lib/layout/splits/column_chart/splits.js index 361aaf61e7458f..30a33fa145e14d 100644 --- a/src/ui/public/vislib/__tests__/lib/layout/splits/column_chart/splits.js +++ b/src/ui/public/vislib/__tests__/lib/layout/splits/column_chart/splits.js @@ -3,6 +3,10 @@ import angular from 'angular'; import ngMock from 'ngMock'; import expect from 'expect.js'; import $ from 'jquery'; +import VislibLibLayoutSplitsColumnChartChartSplitProvider from 'ui/vislib/lib/layout/splits/column_chart/chart_split'; +import VislibLibLayoutSplitsColumnChartChartTitleSplitProvider from 'ui/vislib/lib/layout/splits/column_chart/chart_title_split'; +import VislibLibLayoutSplitsColumnChartXAxisSplitProvider from 'ui/vislib/lib/layout/splits/column_chart/x_axis_split'; +import VislibLibLayoutSplitsColumnChartYAxisSplitProvider from 'ui/vislib/lib/layout/splits/column_chart/y_axis_split'; describe('Vislib Split Function Test Suite', function () { describe('Column Chart', function () { @@ -134,10 +138,10 @@ describe('Vislib Split Function Test Suite', function () { beforeEach(ngMock.module('kibana')); beforeEach(ngMock.inject(function (Private) { - chartSplit = Private(require('ui/vislib/lib/layout/splits/column_chart/chart_split')); - chartTitleSplit = Private(require('ui/vislib/lib/layout/splits/column_chart/chart_title_split')); - xAxisSplit = Private(require('ui/vislib/lib/layout/splits/column_chart/x_axis_split')); - yAxisSplit = Private(require('ui/vislib/lib/layout/splits/column_chart/y_axis_split')); + chartSplit = Private(VislibLibLayoutSplitsColumnChartChartSplitProvider); + chartTitleSplit = Private(VislibLibLayoutSplitsColumnChartChartTitleSplitProvider); + xAxisSplit = Private(VislibLibLayoutSplitsColumnChartXAxisSplitProvider); + yAxisSplit = Private(VislibLibLayoutSplitsColumnChartYAxisSplitProvider); el = d3.select('body').append('div') .attr('class', 'visualization') diff --git a/src/ui/public/vislib/__tests__/lib/layout/types/column_layout.js b/src/ui/public/vislib/__tests__/lib/layout/types/column_layout.js index bea6a5e800a544..f1729472bf6149 100644 --- a/src/ui/public/vislib/__tests__/lib/layout/types/column_layout.js +++ b/src/ui/public/vislib/__tests__/lib/layout/types/column_layout.js @@ -3,6 +3,7 @@ import angular from 'angular'; import _ from 'lodash'; import ngMock from 'ngMock'; import expect from 'expect.js'; +import VislibLibLayoutLayoutTypesProvider from 'ui/vislib/lib/layout/layout_types'; describe('Vislib Column Layout Test Suite', function () { var layoutType; @@ -69,7 +70,7 @@ describe('Vislib Column Layout Test Suite', function () { beforeEach(ngMock.module('kibana')); beforeEach(ngMock.inject(function (Private) { - layoutType = Private(require('ui/vislib/lib/layout/layout_types')); + layoutType = Private(VislibLibLayoutLayoutTypesProvider); el = d3.select('body').append('div').attr('class', 'visualization'); columnLayout = layoutType.histogram(el, data); })); diff --git a/src/ui/public/vislib/__tests__/lib/resize_checker.js b/src/ui/public/vislib/__tests__/lib/resize_checker.js index 5c990fb8b29e7c..d3b3b40fedc52f 100644 --- a/src/ui/public/vislib/__tests__/lib/resize_checker.js +++ b/src/ui/public/vislib/__tests__/lib/resize_checker.js @@ -4,6 +4,9 @@ import Promise from 'bluebird'; import ngMock from 'ngMock'; import expect from 'expect.js'; import sinon from 'auto-release-sinon'; +import VislibLibResizeCheckerProvider from 'ui/vislib/lib/resize_checker'; +import EventsProvider from 'ui/events'; +import ReflowWatcherProvider from 'ui/reflow_watcher'; describe('Vislib Resize Checker', function () { @@ -18,9 +21,9 @@ describe('Vislib Resize Checker', function () { beforeEach(ngMock.module('kibana')); beforeEach(ngMock.inject(function (Private) { - ResizeChecker = Private(require('ui/vislib/lib/resize_checker')); - EventEmitter = Private(require('ui/events')); - reflowWatcher = Private(require('ui/reflow_watcher')); + ResizeChecker = Private(VislibLibResizeCheckerProvider); + EventEmitter = Private(EventsProvider); + reflowWatcher = Private(ReflowWatcherProvider); reflowSpies.on = sinon.spy(reflowWatcher, 'on'); reflowSpies.off = sinon.spy(reflowWatcher, 'off'); diff --git a/src/ui/public/vislib/__tests__/lib/x_axis.js b/src/ui/public/vislib/__tests__/lib/x_axis.js index e3788b2201008a..0b19212b50845c 100644 --- a/src/ui/public/vislib/__tests__/lib/x_axis.js +++ b/src/ui/public/vislib/__tests__/lib/x_axis.js @@ -4,6 +4,9 @@ import _ from 'lodash'; import ngMock from 'ngMock'; import expect from 'expect.js'; import $ from 'jquery'; +import VislibLibDataProvider from 'ui/vislib/lib/data'; +import PersistedStatePersistedStateProvider from 'ui/persisted_state/persisted_state'; +import VislibLibXAxisProvider from 'ui/vislib/lib/x_axis'; describe('Vislib xAxis Class Test Suite', function () { var XAxis; @@ -77,9 +80,9 @@ describe('Vislib xAxis Class Test Suite', function () { beforeEach(ngMock.module('kibana')); beforeEach(ngMock.inject(function (Private) { - Data = Private(require('ui/vislib/lib/data')); - persistedState = new (Private(require('ui/persisted_state/persisted_state')))(); - XAxis = Private(require('ui/vislib/lib/x_axis')); + Data = Private(VislibLibDataProvider); + persistedState = new (Private(PersistedStatePersistedStateProvider))(); + XAxis = Private(VislibLibXAxisProvider); el = d3.select('body').append('div') .attr('class', 'x-axis-wrapper') diff --git a/src/ui/public/vislib/__tests__/lib/y_axis.js b/src/ui/public/vislib/__tests__/lib/y_axis.js index 82853106fb24da..4528e32a521290 100644 --- a/src/ui/public/vislib/__tests__/lib/y_axis.js +++ b/src/ui/public/vislib/__tests__/lib/y_axis.js @@ -3,6 +3,9 @@ import d3 from 'd3'; import ngMock from 'ngMock'; import expect from 'expect.js'; import $ from 'jquery'; +import VislibLibDataProvider from 'ui/vislib/lib/data'; +import PersistedStatePersistedStateProvider from 'ui/persisted_state/persisted_state'; +import VislibLibYAxisProvider from 'ui/vislib/lib/y_axis'; var YAxis; var Data; @@ -94,9 +97,9 @@ describe('Vislib yAxis Class Test Suite', function () { beforeEach(ngMock.module('kibana')); beforeEach(ngMock.inject(function (Private) { - Data = Private(require('ui/vislib/lib/data')); - persistedState = new (Private(require('ui/persisted_state/persisted_state')))(); - YAxis = Private(require('ui/vislib/lib/y_axis')); + Data = Private(VislibLibDataProvider); + persistedState = new (Private(PersistedStatePersistedStateProvider))(); + YAxis = Private(VislibLibYAxisProvider); expect($('.y-axis-wrapper')).to.have.length(0); })); diff --git a/src/ui/public/vislib/__tests__/vis.js b/src/ui/public/vislib/__tests__/vis.js index 6d7fdb8e44fe58..0a2190626fb283 100644 --- a/src/ui/public/vislib/__tests__/vis.js +++ b/src/ui/public/vislib/__tests__/vis.js @@ -8,6 +8,8 @@ import columns from 'fixtures/vislib/mock_data/date_histogram/_columns'; import rows from 'fixtures/vislib/mock_data/date_histogram/_rows'; import stackedSeries from 'fixtures/vislib/mock_data/date_histogram/_stacked_series'; import $ from 'jquery'; +import FixturesVislibVisFixtureProvider from 'fixtures/vislib/_vis_fixture'; +import PersistedStatePersistedStateProvider from 'ui/persisted_state/persisted_state'; var dataArray = [ series, @@ -35,9 +37,9 @@ dataArray.forEach(function (data, i) { beforeEach(ngMock.module('kibana')); beforeEach(ngMock.inject(function (Private) { - vis = Private(require('fixtures/vislib/_vis_fixture'))(); - persistedState = new (Private(require('ui/persisted_state/persisted_state')))(); - secondVis = Private(require('fixtures/vislib/_vis_fixture'))(); + vis = Private(FixturesVislibVisFixtureProvider)(); + persistedState = new (Private(PersistedStatePersistedStateProvider))(); + secondVis = Private(FixturesVislibVisFixtureProvider)(); })); afterEach(function () { diff --git a/src/ui/public/vislib/__tests__/visualizations/area_chart.js b/src/ui/public/vislib/__tests__/visualizations/area_chart.js index 74493a40052427..feaf125d832587 100644 --- a/src/ui/public/vislib/__tests__/visualizations/area_chart.js +++ b/src/ui/public/vislib/__tests__/visualizations/area_chart.js @@ -7,6 +7,8 @@ import _ from 'lodash'; import woahLotsOfVariables from 'fixtures/vislib/mock_data/date_histogram/_series'; import notQuiteEnoughVariables from 'fixtures/vislib/mock_data/not_enough_data/_one_point'; import $ from 'jquery'; +import FixturesVislibVisFixtureProvider from 'fixtures/vislib/_vis_fixture'; +import PersistedStatePersistedStateProvider from 'ui/persisted_state/persisted_state'; var someOtherVariables = { 'series pos': require('fixtures/vislib/mock_data/date_histogram/_series'), 'series pos neg': require('fixtures/vislib/mock_data/date_histogram/_series_pos_neg'), @@ -30,8 +32,8 @@ _.forOwn(someOtherVariables, function (variablesAreCool, imaVariable) { beforeEach(ngMock.module('kibana')); beforeEach(ngMock.inject(function (Private) { - vis = Private(require('fixtures/vislib/_vis_fixture'))(visLibParams); - persistedState = new (Private(require('ui/persisted_state/persisted_state')))(); + vis = Private(FixturesVislibVisFixtureProvider)(visLibParams); + persistedState = new (Private(PersistedStatePersistedStateProvider))(); vis.on('brush', _.noop); vis.render(variablesAreCool, persistedState); })); diff --git a/src/ui/public/vislib/__tests__/visualizations/chart.js b/src/ui/public/vislib/__tests__/visualizations/chart.js index 210c7dc33dcdda..e112e5897eb233 100644 --- a/src/ui/public/vislib/__tests__/visualizations/chart.js +++ b/src/ui/public/vislib/__tests__/visualizations/chart.js @@ -2,6 +2,11 @@ import d3 from 'd3'; import angular from 'angular'; import expect from 'expect.js'; import ngMock from 'ngMock'; +import VislibVisProvider from 'ui/vislib/vis'; +import VislibLibDataProvider from 'ui/vislib/lib/data'; +import PersistedStatePersistedStateProvider from 'ui/persisted_state/persisted_state'; +import VislibVisualizationsColumnChartProvider from 'ui/vislib/visualizations/column_chart'; +import VislibVisualizationsChartProvider from 'ui/vislib/visualizations/_chart'; describe('Vislib _chart Test Suite', function () { var ColumnChart; @@ -81,11 +86,11 @@ describe('Vislib _chart Test Suite', function () { beforeEach(ngMock.module('kibana')); beforeEach(ngMock.inject(function (Private) { - Vis = Private(require('ui/vislib/vis')); - Data = Private(require('ui/vislib/lib/data')); - persistedState = new (Private(require('ui/persisted_state/persisted_state')))(); - ColumnChart = Private(require('ui/vislib/visualizations/column_chart')); - Chart = Private(require('ui/vislib/visualizations/_chart')); + Vis = Private(VislibVisProvider); + Data = Private(VislibLibDataProvider); + persistedState = new (Private(PersistedStatePersistedStateProvider))(); + ColumnChart = Private(VislibVisualizationsColumnChartProvider); + Chart = Private(VislibVisualizationsChartProvider); el = d3.select('body').append('div').attr('class', 'column-chart'); diff --git a/src/ui/public/vislib/__tests__/visualizations/column_chart.js b/src/ui/public/vislib/__tests__/visualizations/column_chart.js index 7d49c6d5eebd24..4b2c97d7dbd0d6 100644 --- a/src/ui/public/vislib/__tests__/visualizations/column_chart.js +++ b/src/ui/public/vislib/__tests__/visualizations/column_chart.js @@ -13,6 +13,8 @@ import termsColumns from 'fixtures/vislib/mock_data/terms/_columns'; //var histogramRows = require('fixtures/vislib/mock_data/histogram/_rows'); import stackedSeries from 'fixtures/vislib/mock_data/date_histogram/_stacked_series'; import $ from 'jquery'; +import FixturesVislibVisFixtureProvider from 'fixtures/vislib/_vis_fixture'; +import PersistedStatePersistedStateProvider from 'ui/persisted_state/persisted_state'; // tuple, with the format [description, mode, data] var dataTypesArray = [ @@ -42,8 +44,8 @@ dataTypesArray.forEach(function (dataType, i) { beforeEach(ngMock.module('kibana')); beforeEach(ngMock.inject(function (Private) { - vis = Private(require('fixtures/vislib/_vis_fixture'))(visLibParams); - persistedState = new (Private(require('ui/persisted_state/persisted_state')))(); + vis = Private(FixturesVislibVisFixtureProvider)(visLibParams); + persistedState = new (Private(PersistedStatePersistedStateProvider))(); vis.on('brush', _.noop); vis.render(data, persistedState); })); diff --git a/src/ui/public/vislib/__tests__/visualizations/line_chart.js b/src/ui/public/vislib/__tests__/visualizations/line_chart.js index a1b74efd293c2b..b26fedd4ee0b9b 100644 --- a/src/ui/public/vislib/__tests__/visualizations/line_chart.js +++ b/src/ui/public/vislib/__tests__/visualizations/line_chart.js @@ -12,6 +12,8 @@ import histogramColumns from 'fixtures/vislib/mock_data/histogram/_columns'; import rangeRows from 'fixtures/vislib/mock_data/range/_rows'; import termSeries from 'fixtures/vislib/mock_data/terms/_series'; import $ from 'jquery'; +import FixturesVislibVisFixtureProvider from 'fixtures/vislib/_vis_fixture'; +import PersistedStatePersistedStateProvider from 'ui/persisted_state/persisted_state'; var dataTypes = [ ['series pos', seriesPos], @@ -40,8 +42,8 @@ describe('Vislib Line Chart', function () { drawLinesBetweenPoints: true }; - vis = Private(require('fixtures/vislib/_vis_fixture'))(visLibParams); - persistedState = new (Private(require('ui/persisted_state/persisted_state')))(); + vis = Private(FixturesVislibVisFixtureProvider)(visLibParams); + persistedState = new (Private(PersistedStatePersistedStateProvider))(); vis.on('brush', _.noop); vis.render(data, persistedState); })); diff --git a/src/ui/public/vislib/__tests__/visualizations/pie_chart.js b/src/ui/public/vislib/__tests__/visualizations/pie_chart.js index a2966cdacc781d..72ba5a623fcdb2 100644 --- a/src/ui/public/vislib/__tests__/visualizations/pie_chart.js +++ b/src/ui/public/vislib/__tests__/visualizations/pie_chart.js @@ -5,6 +5,11 @@ import ngMock from 'ngMock'; import _ from 'lodash'; import fixtures from 'fixtures/fake_hierarchical_data'; import $ from 'jquery'; +import FixturesVislibVisFixtureProvider from 'fixtures/vislib/_vis_fixture'; +import VisProvider from 'ui/Vis'; +import PersistedStatePersistedStateProvider from 'ui/persisted_state/persisted_state'; +import FixturesStubbedLogstashIndexPatternProvider from 'fixtures/stubbed_logstash_index_pattern'; +import AggResponseHierarchicalBuildHierarchicalDataProvider from 'ui/agg_response/hierarchical/build_hierarchical_data'; var rowAgg = [ { type: 'avg', schema: 'metric', params: { field: 'bytes' } }, @@ -71,12 +76,12 @@ describe('No global chart settings', function () { beforeEach(ngMock.module('kibana')); beforeEach(ngMock.inject(function (Private) { - chart1 = Private(require('fixtures/vislib/_vis_fixture'))(visLibParams1); - chart2 = Private(require('fixtures/vislib/_vis_fixture'))(visLibParams2); - Vis = Private(require('ui/Vis')); - persistedState = new (Private(require('ui/persisted_state/persisted_state')))(); - indexPattern = Private(require('fixtures/stubbed_logstash_index_pattern')); - buildHierarchicalData = Private(require('ui/agg_response/hierarchical/build_hierarchical_data')); + chart1 = Private(FixturesVislibVisFixtureProvider)(visLibParams1); + chart2 = Private(FixturesVislibVisFixtureProvider)(visLibParams2); + Vis = Private(VisProvider); + persistedState = new (Private(PersistedStatePersistedStateProvider))(); + indexPattern = Private(FixturesStubbedLogstashIndexPatternProvider); + buildHierarchicalData = Private(AggResponseHierarchicalBuildHierarchicalDataProvider); var id1 = 1; var id2 = 1; @@ -166,11 +171,11 @@ aggArray.forEach(function (dataAgg, i) { beforeEach(ngMock.module('kibana')); beforeEach(ngMock.inject(function (Private) { - vis = Private(require('fixtures/vislib/_vis_fixture'))(visLibParams); - Vis = Private(require('ui/Vis')); - persistedState = new (Private(require('ui/persisted_state/persisted_state')))(); - indexPattern = Private(require('fixtures/stubbed_logstash_index_pattern')); - buildHierarchicalData = Private(require('ui/agg_response/hierarchical/build_hierarchical_data')); + vis = Private(FixturesVislibVisFixtureProvider)(visLibParams); + Vis = Private(VisProvider); + persistedState = new (Private(PersistedStatePersistedStateProvider))(); + indexPattern = Private(FixturesStubbedLogstashIndexPatternProvider); + buildHierarchicalData = Private(AggResponseHierarchicalBuildHierarchicalDataProvider); var id = 1; var stubVis = new Vis(indexPattern, { diff --git a/src/ui/public/vislib/__tests__/visualizations/tile_maps/map.js b/src/ui/public/vislib/__tests__/visualizations/tile_maps/map.js index 8f297341f2ffe1..b0876c102512e5 100644 --- a/src/ui/public/vislib/__tests__/visualizations/tile_maps/map.js +++ b/src/ui/public/vislib/__tests__/visualizations/tile_maps/map.js @@ -7,6 +7,7 @@ import L from 'leaflet'; import sinon from 'auto-release-sinon'; import geoJsonData from 'fixtures/vislib/mock_data/geohash/_geo_json'; import $ from 'jquery'; +import VislibVisualizationsMapProvider from 'ui/vislib/visualizations/_map'; // // Data // var dataArray = [ @@ -39,7 +40,7 @@ describe('TileMap Map Tests', function () { leafletStubs.map = sinon.stub(L, 'map', _.constant(leafletMocks.map)); - TileMapMap = Private(require('ui/vislib/visualizations/_map')); + TileMapMap = Private(VislibVisualizationsMapProvider); })); describe('instantiation', function () { diff --git a/src/ui/public/vislib/__tests__/visualizations/tile_maps/markers.js b/src/ui/public/vislib/__tests__/visualizations/tile_maps/markers.js index eab2070fce7ac9..4ead77f9f49535 100644 --- a/src/ui/public/vislib/__tests__/visualizations/tile_maps/markers.js +++ b/src/ui/public/vislib/__tests__/visualizations/tile_maps/markers.js @@ -7,6 +7,10 @@ import L from 'leaflet'; import sinon from 'auto-release-sinon'; import geoJsonData from 'fixtures/vislib/mock_data/geohash/_geo_json'; import $ from 'jquery'; +import VislibVisualizationsMarkerTypesBaseMarkerProvider from 'ui/vislib/visualizations/marker_types/base_marker'; +import VislibVisualizationsMarkerTypesShadedCirclesProvider from 'ui/vislib/visualizations/marker_types/shaded_circles'; +import VislibVisualizationsMarkerTypesScaledCirclesProvider from 'ui/vislib/visualizations/marker_types/scaled_circles'; +import VislibVisualizationsMarkerTypesHeatmapProvider from 'ui/vislib/visualizations/marker_types/heatmap'; // defaults to roughly the lower 48 US states var defaultSWCoords = [13.496, -143.789]; var defaultNECoords = [55.526, -57.919]; @@ -64,7 +68,7 @@ describe('Marker Tests', function () { beforeEach(ngMock.module('MarkerFactory')); beforeEach(ngMock.inject(function (Private) { - MarkerClass = Private(require('ui/vislib/visualizations/marker_types/base_marker')); + MarkerClass = Private(VislibVisualizationsMarkerTypesBaseMarkerProvider); markerLayer = createMarker(MarkerClass); })); @@ -198,7 +202,7 @@ describe('Marker Tests', function () { describe('Shaded Circles', function () { beforeEach(ngMock.module('MarkerFactory')); beforeEach(ngMock.inject(function (Private) { - var MarkerClass = Private(require('ui/vislib/visualizations/marker_types/shaded_circles')); + var MarkerClass = Private(VislibVisualizationsMarkerTypesShadedCirclesProvider); markerLayer = createMarker(MarkerClass); })); @@ -220,7 +224,7 @@ describe('Marker Tests', function () { beforeEach(ngMock.inject(function (Private) { zoom = _.random(1, 18); sinon.stub(mockMap, 'getZoom', _.constant(zoom)); - var MarkerClass = Private(require('ui/vislib/visualizations/marker_types/scaled_circles')); + var MarkerClass = Private(VislibVisualizationsMarkerTypesScaledCirclesProvider); markerLayer = createMarker(MarkerClass); })); @@ -265,7 +269,7 @@ describe('Marker Tests', function () { describe('Heatmaps', function () { beforeEach(ngMock.module('MarkerFactory')); beforeEach(ngMock.inject(function (Private) { - var MarkerClass = Private(require('ui/vislib/visualizations/marker_types/heatmap')); + var MarkerClass = Private(VislibVisualizationsMarkerTypesHeatmapProvider); markerLayer = createMarker(MarkerClass); })); diff --git a/src/ui/public/vislib/__tests__/visualizations/tile_maps/tile_map.js b/src/ui/public/vislib/__tests__/visualizations/tile_maps/tile_map.js index 7aa74b1e0c3ddb..b4199a4e2dae6b 100644 --- a/src/ui/public/vislib/__tests__/visualizations/tile_maps/tile_map.js +++ b/src/ui/public/vislib/__tests__/visualizations/tile_maps/tile_map.js @@ -7,6 +7,7 @@ import sinon from 'auto-release-sinon'; import geoJsonData from 'fixtures/vislib/mock_data/geohash/_geo_json'; import MockMap from 'fixtures/tilemap_map'; import $ from 'jquery'; +import VislibVisualizationsTileMapProvider from 'ui/vislib/visualizations/tile_map'; var mockChartEl = $('
'); var TileMap; @@ -27,7 +28,7 @@ describe('TileMap Tests', function () { beforeEach(ngMock.module('kibana')); beforeEach(ngMock.inject(function (Private) { Private.stub(require('ui/vislib/visualizations/_map'), MockMap); - TileMap = Private(require('ui/vislib/visualizations/tile_map')); + TileMap = Private(VislibVisualizationsTileMapProvider); extentsStub = sinon.stub(TileMap.prototype, '_appendGeoExtents', _.noop); })); diff --git a/src/ui/public/vislib/__tests__/visualizations/time_marker.js b/src/ui/public/vislib/__tests__/visualizations/time_marker.js index f024c63d7668da..8fafcf83984349 100644 --- a/src/ui/public/vislib/__tests__/visualizations/time_marker.js +++ b/src/ui/public/vislib/__tests__/visualizations/time_marker.js @@ -7,6 +7,7 @@ import fixtures from 'fixtures/fake_hierarchical_data'; import series from 'fixtures/vislib/mock_data/date_histogram/_series'; import terms from 'fixtures/vislib/mock_data/terms/_columns'; import $ from 'jquery'; +import VislibVisualizationsTimeMarkerProvider from 'ui/vislib/visualizations/time_marker'; describe('Vislib Time Marker Test Suite', function () { var height = 50; @@ -43,7 +44,7 @@ describe('Vislib Time Marker Test Suite', function () { beforeEach(ngMock.module('kibana')); beforeEach(ngMock.inject(function (Private) { - TimeMarker = Private(require('ui/vislib/visualizations/time_marker')); + TimeMarker = Private(VislibVisualizationsTimeMarkerProvider); minDomain = getExtent(series.series, d3.min); maxDomain = getExtent(series.series, d3.max); domain = [minDomain, maxDomain]; diff --git a/src/ui/public/vislib/__tests__/visualizations/vis_types.js b/src/ui/public/vislib/__tests__/visualizations/vis_types.js index ab20ae743112d3..02f4189086d960 100644 --- a/src/ui/public/vislib/__tests__/visualizations/vis_types.js +++ b/src/ui/public/vislib/__tests__/visualizations/vis_types.js @@ -2,6 +2,7 @@ import angular from 'angular'; import expect from 'expect.js'; import ngMock from 'ngMock'; import _ from 'lodash'; +import VislibVisualizationsVisTypesProvider from 'ui/vislib/visualizations/vis_types'; describe('Vislib Vis Types Test Suite', function () { var visTypes; @@ -9,7 +10,7 @@ describe('Vislib Vis Types Test Suite', function () { beforeEach(ngMock.module('kibana')); beforeEach(ngMock.inject(function (Private) { - visTypes = Private(require('ui/vislib/visualizations/vis_types')); + visTypes = Private(VislibVisualizationsVisTypesProvider); visFunc = visTypes.histogram; })); diff --git a/src/ui/public/vislib/components/color/color.js b/src/ui/public/vislib/components/color/color.js index 42a52fe954bed1..88de9b6ab1d545 100644 --- a/src/ui/public/vislib/components/color/color.js +++ b/src/ui/public/vislib/components/color/color.js @@ -1,7 +1,8 @@ import _ from 'lodash'; +import VislibComponentsColorMappedColorsProvider from 'ui/vislib/components/color/mapped_colors'; define(function (require) { return function ColorUtilService(Private) { - var mappedColors = Private(require('ui/vislib/components/color/mapped_colors')); + var mappedColors = Private(VislibComponentsColorMappedColorsProvider); /* * Accepts an array of strings or numbers that are used to create a diff --git a/src/ui/public/vislib/components/color/color_palette.js b/src/ui/public/vislib/components/color/color_palette.js index dbe8226d650202..aa7fe92d9ac7f7 100644 --- a/src/ui/public/vislib/components/color/color_palette.js +++ b/src/ui/public/vislib/components/color/color_palette.js @@ -1,9 +1,10 @@ import d3 from 'd3'; import _ from 'lodash'; +import VislibComponentsColorSeedColorsProvider from 'ui/vislib/components/color/seed_colors'; define(function (require) { return function ColorPaletteUtilService(Private) { - var seedColors = Private(require('ui/vislib/components/color/seed_colors')); + var seedColors = Private(VislibComponentsColorSeedColorsProvider); /* diff --git a/src/ui/public/vislib/components/color/mapped_colors.js b/src/ui/public/vislib/components/color/mapped_colors.js index d4f7270aecbb5b..748c6e1218daeb 100644 --- a/src/ui/public/vislib/components/color/mapped_colors.js +++ b/src/ui/public/vislib/components/color/mapped_colors.js @@ -1,7 +1,8 @@ import _ from 'lodash'; import d3 from 'd3'; +import VislibComponentsColorColorPaletteProvider from 'ui/vislib/components/color/color_palette'; define((require) => (Private, config, $rootScope) => { - const createColorPalette = Private(require('ui/vislib/components/color/color_palette')); + const createColorPalette = Private(VislibComponentsColorColorPaletteProvider); const standardizeColor = (color) => d3.rgb(color).toString(); function getConfigColorMapping() { diff --git a/src/ui/public/vislib/components/labels/data_array.js b/src/ui/public/vislib/components/labels/data_array.js index 95cb28bdcb272a..8d451bacda0347 100644 --- a/src/ui/public/vislib/components/labels/data_array.js +++ b/src/ui/public/vislib/components/labels/data_array.js @@ -1,7 +1,8 @@ import _ from 'lodash'; +import VislibComponentsLabelsFlattenSeriesProvider from 'ui/vislib/components/labels/flatten_series'; define(function (require) { return function GetArrayUtilService(Private) { - var flattenSeries = Private(require('ui/vislib/components/labels/flatten_series')); + var flattenSeries = Private(VislibComponentsLabelsFlattenSeriesProvider); /* * Accepts a Kibana data object and returns an array of values objects. diff --git a/src/ui/public/vislib/components/labels/labels.js b/src/ui/public/vislib/components/labels/labels.js index aeb41440a3100d..8ac6321132ef99 100644 --- a/src/ui/public/vislib/components/labels/labels.js +++ b/src/ui/public/vislib/components/labels/labels.js @@ -1,10 +1,13 @@ import _ from 'lodash'; +import VislibComponentsLabelsDataArrayProvider from 'ui/vislib/components/labels/data_array'; +import VislibComponentsLabelsUniqLabelsProvider from 'ui/vislib/components/labels/uniq_labels'; +import VislibComponentsLabelsPiePieLabelsProvider from 'ui/vislib/components/labels/pie/pie_labels'; define(function (require) { return function LabelUtilService(Private) { - var createArr = Private(require('ui/vislib/components/labels/data_array')); - var getArrOfUniqLabels = Private(require('ui/vislib/components/labels/uniq_labels')); - var getPieLabels = Private(require('ui/vislib/components/labels/pie/pie_labels')); + var createArr = Private(VislibComponentsLabelsDataArrayProvider); + var getArrOfUniqLabels = Private(VislibComponentsLabelsUniqLabelsProvider); + var getPieLabels = Private(VislibComponentsLabelsPiePieLabelsProvider); /* * Accepts a Kibana data object and returns an array of unique labels (strings). diff --git a/src/ui/public/vislib/components/labels/pie/get_pie_names.js b/src/ui/public/vislib/components/labels/pie/get_pie_names.js index 18afb877c7e441..02179954270932 100644 --- a/src/ui/public/vislib/components/labels/pie/get_pie_names.js +++ b/src/ui/public/vislib/components/labels/pie/get_pie_names.js @@ -1,8 +1,9 @@ import _ from 'lodash'; +import VislibComponentsLabelsPieReturnPieNamesProvider from 'ui/vislib/components/labels/pie/return_pie_names'; define(function (require) { return function GetPieNames(Private) { - var returnNames = Private(require('ui/vislib/components/labels/pie/return_pie_names')); + var returnNames = Private(VislibComponentsLabelsPieReturnPieNamesProvider); return function (data, columns) { var slices = data.slices; diff --git a/src/ui/public/vislib/components/labels/pie/pie_labels.js b/src/ui/public/vislib/components/labels/pie/pie_labels.js index b30a17978d8fca..8c7a4346aad3a3 100644 --- a/src/ui/public/vislib/components/labels/pie/pie_labels.js +++ b/src/ui/public/vislib/components/labels/pie/pie_labels.js @@ -1,9 +1,11 @@ import _ from 'lodash'; +import VislibComponentsLabelsPieRemoveZeroSlicesProvider from 'ui/vislib/components/labels/pie/remove_zero_slices'; +import VislibComponentsLabelsPieGetPieNamesProvider from 'ui/vislib/components/labels/pie/get_pie_names'; define(function (require) { return function PieLabels(Private) { - var removeZeroSlices = Private(require('ui/vislib/components/labels/pie/remove_zero_slices')); - var getNames = Private(require('ui/vislib/components/labels/pie/get_pie_names')); + var removeZeroSlices = Private(VislibComponentsLabelsPieRemoveZeroSlicesProvider); + var getNames = Private(VislibComponentsLabelsPieGetPieNamesProvider); return function (obj) { if (!_.isObject(obj)) { throw new TypeError('PieLabel expects an object'); } diff --git a/src/ui/public/vislib/components/zero_injection/inject_zeros.js b/src/ui/public/vislib/components/zero_injection/inject_zeros.js index fccf6028dd5a1a..ef6a64e75ed9ee 100644 --- a/src/ui/public/vislib/components/zero_injection/inject_zeros.js +++ b/src/ui/public/vislib/components/zero_injection/inject_zeros.js @@ -1,10 +1,13 @@ import _ from 'lodash'; +import VislibComponentsZeroInjectionOrderedXKeysProvider from 'ui/vislib/components/zero_injection/ordered_x_keys'; +import VislibComponentsZeroInjectionZeroFilledArrayProvider from 'ui/vislib/components/zero_injection/zero_filled_array'; +import VislibComponentsZeroInjectionZeroFillDataArrayProvider from 'ui/vislib/components/zero_injection/zero_fill_data_array'; define(function (require) { return function ZeroInjectionUtilService(Private) { - var orderXValues = Private(require('ui/vislib/components/zero_injection/ordered_x_keys')); - var createZeroFilledArray = Private(require('ui/vislib/components/zero_injection/zero_filled_array')); - var zeroFillDataArray = Private(require('ui/vislib/components/zero_injection/zero_fill_data_array')); + var orderXValues = Private(VislibComponentsZeroInjectionOrderedXKeysProvider); + var createZeroFilledArray = Private(VislibComponentsZeroInjectionZeroFilledArrayProvider); + var zeroFillDataArray = Private(VislibComponentsZeroInjectionZeroFillDataArrayProvider); /* * A Kibana data object may have multiple series with different array lengths. diff --git a/src/ui/public/vislib/components/zero_injection/ordered_x_keys.js b/src/ui/public/vislib/components/zero_injection/ordered_x_keys.js index 9d42cd7152366b..b42cbb5e24d837 100644 --- a/src/ui/public/vislib/components/zero_injection/ordered_x_keys.js +++ b/src/ui/public/vislib/components/zero_injection/ordered_x_keys.js @@ -1,8 +1,9 @@ import _ from 'lodash'; import moment from 'moment'; +import VislibComponentsZeroInjectionUniqKeysProvider from 'ui/vislib/components/zero_injection/uniq_keys'; define(function (require) { return function OrderedXKeysUtilService(Private) { - var getUniqKeys = Private(require('ui/vislib/components/zero_injection/uniq_keys')); + var getUniqKeys = Private(VislibComponentsZeroInjectionUniqKeysProvider); /* * Accepts a Kibana data object and returns diff --git a/src/ui/public/vislib/components/zero_injection/uniq_keys.js b/src/ui/public/vislib/components/zero_injection/uniq_keys.js index 6133b6a3c8f699..916b58884b3d43 100644 --- a/src/ui/public/vislib/components/zero_injection/uniq_keys.js +++ b/src/ui/public/vislib/components/zero_injection/uniq_keys.js @@ -1,8 +1,9 @@ import _ from 'lodash'; +import VislibComponentsZeroInjectionFlattenDataProvider from 'ui/vislib/components/zero_injection/flatten_data'; define(function (require) { return function UniqueXValuesUtilService(Private) { - var flattenDataArray = Private(require('ui/vislib/components/zero_injection/flatten_data')); + var flattenDataArray = Private(VislibComponentsZeroInjectionFlattenDataProvider); /* * Accepts a Kibana data object. diff --git a/src/ui/public/vislib/lib/axis_title.js b/src/ui/public/vislib/lib/axis_title.js index 2cc4f5edbe7a21..b8293cf7d71a5f 100644 --- a/src/ui/public/vislib/lib/axis_title.js +++ b/src/ui/public/vislib/lib/axis_title.js @@ -1,10 +1,11 @@ import d3 from 'd3'; import $ from 'jquery'; import _ from 'lodash'; +import VislibLibErrorHandlerProvider from 'ui/vislib/lib/_error_handler'; define(function (require) { return function AxisTitleFactory(Private) { - var ErrorHandler = Private(require('ui/vislib/lib/_error_handler')); + var ErrorHandler = Private(VislibLibErrorHandlerProvider); /** * Appends axis title(s) to the visualization diff --git a/src/ui/public/vislib/lib/chart_title.js b/src/ui/public/vislib/lib/chart_title.js index 3d4911ebed1edb..ed912505b4d18d 100644 --- a/src/ui/public/vislib/lib/chart_title.js +++ b/src/ui/public/vislib/lib/chart_title.js @@ -1,11 +1,13 @@ import d3 from 'd3'; import $ from 'jquery'; import _ from 'lodash'; +import VislibLibErrorHandlerProvider from 'ui/vislib/lib/_error_handler'; +import VislibComponentsTooltipProvider from 'ui/vislib/components/Tooltip'; define(function (require) { return function ChartTitleFactory(Private) { - var ErrorHandler = Private(require('ui/vislib/lib/_error_handler')); - var Tooltip = Private(require('ui/vislib/components/Tooltip')); + var ErrorHandler = Private(VislibLibErrorHandlerProvider); + var Tooltip = Private(VislibComponentsTooltipProvider); /** * Appends chart titles to the visualization diff --git a/src/ui/public/vislib/lib/data.js b/src/ui/public/vislib/lib/data.js index 5092ea12056188..1c57e8c0c037de 100644 --- a/src/ui/public/vislib/lib/data.js +++ b/src/ui/public/vislib/lib/data.js @@ -1,13 +1,17 @@ import d3 from 'd3'; import _ from 'lodash'; import errors from 'ui/errors'; +import VislibComponentsZeroInjectionInjectZerosProvider from 'ui/vislib/components/zero_injection/inject_zeros'; +import VislibComponentsZeroInjectionOrderedXKeysProvider from 'ui/vislib/components/zero_injection/ordered_x_keys'; +import VislibComponentsLabelsLabelsProvider from 'ui/vislib/components/labels/labels'; +import VislibComponentsColorColorProvider from 'ui/vislib/components/color/color'; define(function (require) { return function DataFactory(Private) { - var injectZeros = Private(require('ui/vislib/components/zero_injection/inject_zeros')); - var orderKeys = Private(require('ui/vislib/components/zero_injection/ordered_x_keys')); - var getLabels = Private(require('ui/vislib/components/labels/labels')); - var color = Private(require('ui/vislib/components/color/color')); + var injectZeros = Private(VislibComponentsZeroInjectionInjectZerosProvider); + var orderKeys = Private(VislibComponentsZeroInjectionOrderedXKeysProvider); + var getLabels = Private(VislibComponentsLabelsLabelsProvider); + var color = Private(VislibComponentsColorColorProvider); /** * Provides an API for pulling values off the data diff --git a/src/ui/public/vislib/lib/dispatch.js b/src/ui/public/vislib/lib/dispatch.js index e1148110cacda3..701c9833e3dc8f 100644 --- a/src/ui/public/vislib/lib/dispatch.js +++ b/src/ui/public/vislib/lib/dispatch.js @@ -2,9 +2,10 @@ import d3 from 'd3'; import _ from 'lodash'; import $ from 'jquery'; import SimpleEmitter from 'ui/utils/SimpleEmitter'; +import VislibComponentsTooltipProvider from 'ui/vislib/components/Tooltip'; define(function (require) { return function DispatchClass(Private) { - var Tooltip = Private(require('ui/vislib/components/Tooltip')); + var Tooltip = Private(VislibComponentsTooltipProvider); /** * Handles event responses diff --git a/src/ui/public/vislib/lib/handler/handler.js b/src/ui/public/vislib/lib/handler/handler.js index b6a841888f70d0..1be568d4a7d6d1 100644 --- a/src/ui/public/vislib/lib/handler/handler.js +++ b/src/ui/public/vislib/lib/handler/handler.js @@ -2,11 +2,13 @@ import d3 from 'd3'; import _ from 'lodash'; import errors from 'ui/errors'; import Binder from 'ui/Binder'; +import VislibLibDataProvider from 'ui/vislib/lib/data'; +import VislibLibLayoutLayoutProvider from 'ui/vislib/lib/layout/layout'; define(function (require) { return function HandlerBaseClass(Private) { - var Data = Private(require('ui/vislib/lib/data')); - var Layout = Private(require('ui/vislib/lib/layout/layout')); + var Data = Private(VislibLibDataProvider); + var Layout = Private(VislibLibLayoutLayoutProvider); /** * Handles building all the components of the visualization diff --git a/src/ui/public/vislib/lib/handler/handler_types.js b/src/ui/public/vislib/lib/handler/handler_types.js index 9d9c160285865b..2b6b846440ebb2 100644 --- a/src/ui/public/vislib/lib/handler/handler_types.js +++ b/src/ui/public/vislib/lib/handler/handler_types.js @@ -1,6 +1,10 @@ +import VislibLibHandlerTypesPointSeriesProvider from 'ui/vislib/lib/handler/types/point_series'; +import VislibLibHandlerTypesPieProvider from 'ui/vislib/lib/handler/types/pie'; +import VislibLibHandlerTypesTileMapProvider from 'ui/vislib/lib/handler/types/tile_map'; + define(function (require) { return function HandlerTypeFactory(Private) { - var pointSeries = Private(require('ui/vislib/lib/handler/types/point_series')); + var pointSeries = Private(VislibLibHandlerTypesPointSeriesProvider); /** * Handles the building of each visualization @@ -10,9 +14,9 @@ define(function (require) { return { histogram: pointSeries.column, line: pointSeries.line, - pie: Private(require('ui/vislib/lib/handler/types/pie')), + pie: Private(VislibLibHandlerTypesPieProvider), area: pointSeries.area, - tile_map: Private(require('ui/vislib/lib/handler/types/tile_map')) + tile_map: Private(VislibLibHandlerTypesTileMapProvider) }; }; }); diff --git a/src/ui/public/vislib/lib/handler/types/pie.js b/src/ui/public/vislib/lib/handler/types/pie.js index 09f8d9cc6c65fd..c8731350a9f672 100644 --- a/src/ui/public/vislib/lib/handler/types/pie.js +++ b/src/ui/public/vislib/lib/handler/types/pie.js @@ -1,8 +1,12 @@ +import VislibLibHandlerHandlerProvider from 'ui/vislib/lib/handler/handler'; +import VislibLibDataProvider from 'ui/vislib/lib/data'; +import VislibLibChartTitleProvider from 'ui/vislib/lib/chart_title'; + define(function (require) { return function PieHandler(Private) { - var Handler = Private(require('ui/vislib/lib/handler/handler')); - var Data = Private(require('ui/vislib/lib/data')); - var ChartTitle = Private(require('ui/vislib/lib/chart_title')); + var Handler = Private(VislibLibHandlerHandlerProvider); + var Data = Private(VislibLibDataProvider); + var ChartTitle = Private(VislibLibChartTitleProvider); /* * Handler for Pie visualizations. diff --git a/src/ui/public/vislib/lib/handler/types/point_series.js b/src/ui/public/vislib/lib/handler/types/point_series.js index 69c345ccaefb3f..23ca2bcf1690bf 100644 --- a/src/ui/public/vislib/lib/handler/types/point_series.js +++ b/src/ui/public/vislib/lib/handler/types/point_series.js @@ -1,13 +1,22 @@ +import VislibComponentsZeroInjectionInjectZerosProvider from 'ui/vislib/components/zero_injection/inject_zeros'; +import VislibLibHandlerHandlerProvider from 'ui/vislib/lib/handler/handler'; +import VislibLibDataProvider from 'ui/vislib/lib/data'; +import VislibLibXAxisProvider from 'ui/vislib/lib/x_axis'; +import VislibLibYAxisProvider from 'ui/vislib/lib/y_axis'; +import VislibLibAxisTitleProvider from 'ui/vislib/lib/axis_title'; +import VislibLibChartTitleProvider from 'ui/vislib/lib/chart_title'; +import VislibLibAlertsProvider from 'ui/vislib/lib/alerts'; + define(function (require) { return function ColumnHandler(Private) { - var injectZeros = Private(require('ui/vislib/components/zero_injection/inject_zeros')); - var Handler = Private(require('ui/vislib/lib/handler/handler')); - var Data = Private(require('ui/vislib/lib/data')); - var XAxis = Private(require('ui/vislib/lib/x_axis')); - var YAxis = Private(require('ui/vislib/lib/y_axis')); - var AxisTitle = Private(require('ui/vislib/lib/axis_title')); - var ChartTitle = Private(require('ui/vislib/lib/chart_title')); - var Alerts = Private(require('ui/vislib/lib/alerts')); + var injectZeros = Private(VislibComponentsZeroInjectionInjectZerosProvider); + var Handler = Private(VislibLibHandlerHandlerProvider); + var Data = Private(VislibLibDataProvider); + var XAxis = Private(VislibLibXAxisProvider); + var YAxis = Private(VislibLibYAxisProvider); + var AxisTitle = Private(VislibLibAxisTitleProvider); + var ChartTitle = Private(VislibLibChartTitleProvider); + var Alerts = Private(VislibLibAlertsProvider); /* * Create handlers for Area, Column, and Line charts which diff --git a/src/ui/public/vislib/lib/handler/types/tile_map.js b/src/ui/public/vislib/lib/handler/types/tile_map.js index b1b450175131a6..b6c56f344f4e60 100644 --- a/src/ui/public/vislib/lib/handler/types/tile_map.js +++ b/src/ui/public/vislib/lib/handler/types/tile_map.js @@ -1,9 +1,11 @@ import _ from 'lodash'; +import VislibLibHandlerHandlerProvider from 'ui/vislib/lib/handler/handler'; +import VislibLibDataProvider from 'ui/vislib/lib/data'; define(function (require) { return function MapHandlerProvider(Private) { - var Handler = Private(require('ui/vislib/lib/handler/handler')); - var Data = Private(require('ui/vislib/lib/data')); + var Handler = Private(VislibLibHandlerHandlerProvider); + var Data = Private(VislibLibDataProvider); return function (vis) { var data = new Data(vis.data, vis._attr, vis.uiState); diff --git a/src/ui/public/vislib/lib/layout/layout.js b/src/ui/public/vislib/lib/layout/layout.js index 880cf54937ff21..4a25f178589036 100644 --- a/src/ui/public/vislib/lib/layout/layout.js +++ b/src/ui/public/vislib/lib/layout/layout.js @@ -1,9 +1,10 @@ import d3 from 'd3'; import _ from 'lodash'; +import VislibLibLayoutLayoutTypesProvider from 'ui/vislib/lib/layout/layout_types'; define(function (require) { return function LayoutFactory(Private) { - var layoutType = Private(require('ui/vislib/lib/layout/layout_types')); + var layoutType = Private(VislibLibLayoutLayoutTypesProvider); /** * Builds the visualization DOM layout diff --git a/src/ui/public/vislib/lib/layout/layout_types.js b/src/ui/public/vislib/lib/layout/layout_types.js index ccaa776c4fe9a4..c84b2c7f4942fe 100644 --- a/src/ui/public/vislib/lib/layout/layout_types.js +++ b/src/ui/public/vislib/lib/layout/layout_types.js @@ -1,3 +1,7 @@ +import VislibLibLayoutTypesColumnLayoutProvider from 'ui/vislib/lib/layout/types/column_layout'; +import VislibLibLayoutTypesPieLayoutProvider from 'ui/vislib/lib/layout/types/pie_layout'; +import VislibLibLayoutTypesMapLayoutProvider from 'ui/vislib/lib/layout/types/map_layout'; + define(function (require) { return function LayoutTypeFactory(Private) { @@ -10,11 +14,11 @@ define(function (require) { * @return {Function} Returns an Object of HTML layouts for each visualization class */ return { - histogram: Private(require('ui/vislib/lib/layout/types/column_layout')), - line: Private(require('ui/vislib/lib/layout/types/column_layout')), - area: Private(require('ui/vislib/lib/layout/types/column_layout')), - pie: Private(require('ui/vislib/lib/layout/types/pie_layout')), - tile_map: Private(require('ui/vislib/lib/layout/types/map_layout')) + histogram: Private(VislibLibLayoutTypesColumnLayoutProvider), + line: Private(VislibLibLayoutTypesColumnLayoutProvider), + area: Private(VislibLibLayoutTypesColumnLayoutProvider), + pie: Private(VislibLibLayoutTypesPieLayoutProvider), + tile_map: Private(VislibLibLayoutTypesMapLayoutProvider) }; }; }); diff --git a/src/ui/public/vislib/lib/layout/types/column_layout.js b/src/ui/public/vislib/lib/layout/types/column_layout.js index 88f68b7475839d..3c8c2b32ccc868 100644 --- a/src/ui/public/vislib/lib/layout/types/column_layout.js +++ b/src/ui/public/vislib/lib/layout/types/column_layout.js @@ -1,11 +1,15 @@ import d3 from 'd3'; +import VislibLibLayoutSplitsColumnChartChartSplitProvider from 'ui/vislib/lib/layout/splits/column_chart/chart_split'; +import VislibLibLayoutSplitsColumnChartYAxisSplitProvider from 'ui/vislib/lib/layout/splits/column_chart/y_axis_split'; +import VislibLibLayoutSplitsColumnChartXAxisSplitProvider from 'ui/vislib/lib/layout/splits/column_chart/x_axis_split'; +import VislibLibLayoutSplitsColumnChartChartTitleSplitProvider from 'ui/vislib/lib/layout/splits/column_chart/chart_title_split'; define(function (require) { return function ColumnLayoutFactory(Private) { - var chartSplit = Private(require('ui/vislib/lib/layout/splits/column_chart/chart_split')); - var yAxisSplit = Private(require('ui/vislib/lib/layout/splits/column_chart/y_axis_split')); - var xAxisSplit = Private(require('ui/vislib/lib/layout/splits/column_chart/x_axis_split')); - var chartTitleSplit = Private(require('ui/vislib/lib/layout/splits/column_chart/chart_title_split')); + var chartSplit = Private(VislibLibLayoutSplitsColumnChartChartSplitProvider); + var yAxisSplit = Private(VislibLibLayoutSplitsColumnChartYAxisSplitProvider); + var xAxisSplit = Private(VislibLibLayoutSplitsColumnChartXAxisSplitProvider); + var chartTitleSplit = Private(VislibLibLayoutSplitsColumnChartChartTitleSplitProvider); /** * Specifies the visualization layout for column charts. diff --git a/src/ui/public/vislib/lib/layout/types/map_layout.js b/src/ui/public/vislib/lib/layout/types/map_layout.js index e024a4655c7e3c..28d7202072d0ba 100644 --- a/src/ui/public/vislib/lib/layout/types/map_layout.js +++ b/src/ui/public/vislib/lib/layout/types/map_layout.js @@ -1,7 +1,8 @@ import d3 from 'd3'; +import VislibLibLayoutSplitsTileMapMapSplitProvider from 'ui/vislib/lib/layout/splits/tile_map/map_split'; define(function (require) { return function ColumnLayoutFactory(Private) { - var mapSplit = Private(require('ui/vislib/lib/layout/splits/tile_map/map_split')); + var mapSplit = Private(VislibLibLayoutSplitsTileMapMapSplitProvider); /* * Specifies the visualization layout for tile maps. diff --git a/src/ui/public/vislib/lib/layout/types/pie_layout.js b/src/ui/public/vislib/lib/layout/types/pie_layout.js index cd6cc61f83b673..7511bb1ba39954 100644 --- a/src/ui/public/vislib/lib/layout/types/pie_layout.js +++ b/src/ui/public/vislib/lib/layout/types/pie_layout.js @@ -1,8 +1,10 @@ import d3 from 'd3'; +import VislibLibLayoutSplitsPieChartChartSplitProvider from 'ui/vislib/lib/layout/splits/pie_chart/chart_split'; +import VislibLibLayoutSplitsPieChartChartTitleSplitProvider from 'ui/vislib/lib/layout/splits/pie_chart/chart_title_split'; define(function (require) { return function ColumnLayoutFactory(Private) { - var chartSplit = Private(require('ui/vislib/lib/layout/splits/pie_chart/chart_split')); - var chartTitleSplit = Private(require('ui/vislib/lib/layout/splits/pie_chart/chart_title_split')); + var chartSplit = Private(VislibLibLayoutSplitsPieChartChartSplitProvider); + var chartTitleSplit = Private(VislibLibLayoutSplitsPieChartChartTitleSplitProvider); /** * Specifies the visualization layout for column charts. diff --git a/src/ui/public/vislib/lib/resize_checker.js b/src/ui/public/vislib/lib/resize_checker.js index 845b6e4cdb3739..7170ceb99de9f6 100644 --- a/src/ui/public/vislib/lib/resize_checker.js +++ b/src/ui/public/vislib/lib/resize_checker.js @@ -1,11 +1,13 @@ import $ from 'jquery'; import _ from 'lodash'; import sequencer from 'ui/utils/sequencer'; +import EventsProvider from 'ui/events'; +import ReflowWatcherProvider from 'ui/reflow_watcher'; define(function (require) { return function ResizeCheckerFactory(Private, Notifier, $rootScope) { - var EventEmitter = Private(require('ui/events')); - var reflowWatcher = Private(require('ui/reflow_watcher')); + var EventEmitter = Private(EventsProvider); + var reflowWatcher = Private(ReflowWatcherProvider); var SCHEDULE = ResizeChecker.SCHEDULE = sequencer.createEaseIn( 100, // shortest delay diff --git a/src/ui/public/vislib/lib/x_axis.js b/src/ui/public/vislib/lib/x_axis.js index 42802c7981b509..773b41486c9932 100644 --- a/src/ui/public/vislib/lib/x_axis.js +++ b/src/ui/public/vislib/lib/x_axis.js @@ -2,10 +2,11 @@ import d3 from 'd3'; import $ from 'jquery'; import _ from 'lodash'; import moment from 'moment'; +import VislibLibErrorHandlerProvider from 'ui/vislib/lib/_error_handler'; define(function (require) { return function XAxisFactory(Private) { - var ErrorHandler = Private(require('ui/vislib/lib/_error_handler')); + var ErrorHandler = Private(VislibLibErrorHandlerProvider); /** * Adds an x axis to the visualization diff --git a/src/ui/public/vislib/lib/y_axis.js b/src/ui/public/vislib/lib/y_axis.js index cb493012cd76cc..391fb7b78554d2 100644 --- a/src/ui/public/vislib/lib/y_axis.js +++ b/src/ui/public/vislib/lib/y_axis.js @@ -2,10 +2,11 @@ import d3 from 'd3'; import _ from 'lodash'; import $ from 'jquery'; import errors from 'ui/errors'; +import VislibLibErrorHandlerProvider from 'ui/vislib/lib/_error_handler'; define(function (require) { return function YAxisFactory(Private) { - var ErrorHandler = Private(require('ui/vislib/lib/_error_handler')); + var ErrorHandler = Private(VislibLibErrorHandlerProvider); /** * Appends y axis to the visualization diff --git a/src/ui/public/vislib/vis.js b/src/ui/public/vislib/vis.js index 73229ec76a5aad..1bf820ea9efb0c 100644 --- a/src/ui/public/vislib/vis.js +++ b/src/ui/public/vislib/vis.js @@ -3,14 +3,18 @@ import d3 from 'd3'; import Binder from 'ui/Binder'; import errors from 'ui/errors'; import 'ui/vislib/styles/main.less'; +import VislibLibResizeCheckerProvider from 'ui/vislib/lib/resize_checker'; +import EventsProvider from 'ui/events'; +import VislibLibHandlerHandlerTypesProvider from 'ui/vislib/lib/handler/handler_types'; +import VislibVisualizationsVisTypesProvider from 'ui/vislib/visualizations/vis_types'; define(function (require) { return function VisFactory(Private) { - var ResizeChecker = Private(require('ui/vislib/lib/resize_checker')); - var Events = Private(require('ui/events')); - var handlerTypes = Private(require('ui/vislib/lib/handler/handler_types')); - var chartTypes = Private(require('ui/vislib/visualizations/vis_types')); + var ResizeChecker = Private(VislibLibResizeCheckerProvider); + var Events = Private(EventsProvider); + var handlerTypes = Private(VislibLibHandlerHandlerTypesProvider); + var chartTypes = Private(VislibVisualizationsVisTypesProvider); /** * Creates the visualizations. diff --git a/src/ui/public/vislib/vislib.js b/src/ui/public/vislib/vislib.js index bb8e274efc4682..5f7a7ebd711003 100644 --- a/src/ui/public/vislib/vislib.js +++ b/src/ui/public/vislib/vislib.js @@ -7,6 +7,7 @@ import 'ui/vislib/lib/data'; import 'ui/vislib/visualizations/_map.js'; import 'ui/vislib/visualizations/vis_types'; import 'ui/vislib/styles/main.less'; +import VislibVisProvider from 'ui/vislib/vis'; // prefetched for faster optimization runs // end prefetching @@ -21,6 +22,6 @@ module.exports = function VislibProvider(Private) { return { version: '0.0.0', - Vis: Private(require('ui/vislib/vis')) + Vis: Private(VislibVisProvider) }; }; diff --git a/src/ui/public/vislib/visualizations/_chart.js b/src/ui/public/vislib/visualizations/_chart.js index a45e54eaaba50f..c900bae269e2aa 100644 --- a/src/ui/public/vislib/visualizations/_chart.js +++ b/src/ui/public/vislib/visualizations/_chart.js @@ -2,11 +2,13 @@ import d3 from 'd3'; import _ from 'lodash'; import errors from 'ui/errors'; import dataLabel from 'ui/vislib/lib/_data_label'; +import VislibLibDispatchProvider from 'ui/vislib/lib/dispatch'; +import VislibComponentsTooltipProvider from 'ui/vislib/components/Tooltip'; define(function (require) { return function ChartBaseClass(Private) { - var Dispatch = Private(require('ui/vislib/lib/dispatch')); - var Tooltip = Private(require('ui/vislib/components/Tooltip')); + var Dispatch = Private(VislibLibDispatchProvider); + var Tooltip = Private(VislibComponentsTooltipProvider); /** * The Base Class for all visualizations. diff --git a/src/ui/public/vislib/visualizations/_map.js b/src/ui/public/vislib/visualizations/_map.js index 9c4a70ae7ba1af..b4bfe41ad37790 100644 --- a/src/ui/public/vislib/visualizations/_map.js +++ b/src/ui/public/vislib/visualizations/_map.js @@ -1,6 +1,10 @@ import _ from 'lodash'; import $ from 'jquery'; import L from 'leaflet'; +import VislibVisualizationsMarkerTypesScaledCirclesProvider from 'ui/vislib/visualizations/marker_types/scaled_circles'; +import VislibVisualizationsMarkerTypesShadedCirclesProvider from 'ui/vislib/visualizations/marker_types/shaded_circles'; +import VislibVisualizationsMarkerTypesGeohashGridProvider from 'ui/vislib/visualizations/marker_types/geohash_grid'; +import VislibVisualizationsMarkerTypesHeatmapProvider from 'ui/vislib/visualizations/marker_types/heatmap'; define(function (require) { return function MapFactory(Private) { @@ -19,10 +23,10 @@ define(function (require) { }; var markerTypes = { - 'Scaled Circle Markers': Private(require('ui/vislib/visualizations/marker_types/scaled_circles')), - 'Shaded Circle Markers': Private(require('ui/vislib/visualizations/marker_types/shaded_circles')), - 'Shaded Geohash Grid': Private(require('ui/vislib/visualizations/marker_types/geohash_grid')), - 'Heatmap': Private(require('ui/vislib/visualizations/marker_types/heatmap')), + 'Scaled Circle Markers': Private(VislibVisualizationsMarkerTypesScaledCirclesProvider), + 'Shaded Circle Markers': Private(VislibVisualizationsMarkerTypesShadedCirclesProvider), + 'Shaded Geohash Grid': Private(VislibVisualizationsMarkerTypesGeohashGridProvider), + 'Heatmap': Private(VislibVisualizationsMarkerTypesHeatmapProvider), }; /** diff --git a/src/ui/public/vislib/visualizations/_point_series_chart.js b/src/ui/public/vislib/visualizations/_point_series_chart.js index 0460cb8bd3981a..753668e29d2671 100644 --- a/src/ui/public/vislib/visualizations/_point_series_chart.js +++ b/src/ui/public/vislib/visualizations/_point_series_chart.js @@ -1,10 +1,12 @@ import d3 from 'd3'; import _ from 'lodash'; +import VislibVisualizationsChartProvider from 'ui/vislib/visualizations/_chart'; +import VislibComponentsTooltipProvider from 'ui/vislib/components/Tooltip'; define(function (require) { return function PointSeriesChartProvider(Private) { - var Chart = Private(require('ui/vislib/visualizations/_chart')); - var Tooltip = Private(require('ui/vislib/components/Tooltip')); + var Chart = Private(VislibVisualizationsChartProvider); + var Tooltip = Private(VislibComponentsTooltipProvider); var touchdownTmpl = _.template(require('ui/vislib/partials/touchdown.tmpl.html')); _.class(PointSeriesChart).inherits(Chart); diff --git a/src/ui/public/vislib/visualizations/area_chart.js b/src/ui/public/vislib/visualizations/area_chart.js index 035056495671f6..fef86f56123c69 100644 --- a/src/ui/public/vislib/visualizations/area_chart.js +++ b/src/ui/public/vislib/visualizations/area_chart.js @@ -2,11 +2,13 @@ import d3 from 'd3'; import _ from 'lodash'; import $ from 'jquery'; import errors from 'ui/errors'; +import VislibVisualizationsPointSeriesChartProvider from 'ui/vislib/visualizations/_point_series_chart'; +import VislibVisualizationsTimeMarkerProvider from 'ui/vislib/visualizations/time_marker'; define(function (require) { return function AreaChartFactory(Private) { - var PointSeriesChart = Private(require('ui/vislib/visualizations/_point_series_chart')); - var TimeMarker = Private(require('ui/vislib/visualizations/time_marker')); + var PointSeriesChart = Private(VislibVisualizationsPointSeriesChartProvider); + var TimeMarker = Private(VislibVisualizationsTimeMarkerProvider); /** * Area chart visualization diff --git a/src/ui/public/vislib/visualizations/column_chart.js b/src/ui/public/vislib/visualizations/column_chart.js index 475e158e974514..787361be6b3d09 100644 --- a/src/ui/public/vislib/visualizations/column_chart.js +++ b/src/ui/public/vislib/visualizations/column_chart.js @@ -3,13 +3,16 @@ import _ from 'lodash'; import $ from 'jquery'; import moment from 'moment'; import errors from 'ui/errors'; +import VislibLibDataProvider from 'ui/vislib/lib/data'; +import VislibVisualizationsPointSeriesChartProvider from 'ui/vislib/visualizations/_point_series_chart'; +import VislibVisualizationsTimeMarkerProvider from 'ui/vislib/visualizations/time_marker'; define(function (require) { return function ColumnChartFactory(Private) { - var DataClass = Private(require('ui/vislib/lib/data')); + var DataClass = Private(VislibLibDataProvider); - var PointSeriesChart = Private(require('ui/vislib/visualizations/_point_series_chart')); - var TimeMarker = Private(require('ui/vislib/visualizations/time_marker')); + var PointSeriesChart = Private(VislibVisualizationsPointSeriesChartProvider); + var TimeMarker = Private(VislibVisualizationsTimeMarkerProvider); /** * Vertical Bar Chart Visualization: renders vertical and/or stacked bars diff --git a/src/ui/public/vislib/visualizations/line_chart.js b/src/ui/public/vislib/visualizations/line_chart.js index 008b11c61490a7..46bee4c4868742 100644 --- a/src/ui/public/vislib/visualizations/line_chart.js +++ b/src/ui/public/vislib/visualizations/line_chart.js @@ -2,11 +2,13 @@ import d3 from 'd3'; import _ from 'lodash'; import $ from 'jquery'; import errors from 'ui/errors'; +import VislibVisualizationsPointSeriesChartProvider from 'ui/vislib/visualizations/_point_series_chart'; +import VislibVisualizationsTimeMarkerProvider from 'ui/vislib/visualizations/time_marker'; define(function (require) { return function LineChartFactory(Private) { - var PointSeriesChart = Private(require('ui/vislib/visualizations/_point_series_chart')); - var TimeMarker = Private(require('ui/vislib/visualizations/time_marker')); + var PointSeriesChart = Private(VislibVisualizationsPointSeriesChartProvider); + var TimeMarker = Private(VislibVisualizationsTimeMarkerProvider); /** * Line Chart Visualization diff --git a/src/ui/public/vislib/visualizations/marker_types/geohash_grid.js b/src/ui/public/vislib/visualizations/marker_types/geohash_grid.js index 47ab65fe7240f5..7bde4c00f39f02 100644 --- a/src/ui/public/vislib/visualizations/marker_types/geohash_grid.js +++ b/src/ui/public/vislib/visualizations/marker_types/geohash_grid.js @@ -1,9 +1,10 @@ import _ from 'lodash'; import L from 'leaflet'; +import VislibVisualizationsMarkerTypesBaseMarkerProvider from 'ui/vislib/visualizations/marker_types/base_marker'; define(function (require) { return function GeohashGridMarkerFactory(Private) { - var BaseMarker = Private(require('ui/vislib/visualizations/marker_types/base_marker')); + var BaseMarker = Private(VislibVisualizationsMarkerTypesBaseMarkerProvider); /** * Map overlay: rectangles that show the geohash grid bounds diff --git a/src/ui/public/vislib/visualizations/marker_types/heatmap.js b/src/ui/public/vislib/visualizations/marker_types/heatmap.js index 82728064a9c948..727eb91cc6b92c 100644 --- a/src/ui/public/vislib/visualizations/marker_types/heatmap.js +++ b/src/ui/public/vislib/visualizations/marker_types/heatmap.js @@ -1,10 +1,11 @@ import d3 from 'd3'; import _ from 'lodash'; import L from 'leaflet'; +import VislibVisualizationsMarkerTypesBaseMarkerProvider from 'ui/vislib/visualizations/marker_types/base_marker'; define(function (require) { return function HeatmapMarkerFactory(Private) { - var BaseMarker = Private(require('ui/vislib/visualizations/marker_types/base_marker')); + var BaseMarker = Private(VislibVisualizationsMarkerTypesBaseMarkerProvider); /** * Map overlay: canvas layer with leaflet.heat plugin diff --git a/src/ui/public/vislib/visualizations/marker_types/scaled_circles.js b/src/ui/public/vislib/visualizations/marker_types/scaled_circles.js index e483df074d9ae5..8561047e3b0f4a 100644 --- a/src/ui/public/vislib/visualizations/marker_types/scaled_circles.js +++ b/src/ui/public/vislib/visualizations/marker_types/scaled_circles.js @@ -1,9 +1,10 @@ import _ from 'lodash'; import L from 'leaflet'; +import VislibVisualizationsMarkerTypesBaseMarkerProvider from 'ui/vislib/visualizations/marker_types/base_marker'; define(function (require) { return function ScaledCircleMarkerFactory(Private) { - var BaseMarker = Private(require('ui/vislib/visualizations/marker_types/base_marker')); + var BaseMarker = Private(VislibVisualizationsMarkerTypesBaseMarkerProvider); /** * Map overlay: circle markers that are scaled to illustrate values diff --git a/src/ui/public/vislib/visualizations/marker_types/shaded_circles.js b/src/ui/public/vislib/visualizations/marker_types/shaded_circles.js index 5fa57ae8273352..4068467b76371a 100644 --- a/src/ui/public/vislib/visualizations/marker_types/shaded_circles.js +++ b/src/ui/public/vislib/visualizations/marker_types/shaded_circles.js @@ -1,9 +1,10 @@ import _ from 'lodash'; import L from 'leaflet'; +import VislibVisualizationsMarkerTypesBaseMarkerProvider from 'ui/vislib/visualizations/marker_types/base_marker'; define(function (require) { return function ShadedCircleMarkerFactory(Private) { - var BaseMarker = Private(require('ui/vislib/visualizations/marker_types/base_marker')); + var BaseMarker = Private(VislibVisualizationsMarkerTypesBaseMarkerProvider); /** * Map overlay: circle markers that are shaded to illustrate values diff --git a/src/ui/public/vislib/visualizations/pie_chart.js b/src/ui/public/vislib/visualizations/pie_chart.js index 8186cae3c13c2f..83472a3681538c 100644 --- a/src/ui/public/vislib/visualizations/pie_chart.js +++ b/src/ui/public/vislib/visualizations/pie_chart.js @@ -2,10 +2,11 @@ import d3 from 'd3'; import _ from 'lodash'; import $ from 'jquery'; import errors from 'ui/errors'; +import VislibVisualizationsChartProvider from 'ui/vislib/visualizations/_chart'; define(function (require) { return function PieChartFactory(Private) { - var Chart = Private(require('ui/vislib/visualizations/_chart')); + var Chart = Private(VislibVisualizationsChartProvider); /** * Pie Chart Visualization diff --git a/src/ui/public/vislib/visualizations/tile_map.js b/src/ui/public/vislib/visualizations/tile_map.js index fbe039d4ffca15..06139aad00a00f 100644 --- a/src/ui/public/vislib/visualizations/tile_map.js +++ b/src/ui/public/vislib/visualizations/tile_map.js @@ -1,11 +1,13 @@ import d3 from 'd3'; import _ from 'lodash'; import $ from 'jquery'; +import VislibVisualizationsChartProvider from 'ui/vislib/visualizations/_chart'; +import VislibVisualizationsMapProvider from 'ui/vislib/visualizations/_map'; define(function (require) { return function TileMapFactory(Private) { - var Chart = Private(require('ui/vislib/visualizations/_chart')); - var TileMapMap = Private(require('ui/vislib/visualizations/_map')); + var Chart = Private(VislibVisualizationsChartProvider); + var TileMapMap = Private(VislibVisualizationsMapProvider); /** * Tile Map Visualization: renders maps diff --git a/src/ui/public/vislib/visualizations/vis_types.js b/src/ui/public/vislib/visualizations/vis_types.js index cc238529043049..080fc14fd1b856 100644 --- a/src/ui/public/vislib/visualizations/vis_types.js +++ b/src/ui/public/vislib/visualizations/vis_types.js @@ -1,3 +1,9 @@ +import VislibVisualizationsColumnChartProvider from 'ui/vislib/visualizations/column_chart'; +import VislibVisualizationsPieChartProvider from 'ui/vislib/visualizations/pie_chart'; +import VislibVisualizationsLineChartProvider from 'ui/vislib/visualizations/line_chart'; +import VislibVisualizationsAreaChartProvider from 'ui/vislib/visualizations/area_chart'; +import VislibVisualizationsTileMapProvider from 'ui/vislib/visualizations/tile_map'; + define(function (require) { return function VisTypeFactory(Private) { @@ -10,11 +16,11 @@ define(function (require) { * @return {Function} Returns an Object of Visualization classes */ return { - histogram: Private(require('ui/vislib/visualizations/column_chart')), - pie: Private(require('ui/vislib/visualizations/pie_chart')), - line: Private(require('ui/vislib/visualizations/line_chart')), - area: Private(require('ui/vislib/visualizations/area_chart')), - tile_map: Private(require('ui/vislib/visualizations/tile_map')) + histogram: Private(VislibVisualizationsColumnChartProvider), + pie: Private(VislibVisualizationsPieChartProvider), + line: Private(VislibVisualizationsLineChartProvider), + area: Private(VislibVisualizationsAreaChartProvider), + tile_map: Private(VislibVisualizationsTileMapProvider) }; }; }); diff --git a/src/ui/public/vislib_vis_type/VislibRenderbot.js b/src/ui/public/vislib_vis_type/VislibRenderbot.js index 1e8bf19760ac85..59e949a3aaa18b 100644 --- a/src/ui/public/vislib_vis_type/VislibRenderbot.js +++ b/src/ui/public/vislib_vis_type/VislibRenderbot.js @@ -1,8 +1,11 @@ import _ from 'lodash'; +import VislibProvider from 'ui/vislib'; +import VisRenderbotProvider from 'ui/Vis/Renderbot'; +import VislibVisTypeBuildChartDataProvider from 'ui/vislib_vis_type/buildChartData'; module.exports = function VislibRenderbotFactory(Private) { - var vislib = Private(require('ui/vislib')); - var Renderbot = Private(require('ui/Vis/Renderbot')); - var buildChartData = Private(require('ui/vislib_vis_type/buildChartData')); + var vislib = Private(VislibProvider); + var Renderbot = Private(VisRenderbotProvider); + var buildChartData = Private(VislibVisTypeBuildChartDataProvider); _.class(VislibRenderbot).inherits(Renderbot); function VislibRenderbot(vis, $el, uiState) { diff --git a/src/ui/public/vislib_vis_type/VislibVisType.js b/src/ui/public/vislib_vis_type/VislibVisType.js index b6f7b927e0542f..3745d4aae94227 100644 --- a/src/ui/public/vislib_vis_type/VislibVisType.js +++ b/src/ui/public/vislib_vis_type/VislibVisType.js @@ -3,13 +3,17 @@ import 'ui/vislib'; import 'plugins/kbn_vislib_vis_types/controls/vislib_basic_options'; import 'plugins/kbn_vislib_vis_types/controls/point_series_options'; import 'plugins/kbn_vislib_vis_types/controls/line_interpolation_option'; +import VisSchemasProvider from 'ui/Vis/Schemas'; +import VisVisTypeProvider from 'ui/Vis/VisType'; +import AggResponsePointSeriesPointSeriesProvider from 'ui/agg_response/point_series/point_series'; +import VislibVisTypeVislibRenderbotProvider from 'ui/vislib_vis_type/VislibRenderbot'; define(function (require) { return function VislibVisTypeFactory(Private) { - var VisTypeSchemas = Private(require('ui/Vis/Schemas')); - var VisType = Private(require('ui/Vis/VisType')); - var pointSeries = Private(require('ui/agg_response/point_series/point_series')); - var VislibRenderbot = Private(require('ui/vislib_vis_type/VislibRenderbot')); + var VisTypeSchemas = Private(VisSchemasProvider); + var VisType = Private(VisVisTypeProvider); + var pointSeries = Private(AggResponsePointSeriesPointSeriesProvider); + var VislibRenderbot = Private(VislibVisTypeVislibRenderbotProvider); _.class(VislibVisType).inherits(VisType); diff --git a/src/ui/public/vislib_vis_type/__tests__/_VislibRenderbot.js b/src/ui/public/vislib_vis_type/__tests__/_VislibRenderbot.js index 4f2696e2e4848b..09d5899113ff46 100644 --- a/src/ui/public/vislib_vis_type/__tests__/_VislibRenderbot.js +++ b/src/ui/public/vislib_vis_type/__tests__/_VislibRenderbot.js @@ -3,6 +3,12 @@ import $ from 'jquery'; import ngMock from 'ngMock'; import expect from 'expect.js'; import sinon from 'auto-release-sinon'; +import VislibProvider from 'ui/vislib'; +import VislibVisProvider from 'ui/vislib/vis'; +import VisRenderbotProvider from 'ui/Vis/Renderbot'; +import VislibVisTypeVislibRenderbotProvider from 'ui/vislib_vis_type/VislibRenderbot'; +import PersistedStatePersistedStateProvider from 'ui/persisted_state/persisted_state'; +import AggResponseIndexProvider from 'ui/agg_response/index'; describe('renderbot', function exportWrapper() { var vislib; var Vis; @@ -18,12 +24,12 @@ describe('renderbot', function exportWrapper() { ngMock.module('kibana'); ngMock.inject(function ($injector, Private) { - vislib = Private(require('ui/vislib')); - Vis = Private(require('ui/vislib/vis')); - Renderbot = Private(require('ui/Vis/Renderbot')); - VislibRenderbot = Private(require('ui/vislib_vis_type/VislibRenderbot')); - persistedState = new (Private(require('ui/persisted_state/persisted_state')))(); - normalizeChartData = Private(require('ui/agg_response/index')); + vislib = Private(VislibProvider); + Vis = Private(VislibVisProvider); + Renderbot = Private(VisRenderbotProvider); + VislibRenderbot = Private(VislibVisTypeVislibRenderbotProvider); + persistedState = new (Private(PersistedStatePersistedStateProvider))(); + normalizeChartData = Private(AggResponseIndexProvider); }); } diff --git a/src/ui/public/vislib_vis_type/__tests__/_buildChartData.js b/src/ui/public/vislib_vis_type/__tests__/_buildChartData.js index f9ca1a299b9ca0..7d31365e35a7b5 100644 --- a/src/ui/public/vislib_vis_type/__tests__/_buildChartData.js +++ b/src/ui/public/vislib_vis_type/__tests__/_buildChartData.js @@ -2,6 +2,10 @@ import _ from 'lodash'; import ngMock from 'ngMock'; import expect from 'expect.js'; import sinon from 'auto-release-sinon'; +import AggResponseTabifyTableProvider from 'ui/agg_response/tabify/_table'; +import AggResponseTabifyTableGroupProvider from 'ui/agg_response/tabify/_table_group'; +import AggResponseIndexProvider from 'ui/agg_response/index'; +import VislibVisTypeBuildChartDataProvider from 'ui/vislib_vis_type/buildChartData'; describe('renderbot#buildChartData', function () { var buildChartData; @@ -11,10 +15,10 @@ describe('renderbot#buildChartData', function () { beforeEach(ngMock.module('kibana')); beforeEach(ngMock.inject(function (Private) { - Table = Private(require('ui/agg_response/tabify/_table')); - TableGroup = Private(require('ui/agg_response/tabify/_table_group')); - aggResponse = Private(require('ui/agg_response/index')); - buildChartData = Private(require('ui/vislib_vis_type/buildChartData')); + Table = Private(AggResponseTabifyTableProvider); + TableGroup = Private(AggResponseTabifyTableGroupProvider); + aggResponse = Private(AggResponseIndexProvider); + buildChartData = Private(VislibVisTypeBuildChartDataProvider); })); describe('for hierarchical vis', function () { diff --git a/src/ui/public/vislib_vis_type/buildChartData.js b/src/ui/public/vislib_vis_type/buildChartData.js index 29f956f9e9693c..fc775db809e9a6 100644 --- a/src/ui/public/vislib_vis_type/buildChartData.js +++ b/src/ui/public/vislib_vis_type/buildChartData.js @@ -1,7 +1,10 @@ +import AggResponseIndexProvider from 'ui/agg_response/index'; +import AggResponseTabifyTableProvider from 'ui/agg_response/tabify/_table'; + define(function (require) { return function VislibVisBuildChartData(Private) { - var aggResponse = Private(require('ui/agg_response/index')); - var Table = Private(require('ui/agg_response/tabify/_table')); + var aggResponse = Private(AggResponseIndexProvider); + var Table = Private(AggResponseTabifyTableProvider); return function (esResponse) { var vis = this.vis; diff --git a/src/ui/public/visualize/spy.js b/src/ui/public/visualize/spy.js index b35f1918a3297e..b2f80f7ac1daa9 100644 --- a/src/ui/public/visualize/spy.js +++ b/src/ui/public/visualize/spy.js @@ -1,11 +1,12 @@ import $ from 'jquery'; import _ from 'lodash'; +import RegistrySpyModesProvider from 'ui/registry/spy_modes'; define(function (require) { require('ui/modules') .get('app/visualize') .directive('visualizeSpy', function (Private, $compile) { - var spyModes = Private(require('ui/registry/spy_modes')); + var spyModes = Private(RegistrySpyModesProvider); var defaultMode = spyModes.inOrder[0].name; return { diff --git a/src/ui/public/visualize/visualize.js b/src/ui/public/visualize/visualize.js index af81179196cf77..a8930cf3fdc925 100644 --- a/src/ui/public/visualize/visualize.js +++ b/src/ui/public/visualize/visualize.js @@ -3,13 +3,14 @@ import 'ui/visualize/visualize.less'; import 'ui/visualize/visualize_legend'; import $ from 'jquery'; import _ from 'lodash'; +import RegistryVisTypesProvider from 'ui/registry/vis_types'; define(function (require) { require('ui/modules') .get('kibana/directive') .directive('visualize', function (Notifier, SavedVis, indexPatterns, Private, config, $timeout) { - var visTypes = Private(require('ui/registry/vis_types')); + var visTypes = Private(RegistryVisTypesProvider); var notify = new Notifier({ location: 'Visualize' diff --git a/src/ui/public/visualize/visualize_legend.js b/src/ui/public/visualize/visualize_legend.js index 9aeb014d084e46..7ddc0c0e7a94c5 100644 --- a/src/ui/public/visualize/visualize_legend.js +++ b/src/ui/public/visualize/visualize_legend.js @@ -3,14 +3,17 @@ import html from 'ui/visualize/visualize_legend.html'; import $ from 'jquery'; import d3 from 'd3'; import findByParam from 'ui/utils/find_by_param'; +import VislibLibDataProvider from 'ui/vislib/lib/data'; +import VislibComponentsColorColorProvider from 'ui/vislib/components/color/color'; +import FilterBarFilterBarClickHandlerProvider from 'ui/filter_bar/filter_bar_click_handler'; define(function (require) { require('ui/modules').get('kibana') .directive('visualizeLegend', function (Private, getAppState) { - var Data = Private(require('ui/vislib/lib/data')); - var colorPalette = Private(require('ui/vislib/components/color/color')); - var filterBarClickHandler = Private(require('ui/filter_bar/filter_bar_click_handler')); + var Data = Private(VislibLibDataProvider); + var colorPalette = Private(VislibComponentsColorColorProvider); + var filterBarClickHandler = Private(FilterBarFilterBarClickHandlerProvider); return { restrict: 'E', From ba17d3b8c30fa4f7ea12a2e9d84a5e99b4e64dae Mon Sep 17 00:00:00 2001 From: spalger Date: Wed, 3 Feb 2016 16:04:47 -0700 Subject: [PATCH 2/6] [es6modules] unwrap amd modules --- src/fixtures/agg_resp/geohash_grid.js | 126 +- src/fixtures/fake_chart_events.js | 38 +- src/fixtures/fake_hierarchical_data.js | 418 +++--- src/fixtures/fake_row.js | 34 +- src/fixtures/field_mapping.js | 102 +- src/fixtures/filter_skeleton.js | 12 +- src/fixtures/hits.js | 42 +- src/fixtures/logstash_fields.js | 68 +- src/fixtures/mapping_with_dupes.js | 58 +- src/fixtures/mock_courier.js | 22 +- src/fixtures/mock_state.js | 26 +- src/fixtures/mock_ui_state.js | 26 +- src/fixtures/real_hits.js | 442 +++--- src/fixtures/search_response.js | 30 +- src/fixtures/stubbed_doc_source_response.js | 36 +- .../stubbed_logstash_index_pattern.js | 34 +- src/fixtures/stubbed_search_source.js | 64 +- src/fixtures/tilemap_map.js | 30 +- .../devMode/public/visDebugSpyPanel.js | 34 +- .../kbn_vislib_vis_types/public/area.js | 136 +- .../controls/line_interpolation_option.js | 16 +- .../public/controls/point_series_options.js | 16 +- .../public/controls/vislib_basic_options.js | 16 +- .../kbn_vislib_vis_types/public/histogram.js | 128 +- .../public/kbn_vislib_vis_types.js | 12 +- .../kbn_vislib_vis_types/public/line.js | 148 +- .../kbn_vislib_vis_types/public/pie.js | 108 +- .../kbn_vislib_vis_types/public/tileMap.js | 222 ++- .../components/panel/lib/load_panel.js | 26 +- .../dashboard/components/panel/lib/search.js | 42 +- .../components/panel/lib/visualization.js | 36 +- .../dashboard/components/panel/panel.js | 128 +- .../public/dashboard/directives/grid.js | 400 +++--- src/plugins/kibana/public/dashboard/index.js | 378 +++-- .../dashboard/services/_saved_dashboard.js | 120 +- .../services/saved_dashboard_register.js | 8 +- .../dashboard/services/saved_dashboards.js | 150 +- .../field_chooser/discover_field.js | 136 +- .../components/field_chooser/field_chooser.js | 440 +++--- .../field_chooser/lib/field_calculator.js | 160 +-- .../public/discover/controllers/discover.js | 892 ++++++------ src/plugins/kibana/public/discover/index.js | 6 +- .../discover/saved_searches/_saved_search.js | 84 +- .../saved_searches/saved_search_register.js | 8 +- .../discover/saved_searches/saved_searches.js | 170 ++- .../kibana/public/doc/controllers/doc.js | 102 +- src/plugins/kibana/public/doc/index.js | 2 - src/plugins/kibana/public/settings/index.js | 60 +- .../public/settings/saved_object_registry.js | 26 +- .../public/settings/sections/about/index.js | 34 +- .../sections/advanced/advanced_row.js | 114 +- .../settings/sections/advanced/index.js | 90 +- .../sections/advanced/lib/get_editor_type.js | 24 +- .../sections/advanced/lib/get_val_type.js | 32 +- .../advanced/lib/to_editable_config.js | 60 +- .../kibana/public/settings/sections/index.js | 20 +- .../settings/sections/indices/_create.js | 496 ++++--- .../sections/indices/_date_scripts.js | 46 +- .../public/settings/sections/indices/_edit.js | 120 +- .../sections/indices/_field_editor.js | 82 +- .../settings/sections/indices/_field_types.js | 40 +- .../sections/indices/_index_header.js | 40 +- .../sections/indices/_indexed_fields.js | 116 +- .../sections/indices/_refresh_kibana_index.js | 14 +- .../sections/indices/_scripted_fields.js | 166 ++- .../public/settings/sections/indices/index.js | 74 +- .../settings/sections/objects/_objects.js | 278 ++-- .../public/settings/sections/objects/_view.js | 386 +++-- .../public/settings/sections/objects/index.js | 16 +- .../public/settings/sections/status/index.js | 14 +- .../kibana/public/visualize/editor/agg.js | 144 +- .../kibana/public/visualize/editor/agg_add.js | 42 +- .../public/visualize/editor/agg_filter.js | 10 +- .../public/visualize/editor/agg_group.js | 64 +- .../public/visualize/editor/agg_param.js | 46 +- .../public/visualize/editor/agg_params.js | 246 ++-- .../kibana/public/visualize/editor/editor.js | 480 +++---- .../visualize/editor/nesting_indicator.js | 50 +- .../kibana/public/visualize/editor/sidebar.js | 30 +- .../public/visualize/editor/vis_options.js | 38 +- src/plugins/kibana/public/visualize/index.js | 16 +- .../saved_visualizations/_saved_vis.js | 224 ++- .../saved_visualization_register.js | 8 +- .../saved_visualizations.js | 194 ++- .../kibana/public/visualize/wizard/wizard.js | 96 +- .../markdown_vis/public/markdown_vis.js | 46 +- .../public/markdown_vis_controller.js | 20 +- src/plugins/metric_vis/public/metric_vis.js | 76 +- .../public/metric_vis_controller.js | 52 +- .../spyModes/public/reqRespStatsSpyMode.js | 100 +- src/plugins/spyModes/public/tableSpyMode.js | 62 +- src/plugins/table_vis/public/table_vis.js | 110 +- .../table_vis/public/table_vis_controller.js | 70 +- .../table_vis/public/table_vis_params.js | 42 +- src/testUtils/simulateKeys.js | 176 ++- src/testUtils/stub_index_pattern.js | 78 +- src/ui/public/ConfigTemplate.js | 58 +- src/ui/public/IndexedArray/IndexedArray.js | 292 ++-- src/ui/public/IndexedArray/inflector.js | 90 +- src/ui/public/Vis/AggConfig.js | 518 ++++--- src/ui/public/Vis/AggConfigs.js | 274 ++-- src/ui/public/Vis/Renderbot.js | 88 +- src/ui/public/Vis/Schemas.js | 104 +- src/ui/public/Vis/Vis.js | 196 ++- src/ui/public/Vis/VisType.js | 34 +- .../geo_json/_tooltip_formatter.js | 60 +- .../public/agg_response/geo_json/geo_json.js | 64 +- .../agg_response/geo_json/rowsToFeatures.js | 102 +- .../hierarchical/_array_to_linked_list.js | 24 +- .../agg_response/hierarchical/_build_split.js | 24 +- .../hierarchical/_collect_keys.js | 20 +- .../hierarchical/_create_raw_data.js | 154 +- .../hierarchical/_extract_buckets.js | 24 +- .../_hierarchical_tooltip_formatter.js | 56 +- .../hierarchical/_transform_aggregation.js | 62 +- .../hierarchical/build_hierarchical_data.js | 174 ++- src/ui/public/agg_response/index.js | 16 +- .../agg_response/point_series/_add_to_siri.js | 26 +- .../point_series/_fake_x_aspect.js | 46 +- .../agg_response/point_series/_get_aspects.js | 100 +- .../agg_response/point_series/_get_point.js | 62 +- .../agg_response/point_series/_get_series.js | 88 +- .../agg_response/point_series/_init_y_axis.js | 32 +- .../point_series/_ordered_date_axis.js | 44 +- .../point_series/_tooltip_formatter.js | 74 +- .../agg_response/point_series/point_series.js | 44 +- src/ui/public/agg_response/tabify/_buckets.js | 52 +- .../agg_response/tabify/_get_columns.js | 88 +- .../agg_response/tabify/_response_writer.js | 496 ++++--- src/ui/public/agg_response/tabify/_table.js | 62 +- .../agg_response/tabify/_table_group.js | 40 +- src/ui/public/agg_response/tabify/tabify.js | 168 ++- src/ui/public/agg_table/agg_table.js | 156 +- src/ui/public/agg_table/agg_table_group.js | 62 +- src/ui/public/agg_types/AggParams.js | 124 +- src/ui/public/agg_types/AggType.js | 264 ++-- .../agg_types/buckets/_bucket_agg_type.js | 28 +- .../buckets/_bucket_count_between.js | 72 +- .../agg_types/buckets/_interval_options.js | 94 +- .../buckets/create_filter/date_histogram.js | 22 +- .../buckets/create_filter/date_range.js | 22 +- .../buckets/create_filter/filters.js | 20 +- .../buckets/create_filter/histogram.js | 22 +- .../buckets/create_filter/ip_range.js | 30 +- .../agg_types/buckets/create_filter/range.js | 20 +- .../agg_types/buckets/create_filter/terms.js | 10 +- .../agg_types/buckets/date_histogram.js | 288 ++-- src/ui/public/agg_types/buckets/date_range.js | 70 +- src/ui/public/agg_types/buckets/filters.js | 70 +- src/ui/public/agg_types/buckets/geo_hash.js | 108 +- src/ui/public/agg_types/buckets/histogram.js | 114 +- src/ui/public/agg_types/buckets/ip_range.js | 78 +- src/ui/public/agg_types/buckets/range.js | 116 +- .../agg_types/buckets/significant_terms.js | 64 +- src/ui/public/agg_types/buckets/terms.js | 314 ++-- src/ui/public/agg_types/index.js | 104 +- .../public/agg_types/metrics/MetricAggType.js | 82 +- src/ui/public/agg_types/metrics/avg.js | 34 +- .../public/agg_types/metrics/cardinality.js | 40 +- src/ui/public/agg_types/metrics/count.js | 38 +- .../metrics/getResponseAggConfigClass.js | 80 +- src/ui/public/agg_types/metrics/max.js | 34 +- src/ui/public/agg_types/metrics/median.js | 50 +- src/ui/public/agg_types/metrics/min.js | 34 +- .../agg_types/metrics/percentile_ranks.js | 94 +- .../public/agg_types/metrics/percentiles.js | 84 +- .../public/agg_types/metrics/stdDeviation.js | 102 +- src/ui/public/agg_types/metrics/sum.js | 34 +- src/ui/public/agg_types/param_types/base.js | 14 +- src/ui/public/agg_types/param_types/field.js | 108 +- .../public/agg_types/param_types/optioned.js | 90 +- .../public/agg_types/param_types/raw_json.js | 124 +- src/ui/public/agg_types/param_types/regex.js | 114 +- src/ui/public/agg_types/param_types/string.js | 50 +- src/ui/public/bind/bind.js | 150 +- src/ui/public/bound_to_config_obj.js | 68 +- src/ui/public/chrome/context.js | 52 +- .../collapsible_sidebar.js | 50 +- src/ui/public/compile_recursive_directive.js | 92 +- src/ui/public/config/_delayed_updater.js | 136 +- src/ui/public/config/_vals.js | 8 +- src/ui/public/config/config.js | 280 ++-- src/ui/public/config/defaults.js | 410 +++--- src/ui/public/courier/_error_handlers.js | 18 +- .../public/courier/_redirect_when_missing.js | 52 +- src/ui/public/courier/_request_queue.js | 60 +- src/ui/public/courier/courier.js | 260 ++-- .../public/courier/data_source/_abstract.js | 640 +++++---- .../courier/data_source/_decorate_query.js | 28 +- .../courier/data_source/_doc_send_to_es.js | 130 +- .../data_source/_normalize_sort_request.js | 86 +- .../data_source/_root_search_source.js | 98 +- .../public/courier/data_source/doc_source.js | 294 ++-- .../courier/data_source/search_source.js | 342 +++-- src/ui/public/courier/fetch/_call_client.js | 212 ++- .../courier/fetch/_call_response_handlers.js | 88 +- .../courier/fetch/_continue_incomplete.js | 40 +- src/ui/public/courier/fetch/_fetch_these.js | 122 +- .../courier/fetch/_for_each_strategy.js | 34 +- src/ui/public/courier/fetch/_is_request.js | 12 +- .../fetch/_merge_duplicate_requests.js | 46 +- src/ui/public/courier/fetch/_notifier.js | 12 +- src/ui/public/courier/fetch/_req_status.js | 14 +- src/ui/public/courier/fetch/fetch.js | 122 +- .../courier/fetch/request/_error_handler.js | 40 +- .../fetch/request/_segmented_handle.js | 48 +- src/ui/public/courier/fetch/request/doc.js | 60 +- .../public/courier/fetch/request/request.js | 176 ++- src/ui/public/courier/fetch/request/search.js | 26 +- .../public/courier/fetch/request/segmented.js | 552 ++++--- src/ui/public/courier/fetch/strategy/doc.js | 46 +- .../public/courier/fetch/strategy/search.js | 106 +- src/ui/public/courier/looper/_looper.js | 356 +++-- src/ui/public/courier/looper/doc.js | 28 +- src/ui/public/courier/looper/search.js | 58 +- .../courier/saved_object/saved_object.js | 512 ++++--- src/ui/public/debounce/debounce.js | 80 +- .../directives/auto_select_if_only_one.js | 32 +- src/ui/public/directives/click_focus.js | 34 +- src/ui/public/directives/config.js | 130 +- src/ui/public/directives/confirm_click.js | 40 +- src/ui/public/directives/css_truncate.js | 76 +- src/ui/public/directives/field_name.js | 110 +- src/ui/public/directives/file_upload.js | 50 +- src/ui/public/directives/inequality.js | 64 +- src/ui/public/directives/infinite_scroll.js | 74 +- src/ui/public/directives/info.js | 32 +- src/ui/public/directives/input_datetime.js | 44 +- src/ui/public/directives/input_focus.js | 24 +- .../public/directives/input_whole_number.js | 28 +- src/ui/public/directives/json_input.js | 48 +- src/ui/public/directives/paginate.js | 322 +++-- src/ui/public/directives/pretty_duration.js | 112 +- src/ui/public/directives/rows.js | 154 +- .../public/directives/saved_object_finder.js | 444 +++--- src/ui/public/directives/spinner.js | 18 +- src/ui/public/directives/truncated.js | 64 +- .../public/directives/validate_cidr_mask.js | 48 +- .../public/directives/validate_date_math.js | 42 +- .../public/directives/validate_index_name.js | 66 +- src/ui/public/directives/validate_ip.js | 60 +- src/ui/public/directives/validate_json.js | 68 +- .../doc_table/components/table_header.js | 150 +- .../public/doc_table/components/table_row.js | 280 ++-- src/ui/public/doc_table/doc_table.js | 166 ++- src/ui/public/doc_table/lib/get_sort.js | 78 +- src/ui/public/doc_title/doc_title.js | 70 +- src/ui/public/doc_viewer/doc_viewer.js | 68 +- src/ui/public/elastic_textarea.js | 36 +- src/ui/public/errors.js | 544 ++++--- src/ui/public/es.js | 72 +- src/ui/public/events.js | 184 ++- .../public/fancy_forms/KbnFormController.js | 118 +- src/ui/public/fancy_forms/fancy_forms.js | 62 +- src/ui/public/field_editor/field_editor.js | 242 ++-- .../field_format_editor.js | 216 ++- .../field_format_editor/numeral/numeral.js | 16 +- .../field_format_editor/pattern/pattern.js | 40 +- .../field_format_editor/samples/samples.js | 70 +- src/ui/public/filter_bar/filter_bar.js | 262 ++-- .../filter_bar/filter_bar_click_handler.js | 106 +- .../public/filter_bar/lib/changeTimeFilter.js | 18 +- .../public/filter_bar/lib/compareFilters.js | 52 +- src/ui/public/filter_bar/lib/dedupFilters.js | 30 +- .../filter_bar/lib/extractTimeFilter.js | 32 +- .../filter_bar/lib/filterAppliedAndUnwrap.js | 8 +- .../lib/filterOutTimeBasedFilter.js | 20 +- .../filter_bar/lib/generateMappingChain.js | 34 +- .../filter_bar/lib/mapAndFlattenFilters.js | 22 +- src/ui/public/filter_bar/lib/mapDefault.js | 26 +- src/ui/public/filter_bar/lib/mapExists.js | 24 +- src/ui/public/filter_bar/lib/mapFilter.js | 110 +- .../lib/mapFlattenAndWrapFilters.js | 22 +- .../filter_bar/lib/mapGeoBoundingBox.js | 44 +- src/ui/public/filter_bar/lib/mapMatchAll.js | 20 +- src/ui/public/filter_bar/lib/mapMissing.js | 24 +- .../public/filter_bar/lib/mapQueryString.js | 24 +- src/ui/public/filter_bar/lib/mapRange.js | 42 +- src/ui/public/filter_bar/lib/mapTerms.js | 38 +- src/ui/public/filter_bar/lib/onlyDisabled.js | 26 +- .../public/filter_bar/lib/onlyStateChanged.js | 26 +- src/ui/public/filter_bar/lib/remapFilters.js | 18 +- src/ui/public/filter_bar/lib/uniqFilters.js | 26 +- src/ui/public/filter_bar/push_filter.js | 28 +- src/ui/public/filter_bar/query_filter.js | 638 ++++----- .../public/filter_manager/filter_manager.js | 128 +- src/ui/public/filter_manager/lib/phrase.js | 42 +- src/ui/public/filter_manager/lib/query.js | 16 +- src/ui/public/filter_manager/lib/range.js | 102 +- src/ui/public/filters/_prop_filter.js | 100 +- src/ui/public/filters/commaList.js | 40 +- src/ui/public/filters/field_type.js | 10 +- src/ui/public/filters/label.js | 28 +- src/ui/public/filters/match_any.js | 32 +- src/ui/public/filters/moment.js | 22 +- src/ui/public/filters/rison.js | 22 +- src/ui/public/filters/short_dots.js | 38 +- src/ui/public/filters/start_from.js | 20 +- src/ui/public/filters/trust_as_html.js | 12 +- src/ui/public/filters/unique.js | 18 +- src/ui/public/filters/uriescape.js | 16 +- src/ui/public/fixedScroll.js | 194 ++- src/ui/public/highlight/highlight.js | 40 +- src/ui/public/highlight/highlight_tags.js | 16 +- .../index_patterns/_calculate_indices.js | 136 +- .../index_patterns/_cast_mapping_type.js | 72 +- src/ui/public/index_patterns/_ensure_some.js | 22 +- src/ui/public/index_patterns/_field.js | 120 +- .../_field_format/FieldFormat.js | 180 ++- .../_field_format/contentTypes.js | 96 +- src/ui/public/index_patterns/_field_list.js | 30 +- src/ui/public/index_patterns/_field_types.js | 44 +- src/ui/public/index_patterns/_flatten_hit.js | 86 +- src/ui/public/index_patterns/_format_hit.js | 66 +- .../index_patterns/_get_computed_fields.js | 30 +- src/ui/public/index_patterns/_get_ids.js | 66 +- .../public/index_patterns/_index_pattern.js | 526 ++++--- src/ui/public/index_patterns/_intervals.js | 156 +- src/ui/public/index_patterns/_local_cache.js | 54 +- src/ui/public/index_patterns/_map_field.js | 82 +- src/ui/public/index_patterns/_mapper.js | 240 ++-- .../public/index_patterns/_pattern_cache.js | 32 +- .../index_patterns/_pattern_to_wildcard.js | 68 +- .../_transform_mapping_into_fields.js | 80 +- .../public/index_patterns/index_patterns.js | 96 +- src/ui/public/listen/listen.js | 36 +- src/ui/public/metadata.js | 34 +- src/ui/public/modules.js | 130 +- src/ui/public/notify/directives.js | 22 +- src/ui/public/notify/errors.js | 42 +- src/ui/public/notify/lib/_format_es_msg.js | 28 +- src/ui/public/notify/lib/_format_msg.js | 68 +- src/ui/public/notify/notifier.js | 608 ++++---- src/ui/public/notify/notify.js | 68 +- src/ui/public/number_list/number_list.js | 202 ++- .../public/number_list/number_list_input.js | 282 ++-- .../public/paginated_table/paginated_table.js | 148 +- src/ui/public/parse_query/lib/from_user.js | 62 +- src/ui/public/parse_query/lib/to_user.js | 28 +- src/ui/public/parse_query/parse_query.js | 42 +- src/ui/public/persisted_log/persisted_log.js | 66 +- .../public/persisted_state/persisted_state.js | 426 +++--- src/ui/public/private/private.js | 332 +++-- src/ui/public/promises/promises.js | 302 ++-- .../public/reflow_watcher/reflow_watcher.js | 108 +- src/ui/public/registry/_registry.js | 152 +- src/ui/public/registry/chrome_nav_controls.js | 8 +- src/ui/public/registry/field_formats.js | 148 +- src/ui/public/registry/navbar_extensions.js | 12 +- src/ui/public/registry/spy_modes.js | 10 +- src/ui/public/registry/vis_types.js | 10 +- src/ui/public/routes/WorkQueue.js | 92 +- src/ui/public/routes/wrapRouteWithPrep.js | 52 +- src/ui/public/safe_confirm/safe_confirm.js | 56 +- .../saved_objects/saved_object_registry.js | 10 +- src/ui/public/state_management/_state_sync.js | 252 ++-- src/ui/public/state_management/app_state.js | 150 +- .../public/state_management/global_state.js | 28 +- src/ui/public/state_management/state.js | 252 ++-- src/ui/public/storage/storage.js | 64 +- src/ui/public/stringify/register.js | 22 +- src/ui/public/stringify/types/Bytes.js | 18 +- src/ui/public/stringify/types/Color.js | 108 +- src/ui/public/stringify/types/Date.js | 102 +- src/ui/public/stringify/types/Ip.js | 34 +- src/ui/public/stringify/types/Number.js | 22 +- src/ui/public/stringify/types/Percent.js | 42 +- src/ui/public/stringify/types/Source.js | 60 +- src/ui/public/stringify/types/String.js | 114 +- src/ui/public/stringify/types/Url.js | 220 ++- src/ui/public/stringify/types/_Numeral.js | 86 +- src/ui/public/stringify/types/truncate.js | 56 +- src/ui/public/styleCompile/styleCompile.js | 40 +- .../template_vis_type/TemplateRenderbot.js | 36 +- .../template_vis_type/TemplateVisType.js | 32 +- .../public/time_buckets/calc_auto_interval.js | 110 +- .../public/time_buckets/calc_es_interval.js | 78 +- src/ui/public/time_buckets/time_buckets.js | 634 ++++---- src/ui/public/timefilter/lib/diff_interval.js | 26 +- src/ui/public/timefilter/lib/diff_time.js | 24 +- src/ui/public/timefilter/timefilter.js | 166 ++- src/ui/public/timepicker/quick_ranges.js | 64 +- src/ui/public/timepicker/refresh_intervals.js | 34 +- src/ui/public/timepicker/time_units.js | 22 +- src/ui/public/timepicker/timepicker.js | 276 ++-- src/ui/public/tooltip/tooltip.js | 46 +- src/ui/public/typeahead/_input.js | 68 +- src/ui/public/typeahead/_items.js | 24 +- src/ui/public/typeahead/typeahead.js | 400 +++--- src/ui/public/url/url.js | 338 +++-- src/ui/public/utils/BaseObject.js | 62 +- src/ui/public/utils/CidrMask.js | 48 +- src/ui/public/utils/ObjDefine.js | 236 ++- src/ui/public/utils/SimpleEmitter.js | 224 ++- src/ui/public/utils/brush_event.js | 20 +- src/ui/public/utils/dateMath.js | 172 ++- src/ui/public/utils/date_range.js | 42 +- src/ui/public/utils/decode_geo_hash.js | 104 +- src/ui/public/utils/diff_object.js | 78 +- src/ui/public/utils/diff_time_picker_vals.js | 38 +- src/ui/public/utils/find_by_param.js | 22 +- src/ui/public/utils/key_map.js | 206 ++- .../public/utils/lodash-mixins/collection.js | 248 ++-- src/ui/public/utils/lodash-mixins/function.js | 112 +- src/ui/public/utils/lodash-mixins/lang.js | 34 +- src/ui/public/utils/lodash-mixins/object.js | 70 +- src/ui/public/utils/lodash-mixins/oop.js | 76 +- src/ui/public/utils/lodash-mixins/string.js | 104 +- src/ui/public/utils/no_white_space.js | 36 +- src/ui/public/utils/ordinal_suffix.js | 30 +- src/ui/public/utils/parse_interval.js | 50 +- src/ui/public/utils/query_string.js | 220 ++- src/ui/public/utils/range.js | 108 +- src/ui/public/utils/sequencer.js | 164 ++- src/ui/public/utils/slugify_id.js | 32 +- src/ui/public/utils/supports.js | 34 +- src/ui/public/validateDateInterval.js | 32 +- .../public/vislib/components/color/color.js | 46 +- .../vislib/components/color/color_palette.js | 84 +- .../vislib/components/labels/data_array.js | 26 +- .../components/labels/flatten_series.js | 32 +- .../public/vislib/components/labels/labels.js | 34 +- .../components/labels/pie/get_pie_names.js | 30 +- .../components/labels/pie/pie_labels.js | 32 +- .../labels/pie/remove_zero_slices.js | 22 +- .../vislib/components/labels/uniq_labels.js | 30 +- .../components/zero_injection/flatten_data.js | 44 +- .../components/zero_injection/inject_zeros.js | 78 +- .../zero_injection/ordered_x_keys.js | 104 +- .../components/zero_injection/uniq_keys.js | 102 +- .../zero_injection/zero_fill_data_array.js | 50 +- src/ui/public/vislib/lib/_data_label.js | 24 +- src/ui/public/vislib/lib/_error_handler.js | 54 +- src/ui/public/vislib/lib/alerts.js | 186 ++- src/ui/public/vislib/lib/axis_title.js | 126 +- src/ui/public/vislib/lib/chart_title.js | 238 ++- src/ui/public/vislib/lib/data.js | 1276 ++++++++--------- src/ui/public/vislib/lib/dispatch.js | 548 ++++--- src/ui/public/vislib/lib/handler/handler.js | 376 +++-- .../vislib/lib/handler/handler_types.js | 30 +- src/ui/public/vislib/lib/handler/types/pie.js | 26 +- .../vislib/lib/handler/types/point_series.js | 158 +- .../vislib/lib/handler/types/tile_map.js | 32 +- src/ui/public/vislib/lib/layout/layout.js | 294 ++-- .../public/vislib/lib/layout/layout_types.js | 34 +- .../vislib/lib/layout/types/column_layout.js | 204 ++- .../vislib/lib/layout/types/map_layout.js | 90 +- .../vislib/lib/layout/types/pie_layout.js | 120 +- src/ui/public/vislib/lib/resize_checker.js | 360 +++-- src/ui/public/vislib/lib/x_axis.js | 938 ++++++------ src/ui/public/vislib/lib/y_axis.js | 414 +++--- src/ui/public/vislib/vis.js | 348 +++-- src/ui/public/vislib/visualizations/_chart.js | 154 +- src/ui/public/vislib/visualizations/_map.js | 532 ++++--- .../visualizations/_point_series_chart.js | 302 ++-- .../vislib/visualizations/area_chart.js | 658 +++++---- .../vislib/visualizations/column_chart.js | 584 ++++---- .../vislib/visualizations/line_chart.js | 646 +++++---- .../marker_types/base_marker.js | 468 +++--- .../marker_types/geohash_grid.js | 64 +- .../visualizations/marker_types/heatmap.js | 382 +++-- .../marker_types/scaled_circles.js | 112 +- .../marker_types/shaded_circles.js | 108 +- .../public/vislib/visualizations/pie_chart.js | 372 +++-- .../public/vislib/visualizations/tile_map.js | 222 ++- .../vislib/visualizations/time_marker.js | 128 +- .../public/vislib/visualizations/vis_types.js | 34 +- .../public/vislib_vis_type/VislibVisType.js | 38 +- .../public/vislib_vis_type/buildChartData.js | 106 +- src/ui/public/visualize/spy.js | 178 ++- src/ui/public/visualize/visualize.js | 254 ++-- src/ui/public/visualize/visualize_legend.js | 182 ++- src/ui/public/watch_multi/watch_multi.js | 204 ++- 473 files changed, 27539 insertions(+), 28485 deletions(-) diff --git a/src/fixtures/agg_resp/geohash_grid.js b/src/fixtures/agg_resp/geohash_grid.js index 1818aed2051f29..b62d56d21ae579 100644 --- a/src/fixtures/agg_resp/geohash_grid.js +++ b/src/fixtures/agg_resp/geohash_grid.js @@ -1,83 +1,81 @@ import _ from 'lodash'; -define(function (require) { - return function GeoHashGridAggResponseFixture() { +export default function GeoHashGridAggResponseFixture() { - // for vis: - // - // vis = new Vis(indexPattern, { - // type: 'tile_map', - // aggs:[ - // { schema: 'metric', type: 'avg', params: { field: 'bytes' } }, - // { schema: 'split', type: 'terms', params: { field: '@tags', size: 10 } }, - // { schema: 'segment', type: 'geohash_grid', params: { field: 'geo.coordinates', precision: 3 } } - // ], - // params: { - // isDesaturated: true, - // mapType: 'Scaled%20Circle%20Markers' - // }, - // }); + // for vis: + // + // vis = new Vis(indexPattern, { + // type: 'tile_map', + // aggs:[ + // { schema: 'metric', type: 'avg', params: { field: 'bytes' } }, + // { schema: 'split', type: 'terms', params: { field: '@tags', size: 10 } }, + // { schema: 'segment', type: 'geohash_grid', params: { field: 'geo.coordinates', precision: 3 } } + // ], + // params: { + // isDesaturated: true, + // mapType: 'Scaled%20Circle%20Markers' + // }, + // }); - var geoHashCharts = _.union( - _.range(48, 57), // 0-9 - _.range(65, 90), // A-Z - _.range(97, 122) // a-z - ); + var geoHashCharts = _.union( + _.range(48, 57), // 0-9 + _.range(65, 90), // A-Z + _.range(97, 122) // a-z + ); - var totalDocCount = 0; + var totalDocCount = 0; - var tags = _.times(_.random(4, 20), function (i) { - // random number of tags - var docCount = 0; - var buckets = _.times(_.random(40, 200), function () { - return _.sample(geoHashCharts, 3).join(''); - }) - .sort() - .map(function (geoHash) { - var count = _.random(1, 5000); + var tags = _.times(_.random(4, 20), function (i) { + // random number of tags + var docCount = 0; + var buckets = _.times(_.random(40, 200), function () { + return _.sample(geoHashCharts, 3).join(''); + }) + .sort() + .map(function (geoHash) { + var count = _.random(1, 5000); - totalDocCount += count; - docCount += count; - - return { - key: geoHash, - doc_count: count, - 1: { - value: 2048 + i - } - }; - }); + totalDocCount += count; + docCount += count; return { - key: 'tag ' + (i + 1), - doc_count: docCount, - 3: { - buckets: buckets - }, + key: geoHash, + doc_count: count, 1: { - value: 1000 + i + value: 2048 + i } }; }); return { - took: 3, - timed_out: false, - _shards: { - total: 4, - successful: 4, - failed: 0 - }, - hits: { - total: 298, - max_score: 0.0, - hits: [] + key: 'tag ' + (i + 1), + doc_count: docCount, + 3: { + buckets: buckets }, - aggregations: { - 2: { - buckets: tags - } + 1: { + value: 1000 + i } }; + }); + + return { + took: 3, + timed_out: false, + _shards: { + total: 4, + successful: 4, + failed: 0 + }, + hits: { + total: 298, + max_score: 0.0, + hits: [] + }, + aggregations: { + 2: { + buckets: tags + } + } }; -}); +}; diff --git a/src/fixtures/fake_chart_events.js b/src/fixtures/fake_chart_events.js index f011fbade44f9c..949234c8c58ecc 100644 --- a/src/fixtures/fake_chart_events.js +++ b/src/fixtures/fake_chart_events.js @@ -1,22 +1,20 @@ -define(function (require) { - var results = {}; +var results = {}; - results.timeSeries = { - data: { - ordered: { - date: true, - interval: 600000, - max: 1414437217559, - min: 1414394017559 - } - }, - label: 'apache', - value: 44, - point: { - label: 'apache', - x: 1414400400000, - y: 44, - y0: 0 +results.timeSeries = { + data: { + ordered: { + date: true, + interval: 600000, + max: 1414437217559, + min: 1414394017559 } - }; -}); + }, + label: 'apache', + value: 44, + point: { + label: 'apache', + x: 1414400400000, + y: 44, + y0: 0 + } +}; diff --git a/src/fixtures/fake_hierarchical_data.js b/src/fixtures/fake_hierarchical_data.js index 36797d0773e506..d15ae5253e7be0 100644 --- a/src/fixtures/fake_hierarchical_data.js +++ b/src/fixtures/fake_hierarchical_data.js @@ -1,228 +1,226 @@ -define(function (require) { - var data = { }; +var data = { }; - data.metricOnly = { - hits: { total: 1000, hits: [], max_score: 0 }, - aggregations: { - agg_1: { value: 412032 }, - } - }; +data.metricOnly = { + hits: { total: 1000, hits: [], max_score: 0 }, + aggregations: { + agg_1: { value: 412032 }, + } +}; - data.threeTermBuckets = { - hits: { total: 1000, hits: [], max_score: 0 }, - aggregations: { - agg_2: { - buckets: [ - { - key: 'png', - doc_count: 50, - agg_1: { value: 412032 }, - agg_3: { - buckets: [ - { - key: 'IT', - doc_count: 10, - agg_1: { value: 9299 }, - agg_4: { - buckets: [ - { key: 'win', doc_count: 4, agg_1: { value: 0 } }, - { key: 'mac', doc_count: 6, agg_1: { value: 9299 } } - ] - } - }, - { - key: 'US', - doc_count: 20, - agg_1: { value: 8293 }, - agg_4: { - buckets: [ - { key: 'linux', doc_count: 12, agg_1: { value: 3992 } }, - { key: 'mac', doc_count: 8, agg_1: { value: 3029 } } - ] - } +data.threeTermBuckets = { + hits: { total: 1000, hits: [], max_score: 0 }, + aggregations: { + agg_2: { + buckets: [ + { + key: 'png', + doc_count: 50, + agg_1: { value: 412032 }, + agg_3: { + buckets: [ + { + key: 'IT', + doc_count: 10, + agg_1: { value: 9299 }, + agg_4: { + buckets: [ + { key: 'win', doc_count: 4, agg_1: { value: 0 } }, + { key: 'mac', doc_count: 6, agg_1: { value: 9299 } } + ] + } + }, + { + key: 'US', + doc_count: 20, + agg_1: { value: 8293 }, + agg_4: { + buckets: [ + { key: 'linux', doc_count: 12, agg_1: { value: 3992 } }, + { key: 'mac', doc_count: 8, agg_1: { value: 3029 } } + ] } - ] - } - }, - { - key: 'css', - doc_count: 20, - agg_1: { value: 412032 }, - agg_3: { - buckets: [ - { - key: 'MX', - doc_count: 7, - agg_1: { value: 9299 }, - agg_4: { - buckets: [ - { key: 'win', doc_count: 3, agg_1: { value: 4992 } }, - { key: 'mac', doc_count: 4, agg_1: { value: 5892 } } - ] - } - }, - { - key: 'US', - doc_count: 13, - agg_1: { value: 8293 }, - agg_4: { - buckets: [ - { key: 'linux', doc_count: 12, agg_1: { value: 3992 } }, - { key: 'mac', doc_count: 1, agg_1: { value: 3029 } } - ] - } + } + ] + } + }, + { + key: 'css', + doc_count: 20, + agg_1: { value: 412032 }, + agg_3: { + buckets: [ + { + key: 'MX', + doc_count: 7, + agg_1: { value: 9299 }, + agg_4: { + buckets: [ + { key: 'win', doc_count: 3, agg_1: { value: 4992 } }, + { key: 'mac', doc_count: 4, agg_1: { value: 5892 } } + ] } - ] - } - }, - { - key: 'html', - doc_count: 90, - agg_1: { value: 412032 }, - agg_3: { - buckets: [ - { - key: 'CN', - doc_count: 85, - agg_1: { value: 9299 }, - agg_4: { - buckets: [ - { key: 'win', doc_count: 46, agg_1: { value: 4992 } }, - { key: 'mac', doc_count: 39, agg_1: { value: 5892 } } - ] - } - }, - { - key: 'FR', - doc_count: 15, - agg_1: { value: 8293 }, - agg_4: { - buckets: [ - { key: 'win', doc_count: 3, agg_1: { value: 3992 } }, - { key: 'mac', doc_count: 12, agg_1: { value: 3029 } } - ] - } + }, + { + key: 'US', + doc_count: 13, + agg_1: { value: 8293 }, + agg_4: { + buckets: [ + { key: 'linux', doc_count: 12, agg_1: { value: 3992 } }, + { key: 'mac', doc_count: 1, agg_1: { value: 3029 } } + ] } - ] - } + } + ] } - ] - } + }, + { + key: 'html', + doc_count: 90, + agg_1: { value: 412032 }, + agg_3: { + buckets: [ + { + key: 'CN', + doc_count: 85, + agg_1: { value: 9299 }, + agg_4: { + buckets: [ + { key: 'win', doc_count: 46, agg_1: { value: 4992 } }, + { key: 'mac', doc_count: 39, agg_1: { value: 5892 } } + ] + } + }, + { + key: 'FR', + doc_count: 15, + agg_1: { value: 8293 }, + agg_4: { + buckets: [ + { key: 'win', doc_count: 3, agg_1: { value: 3992 } }, + { key: 'mac', doc_count: 12, agg_1: { value: 3029 } } + ] + } + } + ] + } + } + ] } - }; + } +}; - data.oneRangeBucket = { - 'took': 35, - 'timed_out': false, - '_shards': { - 'total': 1, - 'successful': 1, - 'failed': 0 - }, - 'hits': { - 'total': 6039, - 'max_score': 0, - 'hits': [] - }, - 'aggregations': { - 'agg_2': { - 'buckets': { - '0.0-1000.0': { - 'from': 0, - 'from_as_string': '0.0', - 'to': 1000, - 'to_as_string': '1000.0', - 'doc_count': 606 - }, - '1000.0-2000.0': { - 'from': 1000, - 'from_as_string': '1000.0', - 'to': 2000, - 'to_as_string': '2000.0', - 'doc_count': 298 - } +data.oneRangeBucket = { + 'took': 35, + 'timed_out': false, + '_shards': { + 'total': 1, + 'successful': 1, + 'failed': 0 + }, + 'hits': { + 'total': 6039, + 'max_score': 0, + 'hits': [] + }, + 'aggregations': { + 'agg_2': { + 'buckets': { + '0.0-1000.0': { + 'from': 0, + 'from_as_string': '0.0', + 'to': 1000, + 'to_as_string': '1000.0', + 'doc_count': 606 + }, + '1000.0-2000.0': { + 'from': 1000, + 'from_as_string': '1000.0', + 'to': 2000, + 'to_as_string': '2000.0', + 'doc_count': 298 } } } - }; + } +}; - data.oneFilterBucket = { - 'took': 11, - 'timed_out': false, - '_shards': { - 'total': 1, - 'successful': 1, - 'failed': 0 - }, - 'hits': { - 'total': 6005, - 'max_score': 0, - 'hits': [] - }, - 'aggregations': { - 'agg_2': { - 'buckets': { - '_type:apache': { - 'doc_count': 4844 - }, - '_type:nginx': { - 'doc_count': 1161 - } +data.oneFilterBucket = { + 'took': 11, + 'timed_out': false, + '_shards': { + 'total': 1, + 'successful': 1, + 'failed': 0 + }, + 'hits': { + 'total': 6005, + 'max_score': 0, + 'hits': [] + }, + 'aggregations': { + 'agg_2': { + 'buckets': { + '_type:apache': { + 'doc_count': 4844 + }, + '_type:nginx': { + 'doc_count': 1161 } } } - }; + } +}; - data.oneHistogramBucket = { - 'took': 37, - 'timed_out': false, - '_shards': { - 'total': 6, - 'successful': 6, - 'failed': 0 - }, - 'hits': { - 'total': 49208, - 'max_score': 0, - 'hits': [] - }, - 'aggregations': { - 'agg_2': { - 'buckets': [ - { - 'key_as_string': '2014-09-28T00:00:00.000Z', - 'key': 1411862400000, - 'doc_count': 8247 - }, - { - 'key_as_string': '2014-09-29T00:00:00.000Z', - 'key': 1411948800000, - 'doc_count': 8184 - }, - { - 'key_as_string': '2014-09-30T00:00:00.000Z', - 'key': 1412035200000, - 'doc_count': 8269 - }, - { - 'key_as_string': '2014-10-01T00:00:00.000Z', - 'key': 1412121600000, - 'doc_count': 8141 - }, - { - 'key_as_string': '2014-10-02T00:00:00.000Z', - 'key': 1412208000000, - 'doc_count': 8148 - }, - { - 'key_as_string': '2014-10-03T00:00:00.000Z', - 'key': 1412294400000, - 'doc_count': 8219 - } - ] - } +data.oneHistogramBucket = { + 'took': 37, + 'timed_out': false, + '_shards': { + 'total': 6, + 'successful': 6, + 'failed': 0 + }, + 'hits': { + 'total': 49208, + 'max_score': 0, + 'hits': [] + }, + 'aggregations': { + 'agg_2': { + 'buckets': [ + { + 'key_as_string': '2014-09-28T00:00:00.000Z', + 'key': 1411862400000, + 'doc_count': 8247 + }, + { + 'key_as_string': '2014-09-29T00:00:00.000Z', + 'key': 1411948800000, + 'doc_count': 8184 + }, + { + 'key_as_string': '2014-09-30T00:00:00.000Z', + 'key': 1412035200000, + 'doc_count': 8269 + }, + { + 'key_as_string': '2014-10-01T00:00:00.000Z', + 'key': 1412121600000, + 'doc_count': 8141 + }, + { + 'key_as_string': '2014-10-02T00:00:00.000Z', + 'key': 1412208000000, + 'doc_count': 8148 + }, + { + 'key_as_string': '2014-10-03T00:00:00.000Z', + 'key': 1412294400000, + 'doc_count': 8219 + } + ] } - }; + } +}; - return data; -}); +export default data; diff --git a/src/fixtures/fake_row.js b/src/fixtures/fake_row.js index 5c58fb02df0ce7..837d4081c989ca 100644 --- a/src/fixtures/fake_row.js +++ b/src/fixtures/fake_row.js @@ -1,22 +1,20 @@ import _ from 'lodash'; -define(function (require) { - var longString = Array(200).join('_'); +var longString = Array(200).join('_'); - return function (id, mapping) { - function fakeVals(type) { - return _.mapValues(mapping, function (f, c) { - return c + '_' + type + '_' + id + longString; - }); - } +export default function (id, mapping) { + function fakeVals(type) { + return _.mapValues(mapping, function (f, c) { + return c + '_' + type + '_' + id + longString; + }); + } - return { - _id: id, - _index: 'test', - _source: fakeVals('original'), - sort: [id], - $$_formatted: fakeVals('formatted'), - $$_partialFormatted: fakeVals('formatted'), - $$_flattened: fakeVals('_flattened') - }; + return { + _id: id, + _index: 'test', + _source: fakeVals('original'), + sort: [id], + $$_formatted: fakeVals('formatted'), + $$_partialFormatted: fakeVals('formatted'), + $$_flattened: fakeVals('_flattened') }; -}); +}; diff --git a/src/fixtures/field_mapping.js b/src/fixtures/field_mapping.js index fa18a02a68a0c5..b6c38ee8aac299 100644 --- a/src/fixtures/field_mapping.js +++ b/src/fixtures/field_mapping.js @@ -1,62 +1,60 @@ -define(function (require) { - return { - test: { - mappings: { - testType: { - 'baz': { - full_name: 'baz', - mapping: { - bar: { - type: 'long' - } +export default { + test: { + mappings: { + testType: { + 'baz': { + full_name: 'baz', + mapping: { + bar: { + type: 'long' } - }, - 'foo.bar': { - full_name: 'foo.bar', - mapping: { - bar: { - type: 'string', - } + } + }, + 'foo.bar': { + full_name: 'foo.bar', + mapping: { + bar: { + type: 'string', } - }, - 'not_analyzed_field': { - full_name: 'not_analyzed_field', - mapping: { - bar: { - type: 'string', - index: 'not_analyzed' - } + } + }, + 'not_analyzed_field': { + full_name: 'not_analyzed_field', + mapping: { + bar: { + type: 'string', + index: 'not_analyzed' } - }, - 'index_no_field': { - full_name: 'index_no_field', - mapping: { - bar: { - type: 'string', - index: 'no' - } + } + }, + 'index_no_field': { + full_name: 'index_no_field', + mapping: { + bar: { + type: 'string', + index: 'no' } - }, - _id: { - full_name: '_id', - mapping: { - _id: { - store: false, - index: 'no', - } + } + }, + _id: { + full_name: '_id', + mapping: { + _id: { + store: false, + index: 'no', } - }, - _timestamp: { - full_name: '_timestamp', - mapping: { - _timestamp: { - store: true, - index: 'no', - } + } + }, + _timestamp: { + full_name: '_timestamp', + mapping: { + _timestamp: { + store: true, + index: 'no', } } } } } - }; -}); \ No newline at end of file + } +}; \ No newline at end of file diff --git a/src/fixtures/filter_skeleton.js b/src/fixtures/filter_skeleton.js index f1eb523d428d28..c5890fb528d9eb 100644 --- a/src/fixtures/filter_skeleton.js +++ b/src/fixtures/filter_skeleton.js @@ -1,7 +1,5 @@ -define(function (require) { - return { - meta: { - index: 'logstash-*' - } - }; -}); +export default { + meta: { + index: 'logstash-*' + } +}; diff --git a/src/fixtures/hits.js b/src/fixtures/hits.js index 93994426d7aa0e..dc7811c9452b61 100644 --- a/src/fixtures/hits.js +++ b/src/fixtures/hits.js @@ -1,24 +1,22 @@ import _ from 'lodash'; -define(function (require) { - return function fitsFixture() { - return _.map([ - {_source: {'@timestamp': 0, ssl: true, ip: '192.168.0.1', extension: 'php', 'machine.os': 'Linux', bytes: 10, request: 'foo'}}, - {_source: {'@timestamp': 1, ssl: true, ip: '192.168.0.1', extension: 'php', 'machine.os': 'Linux', bytes: 20, request: 'bar'}}, - {_source: {'@timestamp': 2, ssl: true, ip: '192.168.0.1', extension: 'php', 'machine.os': 'Linux', bytes: 30, request: 'bar'}}, - {_source: {'@timestamp': 3, ssl: true, ip: '192.168.0.1', extension: 'php', 'machine.os': 'Linux', bytes: 30, request: 'baz'}}, - {_source: {'@timestamp': 4, ssl: true, ip: '192.168.0.1', extension: 'php', 'machine.os': 'Linux', bytes: 30, request: 'baz'}}, - {_source: {'@timestamp': 5, ssl: true, ip: '192.168.0.1', extension: 'php', 'machine.os': 'Linux', bytes: 30, request: 'baz'}}, - {_source: {'@timestamp': 6, ssl: true, ip: '192.168.0.1', extension: 'php', 'machine.os': 'Linux', bytes: 40.141592, request: 'bat'}}, - {_source: {'@timestamp': 7, ssl: true, ip: '192.168.0.1', extension: 'php', 'machine.os': 'Linux', bytes: 40.141592, request: 'bat'}}, - {_source: {'@timestamp': 8, ssl: true, ip: '192.168.0.1', extension: 'php', 'machine.os': 'Linux', bytes: 40.141592, request: 'bat'}}, - {_source: {'@timestamp': 9, ssl: true, ip: '192.168.0.1', extension: 'php', 'machine.os': 'Linux', bytes: 40.141592, request: 'bat'}}, - ], function (p, i) { - return _.merge({}, p, { - _score: 1, - _id: 1000 + i, - _type: 'test', - _index: 'test-index' - }); +export default function fitsFixture() { + return _.map([ + {_source: {'@timestamp': 0, ssl: true, ip: '192.168.0.1', extension: 'php', 'machine.os': 'Linux', bytes: 10, request: 'foo'}}, + {_source: {'@timestamp': 1, ssl: true, ip: '192.168.0.1', extension: 'php', 'machine.os': 'Linux', bytes: 20, request: 'bar'}}, + {_source: {'@timestamp': 2, ssl: true, ip: '192.168.0.1', extension: 'php', 'machine.os': 'Linux', bytes: 30, request: 'bar'}}, + {_source: {'@timestamp': 3, ssl: true, ip: '192.168.0.1', extension: 'php', 'machine.os': 'Linux', bytes: 30, request: 'baz'}}, + {_source: {'@timestamp': 4, ssl: true, ip: '192.168.0.1', extension: 'php', 'machine.os': 'Linux', bytes: 30, request: 'baz'}}, + {_source: {'@timestamp': 5, ssl: true, ip: '192.168.0.1', extension: 'php', 'machine.os': 'Linux', bytes: 30, request: 'baz'}}, + {_source: {'@timestamp': 6, ssl: true, ip: '192.168.0.1', extension: 'php', 'machine.os': 'Linux', bytes: 40.141592, request: 'bat'}}, + {_source: {'@timestamp': 7, ssl: true, ip: '192.168.0.1', extension: 'php', 'machine.os': 'Linux', bytes: 40.141592, request: 'bat'}}, + {_source: {'@timestamp': 8, ssl: true, ip: '192.168.0.1', extension: 'php', 'machine.os': 'Linux', bytes: 40.141592, request: 'bat'}}, + {_source: {'@timestamp': 9, ssl: true, ip: '192.168.0.1', extension: 'php', 'machine.os': 'Linux', bytes: 40.141592, request: 'bat'}}, + ], function (p, i) { + return _.merge({}, p, { + _score: 1, + _id: 1000 + i, + _type: 'test', + _index: 'test-index' }); - }; -}); + }); +}; diff --git a/src/fixtures/logstash_fields.js b/src/fixtures/logstash_fields.js index ec6a36e33d7b1b..92b57c27b96594 100644 --- a/src/fixtures/logstash_fields.js +++ b/src/fixtures/logstash_fields.js @@ -1,37 +1,35 @@ -define(function (require) { - function stubbedLogstashFields() { - var sourceData = [ - { name: 'bytes', type: 'number', indexed: true, analyzed: true, sortable: true, filterable: true, count: 10 }, - { name: 'ssl', type: 'boolean', indexed: true, analyzed: true, sortable: true, filterable: true, count: 20 }, - { name: '@timestamp', type: 'date', indexed: true, analyzed: true, sortable: true, filterable: true, count: 30 }, - { name: 'time', type: 'date', indexed: true, analyzed: true, sortable: true, filterable: true, count: 30 }, - { name: '@tags', type: 'string', indexed: true, analyzed: true, sortable: true, filterable: true }, - { name: 'utc_time', type: 'date', indexed: true, analyzed: true, sortable: true, filterable: true }, - { name: 'phpmemory', type: 'number', indexed: true, analyzed: true, sortable: true, filterable: true }, - { name: 'ip', type: 'ip', indexed: true, analyzed: true, sortable: true, filterable: true }, - { name: 'request_body', type: 'attachment', indexed: true, analyzed: true, sortable: false, filterable: true }, - { name: 'point', type: 'geo_point', indexed: true, analyzed: true, sortable: false, filterable: false }, - { name: 'area', type: 'geo_shape', indexed: true, analyzed: true, sortable: true, filterable: false }, - { name: 'hashed', type: 'murmur3', indexed: true, analyzed: true, sortable: false, filterable: false }, - { name: 'geo.coordinates', type: 'geo_point', indexed: true, analyzed: true, sortable: false, filterable: true }, - { name: 'extension', type: 'string', indexed: true, analyzed: true, sortable: true, filterable: true }, - { name: 'machine.os', type: 'string', indexed: true, analyzed: true, sortable: true, filterable: true }, - { name: 'geo.src', type: 'string', indexed: true, analyzed: true, sortable: true, filterable: true }, - { name: '_type', type: 'string', indexed: true, analyzed: true, sortable: true, filterable: true }, - { name: '_id', type: 'string', indexed: false, analyzed: false, sortable: false, filterable: true}, - { name: '_source', type: 'string', indexed: false, analyzed: false, sortable: false, filterable: false}, - { name: 'custom_user_field', type: 'conflict', indexed: false, analyzed: false, sortable: false, filterable: true }, - { name: 'script string', type: 'string', scripted: true, script: '\'i am a string\'', lang: 'expression' }, - { name: 'script number', type: 'number', scripted: true, script: '1234', lang: 'expression' }, - { name: 'script murmur3', type: 'murmur3', scripted: true, script: '1234', lang: 'expression'}, - ].map(function (field) { - field.count = field.count || 0; - field.scripted = field.scripted || false; - return field; - }); +function stubbedLogstashFields() { + var sourceData = [ + { name: 'bytes', type: 'number', indexed: true, analyzed: true, sortable: true, filterable: true, count: 10 }, + { name: 'ssl', type: 'boolean', indexed: true, analyzed: true, sortable: true, filterable: true, count: 20 }, + { name: '@timestamp', type: 'date', indexed: true, analyzed: true, sortable: true, filterable: true, count: 30 }, + { name: 'time', type: 'date', indexed: true, analyzed: true, sortable: true, filterable: true, count: 30 }, + { name: '@tags', type: 'string', indexed: true, analyzed: true, sortable: true, filterable: true }, + { name: 'utc_time', type: 'date', indexed: true, analyzed: true, sortable: true, filterable: true }, + { name: 'phpmemory', type: 'number', indexed: true, analyzed: true, sortable: true, filterable: true }, + { name: 'ip', type: 'ip', indexed: true, analyzed: true, sortable: true, filterable: true }, + { name: 'request_body', type: 'attachment', indexed: true, analyzed: true, sortable: false, filterable: true }, + { name: 'point', type: 'geo_point', indexed: true, analyzed: true, sortable: false, filterable: false }, + { name: 'area', type: 'geo_shape', indexed: true, analyzed: true, sortable: true, filterable: false }, + { name: 'hashed', type: 'murmur3', indexed: true, analyzed: true, sortable: false, filterable: false }, + { name: 'geo.coordinates', type: 'geo_point', indexed: true, analyzed: true, sortable: false, filterable: true }, + { name: 'extension', type: 'string', indexed: true, analyzed: true, sortable: true, filterable: true }, + { name: 'machine.os', type: 'string', indexed: true, analyzed: true, sortable: true, filterable: true }, + { name: 'geo.src', type: 'string', indexed: true, analyzed: true, sortable: true, filterable: true }, + { name: '_type', type: 'string', indexed: true, analyzed: true, sortable: true, filterable: true }, + { name: '_id', type: 'string', indexed: false, analyzed: false, sortable: false, filterable: true}, + { name: '_source', type: 'string', indexed: false, analyzed: false, sortable: false, filterable: false}, + { name: 'custom_user_field', type: 'conflict', indexed: false, analyzed: false, sortable: false, filterable: true }, + { name: 'script string', type: 'string', scripted: true, script: '\'i am a string\'', lang: 'expression' }, + { name: 'script number', type: 'number', scripted: true, script: '1234', lang: 'expression' }, + { name: 'script murmur3', type: 'murmur3', scripted: true, script: '1234', lang: 'expression'}, + ].map(function (field) { + field.count = field.count || 0; + field.scripted = field.scripted || false; + return field; + }); - return sourceData; - } + return sourceData; +} - return stubbedLogstashFields; -}); +export default stubbedLogstashFields; diff --git a/src/fixtures/mapping_with_dupes.js b/src/fixtures/mapping_with_dupes.js index d43f8ebc8a694a..c404d3ea04af2e 100644 --- a/src/fixtures/mapping_with_dupes.js +++ b/src/fixtures/mapping_with_dupes.js @@ -1,40 +1,38 @@ -define(function (require) { - return { - test: { - mappings: { - testType: { - 'baz': { - full_name: 'baz', - mapping: { - bar: { - type: 'long' - } +export default { + test: { + mappings: { + testType: { + 'baz': { + full_name: 'baz', + mapping: { + bar: { + type: 'long' } - }, - 'foo.bar': { - full_name: 'foo.bar', - mapping: { - bar: { - type: 'string' - } + } + }, + 'foo.bar': { + full_name: 'foo.bar', + mapping: { + bar: { + type: 'string' } } } } - }, - duplicates: { - mappings: { - testType: { - 'baz': { - full_name: 'baz', - mapping: { - bar: { - type: 'date' - } + } + }, + duplicates: { + mappings: { + testType: { + 'baz': { + full_name: 'baz', + mapping: { + bar: { + type: 'date' } } } } } - }; -}); \ No newline at end of file + } +}; \ No newline at end of file diff --git a/src/fixtures/mock_courier.js b/src/fixtures/mock_courier.js index 5c8636d17b5942..d1932a2837e45d 100644 --- a/src/fixtures/mock_courier.js +++ b/src/fixtures/mock_courier.js @@ -1,18 +1,16 @@ import _ from 'lodash'; import sinon from 'auto-release-sinon'; import FixturesStubbedLogstashIndexPatternProvider from 'fixtures/stubbed_logstash_index_pattern'; -define(function (require) { - return function (Private, Promise) { - var indexPatterns = Private(FixturesStubbedLogstashIndexPatternProvider); - var getIndexPatternStub = sinon.stub(); - getIndexPatternStub.returns(Promise.resolve(indexPatterns)); +export default function (Private, Promise) { + var indexPatterns = Private(FixturesStubbedLogstashIndexPatternProvider); + var getIndexPatternStub = sinon.stub(); + getIndexPatternStub.returns(Promise.resolve(indexPatterns)); - var courier = { - indexPatterns: { get: getIndexPatternStub }, - getStub: getIndexPatternStub - }; - - return courier; + var courier = { + indexPatterns: { get: getIndexPatternStub }, + getStub: getIndexPatternStub }; -}); + + return courier; +}; diff --git a/src/fixtures/mock_state.js b/src/fixtures/mock_state.js index 20b1155e746bb6..43d579efe8edc9 100644 --- a/src/fixtures/mock_state.js +++ b/src/fixtures/mock_state.js @@ -1,19 +1,17 @@ import _ from 'lodash'; import sinon from 'auto-release-sinon'; -define(function (require) { - function MockState(defaults) { - this.on = _.noop; - this.off = _.noop; - this.save = sinon.stub(); - this.replace = sinon.stub(); - _.assign(this, defaults); - } +function MockState(defaults) { + this.on = _.noop; + this.off = _.noop; + this.save = sinon.stub(); + this.replace = sinon.stub(); + _.assign(this, defaults); +} - MockState.prototype.resetStub = function () { - this.save = sinon.stub(); - return this; - }; +MockState.prototype.resetStub = function () { + this.save = sinon.stub(); + return this; +}; - return MockState; -}); +export default MockState; diff --git a/src/fixtures/mock_ui_state.js b/src/fixtures/mock_ui_state.js index 00b9eecdf4cb3e..c4b77a4b8ba5dc 100644 --- a/src/fixtures/mock_ui_state.js +++ b/src/fixtures/mock_ui_state.js @@ -1,15 +1,13 @@ import _ from 'lodash'; -define(function (require) { - var keys = {}; - return { - get: function (path, def) { - return keys[path] == null ? def : keys[path]; - }, - set: function (path, val) { - keys[path] = val; - return val; - }, - on: _.noop, - off: _.noop - } -}) \ No newline at end of file +var keys = {}; +export default { + get: function (path, def) { + return keys[path] == null ? def : keys[path]; + }, + set: function (path, val) { + keys[path] = val; + return val; + }, + on: _.noop, + off: _.noop +} diff --git a/src/fixtures/real_hits.js b/src/fixtures/real_hits.js index 55047c2f41da25..6e47b15e6c33d0 100644 --- a/src/fixtures/real_hits.js +++ b/src/fixtures/real_hits.js @@ -1,227 +1,225 @@ -define(function (require) { - /* - Extensions: - gif: 5 - html: 8 - php: 5 (thus 5 with phpmemory fields) - png: 2 +/* + Extensions: + gif: 5 + html: 8 + php: 5 (thus 5 with phpmemory fields) + png: 2 - _type: - apache: 18 - nginx: 2 + _type: + apache: 18 + nginx: 2 - Bytes (all unique except): - 374: 2 + Bytes (all unique except): + 374: 2 - All have the same index, ids are unique - */ + All have the same index, ids are unique +*/ - return [ - { - '_index': 'logstash-2014.09.09', - '_type': 'apache', - '_id': '61', - '_score': 1, - '_source': { - 'extension': 'html', - 'bytes': 360.20000000000005 - } - }, - { - '_index': 'logstash-2014.09.09', - '_type': 'apache', - '_id': '388', - '_score': 1, - '_source': { - 'extension': 'gif', - 'bytes': 5848.700000000001 - } - }, - { - '_index': 'logstash-2014.09.09', - '_type': 'apache', - '_id': '403', - '_score': 1, - '_source': { - 'extension': 'png', - 'bytes': 841.6 - } - }, - { - '_index': 'logstash-2014.09.09', - '_type': 'apache', - '_id': '415', - '_score': 1, - '_source': { - 'extension': 'html', - 'bytes': 1626.4 - } - }, - { - '_index': 'logstash-2014.09.09', - '_type': 'apache', - '_id': '460', - '_score': 1, - '_source': { - 'extension': 'php', - 'bytes': 2070.6, - 'phpmemory': 276080 - } - }, - { - '_index': 'logstash-2014.09.09', - '_type': 'apache', - '_id': '496', - '_score': 1, - '_source': { - 'extension': 'gif', - 'bytes': 8421.6 - } - }, - { - '_index': 'logstash-2014.09.09', - '_type': 'apache', - '_id': '511', - '_score': 1, - '_source': { - 'extension': 'html', - 'bytes': 994.8000000000001 - } - }, - { - '_index': 'logstash-2014.09.09', - '_type': 'apache', - '_id': '701', - '_score': 1, - '_source': { - 'extension': 'html', - 'bytes': 374 - } - }, - { - '_index': 'logstash-2014.09.09', - '_type': 'apache', - '_id': '838', - '_score': 1, - '_source': { - 'extension': 'php', - 'bytes': 506.09999999999997, - 'phpmemory': 67480 - } - }, - { - '_index': 'logstash-2014.09.09', - '_type': 'apache', - '_id': '890', - '_score': 1, - '_source': { - 'extension': 'php', - 'bytes': 506.09999999999997, - 'phpmemory': 67480 - } - }, - { - '_index': 'logstash-2014.09.09', - '_type': 'nginx', - '_id': '927', - '_score': 1, - '_source': { - 'extension': 'php', - 'bytes': 2591.1, - 'phpmemory': 345480 - } - }, - { - '_index': 'logstash-2014.09.09', - '_type': 'apache', - '_id': '1034', - '_score': 1, - '_source': { - 'extension': 'html', - 'bytes': 1450 - } - }, - { - '_index': 'logstash-2014.09.09', - '_type': 'apache', - '_id': '1142', - '_score': 1, - '_source': { - 'extension': 'php', - 'bytes': 1803.8999999999999, - 'phpmemory': 240520 - } - }, - { - '_index': 'logstash-2014.09.09', - '_type': 'apache', - '_id': '1180', - '_score': 1, - '_source': { - 'extension': 'html', - 'bytes': 1626.4 - } - }, - { - '_index': 'logstash-2014.09.09', - '_type': 'nginx', - '_id': '1224', - '_score': 1, - '_source': { - 'extension': 'gif', - 'bytes': 10617.2 - } - }, - { - '_index': 'logstash-2014.09.09', - '_type': 'apache', - '_id': '1243', - '_score': 1, - '_source': { - 'extension': 'gif', - 'bytes': 10961.5 - } - }, - { - '_index': 'logstash-2014.09.09', - '_type': 'apache', - '_id': '1510', - '_score': 1, - '_source': { - 'extension': 'html', - 'bytes': 382.8 - } - }, - { - '_index': 'logstash-2014.09.09', - '_type': 'apache', - '_id': '1628', - '_score': 1, - '_source': { - 'extension': 'html', - 'bytes': 374 - } - }, - { - '_index': 'logstash-2014.09.09', - '_type': 'apache', - '_id': '1729', - '_score': 1, - '_source': { - 'extension': 'png', - 'bytes': 3059.2000000000003 - } - }, - { - '_index': 'logstash-2014.09.09', - '_type': 'apache', - '_id': '1945', - '_score': 1, - '_source': { - 'extension': 'gif', - 'bytes': 10617.2 - } - } - ]; -}); +export default [ + { + '_index': 'logstash-2014.09.09', + '_type': 'apache', + '_id': '61', + '_score': 1, + '_source': { + 'extension': 'html', + 'bytes': 360.20000000000005 + } + }, + { + '_index': 'logstash-2014.09.09', + '_type': 'apache', + '_id': '388', + '_score': 1, + '_source': { + 'extension': 'gif', + 'bytes': 5848.700000000001 + } + }, + { + '_index': 'logstash-2014.09.09', + '_type': 'apache', + '_id': '403', + '_score': 1, + '_source': { + 'extension': 'png', + 'bytes': 841.6 + } + }, + { + '_index': 'logstash-2014.09.09', + '_type': 'apache', + '_id': '415', + '_score': 1, + '_source': { + 'extension': 'html', + 'bytes': 1626.4 + } + }, + { + '_index': 'logstash-2014.09.09', + '_type': 'apache', + '_id': '460', + '_score': 1, + '_source': { + 'extension': 'php', + 'bytes': 2070.6, + 'phpmemory': 276080 + } + }, + { + '_index': 'logstash-2014.09.09', + '_type': 'apache', + '_id': '496', + '_score': 1, + '_source': { + 'extension': 'gif', + 'bytes': 8421.6 + } + }, + { + '_index': 'logstash-2014.09.09', + '_type': 'apache', + '_id': '511', + '_score': 1, + '_source': { + 'extension': 'html', + 'bytes': 994.8000000000001 + } + }, + { + '_index': 'logstash-2014.09.09', + '_type': 'apache', + '_id': '701', + '_score': 1, + '_source': { + 'extension': 'html', + 'bytes': 374 + } + }, + { + '_index': 'logstash-2014.09.09', + '_type': 'apache', + '_id': '838', + '_score': 1, + '_source': { + 'extension': 'php', + 'bytes': 506.09999999999997, + 'phpmemory': 67480 + } + }, + { + '_index': 'logstash-2014.09.09', + '_type': 'apache', + '_id': '890', + '_score': 1, + '_source': { + 'extension': 'php', + 'bytes': 506.09999999999997, + 'phpmemory': 67480 + } + }, + { + '_index': 'logstash-2014.09.09', + '_type': 'nginx', + '_id': '927', + '_score': 1, + '_source': { + 'extension': 'php', + 'bytes': 2591.1, + 'phpmemory': 345480 + } + }, + { + '_index': 'logstash-2014.09.09', + '_type': 'apache', + '_id': '1034', + '_score': 1, + '_source': { + 'extension': 'html', + 'bytes': 1450 + } + }, + { + '_index': 'logstash-2014.09.09', + '_type': 'apache', + '_id': '1142', + '_score': 1, + '_source': { + 'extension': 'php', + 'bytes': 1803.8999999999999, + 'phpmemory': 240520 + } + }, + { + '_index': 'logstash-2014.09.09', + '_type': 'apache', + '_id': '1180', + '_score': 1, + '_source': { + 'extension': 'html', + 'bytes': 1626.4 + } + }, + { + '_index': 'logstash-2014.09.09', + '_type': 'nginx', + '_id': '1224', + '_score': 1, + '_source': { + 'extension': 'gif', + 'bytes': 10617.2 + } + }, + { + '_index': 'logstash-2014.09.09', + '_type': 'apache', + '_id': '1243', + '_score': 1, + '_source': { + 'extension': 'gif', + 'bytes': 10961.5 + } + }, + { + '_index': 'logstash-2014.09.09', + '_type': 'apache', + '_id': '1510', + '_score': 1, + '_source': { + 'extension': 'html', + 'bytes': 382.8 + } + }, + { + '_index': 'logstash-2014.09.09', + '_type': 'apache', + '_id': '1628', + '_score': 1, + '_source': { + 'extension': 'html', + 'bytes': 374 + } + }, + { + '_index': 'logstash-2014.09.09', + '_type': 'apache', + '_id': '1729', + '_score': 1, + '_source': { + 'extension': 'png', + 'bytes': 3059.2000000000003 + } + }, + { + '_index': 'logstash-2014.09.09', + '_type': 'apache', + '_id': '1945', + '_score': 1, + '_source': { + 'extension': 'gif', + 'bytes': 10617.2 + } + } +]; diff --git a/src/fixtures/search_response.js b/src/fixtures/search_response.js index 5c361e21e4da09..a035e7ccf2e329 100644 --- a/src/fixtures/search_response.js +++ b/src/fixtures/search_response.js @@ -1,18 +1,16 @@ import hits from 'fixtures/real_hits'; -define(function (require) { - return { - took: 73, - timed_out: false, - _shards: { - total: 144, - successful: 144, - failed: 0 - }, - hits: { - total : 49487, - max_score : 1.0, - hits: hits - } - }; -}); \ No newline at end of file +export default { + took: 73, + timed_out: false, + _shards: { + total: 144, + successful: 144, + failed: 0 + }, + hits: { + total : 49487, + max_score : 1.0, + hits: hits + } +}; \ No newline at end of file diff --git a/src/fixtures/stubbed_doc_source_response.js b/src/fixtures/stubbed_doc_source_response.js index 82050b5325c89c..7034d994271014 100644 --- a/src/fixtures/stubbed_doc_source_response.js +++ b/src/fixtures/stubbed_doc_source_response.js @@ -1,24 +1,22 @@ import FixturesLogstashFieldsProvider from 'fixtures/logstash_fields'; -define(function (require) { - function stubbedDocSourceResponse(Private) { - var mockLogstashFields = Private(FixturesLogstashFieldsProvider); +function stubbedDocSourceResponse(Private) { + var mockLogstashFields = Private(FixturesLogstashFieldsProvider); - return function (id, index) { - index = index || '.kibana'; - return { - _id: id, - _index: index, - _type: 'index-pattern', - _version: 2, - found: true, - _source: { - customFormats: '{}', - fields: JSON.stringify(mockLogstashFields) - } - }; + return function (id, index) { + index = index || '.kibana'; + return { + _id: id, + _index: index, + _type: 'index-pattern', + _version: 2, + found: true, + _source: { + customFormats: '{}', + fields: JSON.stringify(mockLogstashFields) + } }; - } + }; +} - return stubbedDocSourceResponse; -}); \ No newline at end of file +export default stubbedDocSourceResponse; \ No newline at end of file diff --git a/src/fixtures/stubbed_logstash_index_pattern.js b/src/fixtures/stubbed_logstash_index_pattern.js index 0e6ec717ffe924..cac43c3255d3d4 100644 --- a/src/fixtures/stubbed_logstash_index_pattern.js +++ b/src/fixtures/stubbed_logstash_index_pattern.js @@ -2,26 +2,24 @@ import _ from 'lodash'; import TestUtilsStubIndexPatternProvider from 'testUtils/stub_index_pattern'; import IndexPatternsFieldTypesProvider from 'ui/index_patterns/_field_types'; import FixturesLogstashFieldsProvider from 'fixtures/logstash_fields'; -define(function (require) { - return function stubbedLogstashIndexPatternService(Private) { - var StubIndexPattern = Private(TestUtilsStubIndexPatternProvider); - var fieldTypes = Private(IndexPatternsFieldTypesProvider); - var mockLogstashFields = Private(FixturesLogstashFieldsProvider); +export default function stubbedLogstashIndexPatternService(Private) { + var StubIndexPattern = Private(TestUtilsStubIndexPatternProvider); + var fieldTypes = Private(IndexPatternsFieldTypesProvider); + var mockLogstashFields = Private(FixturesLogstashFieldsProvider); - var fields = mockLogstashFields.map(function (field) { - field.displayName = field.name; - var type = fieldTypes.byName[field.type]; - if (!type) throw new TypeError('unknown type ' + field.type); - if (!_.has(field, 'sortable')) field.sortable = type.sortable; - if (!_.has(field, 'filterable')) field.filterable = type.filterable; - return field; - }); + var fields = mockLogstashFields.map(function (field) { + field.displayName = field.name; + var type = fieldTypes.byName[field.type]; + if (!type) throw new TypeError('unknown type ' + field.type); + if (!_.has(field, 'sortable')) field.sortable = type.sortable; + if (!_.has(field, 'filterable')) field.filterable = type.filterable; + return field; + }); - var indexPattern = new StubIndexPattern('logstash-*', 'time', fields); - indexPattern.id = 'logstash-*'; + var indexPattern = new StubIndexPattern('logstash-*', 'time', fields); + indexPattern.id = 'logstash-*'; - return indexPattern; + return indexPattern; - }; -}); +}; diff --git a/src/fixtures/stubbed_search_source.js b/src/fixtures/stubbed_search_source.js index 147fbe1a55cb7e..3cf015475b750e 100644 --- a/src/fixtures/stubbed_search_source.js +++ b/src/fixtures/stubbed_search_source.js @@ -1,40 +1,38 @@ import sinon from 'auto-release-sinon'; import searchResponse from 'fixtures/search_response'; import FixturesStubbedLogstashIndexPatternProvider from 'fixtures/stubbed_logstash_index_pattern'; -define(function (require) { - return function stubSearchSource(Private, $q, Promise) { - var deferedResult = $q.defer(); - var indexPattern = Private(FixturesStubbedLogstashIndexPatternProvider); +export default function stubSearchSource(Private, $q, Promise) { + var deferedResult = $q.defer(); + var indexPattern = Private(FixturesStubbedLogstashIndexPatternProvider); - return { - sort: sinon.spy(), - size: sinon.spy(), - fetch: sinon.spy(), - destroy: sinon.spy(), - get: function (param) { - switch (param) { - case 'index': - return indexPattern; - default: - throw new Error('Param "' + param + '" is not implemented in the stubbed search source'); - } - }, - crankResults: function () { - deferedResult.resolve(searchResponse); - deferedResult = $q.defer(); - }, - onResults: function () { - // Up to the test to resolve this manually - // For example: - // someHandler.resolve(require('fixtures/search_response')) - return deferedResult.promise; - }, - onError: function () { return $q.defer().promise; }, - _flatten: function () { - return Promise.resolve({ index: indexPattern, body: {} }); + return { + sort: sinon.spy(), + size: sinon.spy(), + fetch: sinon.spy(), + destroy: sinon.spy(), + get: function (param) { + switch (param) { + case 'index': + return indexPattern; + default: + throw new Error('Param "' + param + '" is not implemented in the stubbed search source'); } - }; - + }, + crankResults: function () { + deferedResult.resolve(searchResponse); + deferedResult = $q.defer(); + }, + onResults: function () { + // Up to the test to resolve this manually + // For example: + // someHandler.resolve(require('fixtures/search_response')) + return deferedResult.promise; + }, + onError: function () { return $q.defer().promise; }, + _flatten: function () { + return Promise.resolve({ index: indexPattern, body: {} }); + } }; -}); + +}; diff --git a/src/fixtures/tilemap_map.js b/src/fixtures/tilemap_map.js index 2c808be0bbc6e0..029bf1ea8afdc9 100644 --- a/src/fixtures/tilemap_map.js +++ b/src/fixtures/tilemap_map.js @@ -1,21 +1,19 @@ import sinon from 'auto-release-sinon'; -define(function (require) { - function MockMap(container, chartData, params) { - this.container = container; - this.chartData = chartData; - this.params = params; +function MockMap(container, chartData, params) { + this.container = container; + this.chartData = chartData; + this.params = params; - // stub required methods - this.addStubs(); - } + // stub required methods + this.addStubs(); +} - MockMap.prototype.addStubs = function () { - this.addTitle = sinon.stub(); - this.addFitControl = sinon.stub(); - this.addBoundingControl = sinon.stub(); - this.destroy = sinon.stub(); - }; +MockMap.prototype.addStubs = function () { + this.addTitle = sinon.stub(); + this.addFitControl = sinon.stub(); + this.addBoundingControl = sinon.stub(); + this.destroy = sinon.stub(); +}; - return MockMap; -}); \ No newline at end of file +export default MockMap; \ No newline at end of file diff --git a/src/plugins/devMode/public/visDebugSpyPanel.js b/src/plugins/devMode/public/visDebugSpyPanel.js index 5c3336f2b0891d..16a110a10bfc2d 100644 --- a/src/plugins/devMode/public/visDebugSpyPanel.js +++ b/src/plugins/devMode/public/visDebugSpyPanel.js @@ -1,20 +1,18 @@ -define(function (require) { - // register the spy mode or it won't show up in the spys - require('ui/registry/spy_modes').register(VisDetailsSpyProvider); +// register the spy mode or it won't show up in the spys +require('ui/registry/spy_modes').register(VisDetailsSpyProvider); - function VisDetailsSpyProvider(Notifier, $filter, $rootScope, config) { - return { - name: 'debug', - display: 'Debug', - template: require('plugins/devMode/visDebugSpyPanel.html'), - order: 5, - link: function ($scope, $el) { - $scope.$watch('vis.getState() | json', function (json) { - $scope.visStateJson = json; - }); - } - }; - } +function VisDetailsSpyProvider(Notifier, $filter, $rootScope, config) { + return { + name: 'debug', + display: 'Debug', + template: require('plugins/devMode/visDebugSpyPanel.html'), + order: 5, + link: function ($scope, $el) { + $scope.$watch('vis.getState() | json', function (json) { + $scope.visStateJson = json; + }); + } + }; +} - return VisDetailsSpyProvider; -}); +export default VisDetailsSpyProvider; diff --git a/src/plugins/kbn_vislib_vis_types/public/area.js b/src/plugins/kbn_vislib_vis_types/public/area.js index eae49674fd1005..c0c6e30ede935e 100644 --- a/src/plugins/kbn_vislib_vis_types/public/area.js +++ b/src/plugins/kbn_vislib_vis_types/public/area.js @@ -1,74 +1,72 @@ import VislibVisTypeVislibVisTypeProvider from 'ui/vislib_vis_type/VislibVisType'; import VisSchemasProvider from 'ui/Vis/Schemas'; -define(function (require) { - return function HistogramVisType(Private) { - const VislibVisType = Private(VislibVisTypeVislibVisTypeProvider); - const Schemas = Private(VisSchemasProvider); +export default function HistogramVisType(Private) { + const VislibVisType = Private(VislibVisTypeVislibVisTypeProvider); + const Schemas = Private(VisSchemasProvider); - return new VislibVisType({ - name: 'area', - title: 'Area chart', - icon: 'fa-area-chart', - description: 'Great for stacked timelines in which the total of all series is more important ' + - 'than comparing any two or more series. Less useful for assessing the relative change of ' + - 'unrelated data points as changes in a series lower down the stack will have a difficult to gauge ' + - 'effect on the series above it.', - params: { - defaults: { - shareYAxis: true, - addTooltip: true, - addLegend: true, - smoothLines: false, - scale: 'linear', - interpolate: 'linear', - mode: 'stacked', - times: [], - addTimeMarker: false, - defaultYExtents: false, - setYExtents: false, - yAxis: {} - }, - scales: ['linear', 'log', 'square root'], - modes: ['stacked', 'overlap', 'percentage', 'wiggle', 'silhouette'], - editor: require('plugins/kbn_vislib_vis_types/editors/area.html') + return new VislibVisType({ + name: 'area', + title: 'Area chart', + icon: 'fa-area-chart', + description: 'Great for stacked timelines in which the total of all series is more important ' + + 'than comparing any two or more series. Less useful for assessing the relative change of ' + + 'unrelated data points as changes in a series lower down the stack will have a difficult to gauge ' + + 'effect on the series above it.', + params: { + defaults: { + shareYAxis: true, + addTooltip: true, + addLegend: true, + smoothLines: false, + scale: 'linear', + interpolate: 'linear', + mode: 'stacked', + times: [], + addTimeMarker: false, + defaultYExtents: false, + setYExtents: false, + yAxis: {} }, - schemas: new Schemas([ - { - group: 'metrics', - name: 'metric', - title: 'Y-Axis', - min: 1, - aggFilter: '!std_dev', - defaults: [ - { schema: 'metric', type: 'count' } - ] - }, - { - group: 'buckets', - name: 'segment', - title: 'X-Axis', - min: 0, - max: 1, - aggFilter: '!geohash_grid' - }, - { - group: 'buckets', - name: 'group', - title: 'Split Area', - min: 0, - max: 1, - aggFilter: '!geohash_grid' - }, - { - group: 'buckets', - name: 'split', - title: 'Split Chart', - min: 0, - max: 1, - aggFilter: '!geohash_grid' - } - ]) - }); - }; -}); + scales: ['linear', 'log', 'square root'], + modes: ['stacked', 'overlap', 'percentage', 'wiggle', 'silhouette'], + editor: require('plugins/kbn_vislib_vis_types/editors/area.html') + }, + schemas: new Schemas([ + { + group: 'metrics', + name: 'metric', + title: 'Y-Axis', + min: 1, + aggFilter: '!std_dev', + defaults: [ + { schema: 'metric', type: 'count' } + ] + }, + { + group: 'buckets', + name: 'segment', + title: 'X-Axis', + min: 0, + max: 1, + aggFilter: '!geohash_grid' + }, + { + group: 'buckets', + name: 'group', + title: 'Split Area', + min: 0, + max: 1, + aggFilter: '!geohash_grid' + }, + { + group: 'buckets', + name: 'split', + title: 'Split Chart', + min: 0, + max: 1, + aggFilter: '!geohash_grid' + } + ]) + }); +}; diff --git a/src/plugins/kbn_vislib_vis_types/public/controls/line_interpolation_option.js b/src/plugins/kbn_vislib_vis_types/public/controls/line_interpolation_option.js index 5d3a7c912e9cac..f36cf3fe3eaec5 100644 --- a/src/plugins/kbn_vislib_vis_types/public/controls/line_interpolation_option.js +++ b/src/plugins/kbn_vislib_vis_types/public/controls/line_interpolation_option.js @@ -1,13 +1,11 @@ import _ from 'lodash'; import $ from 'jquery'; -define(function (require) { - const module = require('ui/modules').get('kibana'); +const module = require('ui/modules').get('kibana'); - module.directive('lineInterpolationOption', function ($parse, $compile) { - return { - restrict: 'E', - template: require('plugins/kbn_vislib_vis_types/controls/line_interpolation_option.html'), - replace: true - }; - }); +module.directive('lineInterpolationOption', function ($parse, $compile) { + return { + restrict: 'E', + template: require('plugins/kbn_vislib_vis_types/controls/line_interpolation_option.html'), + replace: true + }; }); diff --git a/src/plugins/kbn_vislib_vis_types/public/controls/point_series_options.js b/src/plugins/kbn_vislib_vis_types/public/controls/point_series_options.js index 0876c4bb23fa8a..703ef2bd0b17bc 100644 --- a/src/plugins/kbn_vislib_vis_types/public/controls/point_series_options.js +++ b/src/plugins/kbn_vislib_vis_types/public/controls/point_series_options.js @@ -1,14 +1,12 @@ import _ from 'lodash'; import $ from 'jquery'; import 'ui/directives/inequality'; -define(function (require) { - const module = require('ui/modules').get('kibana'); +const module = require('ui/modules').get('kibana'); - module.directive('pointSeriesOptions', function ($parse, $compile) { - return { - restrict: 'E', - template: require('plugins/kbn_vislib_vis_types/controls/point_series_options.html'), - replace: true - }; - }); +module.directive('pointSeriesOptions', function ($parse, $compile) { + return { + restrict: 'E', + template: require('plugins/kbn_vislib_vis_types/controls/point_series_options.html'), + replace: true + }; }); diff --git a/src/plugins/kbn_vislib_vis_types/public/controls/vislib_basic_options.js b/src/plugins/kbn_vislib_vis_types/public/controls/vislib_basic_options.js index ead3c8fb257e72..53861cb80b38f3 100644 --- a/src/plugins/kbn_vislib_vis_types/public/controls/vislib_basic_options.js +++ b/src/plugins/kbn_vislib_vis_types/public/controls/vislib_basic_options.js @@ -1,13 +1,11 @@ import _ from 'lodash'; import $ from 'jquery'; -define(function (require) { - const module = require('ui/modules').get('kibana'); +const module = require('ui/modules').get('kibana'); - module.directive('vislibBasicOptions', function ($parse, $compile) { - return { - restrict: 'E', - template: require('plugins/kbn_vislib_vis_types/controls/vislib_basic_options.html'), - replace: true - }; - }); +module.directive('vislibBasicOptions', function ($parse, $compile) { + return { + restrict: 'E', + template: require('plugins/kbn_vislib_vis_types/controls/vislib_basic_options.html'), + replace: true + }; }); diff --git a/src/plugins/kbn_vislib_vis_types/public/histogram.js b/src/plugins/kbn_vislib_vis_types/public/histogram.js index 994b7f68deb65d..70f2e4220fa33d 100644 --- a/src/plugins/kbn_vislib_vis_types/public/histogram.js +++ b/src/plugins/kbn_vislib_vis_types/public/histogram.js @@ -1,70 +1,68 @@ import VislibVisTypeVislibVisTypeProvider from 'ui/vislib_vis_type/VislibVisType'; import VisSchemasProvider from 'ui/Vis/Schemas'; -define(function (require) { - return function HistogramVisType(Private) { - const VislibVisType = Private(VislibVisTypeVislibVisTypeProvider); - const Schemas = Private(VisSchemasProvider); +export default function HistogramVisType(Private) { + const VislibVisType = Private(VislibVisTypeVislibVisTypeProvider); + const Schemas = Private(VisSchemasProvider); - return new VislibVisType({ - name: 'histogram', - title: 'Vertical bar chart', - icon: 'fa-bar-chart', - description: 'The goto chart for oh-so-many needs. Great for time and non-time data. Stacked or grouped, ' + - 'exact numbers or percentages. If you are not sure which chart your need, you could do worse than to start here.', - params: { - defaults: { - shareYAxis: true, - addTooltip: true, - addLegend: true, - scale: 'linear', - mode: 'stacked', - times: [], - addTimeMarker: false, - defaultYExtents: false, - setYExtents: false, - yAxis: {} - }, - scales: ['linear', 'log', 'square root'], - modes: ['stacked', 'percentage', 'grouped'], - editor: require('plugins/kbn_vislib_vis_types/editors/histogram.html') + return new VislibVisType({ + name: 'histogram', + title: 'Vertical bar chart', + icon: 'fa-bar-chart', + description: 'The goto chart for oh-so-many needs. Great for time and non-time data. Stacked or grouped, ' + + 'exact numbers or percentages. If you are not sure which chart your need, you could do worse than to start here.', + params: { + defaults: { + shareYAxis: true, + addTooltip: true, + addLegend: true, + scale: 'linear', + mode: 'stacked', + times: [], + addTimeMarker: false, + defaultYExtents: false, + setYExtents: false, + yAxis: {} }, - schemas: new Schemas([ - { - group: 'metrics', - name: 'metric', - title: 'Y-Axis', - min: 1, - aggFilter: '!std_dev', - defaults: [ - { schema: 'metric', type: 'count' } - ] - }, - { - group: 'buckets', - name: 'segment', - title: 'X-Axis', - min: 0, - max: 1, - aggFilter: '!geohash_grid' - }, - { - group: 'buckets', - name: 'group', - title: 'Split Bars', - min: 0, - max: 1, - aggFilter: '!geohash_grid' - }, - { - group: 'buckets', - name: 'split', - title: 'Split Chart', - min: 0, - max: 1, - aggFilter: '!geohash_grid' - } - ]) - }); - }; -}); + scales: ['linear', 'log', 'square root'], + modes: ['stacked', 'percentage', 'grouped'], + editor: require('plugins/kbn_vislib_vis_types/editors/histogram.html') + }, + schemas: new Schemas([ + { + group: 'metrics', + name: 'metric', + title: 'Y-Axis', + min: 1, + aggFilter: '!std_dev', + defaults: [ + { schema: 'metric', type: 'count' } + ] + }, + { + group: 'buckets', + name: 'segment', + title: 'X-Axis', + min: 0, + max: 1, + aggFilter: '!geohash_grid' + }, + { + group: 'buckets', + name: 'group', + title: 'Split Bars', + min: 0, + max: 1, + aggFilter: '!geohash_grid' + }, + { + group: 'buckets', + name: 'split', + title: 'Split Chart', + min: 0, + max: 1, + aggFilter: '!geohash_grid' + } + ]) + }); +}; diff --git a/src/plugins/kbn_vislib_vis_types/public/kbn_vislib_vis_types.js b/src/plugins/kbn_vislib_vis_types/public/kbn_vislib_vis_types.js index 3c4d0be9c2f000..0f19a3a031b49c 100644 --- a/src/plugins/kbn_vislib_vis_types/public/kbn_vislib_vis_types.js +++ b/src/plugins/kbn_vislib_vis_types/public/kbn_vislib_vis_types.js @@ -1,8 +1,6 @@ import visTypes from 'ui/registry/vis_types'; -define(function (require) { - visTypes.register(require('plugins/kbn_vislib_vis_types/histogram')); - visTypes.register(require('plugins/kbn_vislib_vis_types/line')); - visTypes.register(require('plugins/kbn_vislib_vis_types/pie')); - visTypes.register(require('plugins/kbn_vislib_vis_types/area')); - visTypes.register(require('plugins/kbn_vislib_vis_types/tileMap')); -}); +visTypes.register(require('plugins/kbn_vislib_vis_types/histogram')); +visTypes.register(require('plugins/kbn_vislib_vis_types/line')); +visTypes.register(require('plugins/kbn_vislib_vis_types/pie')); +visTypes.register(require('plugins/kbn_vislib_vis_types/area')); +visTypes.register(require('plugins/kbn_vislib_vis_types/tileMap')); diff --git a/src/plugins/kbn_vislib_vis_types/public/line.js b/src/plugins/kbn_vislib_vis_types/public/line.js index dcc9013965db85..b1a2299924382c 100644 --- a/src/plugins/kbn_vislib_vis_types/public/line.js +++ b/src/plugins/kbn_vislib_vis_types/public/line.js @@ -1,80 +1,78 @@ import VislibVisTypeVislibVisTypeProvider from 'ui/vislib_vis_type/VislibVisType'; import VisSchemasProvider from 'ui/Vis/Schemas'; -define(function (require) { - return function HistogramVisType(Private) { - const VislibVisType = Private(VislibVisTypeVislibVisTypeProvider); - const Schemas = Private(VisSchemasProvider); +export default function HistogramVisType(Private) { + const VislibVisType = Private(VislibVisTypeVislibVisTypeProvider); + const Schemas = Private(VisSchemasProvider); - return new VislibVisType({ - name: 'line', - title: 'Line chart', - icon: 'fa-line-chart', - description: 'Often the best chart for high density time series. Great for comparing one series to another. ' + - 'Be careful with sparse sets as the connection between points can be misleading.', - params: { - defaults: { - shareYAxis: true, - addTooltip: true, - addLegend: true, - showCircles: true, - smoothLines: false, - interpolate: 'linear', - scale: 'linear', - drawLinesBetweenPoints: true, - radiusRatio: 9, - times: [], - addTimeMarker: false, - defaultYExtents: false, - setYExtents: false, - yAxis: {} - }, - scales: ['linear', 'log', 'square root'], - editor: require('plugins/kbn_vislib_vis_types/editors/line.html') + return new VislibVisType({ + name: 'line', + title: 'Line chart', + icon: 'fa-line-chart', + description: 'Often the best chart for high density time series. Great for comparing one series to another. ' + + 'Be careful with sparse sets as the connection between points can be misleading.', + params: { + defaults: { + shareYAxis: true, + addTooltip: true, + addLegend: true, + showCircles: true, + smoothLines: false, + interpolate: 'linear', + scale: 'linear', + drawLinesBetweenPoints: true, + radiusRatio: 9, + times: [], + addTimeMarker: false, + defaultYExtents: false, + setYExtents: false, + yAxis: {} }, - schemas: new Schemas([ - { - group: 'metrics', - name: 'metric', - title: 'Y-Axis', - min: 1, - defaults: [ - { schema: 'metric', type: 'count' } - ] - }, - { - group: 'metrics', - name: 'radius', - title: 'Dot Size', - min: 0, - max: 1, - aggFilter: ['count', 'avg', 'sum', 'min', 'max', 'cardinality'] - }, - { - group: 'buckets', - name: 'segment', - title: 'X-Axis', - min: 0, - max: 1, - aggFilter: '!geohash_grid' - }, - { - group: 'buckets', - name: 'group', - title: 'Split Lines', - min: 0, - max: 1, - aggFilter: '!geohash_grid' - }, - { - group: 'buckets', - name: 'split', - title: 'Split Chart', - min: 0, - max: 1, - aggFilter: '!geohash_grid' - } - ]) - }); - }; -}); + scales: ['linear', 'log', 'square root'], + editor: require('plugins/kbn_vislib_vis_types/editors/line.html') + }, + schemas: new Schemas([ + { + group: 'metrics', + name: 'metric', + title: 'Y-Axis', + min: 1, + defaults: [ + { schema: 'metric', type: 'count' } + ] + }, + { + group: 'metrics', + name: 'radius', + title: 'Dot Size', + min: 0, + max: 1, + aggFilter: ['count', 'avg', 'sum', 'min', 'max', 'cardinality'] + }, + { + group: 'buckets', + name: 'segment', + title: 'X-Axis', + min: 0, + max: 1, + aggFilter: '!geohash_grid' + }, + { + group: 'buckets', + name: 'group', + title: 'Split Lines', + min: 0, + max: 1, + aggFilter: '!geohash_grid' + }, + { + group: 'buckets', + name: 'split', + title: 'Split Chart', + min: 0, + max: 1, + aggFilter: '!geohash_grid' + } + ]) + }); +}; diff --git a/src/plugins/kbn_vislib_vis_types/public/pie.js b/src/plugins/kbn_vislib_vis_types/public/pie.js index c3b2f8f73e9551..d06741ddc31886 100644 --- a/src/plugins/kbn_vislib_vis_types/public/pie.js +++ b/src/plugins/kbn_vislib_vis_types/public/pie.js @@ -1,60 +1,58 @@ import VislibVisTypeVislibVisTypeProvider from 'ui/vislib_vis_type/VislibVisType'; import VisSchemasProvider from 'ui/Vis/Schemas'; -define(function (require) { - return function HistogramVisType(Private) { - const VislibVisType = Private(VislibVisTypeVislibVisTypeProvider); - const Schemas = Private(VisSchemasProvider); +export default function HistogramVisType(Private) { + const VislibVisType = Private(VislibVisTypeVislibVisTypeProvider); + const Schemas = Private(VisSchemasProvider); - return new VislibVisType({ - name: 'pie', - title: 'Pie chart', - icon: 'fa-pie-chart', - description: 'Pie charts are ideal for displaying the parts of some whole. For example, sales percentages by department.' + - 'Pro Tip: Pie charts are best used sparingly, and with no more than 7 slices per pie.', - params: { - defaults: { - shareYAxis: true, - addTooltip: true, - addLegend: true, - isDonut: false - }, - editor: require('plugins/kbn_vislib_vis_types/editors/pie.html') + return new VislibVisType({ + name: 'pie', + title: 'Pie chart', + icon: 'fa-pie-chart', + description: 'Pie charts are ideal for displaying the parts of some whole. For example, sales percentages by department.' + + 'Pro Tip: Pie charts are best used sparingly, and with no more than 7 slices per pie.', + params: { + defaults: { + shareYAxis: true, + addTooltip: true, + addLegend: true, + isDonut: false }, - responseConverter: false, - hierarchicalData: true, - schemas: new Schemas([ - { - group: 'metrics', - name: 'metric', - title: 'Slice Size', - min: 1, - max: 1, - aggFilter: ['sum', 'count', 'cardinality'], - defaults: [ - { schema: 'metric', type: 'count' } - ] - }, - { - group: 'buckets', - name: 'segment', - icon: 'fa fa-scissors', - title: 'Split Slices', - min: 0, - max: Infinity, - aggFilter: '!geohash_grid' - }, - { - group: 'buckets', - name: 'split', - icon: 'fa fa-th', - title: 'Split Chart', - mustBeFirst: true, - min: 0, - max: 1, - aggFilter: '!geohash_grid' - } - ]) - }); - }; -}); + editor: require('plugins/kbn_vislib_vis_types/editors/pie.html') + }, + responseConverter: false, + hierarchicalData: true, + schemas: new Schemas([ + { + group: 'metrics', + name: 'metric', + title: 'Slice Size', + min: 1, + max: 1, + aggFilter: ['sum', 'count', 'cardinality'], + defaults: [ + { schema: 'metric', type: 'count' } + ] + }, + { + group: 'buckets', + name: 'segment', + icon: 'fa fa-scissors', + title: 'Split Slices', + min: 0, + max: Infinity, + aggFilter: '!geohash_grid' + }, + { + group: 'buckets', + name: 'split', + icon: 'fa fa-th', + title: 'Split Chart', + mustBeFirst: true, + min: 0, + max: 1, + aggFilter: '!geohash_grid' + } + ]) + }); +}; diff --git a/src/plugins/kbn_vislib_vis_types/public/tileMap.js b/src/plugins/kbn_vislib_vis_types/public/tileMap.js index eb69273bd5180b..364721de75d271 100644 --- a/src/plugins/kbn_vislib_vis_types/public/tileMap.js +++ b/src/plugins/kbn_vislib_vis_types/public/tileMap.js @@ -4,126 +4,124 @@ import VislibVisTypeVislibVisTypeProvider from 'ui/vislib_vis_type/VislibVisType import VisSchemasProvider from 'ui/Vis/Schemas'; import AggResponseGeoJsonGeoJsonProvider from 'ui/agg_response/geo_json/geo_json'; import FilterBarPushFilterProvider from 'ui/filter_bar/push_filter'; -define(function (require) { - return function TileMapVisType(Private, getAppState, courier, config) { - const VislibVisType = Private(VislibVisTypeVislibVisTypeProvider); - const Schemas = Private(VisSchemasProvider); - const geoJsonConverter = Private(AggResponseGeoJsonGeoJsonProvider); +export default function TileMapVisType(Private, getAppState, courier, config) { + const VislibVisType = Private(VislibVisTypeVislibVisTypeProvider); + const Schemas = Private(VisSchemasProvider); + const geoJsonConverter = Private(AggResponseGeoJsonGeoJsonProvider); - return new VislibVisType({ - name: 'tile_map', - title: 'Tile map', - icon: 'fa-map-marker', - description: 'Your source for geographic maps. Requires an elasticsearch geo_point field. More specifically, a field ' + - 'that is mapped as type:geo_point with latitude and longitude coordinates.', - params: { - defaults: { - mapType: 'Scaled Circle Markers', - isDesaturated: true, - addTooltip: true, - heatMaxZoom: 16, - heatMinOpacity: 0.1, - heatRadius: 25, - heatBlur: 15, - heatNormalizeData: true, - wms: config.get('visualization:tileMap:WMSdefaults') - }, - mapTypes: ['Scaled Circle Markers', 'Shaded Circle Markers', 'Shaded Geohash Grid', 'Heatmap'], - canDesaturate: !!supports.cssFilters, - editor: require('plugins/kbn_vislib_vis_types/editors/tile_map.html') + return new VislibVisType({ + name: 'tile_map', + title: 'Tile map', + icon: 'fa-map-marker', + description: 'Your source for geographic maps. Requires an elasticsearch geo_point field. More specifically, a field ' + + 'that is mapped as type:geo_point with latitude and longitude coordinates.', + params: { + defaults: { + mapType: 'Scaled Circle Markers', + isDesaturated: true, + addTooltip: true, + heatMaxZoom: 16, + heatMinOpacity: 0.1, + heatRadius: 25, + heatBlur: 15, + heatNormalizeData: true, + wms: config.get('visualization:tileMap:WMSdefaults') }, - listeners: { - rectangle: function (event) { - const agg = _.get(event, 'chart.geohashGridAgg'); - if (!agg) return; + mapTypes: ['Scaled Circle Markers', 'Shaded Circle Markers', 'Shaded Geohash Grid', 'Heatmap'], + canDesaturate: !!supports.cssFilters, + editor: require('plugins/kbn_vislib_vis_types/editors/tile_map.html') + }, + listeners: { + rectangle: function (event) { + const agg = _.get(event, 'chart.geohashGridAgg'); + if (!agg) return; - const pushFilter = Private(FilterBarPushFilterProvider)(getAppState()); - const indexPatternName = agg.vis.indexPattern.id; - const field = agg.fieldName(); - const filter = {geo_bounding_box: {}}; - filter.geo_bounding_box[field] = event.bounds; + const pushFilter = Private(FilterBarPushFilterProvider)(getAppState()); + const indexPatternName = agg.vis.indexPattern.id; + const field = agg.fieldName(); + const filter = {geo_bounding_box: {}}; + filter.geo_bounding_box[field] = event.bounds; - pushFilter(filter, false, indexPatternName); - }, - mapMoveEnd: function (event) { - const agg = _.get(event, 'chart.geohashGridAgg'); - if (!agg) return; + pushFilter(filter, false, indexPatternName); + }, + mapMoveEnd: function (event) { + const agg = _.get(event, 'chart.geohashGridAgg'); + if (!agg) return; - agg.params.mapZoom = event.zoom; - agg.params.mapCenter = [event.center.lat, event.center.lng]; + agg.params.mapZoom = event.zoom; + agg.params.mapCenter = [event.center.lat, event.center.lng]; - const editableVis = agg.vis.getEditableVis(); - if (!editableVis) return; + const editableVis = agg.vis.getEditableVis(); + if (!editableVis) return; - const editableAgg = editableVis.aggs.byId[agg.id]; - if (editableAgg) { - editableAgg.params.mapZoom = event.zoom; - editableAgg.params.mapCenter = [event.center.lat, event.center.lng]; - } - }, - mapZoomEnd: function (event) { - const agg = _.get(event, 'chart.geohashGridAgg'); - if (!agg || !agg.params.autoPrecision) return; + const editableAgg = editableVis.aggs.byId[agg.id]; + if (editableAgg) { + editableAgg.params.mapZoom = event.zoom; + editableAgg.params.mapCenter = [event.center.lat, event.center.lng]; + } + }, + mapZoomEnd: function (event) { + const agg = _.get(event, 'chart.geohashGridAgg'); + if (!agg || !agg.params.autoPrecision) return; - // zoomPrecision maps event.zoom to a geohash precision value - // event.limit is the configurable max geohash precision - // default max precision is 7, configurable up to 12 - const zoomPrecision = { - 1: 2, - 2: 2, - 3: 2, - 4: 3, - 5: 3, - 6: 4, - 7: 4, - 8: 5, - 9: 5, - 10: 6, - 11: 6, - 12: 7, - 13: 7, - 14: 8, - 15: 9, - 16: 10, - 17: 11, - 18: 12 - }; + // zoomPrecision maps event.zoom to a geohash precision value + // event.limit is the configurable max geohash precision + // default max precision is 7, configurable up to 12 + const zoomPrecision = { + 1: 2, + 2: 2, + 3: 2, + 4: 3, + 5: 3, + 6: 4, + 7: 4, + 8: 5, + 9: 5, + 10: 6, + 11: 6, + 12: 7, + 13: 7, + 14: 8, + 15: 9, + 16: 10, + 17: 11, + 18: 12 + }; - const precision = config.get('visualization:tileMap:maxPrecision'); - agg.params.precision = Math.min(zoomPrecision[event.zoom], precision); + const precision = config.get('visualization:tileMap:maxPrecision'); + agg.params.precision = Math.min(zoomPrecision[event.zoom], precision); - courier.fetch(); - } + courier.fetch(); + } + }, + responseConverter: geoJsonConverter, + schemas: new Schemas([ + { + group: 'metrics', + name: 'metric', + title: 'Value', + min: 1, + max: 1, + aggFilter: ['count', 'avg', 'sum', 'min', 'max', 'cardinality'], + defaults: [ + { schema: 'metric', type: 'count' } + ] }, - responseConverter: geoJsonConverter, - schemas: new Schemas([ - { - group: 'metrics', - name: 'metric', - title: 'Value', - min: 1, - max: 1, - aggFilter: ['count', 'avg', 'sum', 'min', 'max', 'cardinality'], - defaults: [ - { schema: 'metric', type: 'count' } - ] - }, - { - group: 'buckets', - name: 'segment', - title: 'Geo Coordinates', - aggFilter: 'geohash_grid', - min: 1, - max: 1 - }, - { - group: 'buckets', - name: 'split', - title: 'Split Chart', - min: 0, - max: 1 - } - ]) - }); - }; -}); + { + group: 'buckets', + name: 'segment', + title: 'Geo Coordinates', + aggFilter: 'geohash_grid', + min: 1, + max: 1 + }, + { + group: 'buckets', + name: 'split', + title: 'Split Chart', + min: 0, + max: 1 + } + ]) + }); +}; diff --git a/src/plugins/kibana/public/dashboard/components/panel/lib/load_panel.js b/src/plugins/kibana/public/dashboard/components/panel/lib/load_panel.js index a907cebbe904e1..54e12f3fd4d7ed 100644 --- a/src/plugins/kibana/public/dashboard/components/panel/lib/load_panel.js +++ b/src/plugins/kibana/public/dashboard/components/panel/lib/load_panel.js @@ -1,20 +1,18 @@ import _ from 'lodash'; import PluginsKibanaDashboardComponentsPanelLibVisualizationProvider from 'plugins/kibana/dashboard/components/panel/lib/visualization'; import PluginsKibanaDashboardComponentsPanelLibSearchProvider from 'plugins/kibana/dashboard/components/panel/lib/search'; -define(function (require) { - return function loadPanelFunction(Private) { // Inject services here - return function (panel, $scope) { // Function parameters here - const panelTypes = { - visualization: Private(PluginsKibanaDashboardComponentsPanelLibVisualizationProvider), - search: Private(PluginsKibanaDashboardComponentsPanelLibSearchProvider) - }; +export default function loadPanelFunction(Private) { // Inject services here + return function (panel, $scope) { // Function parameters here + const panelTypes = { + visualization: Private(PluginsKibanaDashboardComponentsPanelLibVisualizationProvider), + search: Private(PluginsKibanaDashboardComponentsPanelLibSearchProvider) + }; - try { - return panelTypes[panel.type](panel, $scope); - } catch (e) { - throw new Error('Loader not found for unknown panel type: ' + panel.type); - } + try { + return panelTypes[panel.type](panel, $scope); + } catch (e) { + throw new Error('Loader not found for unknown panel type: ' + panel.type); + } - }; }; -}); +}; diff --git a/src/plugins/kibana/public/dashboard/components/panel/lib/search.js b/src/plugins/kibana/public/dashboard/components/panel/lib/search.js index a284068884a8e6..e0d7a914b2f4f8 100644 --- a/src/plugins/kibana/public/dashboard/components/panel/lib/search.js +++ b/src/plugins/kibana/public/dashboard/components/panel/lib/search.js @@ -1,26 +1,24 @@ -define(function (require) { - return function searchLoader(savedSearches, Private) { // Inject services here - return function (panel, $scope) { // Function parameters here - return savedSearches.get(panel.id) - .then(function (savedSearch) { - panel.columns = panel.columns || savedSearch.columns; - panel.sort = panel.sort || savedSearch.sort; +export default function searchLoader(savedSearches, Private) { // Inject services here + return function (panel, $scope) { // Function parameters here + return savedSearches.get(panel.id) + .then(function (savedSearch) { + panel.columns = panel.columns || savedSearch.columns; + panel.sort = panel.sort || savedSearch.sort; - $scope.$watchCollection('panel.columns', function () { - $scope.state.save(); - }); - - $scope.$watchCollection('panel.sort', function () { - $scope.state.save(); - }); + $scope.$watchCollection('panel.columns', function () { + $scope.state.save(); + }); - return { - savedObj: savedSearch, - panel: panel, - uiState: savedSearch.uiStateJSON ? JSON.parse(savedSearch.uiStateJSON) : {}, - editUrl: savedSearches.urlFor(panel.id) - }; + $scope.$watchCollection('panel.sort', function () { + $scope.state.save(); }); - }; + + return { + savedObj: savedSearch, + panel: panel, + uiState: savedSearch.uiStateJSON ? JSON.parse(savedSearch.uiStateJSON) : {}, + editUrl: savedSearches.urlFor(panel.id) + }; + }); }; -}); +}; diff --git a/src/plugins/kibana/public/dashboard/components/panel/lib/visualization.js b/src/plugins/kibana/public/dashboard/components/panel/lib/visualization.js index ec29dc9f396cc8..87b04bc1cb5352 100644 --- a/src/plugins/kibana/public/dashboard/components/panel/lib/visualization.js +++ b/src/plugins/kibana/public/dashboard/components/panel/lib/visualization.js @@ -1,25 +1,23 @@ import UtilsBrushEventProvider from 'ui/utils/brush_event'; import FilterBarFilterBarClickHandlerProvider from 'ui/filter_bar/filter_bar_click_handler'; -define(function (require) { - return function visualizationLoader(savedVisualizations, Private) { // Inject services here - const brushEvent = Private(UtilsBrushEventProvider); - const filterBarClickHandler = Private(FilterBarFilterBarClickHandlerProvider); +export default function visualizationLoader(savedVisualizations, Private) { // Inject services here + const brushEvent = Private(UtilsBrushEventProvider); + const filterBarClickHandler = Private(FilterBarFilterBarClickHandlerProvider); - return function (panel, $scope) { // Function parameters here - return savedVisualizations.get(panel.id) - .then(function (savedVis) { - // $scope.state comes via $scope inheritence from the dashboard app. Don't love this. - savedVis.vis.listeners.click = filterBarClickHandler($scope.state); - savedVis.vis.listeners.brush = brushEvent; + return function (panel, $scope) { // Function parameters here + return savedVisualizations.get(panel.id) + .then(function (savedVis) { + // $scope.state comes via $scope inheritence from the dashboard app. Don't love this. + savedVis.vis.listeners.click = filterBarClickHandler($scope.state); + savedVis.vis.listeners.brush = brushEvent; - return { - savedObj: savedVis, - panel: panel, - uiState: savedVis.uiStateJSON ? JSON.parse(savedVis.uiStateJSON) : {}, - editUrl: savedVisualizations.urlFor(panel.id) - }; - }); - }; + return { + savedObj: savedVis, + panel: panel, + uiState: savedVis.uiStateJSON ? JSON.parse(savedVis.uiStateJSON) : {}, + editUrl: savedVisualizations.urlFor(panel.id) + }; + }); }; -}); +}; diff --git a/src/plugins/kibana/public/dashboard/components/panel/panel.js b/src/plugins/kibana/public/dashboard/components/panel/panel.js index 513c23af90f580..66a41024c81f25 100644 --- a/src/plugins/kibana/public/dashboard/components/panel/panel.js +++ b/src/plugins/kibana/public/dashboard/components/panel/panel.js @@ -6,83 +6,81 @@ import 'ui/doc_table'; import PluginsKibanaDashboardComponentsPanelLibLoadPanelProvider from 'plugins/kibana/dashboard/components/panel/lib/load_panel'; import FilterManagerProvider from 'ui/filter_manager'; import UtilsBrushEventProvider from 'ui/utils/brush_event'; -define(function (require) { - require('ui/modules') - .get('app/dashboard') - .directive('dashboardPanel', function (savedVisualizations, savedSearches, Notifier, Private, $injector) { - const loadPanel = Private(PluginsKibanaDashboardComponentsPanelLibLoadPanelProvider); - const filterManager = Private(FilterManagerProvider); - const notify = new Notifier(); - - const services = require('plugins/kibana/settings/saved_object_registry').all().map(function (serviceObj) { - const service = $injector.get(serviceObj.service); - return { - type: service.type, - name: serviceObj.service - }; - }); +require('ui/modules') +.get('app/dashboard') +.directive('dashboardPanel', function (savedVisualizations, savedSearches, Notifier, Private, $injector) { + const loadPanel = Private(PluginsKibanaDashboardComponentsPanelLibLoadPanelProvider); + const filterManager = Private(FilterManagerProvider); + const notify = new Notifier(); + const services = require('plugins/kibana/settings/saved_object_registry').all().map(function (serviceObj) { + const service = $injector.get(serviceObj.service); + return { + type: service.type, + name: serviceObj.service + }; + }); - const brushEvent = Private(UtilsBrushEventProvider); - const getPanelId = function (panel) { - return ['P', panel.panelIndex].join('-'); - }; + const brushEvent = Private(UtilsBrushEventProvider); - return { - restrict: 'E', - template: require('plugins/kibana/dashboard/components/panel/panel.html'), - requires: '^dashboardGrid', - link: function ($scope, $el) { - // using $scope inheritance, panels are available in AppState - const $state = $scope.state; + const getPanelId = function (panel) { + return ['P', panel.panelIndex].join('-'); + }; - // receives $scope.panel from the dashboard grid directive, seems like should be isolate? - $scope.$watch('id', function () { - if (!$scope.panel.id || !$scope.panel.type) return; + return { + restrict: 'E', + template: require('plugins/kibana/dashboard/components/panel/panel.html'), + requires: '^dashboardGrid', + link: function ($scope, $el) { + // using $scope inheritance, panels are available in AppState + const $state = $scope.state; - loadPanel($scope.panel, $scope) - .then(function (panelConfig) { - // These could be done in loadPanel, putting them here to make them more explicit - $scope.savedObj = panelConfig.savedObj; - $scope.editUrl = panelConfig.editUrl; - $scope.$on('$destroy', function () { - panelConfig.savedObj.destroy(); - $scope.parentUiState.removeChild(getPanelId(panelConfig.panel)); - }); + // receives $scope.panel from the dashboard grid directive, seems like should be isolate? + $scope.$watch('id', function () { + if (!$scope.panel.id || !$scope.panel.type) return; - // create child ui state from the savedObj - const uiState = panelConfig.uiState || {}; - $scope.uiState = $scope.parentUiState.createChild(getPanelId(panelConfig.panel), uiState, true); + loadPanel($scope.panel, $scope) + .then(function (panelConfig) { + // These could be done in loadPanel, putting them here to make them more explicit + $scope.savedObj = panelConfig.savedObj; + $scope.editUrl = panelConfig.editUrl; + $scope.$on('$destroy', function () { + panelConfig.savedObj.destroy(); + $scope.parentUiState.removeChild(getPanelId(panelConfig.panel)); + }); - $scope.filter = function (field, value, operator) { - const index = $scope.savedObj.searchSource.get('index').id; - filterManager.add(field, value, operator, index); - }; - }) - .catch(function (e) { - $scope.error = e.message; + // create child ui state from the savedObj + const uiState = panelConfig.uiState || {}; + $scope.uiState = $scope.parentUiState.createChild(getPanelId(panelConfig.panel), uiState, true); - // If the savedObjectType matches the panel type, this means the object itself has been deleted, - // so we shouldn't even have an edit link. If they don't match, it means something else is wrong - // with the object (but the object still exists), so we link to the object editor instead. - const objectItselfDeleted = e.savedObjectType === $scope.panel.type; - if (objectItselfDeleted) return; + $scope.filter = function (field, value, operator) { + const index = $scope.savedObj.searchSource.get('index').id; + filterManager.add(field, value, operator, index); + }; + }) + .catch(function (e) { + $scope.error = e.message; - const type = $scope.panel.type; - const id = $scope.panel.id; - const service = _.find(services, { type: type }); - if (!service) return; + // If the savedObjectType matches the panel type, this means the object itself has been deleted, + // so we shouldn't even have an edit link. If they don't match, it means something else is wrong + // with the object (but the object still exists), so we link to the object editor instead. + const objectItselfDeleted = e.savedObjectType === $scope.panel.type; + if (objectItselfDeleted) return; - $scope.editUrl = '#settings/objects/' + service.name + '/' + id + '?notFound=' + e.savedObjectType; - }); + const type = $scope.panel.type; + const id = $scope.panel.id; + const service = _.find(services, { type: type }); + if (!service) return; + $scope.editUrl = '#settings/objects/' + service.name + '/' + id + '?notFound=' + e.savedObjectType; }); - $scope.remove = function () { - _.pull($state.panels, $scope.panel); - }; - } - }; - }); + }); + + $scope.remove = function () { + _.pull($state.panels, $scope.panel); + }; + } + }; }); diff --git a/src/plugins/kibana/public/dashboard/directives/grid.js b/src/plugins/kibana/public/dashboard/directives/grid.js index d848e4633d5845..b51d4ae02b4a87 100644 --- a/src/plugins/kibana/public/dashboard/directives/grid.js +++ b/src/plugins/kibana/public/dashboard/directives/grid.js @@ -2,235 +2,233 @@ import _ from 'lodash'; import $ from 'jquery'; import Binder from 'ui/Binder'; import 'gridster'; -define(function (require) { - - const app = require('ui/modules').get('app/dashboard'); - - app.directive('dashboardGrid', function ($compile, Notifier) { - return { - restrict: 'E', - require: '^dashboardApp', // must inherit from the dashboardApp - link: function ($scope, $el) { - const notify = new Notifier(); - const $container = $el; - $el = $('
    ').appendTo($container); - - const $window = $(window); - const $body = $(document.body); - const binder = new Binder($scope); - - // appState from controller - const $state = $scope.state; - - let gridster; // defined in init() - - // number of columns to render - const COLS = 12; - // number of pixed between each column/row - const SPACER = 10; - // pixels used by all of the spacers (gridster puts have a spacer on the ends) - const spacerSize = SPACER * COLS; - - // debounced layout function is safe to call as much as possible - const safeLayout = _.debounce(layout, 200); - - function init() { - $el.addClass('gridster'); - - gridster = $el.gridster({ - max_cols: COLS, - min_cols: COLS, - autogenerate_stylesheet: false, - resize: { - enabled: true, - stop: readGridsterChangeHandler - }, - draggable: { - handle: '.panel-heading, .panel-title', - stop: readGridsterChangeHandler - } - }).data('gridster'); - - // This is necessary to enable text selection within gridster elements - // http://stackoverflow.com/questions/21561027/text-not-selectable-from-editable-div-which-is-draggable - binder.jqOn($el, 'mousedown', function () { - gridster.disable().disable_resize(); - }); - binder.jqOn($el, 'mouseup', function enableResize() { - gridster.enable().enable_resize(); + +const app = require('ui/modules').get('app/dashboard'); + +app.directive('dashboardGrid', function ($compile, Notifier) { + return { + restrict: 'E', + require: '^dashboardApp', // must inherit from the dashboardApp + link: function ($scope, $el) { + const notify = new Notifier(); + const $container = $el; + $el = $('
      ').appendTo($container); + + const $window = $(window); + const $body = $(document.body); + const binder = new Binder($scope); + + // appState from controller + const $state = $scope.state; + + let gridster; // defined in init() + + // number of columns to render + const COLS = 12; + // number of pixed between each column/row + const SPACER = 10; + // pixels used by all of the spacers (gridster puts have a spacer on the ends) + const spacerSize = SPACER * COLS; + + // debounced layout function is safe to call as much as possible + const safeLayout = _.debounce(layout, 200); + + function init() { + $el.addClass('gridster'); + + gridster = $el.gridster({ + max_cols: COLS, + min_cols: COLS, + autogenerate_stylesheet: false, + resize: { + enabled: true, + stop: readGridsterChangeHandler + }, + draggable: { + handle: '.panel-heading, .panel-title', + stop: readGridsterChangeHandler + } + }).data('gridster'); + + // This is necessary to enable text selection within gridster elements + // http://stackoverflow.com/questions/21561027/text-not-selectable-from-editable-div-which-is-draggable + binder.jqOn($el, 'mousedown', function () { + gridster.disable().disable_resize(); + }); + binder.jqOn($el, 'mouseup', function enableResize() { + gridster.enable().enable_resize(); + }); + + $scope.$watchCollection('state.panels', function (panels) { + const currentPanels = gridster.$widgets.toArray().map(function (el) { + return getPanelFor(el); }); - $scope.$watchCollection('state.panels', function (panels) { - const currentPanels = gridster.$widgets.toArray().map(function (el) { - return getPanelFor(el); - }); + // panels that are now missing from the panels array + const removed = _.difference(currentPanels, panels); - // panels that are now missing from the panels array - const removed = _.difference(currentPanels, panels); + // panels that have been added + const added = _.difference(panels, currentPanels); - // panels that have been added - const added = _.difference(panels, currentPanels); + if (removed.length) removed.forEach(removePanel); + if (added.length) added.forEach(addPanel); - if (removed.length) removed.forEach(removePanel); - if (added.length) added.forEach(addPanel); + // ensure that every panel can be serialized now that we are done + $state.panels.forEach(makePanelSerializeable); - // ensure that every panel can be serialized now that we are done - $state.panels.forEach(makePanelSerializeable); + // alert interested parties that we have finished processing changes to the panels + // TODO: change this from event based to calling a method on dashboardApp + if (added.length || removed.length) $scope.$root.$broadcast('change:vis'); + }); - // alert interested parties that we have finished processing changes to the panels - // TODO: change this from event based to calling a method on dashboardApp - if (added.length || removed.length) $scope.$root.$broadcast('change:vis'); - }); + $scope.$on('$destroy', function () { + $window.off('resize', safeLayout); - $scope.$on('$destroy', function () { - $window.off('resize', safeLayout); - - if (!gridster) return; - gridster.$widgets.each(function (i, el) { - const panel = getPanelFor(el); - removePanel(panel); - // stop any animations - panel.$el.stop(); - // not that we will, but lets be safe - makePanelSerializeable(panel); - }); + if (!gridster) return; + gridster.$widgets.each(function (i, el) { + const panel = getPanelFor(el); + removePanel(panel); + // stop any animations + panel.$el.stop(); + // not that we will, but lets be safe + makePanelSerializeable(panel); }); + }); - safeLayout(); - $window.on('resize', safeLayout); - $scope.$on('ready:vis', safeLayout); - } + safeLayout(); + $window.on('resize', safeLayout); + $scope.$on('ready:vis', safeLayout); + } - // return the panel object for an element. - // - // !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! - // ALWAYS CALL makePanelSerializeable AFTER YOU ARE DONE WITH IT - // !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! - function getPanelFor(el) { - const $panel = el.jquery ? el : $(el); - const panel = $panel.data('panel'); + // return the panel object for an element. + // + // !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + // ALWAYS CALL makePanelSerializeable AFTER YOU ARE DONE WITH IT + // !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + function getPanelFor(el) { + const $panel = el.jquery ? el : $(el); + const panel = $panel.data('panel'); - panel.$el = $panel; - panel.$scope = $panel.data('$scope'); + panel.$el = $panel; + panel.$scope = $panel.data('$scope'); - return panel; - } - - // since the $el and $scope are circular structures, they need to be - // removed from panel before it can be serialized (we also wouldn't - // want them to show up in the url) - function makePanelSerializeable(panel) { - delete panel.$el; - delete panel.$scope; - } + return panel; + } - // tell gridster to remove the panel, and cleanup our metadata - function removePanel(panel) { - // remove from grister 'silently' (don't reorganize after) - gridster.remove_widget(panel.$el); + // since the $el and $scope are circular structures, they need to be + // removed from panel before it can be serialized (we also wouldn't + // want them to show up in the url) + function makePanelSerializeable(panel) { + delete panel.$el; + delete panel.$scope; + } - // destroy the scope - panel.$scope.$destroy(); + // tell gridster to remove the panel, and cleanup our metadata + function removePanel(panel) { + // remove from grister 'silently' (don't reorganize after) + gridster.remove_widget(panel.$el); - panel.$el.removeData('panel'); - panel.$el.removeData('$scope'); - } + // destroy the scope + panel.$scope.$destroy(); - // tell gridster to add the panel, and create additional meatadata like $scope - function addPanel(panel) { - _.defaults(panel, { - size_x: 3, - size_y: 2 - }); + panel.$el.removeData('panel'); + panel.$el.removeData('$scope'); + } - // ignore panels that don't have vis id's - if (!panel.id) { - // In the interest of backwards compat - if (panel.visId) { - panel.id = panel.visId; - panel.type = 'visualization'; - delete panel.visId; - } else { - throw new Error('missing object id on panel'); - } + // tell gridster to add the panel, and create additional meatadata like $scope + function addPanel(panel) { + _.defaults(panel, { + size_x: 3, + size_y: 2 + }); + + // ignore panels that don't have vis id's + if (!panel.id) { + // In the interest of backwards compat + if (panel.visId) { + panel.id = panel.visId; + panel.type = 'visualization'; + delete panel.visId; + } else { + throw new Error('missing object id on panel'); } + } - panel.$scope = $scope.$new(); - panel.$scope.panel = panel; - panel.$scope.parentUiState = $scope.uiState; - - panel.$el = $compile('
    • ')(panel.$scope); - - // tell gridster to use the widget - gridster.add_widget(panel.$el, panel.size_x, panel.size_y, panel.col, panel.row); + panel.$scope = $scope.$new(); + panel.$scope.panel = panel; + panel.$scope.parentUiState = $scope.uiState; - // update size/col/etc. - refreshPanelStats(panel); + panel.$el = $compile('
    • ')(panel.$scope); - // stash the panel and it's scope in the element's data - panel.$el.data('panel', panel); - panel.$el.data('$scope', panel.$scope); - } - - // ensure that the panel object has the latest size/pos info - function refreshPanelStats(panel) { - const data = panel.$el.coords().grid; - panel.size_x = data.size_x; - panel.size_y = data.size_y; - panel.col = data.col; - panel.row = data.row; - } + // tell gridster to use the widget + gridster.add_widget(panel.$el, panel.size_x, panel.size_y, panel.col, panel.row); - // when gridster tell us it made a change, update each of the panel objects - function readGridsterChangeHandler(e, ui, $widget) { - // ensure that our panel objects keep their size in sync - gridster.$widgets.each(function (i, el) { - const panel = getPanelFor(el); - refreshPanelStats(panel); - panel.$scope.$broadcast('resize'); - makePanelSerializeable(panel); - $scope.$root.$broadcast('change:vis'); - }); - } + // update size/col/etc. + refreshPanelStats(panel); - // calculate the position and sizing of the gridster el, and the columns within it - // then tell gridster to "reflow" -- which is definitely not supported. - // we may need to consider using a different library - function reflowGridster() { - // https://github.com/gcphost/gridster-responsive/blob/97fe43d4b312b409696b1d702e1afb6fbd3bba71/jquery.gridster.js#L1208-L1235 - const g = gridster; - - g.options.widget_margins = [SPACER / 2, SPACER / 2]; - g.options.widget_base_dimensions = [($container.width() - spacerSize) / COLS, 100]; - g.min_widget_width = (g.options.widget_margins[0] * 2) + g.options.widget_base_dimensions[0]; - g.min_widget_height = (g.options.widget_margins[1] * 2) + g.options.widget_base_dimensions[1]; - - // const serializedGrid = g.serialize(); - g.$widgets.each(function (i, widget) { - g.resize_widget($(widget)); - }); + // stash the panel and it's scope in the element's data + panel.$el.data('panel', panel); + panel.$el.data('$scope', panel.$scope); + } - g.generate_grid_and_stylesheet(); - g.generate_stylesheet({ namespace: '.gridster' }); + // ensure that the panel object has the latest size/pos info + function refreshPanelStats(panel) { + const data = panel.$el.coords().grid; + panel.size_x = data.size_x; + panel.size_y = data.size_y; + panel.col = data.col; + panel.row = data.row; + } - g.get_widgets_from_DOM(); - // We can't call this method if the gridmap is empty. This was found - // when the user double clicked the "New Dashboard" icon. See - // https://github.com/elastic/kibana4/issues/390 - if (gridster.gridmap.length > 0) g.set_dom_grid_height(); - g.drag_api.set_limits(COLS * g.min_widget_width); - } + // when gridster tell us it made a change, update each of the panel objects + function readGridsterChangeHandler(e, ui, $widget) { + // ensure that our panel objects keep their size in sync + gridster.$widgets.each(function (i, el) { + const panel = getPanelFor(el); + refreshPanelStats(panel); + panel.$scope.$broadcast('resize'); + makePanelSerializeable(panel); + $scope.$root.$broadcast('change:vis'); + }); + } - function layout() { - const complete = notify.event('reflow dashboard'); - reflowGridster(); - readGridsterChangeHandler(); - complete(); - } + // calculate the position and sizing of the gridster el, and the columns within it + // then tell gridster to "reflow" -- which is definitely not supported. + // we may need to consider using a different library + function reflowGridster() { + // https://github.com/gcphost/gridster-responsive/blob/97fe43d4b312b409696b1d702e1afb6fbd3bba71/jquery.gridster.js#L1208-L1235 + const g = gridster; + + g.options.widget_margins = [SPACER / 2, SPACER / 2]; + g.options.widget_base_dimensions = [($container.width() - spacerSize) / COLS, 100]; + g.min_widget_width = (g.options.widget_margins[0] * 2) + g.options.widget_base_dimensions[0]; + g.min_widget_height = (g.options.widget_margins[1] * 2) + g.options.widget_base_dimensions[1]; + + // const serializedGrid = g.serialize(); + g.$widgets.each(function (i, widget) { + g.resize_widget($(widget)); + }); + + g.generate_grid_and_stylesheet(); + g.generate_stylesheet({ namespace: '.gridster' }); + + g.get_widgets_from_DOM(); + // We can't call this method if the gridmap is empty. This was found + // when the user double clicked the "New Dashboard" icon. See + // https://github.com/elastic/kibana4/issues/390 + if (gridster.gridmap.length > 0) g.set_dom_grid_height(); + g.drag_api.set_limits(COLS * g.min_widget_width); + } - init(); + function layout() { + const complete = notify.event('reflow dashboard'); + reflowGridster(); + readGridsterChangeHandler(); + complete(); } - }; - }); + init(); + } + }; }); + diff --git a/src/plugins/kibana/public/dashboard/index.js b/src/plugins/kibana/public/dashboard/index.js index 8165dbcb159659..ae3f15589dfc1c 100644 --- a/src/plugins/kibana/public/dashboard/index.js +++ b/src/plugins/kibana/public/dashboard/index.js @@ -16,232 +16,230 @@ import 'plugins/kibana/dashboard/services/saved_dashboards'; import 'plugins/kibana/dashboard/styles/main.less'; import FilterBarQueryFilterProvider from 'ui/filter_bar/query_filter'; import DocTitleProvider from 'ui/doc_title'; -define(function (require) { - require('ui/saved_objects/saved_object_registry').register(require('plugins/kibana/dashboard/services/saved_dashboard_register')); +require('ui/saved_objects/saved_object_registry').register(require('plugins/kibana/dashboard/services/saved_dashboard_register')); - const app = require('ui/modules').get('app/dashboard', [ - 'elasticsearch', - 'ngRoute', - 'kibana/courier', - 'kibana/config', - 'kibana/notify', - 'kibana/typeahead' - ]); +const app = require('ui/modules').get('app/dashboard', [ + 'elasticsearch', + 'ngRoute', + 'kibana/courier', + 'kibana/config', + 'kibana/notify', + 'kibana/typeahead' +]); - require('ui/routes') - .when('/dashboard', { - template: require('plugins/kibana/dashboard/index.html'), - resolve: { - dash: function (savedDashboards, config) { - return savedDashboards.get(); - } +require('ui/routes') +.when('/dashboard', { + template: require('plugins/kibana/dashboard/index.html'), + resolve: { + dash: function (savedDashboards, config) { + return savedDashboards.get(); } - }) - .when('/dashboard/:id', { - template: require('plugins/kibana/dashboard/index.html'), - resolve: { - dash: function (savedDashboards, Notifier, $route, $location, courier) { - return savedDashboards.get($route.current.params.id) - .catch(courier.redirectWhenMissing({ - 'dashboard' : '/dashboard' - })); - } + } +}) +.when('/dashboard/:id', { + template: require('plugins/kibana/dashboard/index.html'), + resolve: { + dash: function (savedDashboards, Notifier, $route, $location, courier) { + return savedDashboards.get($route.current.params.id) + .catch(courier.redirectWhenMissing({ + 'dashboard' : '/dashboard' + })); } - }); + } +}); - app.directive('dashboardApp', function (Notifier, courier, AppState, timefilter, kbnUrl) { - return { - controller: function ($scope, $rootScope, $route, $routeParams, $location, Private, getAppState) { +app.directive('dashboardApp', function (Notifier, courier, AppState, timefilter, kbnUrl) { + return { + controller: function ($scope, $rootScope, $route, $routeParams, $location, Private, getAppState) { - const queryFilter = Private(FilterBarQueryFilterProvider); + const queryFilter = Private(FilterBarQueryFilterProvider); - const notify = new Notifier({ - location: 'Dashboard' - }); + const notify = new Notifier({ + location: 'Dashboard' + }); - const dash = $scope.dash = $route.current.locals.dash; + const dash = $scope.dash = $route.current.locals.dash; - if (dash.timeRestore && dash.timeTo && dash.timeFrom && !getAppState.previouslyStored()) { - timefilter.time.to = dash.timeTo; - timefilter.time.from = dash.timeFrom; - } + if (dash.timeRestore && dash.timeTo && dash.timeFrom && !getAppState.previouslyStored()) { + timefilter.time.to = dash.timeTo; + timefilter.time.from = dash.timeFrom; + } - $scope.$on('$destroy', dash.destroy); + $scope.$on('$destroy', dash.destroy); - const matchQueryFilter = function (filter) { - return filter.query && filter.query.query_string && !filter.meta; - }; + const matchQueryFilter = function (filter) { + return filter.query && filter.query.query_string && !filter.meta; + }; - const extractQueryFromFilters = function (filters) { - const filter = _.find(filters, matchQueryFilter); - if (filter) return filter.query; - }; + const extractQueryFromFilters = function (filters) { + const filter = _.find(filters, matchQueryFilter); + if (filter) return filter.query; + }; - const stateDefaults = { - title: dash.title, - panels: dash.panelsJSON ? JSON.parse(dash.panelsJSON) : [], - options: dash.optionsJSON ? JSON.parse(dash.optionsJSON) : {}, - uiState: dash.uiStateJSON ? JSON.parse(dash.uiStateJSON) : {}, - query: extractQueryFromFilters(dash.searchSource.getOwn('filter')) || {query_string: {query: '*'}}, - filters: _.reject(dash.searchSource.getOwn('filter'), matchQueryFilter), - }; + const stateDefaults = { + title: dash.title, + panels: dash.panelsJSON ? JSON.parse(dash.panelsJSON) : [], + options: dash.optionsJSON ? JSON.parse(dash.optionsJSON) : {}, + uiState: dash.uiStateJSON ? JSON.parse(dash.uiStateJSON) : {}, + query: extractQueryFromFilters(dash.searchSource.getOwn('filter')) || {query_string: {query: '*'}}, + filters: _.reject(dash.searchSource.getOwn('filter'), matchQueryFilter), + }; - const $state = $scope.state = new AppState(stateDefaults); - const $uiState = $scope.uiState = $state.makeStateful('uiState'); + const $state = $scope.state = new AppState(stateDefaults); + const $uiState = $scope.uiState = $state.makeStateful('uiState'); - $scope.$watchCollection('state.options', function (newVal, oldVal) { - if (!angular.equals(newVal, oldVal)) $state.save(); - }); - $scope.$watch('state.options.darkTheme', setDarkTheme); - - $scope.configTemplate = new ConfigTemplate({ - save: require('plugins/kibana/dashboard/partials/save_dashboard.html'), - load: require('plugins/kibana/dashboard/partials/load_dashboard.html'), - share: require('plugins/kibana/dashboard/partials/share.html'), - pickVis: require('plugins/kibana/dashboard/partials/pick_visualization.html'), - options: require('plugins/kibana/dashboard/partials/options.html') - }); + $scope.$watchCollection('state.options', function (newVal, oldVal) { + if (!angular.equals(newVal, oldVal)) $state.save(); + }); + $scope.$watch('state.options.darkTheme', setDarkTheme); - $scope.refresh = _.bindKey(courier, 'fetch'); + $scope.configTemplate = new ConfigTemplate({ + save: require('plugins/kibana/dashboard/partials/save_dashboard.html'), + load: require('plugins/kibana/dashboard/partials/load_dashboard.html'), + share: require('plugins/kibana/dashboard/partials/share.html'), + pickVis: require('plugins/kibana/dashboard/partials/pick_visualization.html'), + options: require('plugins/kibana/dashboard/partials/options.html') + }); - timefilter.enabled = true; - $scope.timefilter = timefilter; - $scope.$listen(timefilter, 'fetch', $scope.refresh); + $scope.refresh = _.bindKey(courier, 'fetch'); - courier.setRootSearchSource(dash.searchSource); + timefilter.enabled = true; + $scope.timefilter = timefilter; + $scope.$listen(timefilter, 'fetch', $scope.refresh); - function init() { - updateQueryOnRootSource(); + courier.setRootSearchSource(dash.searchSource); - const docTitle = Private(DocTitleProvider); - if (dash.id) { - docTitle.change(dash.title); - } + function init() { + updateQueryOnRootSource(); - initPanelIndices(); - $scope.$emit('application.load'); + const docTitle = Private(DocTitleProvider); + if (dash.id) { + docTitle.change(dash.title); } - function initPanelIndices() { - // find the largest panelIndex in all the panels - let maxIndex = getMaxPanelIndex(); - - // ensure that all panels have a panelIndex - $scope.state.panels.forEach(function (panel) { - if (!panel.panelIndex) { - panel.panelIndex = maxIndex++; - } - }); - } + initPanelIndices(); + $scope.$emit('application.load'); + } - function getMaxPanelIndex() { - let index = $scope.state.panels.reduce(function (idx, panel) { - // if panel is missing an index, add one and increment the index - return Math.max(idx, panel.panelIndex || idx); - }, 0); - return ++index; - } + function initPanelIndices() { + // find the largest panelIndex in all the panels + let maxIndex = getMaxPanelIndex(); - function updateQueryOnRootSource() { - const filters = queryFilter.getFilters(); - if ($state.query) { - dash.searchSource.set('filter', _.union(filters, [{ - query: $state.query - }])); - } else { - dash.searchSource.set('filter', filters); + // ensure that all panels have a panelIndex + $scope.state.panels.forEach(function (panel) { + if (!panel.panelIndex) { + panel.panelIndex = maxIndex++; } - } - - function setDarkTheme(enabled) { - const theme = Boolean(enabled) ? 'theme-dark' : 'theme-light'; - chrome.removeApplicationClass(['theme-dark', 'theme-light']); - chrome.addApplicationClass(theme); - } - - // update root source when filters update - $scope.$listen(queryFilter, 'update', function () { - updateQueryOnRootSource(); - $state.save(); }); + } - // update data when filters fire fetch event - $scope.$listen(queryFilter, 'fetch', $scope.refresh); - - $scope.newDashboard = function () { - kbnUrl.change('/dashboard', {}); - }; + function getMaxPanelIndex() { + let index = $scope.state.panels.reduce(function (idx, panel) { + // if panel is missing an index, add one and increment the index + return Math.max(idx, panel.panelIndex || idx); + }, 0); + return ++index; + } - $scope.filterResults = function () { - updateQueryOnRootSource(); - $state.save(); - $scope.refresh(); - }; + function updateQueryOnRootSource() { + const filters = queryFilter.getFilters(); + if ($state.query) { + dash.searchSource.set('filter', _.union(filters, [{ + query: $state.query + }])); + } else { + dash.searchSource.set('filter', filters); + } + } - $scope.save = function () { - $state.title = dash.id = dash.title; - $state.save(); + function setDarkTheme(enabled) { + const theme = Boolean(enabled) ? 'theme-dark' : 'theme-light'; + chrome.removeApplicationClass(['theme-dark', 'theme-light']); + chrome.addApplicationClass(theme); + } - dash.panelsJSON = angular.toJson($state.panels); - dash.uiStateJSON = angular.toJson($uiState.getChanges()); - dash.timeFrom = dash.timeRestore ? timefilter.time.from : undefined; - dash.timeTo = dash.timeRestore ? timefilter.time.to : undefined; - dash.optionsJSON = angular.toJson($state.options); - - dash.save() - .then(function (id) { - $scope.configTemplate.close('save'); - if (id) { - notify.info('Saved Dashboard as "' + dash.title + '"'); - if (dash.id !== $routeParams.id) { - kbnUrl.change('/dashboard/{{id}}', {id: dash.id}); - } + // update root source when filters update + $scope.$listen(queryFilter, 'update', function () { + updateQueryOnRootSource(); + $state.save(); + }); + + // update data when filters fire fetch event + $scope.$listen(queryFilter, 'fetch', $scope.refresh); + + $scope.newDashboard = function () { + kbnUrl.change('/dashboard', {}); + }; + + $scope.filterResults = function () { + updateQueryOnRootSource(); + $state.save(); + $scope.refresh(); + }; + + $scope.save = function () { + $state.title = dash.id = dash.title; + $state.save(); + + dash.panelsJSON = angular.toJson($state.panels); + dash.uiStateJSON = angular.toJson($uiState.getChanges()); + dash.timeFrom = dash.timeRestore ? timefilter.time.from : undefined; + dash.timeTo = dash.timeRestore ? timefilter.time.to : undefined; + dash.optionsJSON = angular.toJson($state.options); + + dash.save() + .then(function (id) { + $scope.configTemplate.close('save'); + if (id) { + notify.info('Saved Dashboard as "' + dash.title + '"'); + if (dash.id !== $routeParams.id) { + kbnUrl.change('/dashboard/{{id}}', {id: dash.id}); } - }) - .catch(notify.fatal); - }; - - let pendingVis = _.size($state.panels); - $scope.$on('ready:vis', function () { - if (pendingVis) pendingVis--; - if (pendingVis === 0) { - $state.save(); - $scope.refresh(); } - }); - - // listen for notifications from the grid component that changes have - // been made, rather than watching the panels deeply - $scope.$on('change:vis', function () { + }) + .catch(notify.fatal); + }; + + let pendingVis = _.size($state.panels); + $scope.$on('ready:vis', function () { + if (pendingVis) pendingVis--; + if (pendingVis === 0) { $state.save(); - }); - - // called by the saved-object-finder when a user clicks a vis - $scope.addVis = function (hit) { - pendingVis++; - $state.panels.push({ id: hit.id, type: 'visualization', panelIndex: getMaxPanelIndex() }); - }; - - $scope.addSearch = function (hit) { - pendingVis++; - $state.panels.push({ id: hit.id, type: 'search', panelIndex: getMaxPanelIndex() }); - }; - - // Setup configurable values for config directive, after objects are initialized - $scope.opts = { - dashboard: dash, - ui: $state.options, - save: $scope.save, - addVis: $scope.addVis, - addSearch: $scope.addSearch - }; - - init(); - } - }; - }); + $scope.refresh(); + } + }); + + // listen for notifications from the grid component that changes have + // been made, rather than watching the panels deeply + $scope.$on('change:vis', function () { + $state.save(); + }); + + // called by the saved-object-finder when a user clicks a vis + $scope.addVis = function (hit) { + pendingVis++; + $state.panels.push({ id: hit.id, type: 'visualization', panelIndex: getMaxPanelIndex() }); + }; + + $scope.addSearch = function (hit) { + pendingVis++; + $state.panels.push({ id: hit.id, type: 'search', panelIndex: getMaxPanelIndex() }); + }; + + // Setup configurable values for config directive, after objects are initialized + $scope.opts = { + dashboard: dash, + ui: $state.options, + save: $scope.save, + addVis: $scope.addVis, + addSearch: $scope.addSearch + }; + + init(); + } + }; }); diff --git a/src/plugins/kibana/public/dashboard/services/_saved_dashboard.js b/src/plugins/kibana/public/dashboard/services/_saved_dashboard.js index 0745998c4f1485..e584c59d63b40d 100644 --- a/src/plugins/kibana/public/dashboard/services/_saved_dashboard.js +++ b/src/plugins/kibana/public/dashboard/services/_saved_dashboard.js @@ -1,65 +1,63 @@ import angular from 'angular'; import _ from 'lodash'; import moment from 'moment'; -define(function (require) { - const module = require('ui/modules').get('app/dashboard'); - - // Used only by the savedDashboards service, usually no reason to change this - module.factory('SavedDashboard', function (courier, config) { - // SavedDashboard constructor. Usually you'd interact with an instance of this. - // ID is option, without it one will be generated on save. - _.class(SavedDashboard).inherits(courier.SavedObject); - function SavedDashboard(id) { - // Gives our SavedDashboard the properties of a SavedObject - SavedDashboard.Super.call(this, { - type: SavedDashboard.type, - mapping: SavedDashboard.mapping, - searchSource: SavedDashboard.searchsource, - - // if this is null/undefined then the SavedObject will be assigned the defaults - id: id, - - // default values that will get assigned if the doc is new - defaults: { - title: 'New Dashboard', - hits: 0, - description: '', - panelsJSON: '[]', - optionsJSON: angular.toJson({ - darkTheme: config.get('dashboard:defaultDarkTheme') - }), - uiStateJSON: '{}', - version: 1, - timeRestore: false, - timeTo: undefined, - timeFrom: undefined, - }, - - // if an indexPattern was saved with the searchsource of a SavedDashboard - // object, clear it. It was a mistake - clearSavedIndexPattern: true - }); - } - - // save these objects with the 'dashboard' type - SavedDashboard.type = 'dashboard'; - - // if type:dashboard has no mapping, we push this mapping into ES - SavedDashboard.mapping = { - title: 'string', - hits: 'integer', - description: 'string', - panelsJSON: 'string', - optionsJSON: 'string', - uiStateJSON: 'string', - version: 'integer', - timeRestore: 'boolean', - timeTo: 'string', - timeFrom: 'string', - }; - - SavedDashboard.searchsource = true; - - return SavedDashboard; - }); +const module = require('ui/modules').get('app/dashboard'); + +// Used only by the savedDashboards service, usually no reason to change this +module.factory('SavedDashboard', function (courier, config) { + // SavedDashboard constructor. Usually you'd interact with an instance of this. + // ID is option, without it one will be generated on save. + _.class(SavedDashboard).inherits(courier.SavedObject); + function SavedDashboard(id) { + // Gives our SavedDashboard the properties of a SavedObject + SavedDashboard.Super.call(this, { + type: SavedDashboard.type, + mapping: SavedDashboard.mapping, + searchSource: SavedDashboard.searchsource, + + // if this is null/undefined then the SavedObject will be assigned the defaults + id: id, + + // default values that will get assigned if the doc is new + defaults: { + title: 'New Dashboard', + hits: 0, + description: '', + panelsJSON: '[]', + optionsJSON: angular.toJson({ + darkTheme: config.get('dashboard:defaultDarkTheme') + }), + uiStateJSON: '{}', + version: 1, + timeRestore: false, + timeTo: undefined, + timeFrom: undefined, + }, + + // if an indexPattern was saved with the searchsource of a SavedDashboard + // object, clear it. It was a mistake + clearSavedIndexPattern: true + }); + } + + // save these objects with the 'dashboard' type + SavedDashboard.type = 'dashboard'; + + // if type:dashboard has no mapping, we push this mapping into ES + SavedDashboard.mapping = { + title: 'string', + hits: 'integer', + description: 'string', + panelsJSON: 'string', + optionsJSON: 'string', + uiStateJSON: 'string', + version: 'integer', + timeRestore: 'boolean', + timeTo: 'string', + timeFrom: 'string', + }; + + SavedDashboard.searchsource = true; + + return SavedDashboard; }); diff --git a/src/plugins/kibana/public/dashboard/services/saved_dashboard_register.js b/src/plugins/kibana/public/dashboard/services/saved_dashboard_register.js index df54e6c3abdbcc..207a3298b9c699 100644 --- a/src/plugins/kibana/public/dashboard/services/saved_dashboard_register.js +++ b/src/plugins/kibana/public/dashboard/services/saved_dashboard_register.js @@ -1,5 +1,3 @@ -define(function (require) { - return function savedDashboardFn(savedDashboards) { - return savedDashboards; - }; -}); +export default function savedDashboardFn(savedDashboards) { + return savedDashboards; +}; diff --git a/src/plugins/kibana/public/dashboard/services/saved_dashboards.js b/src/plugins/kibana/public/dashboard/services/saved_dashboards.js index 3d2257362ab89e..10a7be9a19bc9e 100644 --- a/src/plugins/kibana/public/dashboard/services/saved_dashboards.js +++ b/src/plugins/kibana/public/dashboard/services/saved_dashboards.js @@ -1,95 +1,93 @@ import _ from 'lodash'; import Scanner from 'ui/utils/scanner'; import 'plugins/kibana/dashboard/services/_saved_dashboard'; -define(function (require) { - const module = require('ui/modules').get('app/dashboard'); +const module = require('ui/modules').get('app/dashboard'); - // bring in the factory +// bring in the factory - // Register this service with the saved object registry so it can be - // edited by the object editor. - require('plugins/kibana/settings/saved_object_registry').register({ - service: 'savedDashboards', - title: 'dashboards' - }); +// Register this service with the saved object registry so it can be +// edited by the object editor. +require('plugins/kibana/settings/saved_object_registry').register({ + service: 'savedDashboards', + title: 'dashboards' +}); - // This is the only thing that gets injected into controllers - module.service('savedDashboards', function (Promise, SavedDashboard, kbnIndex, es, kbnUrl) { - const scanner = new Scanner(es, { - index: kbnIndex, - type: 'dashboard' - }); +// This is the only thing that gets injected into controllers +module.service('savedDashboards', function (Promise, SavedDashboard, kbnIndex, es, kbnUrl) { + const scanner = new Scanner(es, { + index: kbnIndex, + type: 'dashboard' + }); - this.type = SavedDashboard.type; - this.Class = SavedDashboard; + this.type = SavedDashboard.type; + this.Class = SavedDashboard; - this.loaderProperties = { - name: 'dashboards', - noun: 'Dashboard', - nouns: 'dashboards' - }; + this.loaderProperties = { + name: 'dashboards', + noun: 'Dashboard', + nouns: 'dashboards' + }; - // Returns a single dashboard by ID, should be the name of the dashboard - this.get = function (id) { - // Returns a promise that contains a dashboard which is a subclass of docSource - return (new SavedDashboard(id)).init(); - }; + // Returns a single dashboard by ID, should be the name of the dashboard + this.get = function (id) { + // Returns a promise that contains a dashboard which is a subclass of docSource + return (new SavedDashboard(id)).init(); + }; - this.urlFor = function (id) { - return kbnUrl.eval('#/dashboard/{{id}}', {id: id}); - }; + this.urlFor = function (id) { + return kbnUrl.eval('#/dashboard/{{id}}', {id: id}); + }; - this.delete = function (ids) { - ids = !_.isArray(ids) ? [ids] : ids; - return Promise.map(ids, function (id) { - return (new SavedDashboard(id)).delete(); - }); - }; + this.delete = function (ids) { + ids = !_.isArray(ids) ? [ids] : ids; + return Promise.map(ids, function (id) { + return (new SavedDashboard(id)).delete(); + }); + }; - this.scanAll = function (queryString, pageSize = 1000) { - return scanner.scanAndMap(queryString, { - pageSize, - docCount: Infinity - }, (hit) => this.mapHits(hit)); - }; + this.scanAll = function (queryString, pageSize = 1000) { + return scanner.scanAndMap(queryString, { + pageSize, + docCount: Infinity + }, (hit) => this.mapHits(hit)); + }; - this.mapHits = function (hit) { - const source = hit._source; - source.id = hit._id; - source.url = this.urlFor(hit._id); - return source; - }; + this.mapHits = function (hit) { + const source = hit._source; + source.id = hit._id; + source.url = this.urlFor(hit._id); + return source; + }; - this.find = function (searchString, size = 100) { - let body; - if (searchString) { - body = { - query: { - simple_query_string: { - query: searchString + '*', - fields: ['title^3', 'description'], - default_operator: 'AND' - } + this.find = function (searchString, size = 100) { + let body; + if (searchString) { + body = { + query: { + simple_query_string: { + query: searchString + '*', + fields: ['title^3', 'description'], + default_operator: 'AND' } - }; - } else { - body = { query: {match_all: {}}}; - } + } + }; + } else { + body = { query: {match_all: {}}}; + } - return es.search({ - index: kbnIndex, - type: 'dashboard', - body: body, - size: size - }) - .then((resp) => { - return { - total: resp.hits.total, - hits: resp.hits.hits.map((hit) => this.mapHits(hit)) - }; - }); - }; - }); + return es.search({ + index: kbnIndex, + type: 'dashboard', + body: body, + size: size + }) + .then((resp) => { + return { + total: resp.hits.total, + hits: resp.hits.hits.map((hit) => this.mapHits(hit)) + }; + }); + }; }); diff --git a/src/plugins/kibana/public/discover/components/field_chooser/discover_field.js b/src/plugins/kibana/public/discover/components/field_chooser/discover_field.js index 9e7d0b3a95b88c..4defa528e7001f 100644 --- a/src/plugins/kibana/public/discover/components/field_chooser/discover_field.js +++ b/src/plugins/kibana/public/discover/components/field_chooser/discover_field.js @@ -4,91 +4,89 @@ import _ from 'lodash'; import 'ui/directives/css_truncate'; import 'ui/directives/field_name'; import detailsHtml from 'plugins/kibana/discover/components/field_chooser/lib/detail_views/string.html'; -define(function (require) { - const app = require('ui/modules').get('apps/discover'); +const app = require('ui/modules').get('apps/discover'); - app.directive('discoverField', function ($compile) { - return { - restrict: 'E', - template: html, - replace: true, - link: function ($scope, $elem) { - let detailsElem; - let detailScope = $scope.$new(); +app.directive('discoverField', function ($compile) { + return { + restrict: 'E', + template: html, + replace: true, + link: function ($scope, $elem) { + let detailsElem; + let detailScope = $scope.$new(); - const init = function () { - if ($scope.field.details) { - $scope.toggleDetails($scope.field, true); - } - }; + const init = function () { + if ($scope.field.details) { + $scope.toggleDetails($scope.field, true); + } + }; - const getWarnings = function (field) { - let warnings = []; + const getWarnings = function (field) { + let warnings = []; - if (!field.scripted) { - if (!field.doc_values && field.type !== 'boolean' && !(field.analyzed && field.type === 'string')) { - warnings.push('Doc values are not enabled on this field. This may lead to excess heap consumption when visualizing.'); - } + if (!field.scripted) { + if (!field.doc_values && field.type !== 'boolean' && !(field.analyzed && field.type === 'string')) { + warnings.push('Doc values are not enabled on this field. This may lead to excess heap consumption when visualizing.'); + } - if (field.analyzed && field.type === 'string') { - warnings.push('This is an analyzed string field.' + - ' Analyzed strings are highly unique and can use a lot of memory to visualize.' + - ' Values such as foo-bar will be broken into foo and bar.'); - } + if (field.analyzed && field.type === 'string') { + warnings.push('This is an analyzed string field.' + + ' Analyzed strings are highly unique and can use a lot of memory to visualize.' + + ' Values such as foo-bar will be broken into foo and bar.'); + } - if (!field.indexed) { - warnings.push('This field is not indexed and might not be usable in visualizations.'); - } + if (!field.indexed) { + warnings.push('This field is not indexed and might not be usable in visualizations.'); } + } - if (field.scripted) { - warnings.push('Scripted fields can take a long time to execute.'); - } + if (field.scripted) { + warnings.push('Scripted fields can take a long time to execute.'); + } - if (warnings.length > 1) { - warnings = warnings.map(function (warning, i) { - return (i > 0 ? '\n' : '') + (i + 1) + ' - ' + warning; - }); - } + if (warnings.length > 1) { + warnings = warnings.map(function (warning, i) { + return (i > 0 ? '\n' : '') + (i + 1) + ' - ' + warning; + }); + } - return warnings; + return warnings; - }; + }; - $scope.toggleDisplay = function (field) { - // This is inherited from fieldChooser - $scope.toggle(field.name); - if (field.display) $scope.increaseFieldCounter(field); + $scope.toggleDisplay = function (field) { + // This is inherited from fieldChooser + $scope.toggle(field.name); + if (field.display) $scope.increaseFieldCounter(field); - // we are now displaying the field, kill its details - if (field.details) { - $scope.toggleDetails(field); - } - }; - - $scope.toggleDetails = function (field, recompute) { - if (_.isUndefined(field.details) || recompute) { - // This is inherited from fieldChooser - $scope.details(field, recompute); - detailScope.$destroy(); - detailScope = $scope.$new(); - detailScope.warnings = getWarnings(field); - - detailsElem = $(detailsHtml); - $compile(detailsElem)(detailScope); - $elem.append(detailsElem); - } else { - delete field.details; - detailsElem.remove(); - } - }; + // we are now displaying the field, kill its details + if (field.details) { + $scope.toggleDetails(field); + } + }; - init(); - } - }; - }); + $scope.toggleDetails = function (field, recompute) { + if (_.isUndefined(field.details) || recompute) { + // This is inherited from fieldChooser + $scope.details(field, recompute); + detailScope.$destroy(); + detailScope = $scope.$new(); + detailScope.warnings = getWarnings(field); + + detailsElem = $(detailsHtml); + $compile(detailsElem)(detailScope); + $elem.append(detailsElem); + } else { + delete field.details; + detailsElem.remove(); + } + }; + + init(); + } + }; }); diff --git a/src/plugins/kibana/public/discover/components/field_chooser/field_chooser.js b/src/plugins/kibana/public/discover/components/field_chooser/field_chooser.js index aa4af01582bdf2..bc130ec0e406b8 100644 --- a/src/plugins/kibana/public/discover/components/field_chooser/field_chooser.js +++ b/src/plugins/kibana/public/discover/components/field_chooser/field_chooser.js @@ -7,257 +7,255 @@ import $ from 'jquery'; import rison from 'ui/utils/rison'; import fieldCalculator from 'plugins/kibana/discover/components/field_chooser/lib/field_calculator'; import IndexPatternsFieldListProvider from 'ui/index_patterns/_field_list'; -define(function (require) { - const app = require('ui/modules').get('apps/discover'); +const app = require('ui/modules').get('apps/discover'); - app.directive('discFieldChooser', function ($location, globalState, config, $route, Private) { - const FieldList = Private(IndexPatternsFieldListProvider); +app.directive('discFieldChooser', function ($location, globalState, config, $route, Private) { + const FieldList = Private(IndexPatternsFieldListProvider); - return { - restrict: 'E', - scope: { - columns: '=', - hits: '=', - fieldCounts: '=', - state: '=', - indexPattern: '=', - indexPatternList: '=', - updateFilterInQuery: '=filter' - }, - template: require('plugins/kibana/discover/components/field_chooser/field_chooser.html'), - link: function ($scope) { - $scope.setIndexPattern = function (id) { - $scope.state.index = id; - $scope.state.save(); - }; + return { + restrict: 'E', + scope: { + columns: '=', + hits: '=', + fieldCounts: '=', + state: '=', + indexPattern: '=', + indexPatternList: '=', + updateFilterInQuery: '=filter' + }, + template: require('plugins/kibana/discover/components/field_chooser/field_chooser.html'), + link: function ($scope) { + $scope.setIndexPattern = function (id) { + $scope.state.index = id; + $scope.state.save(); + }; - $scope.$watch('state.index', function (id, previousId) { - if (previousId == null || previousId === id) return; - $route.reload(); - }); + $scope.$watch('state.index', function (id, previousId) { + if (previousId == null || previousId === id) return; + $route.reload(); + }); - const filter = $scope.filter = { - props: [ - 'type', - 'indexed', - 'analyzed', - 'missing', - 'name' - ], - defaults: { - missing: true - }, - boolOpts: [ - {label: 'any', value: undefined }, - {label: 'yes', value: true }, - {label: 'no', value: false } - ], - toggleVal: function (name, def) { - if (filter.vals[name] !== def) filter.vals[name] = def; - else filter.vals[name] = undefined; - }, - reset: function () { - filter.vals = _.clone(filter.defaults); - }, - isFieldSelected: function (field) { - return field.display; - }, - isFieldFiltered: function (field) { - const matchFilter = (filter.vals.type == null || field.type === filter.vals.type); - const isAnalyzed = (filter.vals.analyzed == null || field.analyzed === filter.vals.analyzed); - const isIndexed = (filter.vals.indexed == null || field.indexed === filter.vals.indexed); - const scriptedOrMissing = (!filter.vals.missing || field.scripted || field.rowCount > 0); - const matchName = (!filter.vals.name || field.name.indexOf(filter.vals.name) !== -1); + const filter = $scope.filter = { + props: [ + 'type', + 'indexed', + 'analyzed', + 'missing', + 'name' + ], + defaults: { + missing: true + }, + boolOpts: [ + {label: 'any', value: undefined }, + {label: 'yes', value: true }, + {label: 'no', value: false } + ], + toggleVal: function (name, def) { + if (filter.vals[name] !== def) filter.vals[name] = def; + else filter.vals[name] = undefined; + }, + reset: function () { + filter.vals = _.clone(filter.defaults); + }, + isFieldSelected: function (field) { + return field.display; + }, + isFieldFiltered: function (field) { + const matchFilter = (filter.vals.type == null || field.type === filter.vals.type); + const isAnalyzed = (filter.vals.analyzed == null || field.analyzed === filter.vals.analyzed); + const isIndexed = (filter.vals.indexed == null || field.indexed === filter.vals.indexed); + const scriptedOrMissing = (!filter.vals.missing || field.scripted || field.rowCount > 0); + const matchName = (!filter.vals.name || field.name.indexOf(filter.vals.name) !== -1); - return !field.display - && matchFilter - && isAnalyzed - && isIndexed - && scriptedOrMissing - && matchName - ; - }, - popularity: function (field) { - return field.count > 0; - }, - getActive: function () { - return _.some(filter.props, function (prop) { - return filter.vals[prop] !== filter.defaults[prop]; - }); - } - }; + return !field.display + && matchFilter + && isAnalyzed + && isIndexed + && scriptedOrMissing + && matchName + ; + }, + popularity: function (field) { + return field.count > 0; + }, + getActive: function () { + return _.some(filter.props, function (prop) { + return filter.vals[prop] !== filter.defaults[prop]; + }); + } + }; - // set the initial values to the defaults - filter.reset(); + // set the initial values to the defaults + filter.reset(); - $scope.$watchCollection('filter.vals', function () { - filter.active = filter.getActive(); - }); + $scope.$watchCollection('filter.vals', function () { + filter.active = filter.getActive(); + }); - $scope.toggle = function (fieldName) { - $scope.increaseFieldCounter(fieldName); - _.toggleInOut($scope.columns, fieldName); - }; + $scope.toggle = function (fieldName) { + $scope.increaseFieldCounter(fieldName); + _.toggleInOut($scope.columns, fieldName); + }; - $scope.$watchMulti([ - '[]fieldCounts', - '[]columns', - '[]hits' - ], function (cur, prev) { - const newHits = cur[2] !== prev[2]; - let fields = $scope.fields; - const columns = $scope.columns || []; - const fieldCounts = $scope.fieldCounts; + $scope.$watchMulti([ + '[]fieldCounts', + '[]columns', + '[]hits' + ], function (cur, prev) { + const newHits = cur[2] !== prev[2]; + let fields = $scope.fields; + const columns = $scope.columns || []; + const fieldCounts = $scope.fieldCounts; - if (!fields || newHits) { - $scope.fields = fields = getFields(); - } + if (!fields || newHits) { + $scope.fields = fields = getFields(); + } - if (!fields) return; + if (!fields) return; - // group the fields into popular and up-popular lists - _.chain(fields) - .each(function (field) { - field.displayOrder = _.indexOf(columns, field.name) + 1; - field.display = !!field.displayOrder; - field.rowCount = fieldCounts[field.name]; - }) - .sortBy(function (field) { - return (field.count || 0) * -1; - }) - .groupBy(function (field) { - if (field.display) return 'selected'; - return field.count > 0 ? 'popular' : 'unpopular'; - }) - .tap(function (groups) { - groups.selected = _.sortBy(groups.selected || [], 'displayOrder'); + // group the fields into popular and up-popular lists + _.chain(fields) + .each(function (field) { + field.displayOrder = _.indexOf(columns, field.name) + 1; + field.display = !!field.displayOrder; + field.rowCount = fieldCounts[field.name]; + }) + .sortBy(function (field) { + return (field.count || 0) * -1; + }) + .groupBy(function (field) { + if (field.display) return 'selected'; + return field.count > 0 ? 'popular' : 'unpopular'; + }) + .tap(function (groups) { + groups.selected = _.sortBy(groups.selected || [], 'displayOrder'); - groups.popular = groups.popular || []; - groups.unpopular = groups.unpopular || []; + groups.popular = groups.popular || []; + groups.unpopular = groups.unpopular || []; - // move excess popular fields to un-popular list - const extras = groups.popular.splice(config.get('fields:popularLimit')); - groups.unpopular = extras.concat(groups.unpopular); - }) - .each(function (group, name) { - $scope[name + 'Fields'] = _.sortBy(group, name === 'selected' ? 'display' : 'name'); - }) - .commit(); + // move excess popular fields to un-popular list + const extras = groups.popular.splice(config.get('fields:popularLimit')); + groups.unpopular = extras.concat(groups.unpopular); + }) + .each(function (group, name) { + $scope[name + 'Fields'] = _.sortBy(group, name === 'selected' ? 'display' : 'name'); + }) + .commit(); - // include undefined so the user can clear the filter - $scope.fieldTypes = _.union([undefined], _.pluck(fields, 'type')); - }); + // include undefined so the user can clear the filter + $scope.fieldTypes = _.union([undefined], _.pluck(fields, 'type')); + }); - $scope.increaseFieldCounter = function (fieldName) { - $scope.indexPattern.popularizeField(fieldName, 1); - }; + $scope.increaseFieldCounter = function (fieldName) { + $scope.indexPattern.popularizeField(fieldName, 1); + }; - $scope.vizLocation = function (field) { - if (!$scope.state) {return '';} + $scope.vizLocation = function (field) { + if (!$scope.state) {return '';} - let agg = {}; - const isGeoPoint = field.type === 'geo_point'; - const type = isGeoPoint ? 'tile_map' : 'histogram'; - // If we're visualizing a date field, and our index is time based (and thus has a time filter), - // then run a date histogram - if (field.type === 'date' && $scope.indexPattern.timeFieldName === field.name) { - agg = { - type: 'date_histogram', - schema: 'segment', - params: { - field: field.name, - interval: 'auto' - } - }; + let agg = {}; + const isGeoPoint = field.type === 'geo_point'; + const type = isGeoPoint ? 'tile_map' : 'histogram'; + // If we're visualizing a date field, and our index is time based (and thus has a time filter), + // then run a date histogram + if (field.type === 'date' && $scope.indexPattern.timeFieldName === field.name) { + agg = { + type: 'date_histogram', + schema: 'segment', + params: { + field: field.name, + interval: 'auto' + } + }; - } else if (isGeoPoint) { - agg = { - type: 'geohash_grid', - schema: 'segment', - params: { - field: field.name, - precision: 3 - } - }; - } else { - agg = { - type: 'terms', - schema: 'segment', - params: { - field: field.name, - size: config.get('discover:aggs:terms:size', 20), - orderBy: '2' - } - }; - } + } else if (isGeoPoint) { + agg = { + type: 'geohash_grid', + schema: 'segment', + params: { + field: field.name, + precision: 3 + } + }; + } else { + agg = { + type: 'terms', + schema: 'segment', + params: { + field: field.name, + size: config.get('discover:aggs:terms:size', 20), + orderBy: '2' + } + }; + } - return '#/visualize/create?' + $.param(_.assign($location.search(), { - indexPattern: $scope.state.index, - type: type, - _a: rison.encode({ - filters: $scope.state.filters || [], - query: $scope.state.query || undefined, - vis: { - type: type, - aggs: [ - agg, - {schema: 'metric', type: 'count', 'id': '2'} - ] - } - }) - })); - }; + return '#/visualize/create?' + $.param(_.assign($location.search(), { + indexPattern: $scope.state.index, + type: type, + _a: rison.encode({ + filters: $scope.state.filters || [], + query: $scope.state.query || undefined, + vis: { + type: type, + aggs: [ + agg, + {schema: 'metric', type: 'count', 'id': '2'} + ] + } + }) + })); + }; - $scope.details = function (field, recompute) { - if (_.isUndefined(field.details) || recompute) { - field.details = fieldCalculator.getFieldValueCounts({ - hits: $scope.hits, - field: field, - count: 5, - grouped: false - }); - _.each(field.details.buckets, function (bucket) { - bucket.display = field.format.convert(bucket.value); - }); - $scope.increaseFieldCounter(field, 1); - } else { - delete field.details; - } - }; + $scope.details = function (field, recompute) { + if (_.isUndefined(field.details) || recompute) { + field.details = fieldCalculator.getFieldValueCounts({ + hits: $scope.hits, + field: field, + count: 5, + grouped: false + }); + _.each(field.details.buckets, function (bucket) { + bucket.display = field.format.convert(bucket.value); + }); + $scope.increaseFieldCounter(field, 1); + } else { + delete field.details; + } + }; - function getFields() { - const prevFields = $scope.fields; - const indexPattern = $scope.indexPattern; - const hits = $scope.hits; - const fieldCounts = $scope.fieldCounts; + function getFields() { + const prevFields = $scope.fields; + const indexPattern = $scope.indexPattern; + const hits = $scope.hits; + const fieldCounts = $scope.fieldCounts; - if (!indexPattern || !hits || !fieldCounts) return; + if (!indexPattern || !hits || !fieldCounts) return; - const fieldSpecs = indexPattern.fields.slice(0); - const fieldNamesInDocs = _.keys(fieldCounts); - const fieldNamesInIndexPattern = _.keys(indexPattern.fields.byName); + const fieldSpecs = indexPattern.fields.slice(0); + const fieldNamesInDocs = _.keys(fieldCounts); + const fieldNamesInIndexPattern = _.keys(indexPattern.fields.byName); - _.difference(fieldNamesInDocs, fieldNamesInIndexPattern) - .forEach(function (unknownFieldName) { - fieldSpecs.push({ - name: unknownFieldName, - type: 'unknown' - }); + _.difference(fieldNamesInDocs, fieldNamesInIndexPattern) + .forEach(function (unknownFieldName) { + fieldSpecs.push({ + name: unknownFieldName, + type: 'unknown' }); + }); - const fields = new FieldList(indexPattern, fieldSpecs); - - if (prevFields) { - fields.forEach(function (field) { - field.details = _.get(prevFields, ['byName', field.name, 'details']); - }); - } + const fields = new FieldList(indexPattern, fieldSpecs); - return fields; + if (prevFields) { + fields.forEach(function (field) { + field.details = _.get(prevFields, ['byName', field.name, 'details']); + }); } + + return fields; } - }; - }); + } + }; }); diff --git a/src/plugins/kibana/public/discover/components/field_chooser/lib/field_calculator.js b/src/plugins/kibana/public/discover/components/field_chooser/lib/field_calculator.js index c6efd46416e653..a819ac58cd02fe 100644 --- a/src/plugins/kibana/public/discover/components/field_chooser/lib/field_calculator.js +++ b/src/plugins/kibana/public/discover/components/field_chooser/lib/field_calculator.js @@ -1,104 +1,102 @@ import _ from 'lodash'; -define(function (require) { - function getFieldValues(hits, field) { - const name = field.name; - const flattenHit = field.indexPattern.flattenHit; - return _.map(hits, function (hit) { - return flattenHit(hit)[name]; - }); +function getFieldValues(hits, field) { + const name = field.name; + const flattenHit = field.indexPattern.flattenHit; + return _.map(hits, function (hit) { + return flattenHit(hit)[name]; + }); +} + +function getFieldValueCounts(params) { + params = _.defaults(params, { + count: 5, + grouped: false + }); + + if ( + params.field.type === 'geo_point' + || params.field.type === 'geo_shape' + || params.field.type === 'attachment' + ) { + return { error: 'Analysis is not available for geo fields.' }; } - function getFieldValueCounts(params) { - params = _.defaults(params, { - count: 5, - grouped: false - }); - - if ( - params.field.type === 'geo_point' - || params.field.type === 'geo_shape' - || params.field.type === 'attachment' - ) { - return { error: 'Analysis is not available for geo fields.' }; - } + const allValues = getFieldValues(params.hits, params.field); + let counts; + const missing = _countMissing(allValues); - const allValues = getFieldValues(params.hits, params.field); - let counts; - const missing = _countMissing(allValues); - - try { - const groups = _groupValues(allValues, params); - counts = _.map( - _.sortBy(groups, 'count').reverse().slice(0, params.count), - function (bucket) { - return { - value: bucket.value, - count: bucket.count, - percent: (bucket.count / (params.hits.length - missing) * 100).toFixed(1) - }; - }); - - if (params.hits.length - missing === 0) { + try { + const groups = _groupValues(allValues, params); + counts = _.map( + _.sortBy(groups, 'count').reverse().slice(0, params.count), + function (bucket) { return { - error: 'This field is present in your elasticsearch mapping' + - ' but not in any documents in the search results.' + - ' You may still be able to visualize or search on it.' + value: bucket.value, + count: bucket.count, + percent: (bucket.count / (params.hits.length - missing) * 100).toFixed(1) }; - } + }); + if (params.hits.length - missing === 0) { return { - total: params.hits.length, - exists: params.hits.length - missing, - missing: missing, - buckets: counts, + error: 'This field is present in your elasticsearch mapping' + + ' but not in any documents in the search results.' + + ' You may still be able to visualize or search on it.' }; - } catch (e) { - return { error: e.message }; } + return { + total: params.hits.length, + exists: params.hits.length - missing, + missing: missing, + buckets: counts, + }; + } catch (e) { + return { error: e.message }; } - // returns a count of fields in the array that are undefined or null - function _countMissing(array) { - return array.length - _.without(array, undefined, null).length; - } +} +// returns a count of fields in the array that are undefined or null +function _countMissing(array) { + return array.length - _.without(array, undefined, null).length; +} - function _groupValues(allValues, params) { - const groups = {}; - let k; - allValues.forEach(function (value) { - if (_.isObject(value) && !_.isArray(value)) { - throw new Error('Analysis is not available for object fields'); - } +function _groupValues(allValues, params) { + const groups = {}; + let k; - if (_.isArray(value) && !params.grouped) { - k = value; + allValues.forEach(function (value) { + if (_.isObject(value) && !_.isArray(value)) { + throw new Error('Analysis is not available for object fields'); + } + + if (_.isArray(value) && !params.grouped) { + k = value; + } else { + k = value == null ? undefined : [value]; + } + + _.each(k, function (key) { + if (_.has(groups, key)) { + groups[key].count++; } else { - k = value == null ? undefined : [value]; + groups[key] = { + value: (params.grouped ? value : key), + count: 1 + }; } - - _.each(k, function (key) { - if (_.has(groups, key)) { - groups[key].count++; - } else { - groups[key] = { - value: (params.grouped ? value : key), - count: 1 - }; - } - }); }); + }); - return groups; - } + return groups; +} - return { - _groupValues: _groupValues, - _countMissing: _countMissing, - getFieldValues: getFieldValues, - getFieldValueCounts: getFieldValueCounts - }; -}); +export default { + _groupValues: _groupValues, + _countMissing: _countMissing, + getFieldValues: getFieldValues, + getFieldValueCounts: getFieldValueCounts +}; diff --git a/src/plugins/kibana/public/discover/controllers/discover.js b/src/plugins/kibana/public/discover/controllers/discover.js index 9399a77bbf26ed..f64acfa6d86587 100644 --- a/src/plugins/kibana/public/discover/controllers/discover.js +++ b/src/plugins/kibana/public/discover/controllers/discover.js @@ -24,533 +24,531 @@ import PluginsKibanaDiscoverHitSortFnProvider from 'plugins/kibana/discover/_hit import FilterBarQueryFilterProvider from 'ui/filter_bar/query_filter'; import FilterManagerProvider from 'ui/filter_manager'; import AggTypesBucketsIntervalOptionsProvider from 'ui/agg_types/buckets/_interval_options'; -define(function (require) { - - - - const app = require('ui/modules').get('apps/discover', [ - 'kibana/notify', - 'kibana/courier', - 'kibana/index_patterns' - ]); - - require('ui/routes') - .when('/discover/:id?', { - template: require('plugins/kibana/discover/index.html'), - reloadOnSearch: false, - resolve: { - ip: function (Promise, courier, config, $location) { - return courier.indexPatterns.getIds() - .then(function (list) { - const stateRison = $location.search()._a; - - let state; - try { state = rison.decode(stateRison); } - catch (e) { state = {}; } - - const specified = !!state.index; - const exists = _.contains(list, state.index); - const id = exists ? state.index : config.get('defaultIndex'); - - return Promise.props({ - list: list, - loaded: courier.indexPatterns.get(id), - stateVal: state.index, - stateValFound: specified && exists - }); - }); - }, - savedSearch: function (courier, savedSearches, $route) { - return savedSearches.get($route.current.params.id) - .catch(courier.redirectWhenMissing({ - 'search': '/discover', - 'index-pattern': '/settings/objects/savedSearches/' + $route.current.params.id - })); - } - } - }); - app.controller('discover', function ($scope, config, courier, $route, $window, Notifier, - AppState, timefilter, Promise, Private, kbnUrl, highlightTags) { - const Vis = Private(VisProvider); - const docTitle = Private(DocTitleProvider); - const brushEvent = Private(UtilsBrushEventProvider); - const HitSortFn = Private(PluginsKibanaDiscoverHitSortFnProvider); - const queryFilter = Private(FilterBarQueryFilterProvider); - const filterManager = Private(FilterManagerProvider); - const notify = new Notifier({ - location: 'Discover' - }); +const app = require('ui/modules').get('apps/discover', [ + 'kibana/notify', + 'kibana/courier', + 'kibana/index_patterns' +]); + +require('ui/routes') +.when('/discover/:id?', { + template: require('plugins/kibana/discover/index.html'), + reloadOnSearch: false, + resolve: { + ip: function (Promise, courier, config, $location) { + return courier.indexPatterns.getIds() + .then(function (list) { + const stateRison = $location.search()._a; + + let state; + try { state = rison.decode(stateRison); } + catch (e) { state = {}; } + + const specified = !!state.index; + const exists = _.contains(list, state.index); + const id = exists ? state.index : config.get('defaultIndex'); + + return Promise.props({ + list: list, + loaded: courier.indexPatterns.get(id), + stateVal: state.index, + stateValFound: specified && exists + }); + }); + }, + savedSearch: function (courier, savedSearches, $route) { + return savedSearches.get($route.current.params.id) + .catch(courier.redirectWhenMissing({ + 'search': '/discover', + 'index-pattern': '/settings/objects/savedSearches/' + $route.current.params.id + })); + } + } +}); - $scope.intervalOptions = Private(AggTypesBucketsIntervalOptionsProvider); - $scope.showInterval = false; +app.controller('discover', function ($scope, config, courier, $route, $window, Notifier, + AppState, timefilter, Promise, Private, kbnUrl, highlightTags) { - $scope.intervalEnabled = function (interval) { - return interval.val !== 'custom'; - }; + const Vis = Private(VisProvider); + const docTitle = Private(DocTitleProvider); + const brushEvent = Private(UtilsBrushEventProvider); + const HitSortFn = Private(PluginsKibanaDiscoverHitSortFnProvider); + const queryFilter = Private(FilterBarQueryFilterProvider); + const filterManager = Private(FilterManagerProvider); - $scope.toggleInterval = function () { - $scope.showInterval = !$scope.showInterval; - }; + const notify = new Notifier({ + location: 'Discover' + }); - // config panel templates - $scope.configTemplate = new ConfigTemplate({ - load: require('plugins/kibana/discover/partials/load_search.html'), - save: require('plugins/kibana/discover/partials/save_search.html'), - share: require('plugins/kibana/discover/partials/share_search.html') - }); + $scope.intervalOptions = Private(AggTypesBucketsIntervalOptionsProvider); + $scope.showInterval = false; - $scope.timefilter = timefilter; + $scope.intervalEnabled = function (interval) { + return interval.val !== 'custom'; + }; - // the saved savedSearch - const savedSearch = $route.current.locals.savedSearch; - $scope.$on('$destroy', savedSearch.destroy); + $scope.toggleInterval = function () { + $scope.showInterval = !$scope.showInterval; + }; - // the actual courier.SearchSource - $scope.searchSource = savedSearch.searchSource; - $scope.indexPattern = resolveIndexPatternLoading(); - $scope.searchSource.set('index', $scope.indexPattern); + // config panel templates + $scope.configTemplate = new ConfigTemplate({ + load: require('plugins/kibana/discover/partials/load_search.html'), + save: require('plugins/kibana/discover/partials/save_search.html'), + share: require('plugins/kibana/discover/partials/share_search.html') + }); - if (savedSearch.id) { - docTitle.change(savedSearch.title); - } + $scope.timefilter = timefilter; - const $state = $scope.state = new AppState(getStateDefaults()); - $scope.uiState = $state.makeStateful('uiState'); - - function getStateDefaults() { - return { - query: $scope.searchSource.get('query') || '', - sort: getSort.array(savedSearch.sort, $scope.indexPattern), - columns: savedSearch.columns || ['_source'], - index: $scope.indexPattern.id, - interval: 'auto', - filters: _.cloneDeep($scope.searchSource.getOwn('filter')) - }; - } + // the saved savedSearch + const savedSearch = $route.current.locals.savedSearch; + $scope.$on('$destroy', savedSearch.destroy); - $state.index = $scope.indexPattern.id; - $state.sort = getSort.array($state.sort, $scope.indexPattern); + // the actual courier.SearchSource + $scope.searchSource = savedSearch.searchSource; + $scope.indexPattern = resolveIndexPatternLoading(); + $scope.searchSource.set('index', $scope.indexPattern); - $scope.$watchCollection('state.columns', function () { - $state.save(); - }); + if (savedSearch.id) { + docTitle.change(savedSearch.title); + } - $scope.opts = { - // number of records to fetch, then paginate through - sampleSize: config.get('discover:sampleSize'), - // Index to match + const $state = $scope.state = new AppState(getStateDefaults()); + $scope.uiState = $state.makeStateful('uiState'); + + function getStateDefaults() { + return { + query: $scope.searchSource.get('query') || '', + sort: getSort.array(savedSearch.sort, $scope.indexPattern), + columns: savedSearch.columns || ['_source'], index: $scope.indexPattern.id, - timefield: $scope.indexPattern.timeFieldName, - savedSearch: savedSearch, - indexPatternList: $route.current.locals.ip.list + interval: 'auto', + filters: _.cloneDeep($scope.searchSource.getOwn('filter')) }; + } - const init = _.once(function () { - const showTotal = 5; - $scope.failuresShown = showTotal; - $scope.showAllFailures = function () { - $scope.failuresShown = $scope.failures.length; - }; - $scope.showLessFailures = function () { - $scope.failuresShown = showTotal; - }; - - $scope.updateDataSource() - .then(function () { - $scope.$listen(timefilter, 'fetch', function () { - $scope.fetch(); - }); + $state.index = $scope.indexPattern.id; + $state.sort = getSort.array($state.sort, $scope.indexPattern); - $scope.$watchCollection('state.sort', function (sort) { - if (!sort) return; - - // get the current sort from {key: val} to ["key", "val"]; - const currentSort = _.pairs($scope.searchSource.get('sort')).pop(); - - // if the searchSource doesn't know, tell it so - if (!angular.equals(sort, currentSort)) $scope.fetch(); - }); - - // update data source when filters update - $scope.$listen(queryFilter, 'update', function () { - return $scope.updateDataSource().then(function () { - $state.save(); - }); - }); - - // update data source when hitting forward/back and the query changes - $scope.$listen($state, 'fetch_with_changes', function (diff) { - if (diff.indexOf('query') >= 0) $scope.fetch(); - }); + $scope.$watchCollection('state.columns', function () { + $state.save(); + }); - // fetch data when filters fire fetch event - $scope.$listen(queryFilter, 'fetch', $scope.fetch); + $scope.opts = { + // number of records to fetch, then paginate through + sampleSize: config.get('discover:sampleSize'), + // Index to match + index: $scope.indexPattern.id, + timefield: $scope.indexPattern.timeFieldName, + savedSearch: savedSearch, + indexPatternList: $route.current.locals.ip.list + }; + + const init = _.once(function () { + const showTotal = 5; + $scope.failuresShown = showTotal; + $scope.showAllFailures = function () { + $scope.failuresShown = $scope.failures.length; + }; + $scope.showLessFailures = function () { + $scope.failuresShown = showTotal; + }; - $scope.$watch('opts.timefield', function (timefield) { - timefilter.enabled = !!timefield; - }); + $scope.updateDataSource() + .then(function () { + $scope.$listen(timefilter, 'fetch', function () { + $scope.fetch(); + }); - $scope.$watch('state.interval', function (interval, oldInterval) { - if (interval !== oldInterval && interval === 'auto') { - $scope.showInterval = false; - } - $scope.fetch(); - }); + $scope.$watchCollection('state.sort', function (sort) { + if (!sort) return; - $scope.$watch('vis.aggs', function () { - // no timefield, no vis, nothing to update - if (!$scope.opts.timefield) return; + // get the current sort from {key: val} to ["key", "val"]; + const currentSort = _.pairs($scope.searchSource.get('sort')).pop(); - const buckets = $scope.vis.aggs.bySchemaGroup.buckets; + // if the searchSource doesn't know, tell it so + if (!angular.equals(sort, currentSort)) $scope.fetch(); + }); - if (buckets && buckets.length === 1) { - $scope.intervalName = 'by ' + buckets[0].buckets.getInterval().description; - } else { - $scope.intervalName = 'auto'; - } + // update data source when filters update + $scope.$listen(queryFilter, 'update', function () { + return $scope.updateDataSource().then(function () { + $state.save(); }); + }); - $scope.$watchMulti([ - 'rows', - 'fetchStatus' - ], (function updateResultState() { - let prev = {}; - const status = { - LOADING: 'loading', // initial data load - READY: 'ready', // results came back - NO_RESULTS: 'none' // no results came back - }; + // update data source when hitting forward/back and the query changes + $scope.$listen($state, 'fetch_with_changes', function (diff) { + if (diff.indexOf('query') >= 0) $scope.fetch(); + }); - function pick(rows, oldRows, fetchStatus) { - // initial state, pretend we are loading - if (rows == null && oldRows == null) return status.LOADING; - - const rowsEmpty = _.isEmpty(rows); - // An undefined fetchStatus means the requests are still being - // prepared to be sent. When all requests are completed, - // fetchStatus is set to null, so it's important that we - // specifically check for undefined to determine a loading status. - const preparingForFetch = _.isUndefined(fetchStatus); - if (preparingForFetch) return status.LOADING; - else if (rowsEmpty && fetchStatus) return status.LOADING; - else if (!rowsEmpty) return status.READY; - else return status.NO_RESULTS; - } + // fetch data when filters fire fetch event + $scope.$listen(queryFilter, 'fetch', $scope.fetch); - return function () { - const current = { - rows: $scope.rows, - fetchStatus: $scope.fetchStatus - }; + $scope.$watch('opts.timefield', function (timefield) { + timefilter.enabled = !!timefield; + }); - $scope.resultState = pick( - current.rows, - prev.rows, - current.fetchStatus, - prev.fetchStatus - ); + $scope.$watch('state.interval', function (interval, oldInterval) { + if (interval !== oldInterval && interval === 'auto') { + $scope.showInterval = false; + } + $scope.fetch(); + }); - prev = current; - }; - }())); + $scope.$watch('vis.aggs', function () { + // no timefield, no vis, nothing to update + if (!$scope.opts.timefield) return; - $scope.searchSource.onError(function (err) { - notify.error(err); - }).catch(notify.fatal); + const buckets = $scope.vis.aggs.bySchemaGroup.buckets; - function initForTime() { - return setupVisualization().then($scope.updateTime); + if (buckets && buckets.length === 1) { + $scope.intervalName = 'by ' + buckets[0].buckets.getInterval().description; + } else { + $scope.intervalName = 'auto'; } - - return Promise.resolve($scope.opts.timefield && initForTime()) - .then(function () { - init.complete = true; - $state.replace(); - $scope.$emit('application.load'); - }); }); - }); - $scope.opts.saveDataSource = function () { - return $scope.updateDataSource() - .then(function () { - savedSearch.id = savedSearch.title; - savedSearch.columns = $scope.state.columns; - savedSearch.sort = $scope.state.sort; - - return savedSearch.save() - .then(function (id) { - $scope.configTemplate.close('save'); - - if (id) { - notify.info('Saved Data Source "' + savedSearch.title + '"'); - if (savedSearch.id !== $route.current.params.id) { - kbnUrl.change('/discover/{{id}}', { id: savedSearch.id }); - } else { - // Update defaults so that "reload saved query" functions correctly - $state.setDefaults(getStateDefaults()); - } - } - }); - }) - .catch(notify.error); - }; - - $scope.opts.fetch = $scope.fetch = function () { - // ignore requests to fetch before the app inits - if (!init.complete) return; + $scope.$watchMulti([ + 'rows', + 'fetchStatus' + ], (function updateResultState() { + let prev = {}; + const status = { + LOADING: 'loading', // initial data load + READY: 'ready', // results came back + NO_RESULTS: 'none' // no results came back + }; + + function pick(rows, oldRows, fetchStatus) { + // initial state, pretend we are loading + if (rows == null && oldRows == null) return status.LOADING; + + const rowsEmpty = _.isEmpty(rows); + // An undefined fetchStatus means the requests are still being + // prepared to be sent. When all requests are completed, + // fetchStatus is set to null, so it's important that we + // specifically check for undefined to determine a loading status. + const preparingForFetch = _.isUndefined(fetchStatus); + if (preparingForFetch) return status.LOADING; + else if (rowsEmpty && fetchStatus) return status.LOADING; + else if (!rowsEmpty) return status.READY; + else return status.NO_RESULTS; + } - $scope.updateTime(); + return function () { + const current = { + rows: $scope.rows, + fetchStatus: $scope.fetchStatus + }; - $scope.updateDataSource() - .then(setupVisualization) - .then(function () { - $state.save(); - return courier.fetch(); - }) - .catch(notify.error); - }; + $scope.resultState = pick( + current.rows, + prev.rows, + current.fetchStatus, + prev.fetchStatus + ); - $scope.searchSource.onBeginSegmentedFetch(function (segmented) { + prev = current; + }; + }())); - function flushResponseData() { - $scope.hits = 0; - $scope.faliures = []; - $scope.rows = []; - $scope.fieldCounts = {}; - } + $scope.searchSource.onError(function (err) { + notify.error(err); + }).catch(notify.fatal); - if (!$scope.rows) flushResponseData(); - - const sort = $state.sort; - const timeField = $scope.indexPattern.timeFieldName; - const totalSize = $scope.size || $scope.opts.sampleSize; - - /** - * Basically an emum. - * - * opts: - * "time" - sorted by the timefield - * "non-time" - explicitly sorted by a non-time field, NOT THE SAME AS `sortBy !== "time"` - * "implicit" - no sorting set, NOT THE SAME AS "non-time" - * - * @type {String} - */ - const sortBy = (function () { - if (!_.isArray(sort)) return 'implicit'; - else if (sort[0] === '_score') return 'implicit'; - else if (sort[0] === timeField) return 'time'; - else return 'non-time'; - }()); - - let sortFn = null; - if (sortBy !== 'implicit') { - sortFn = new HitSortFn(sort[1]); + function initForTime() { + return setupVisualization().then($scope.updateTime); } - $scope.updateTime(); - if (sort[0] === '_score') segmented.setMaxSegments(1); - segmented.setDirection(sortBy === 'time' ? (sort[1] || 'desc') : 'desc'); - segmented.setSortFn(sortFn); - segmented.setSize($scope.opts.sampleSize); - - // triggered when the status updated - segmented.on('status', function (status) { - $scope.fetchStatus = status; - }); - - segmented.on('first', function () { - flushResponseData(); + return Promise.resolve($scope.opts.timefield && initForTime()) + .then(function () { + init.complete = true; + $state.replace(); + $scope.$emit('application.load'); }); + }); + }); - segmented.on('segment', notify.timed('handle each segment', function (resp) { - if (resp._shards.failed > 0) { - $scope.failures = _.union($scope.failures, resp._shards.failures); - $scope.failures = _.uniq($scope.failures, false, function (failure) { - return failure.index + failure.shard + failure.reason; - }); + $scope.opts.saveDataSource = function () { + return $scope.updateDataSource() + .then(function () { + savedSearch.id = savedSearch.title; + savedSearch.columns = $scope.state.columns; + savedSearch.sort = $scope.state.sort; + + return savedSearch.save() + .then(function (id) { + $scope.configTemplate.close('save'); + + if (id) { + notify.info('Saved Data Source "' + savedSearch.title + '"'); + if (savedSearch.id !== $route.current.params.id) { + kbnUrl.change('/discover/{{id}}', { id: savedSearch.id }); + } else { + // Update defaults so that "reload saved query" functions correctly + $state.setDefaults(getStateDefaults()); + } } - })); + }); + }) + .catch(notify.error); + }; - segmented.on('mergedSegment', function (merged) { - $scope.mergedEsResp = merged; - $scope.hits = merged.hits.total; + $scope.opts.fetch = $scope.fetch = function () { + // ignore requests to fetch before the app inits + if (!init.complete) return; - const indexPattern = $scope.searchSource.get('index'); + $scope.updateTime(); - // the merge rows, use a new array to help watchers - $scope.rows = merged.hits.hits.slice(); + $scope.updateDataSource() + .then(setupVisualization) + .then(function () { + $state.save(); + return courier.fetch(); + }) + .catch(notify.error); + }; + + $scope.searchSource.onBeginSegmentedFetch(function (segmented) { + + function flushResponseData() { + $scope.hits = 0; + $scope.faliures = []; + $scope.rows = []; + $scope.fieldCounts = {}; + } - notify.event('flatten hit and count fields', function () { - let counts = $scope.fieldCounts; + if (!$scope.rows) flushResponseData(); + + const sort = $state.sort; + const timeField = $scope.indexPattern.timeFieldName; + const totalSize = $scope.size || $scope.opts.sampleSize; + + /** + * Basically an emum. + * + * opts: + * "time" - sorted by the timefield + * "non-time" - explicitly sorted by a non-time field, NOT THE SAME AS `sortBy !== "time"` + * "implicit" - no sorting set, NOT THE SAME AS "non-time" + * + * @type {String} + */ + const sortBy = (function () { + if (!_.isArray(sort)) return 'implicit'; + else if (sort[0] === '_score') return 'implicit'; + else if (sort[0] === timeField) return 'time'; + else return 'non-time'; + }()); + + let sortFn = null; + if (sortBy !== 'implicit') { + sortFn = new HitSortFn(sort[1]); + } - // if we haven't counted yet, or need a fresh count because we are sorting, reset the counts - if (!counts || sortFn) counts = $scope.fieldCounts = {}; + $scope.updateTime(); + if (sort[0] === '_score') segmented.setMaxSegments(1); + segmented.setDirection(sortBy === 'time' ? (sort[1] || 'desc') : 'desc'); + segmented.setSortFn(sortFn); + segmented.setSize($scope.opts.sampleSize); - $scope.rows.forEach(function (hit) { - // skip this work if we have already done it - if (hit.$$_counted) return; + // triggered when the status updated + segmented.on('status', function (status) { + $scope.fetchStatus = status; + }); - // when we are sorting results, we need to redo the counts each time because the - // "top 500" may change with each response, so don't mark this as counted - if (!sortFn) hit.$$_counted = true; + segmented.on('first', function () { + flushResponseData(); + }); - const fields = _.keys(indexPattern.flattenHit(hit)); - let n = fields.length; - let field; - while (field = fields[--n]) { - if (counts[field]) counts[field] += 1; - else counts[field] = 1; - } - }); + segmented.on('segment', notify.timed('handle each segment', function (resp) { + if (resp._shards.failed > 0) { + $scope.failures = _.union($scope.failures, resp._shards.failures); + $scope.failures = _.uniq($scope.failures, false, function (failure) { + return failure.index + failure.shard + failure.reason; }); - }); + } + })); - segmented.on('complete', function () { - if ($scope.fetchStatus.hitCount === 0) { - flushResponseData(); - } + segmented.on('mergedSegment', function (merged) { + $scope.mergedEsResp = merged; + $scope.hits = merged.hits.total; - $scope.fetchStatus = null; - }); - }).catch(notify.fatal); + const indexPattern = $scope.searchSource.get('index'); - $scope.updateTime = function () { - $scope.timeRange = { - from: dateMath.parse(timefilter.time.from), - to: dateMath.parse(timefilter.time.to, true) - }; - }; + // the merge rows, use a new array to help watchers + $scope.rows = merged.hits.hits.slice(); - $scope.resetQuery = function () { - kbnUrl.change('/discover/{{id}}', { id: $route.current.params.id }); - }; + notify.event('flatten hit and count fields', function () { + let counts = $scope.fieldCounts; - $scope.newQuery = function () { - kbnUrl.change('/discover'); - }; + // if we haven't counted yet, or need a fresh count because we are sorting, reset the counts + if (!counts || sortFn) counts = $scope.fieldCounts = {}; + + $scope.rows.forEach(function (hit) { + // skip this work if we have already done it + if (hit.$$_counted) return; - $scope.updateDataSource = Promise.method(function () { - $scope.searchSource - .size($scope.opts.sampleSize) - .sort(getSort($state.sort, $scope.indexPattern)) - .query(!$state.query ? null : $state.query) - .set('filter', queryFilter.getFilters()); - - if (config.get('doc_table:highlight')) { - $scope.searchSource.highlight({ - pre_tags: [highlightTags.pre], - post_tags: [highlightTags.post], - fields: {'*': {}}, - require_field_match: false, - fragment_size: 2147483647 // Limit of an integer. + // when we are sorting results, we need to redo the counts each time because the + // "top 500" may change with each response, so don't mark this as counted + if (!sortFn) hit.$$_counted = true; + + const fields = _.keys(indexPattern.flattenHit(hit)); + let n = fields.length; + let field; + while (field = fields[--n]) { + if (counts[field]) counts[field] += 1; + else counts[field] = 1; + } }); - } + }); }); - // TODO: On array fields, negating does not negate the combination, rather all terms - $scope.filterQuery = function (field, values, operation) { - $scope.indexPattern.popularizeField(field, 1); - filterManager.add(field, values, operation, $state.index); - }; + segmented.on('complete', function () { + if ($scope.fetchStatus.hitCount === 0) { + flushResponseData(); + } - $scope.toTop = function () { - $window.scrollTo(0, 0); - }; + $scope.fetchStatus = null; + }); + }).catch(notify.fatal); - let loadingVis; - function setupVisualization() { - // If we're not setting anything up we need to return an empty promise - if (!$scope.opts.timefield) return Promise.resolve(); - if (loadingVis) return loadingVis; + $scope.updateTime = function () { + $scope.timeRange = { + from: dateMath.parse(timefilter.time.from), + to: dateMath.parse(timefilter.time.to, true) + }; + }; + + $scope.resetQuery = function () { + kbnUrl.change('/discover/{{id}}', { id: $route.current.params.id }); + }; + + $scope.newQuery = function () { + kbnUrl.change('/discover'); + }; + + $scope.updateDataSource = Promise.method(function () { + $scope.searchSource + .size($scope.opts.sampleSize) + .sort(getSort($state.sort, $scope.indexPattern)) + .query(!$state.query ? null : $state.query) + .set('filter', queryFilter.getFilters()); + + if (config.get('doc_table:highlight')) { + $scope.searchSource.highlight({ + pre_tags: [highlightTags.pre], + post_tags: [highlightTags.post], + fields: {'*': {}}, + require_field_match: false, + fragment_size: 2147483647 // Limit of an integer. + }); + } + }); - const visStateAggs = [ - { - type: 'count', - schema: 'metric' - }, - { - type: 'date_histogram', - schema: 'segment', - params: { - field: $scope.opts.timefield, - interval: $state.interval, - min_doc_count: 0 - } + // TODO: On array fields, negating does not negate the combination, rather all terms + $scope.filterQuery = function (field, values, operation) { + $scope.indexPattern.popularizeField(field, 1); + filterManager.add(field, values, operation, $state.index); + }; + + $scope.toTop = function () { + $window.scrollTo(0, 0); + }; + + let loadingVis; + function setupVisualization() { + // If we're not setting anything up we need to return an empty promise + if (!$scope.opts.timefield) return Promise.resolve(); + if (loadingVis) return loadingVis; + + const visStateAggs = [ + { + type: 'count', + schema: 'metric' + }, + { + type: 'date_histogram', + schema: 'segment', + params: { + field: $scope.opts.timefield, + interval: $state.interval, + min_doc_count: 0 } - ]; + } + ]; - // we have a vis, just modify the aggs - if ($scope.vis) { - const visState = $scope.vis.getState(); - visState.aggs = visStateAggs; + // we have a vis, just modify the aggs + if ($scope.vis) { + const visState = $scope.vis.getState(); + visState.aggs = visStateAggs; - $scope.vis.setState(visState); - return Promise.resolve($scope.vis); - } + $scope.vis.setState(visState); + return Promise.resolve($scope.vis); + } - $scope.vis = new Vis($scope.indexPattern, { - title: savedSearch.title, - type: 'histogram', - params: { - addLegend: false, - addTimeMarker: true - }, - listeners: { - click: function (e) { - notify.log(e); - timefilter.time.from = moment(e.point.x); - timefilter.time.to = moment(e.point.x + e.data.ordered.interval); - timefilter.time.mode = 'absolute'; - }, - brush: brushEvent + $scope.vis = new Vis($scope.indexPattern, { + title: savedSearch.title, + type: 'histogram', + params: { + addLegend: false, + addTimeMarker: true + }, + listeners: { + click: function (e) { + notify.log(e); + timefilter.time.from = moment(e.point.x); + timefilter.time.to = moment(e.point.x + e.data.ordered.interval); + timefilter.time.mode = 'absolute'; }, - aggs: visStateAggs - }); + brush: brushEvent + }, + aggs: visStateAggs + }); - $scope.searchSource.aggs(function () { - $scope.vis.requesting(); - return $scope.vis.aggs.toDsl(); - }); + $scope.searchSource.aggs(function () { + $scope.vis.requesting(); + return $scope.vis.aggs.toDsl(); + }); - // stash this promise so that other calls to setupVisualization will have to wait - loadingVis = new Promise(function (resolve) { - $scope.$on('ready:vis', function () { - resolve($scope.vis); - }); - }) - .finally(function () { - // clear the loading flag - loadingVis = null; + // stash this promise so that other calls to setupVisualization will have to wait + loadingVis = new Promise(function (resolve) { + $scope.$on('ready:vis', function () { + resolve($scope.vis); }); + }) + .finally(function () { + // clear the loading flag + loadingVis = null; + }); - return loadingVis; - } + return loadingVis; + } - function resolveIndexPatternLoading() { - const props = $route.current.locals.ip; - const loaded = props.loaded; - const stateVal = props.stateVal; - const stateValFound = props.stateValFound; + function resolveIndexPatternLoading() { + const props = $route.current.locals.ip; + const loaded = props.loaded; + const stateVal = props.stateVal; + const stateValFound = props.stateValFound; - const own = $scope.searchSource.getOwn('index'); + const own = $scope.searchSource.getOwn('index'); - if (own && !stateVal) return own; - if (stateVal && !stateValFound) { - const err = '"' + stateVal + '" is not a configured pattern. '; - if (own) { - notify.warning(err + ' Using the saved index pattern: "' + own.id + '"'); - return own; - } - - notify.warning(err + ' Using the default index pattern: "' + loaded.id + '"'); + if (own && !stateVal) return own; + if (stateVal && !stateValFound) { + const err = '"' + stateVal + '" is not a configured pattern. '; + if (own) { + notify.warning(err + ' Using the saved index pattern: "' + own.id + '"'); + return own; } - return loaded; + + notify.warning(err + ' Using the default index pattern: "' + loaded.id + '"'); } + return loaded; + } - init(); - }); + init(); }); diff --git a/src/plugins/kibana/public/discover/index.js b/src/plugins/kibana/public/discover/index.js index e530178ad3a71b..7d117dc9a22e2f 100644 --- a/src/plugins/kibana/public/discover/index.js +++ b/src/plugins/kibana/public/discover/index.js @@ -7,9 +7,7 @@ import 'plugins/kibana/discover/controllers/discover'; import 'plugins/kibana/discover/styles/main.less'; import 'ui/doc_table/components/table_row'; import savedObjectRegistry from 'ui/saved_objects/saved_object_registry'; -define(function (require) { - // preload +// preload - savedObjectRegistry.register(require('plugins/kibana/discover/saved_searches/saved_search_register')); -}); +savedObjectRegistry.register(require('plugins/kibana/discover/saved_searches/saved_search_register')); diff --git a/src/plugins/kibana/public/discover/saved_searches/_saved_search.js b/src/plugins/kibana/public/discover/saved_searches/_saved_search.js index 6c18ee81f2d904..619042f075df8d 100644 --- a/src/plugins/kibana/public/discover/saved_searches/_saved_search.js +++ b/src/plugins/kibana/public/discover/saved_searches/_saved_search.js @@ -1,46 +1,44 @@ import _ from 'lodash'; import 'ui/notify'; -define(function (require) { - - - const module = require('ui/modules').get('discover/saved_searches', [ - 'kibana/notify', - 'kibana/courier' - ]); - - module.factory('SavedSearch', function (courier) { - _.class(SavedSearch).inherits(courier.SavedObject); - function SavedSearch(id) { - courier.SavedObject.call(this, { - type: SavedSearch.type, - mapping: SavedSearch.mapping, - searchSource: SavedSearch.searchSource, - - id: id, - defaults: { - title: 'New Saved Search', - description: '', - columns: [], - hits: 0, - sort: [], - version: 1 - } - }); - } - - SavedSearch.type = 'search'; - - SavedSearch.mapping = { - title: 'string', - description: 'string', - hits: 'integer', - columns: 'string', - sort: 'string', - version: 'integer' - }; - - SavedSearch.searchSource = true; - - return SavedSearch; - }); + + +const module = require('ui/modules').get('discover/saved_searches', [ + 'kibana/notify', + 'kibana/courier' +]); + +module.factory('SavedSearch', function (courier) { + _.class(SavedSearch).inherits(courier.SavedObject); + function SavedSearch(id) { + courier.SavedObject.call(this, { + type: SavedSearch.type, + mapping: SavedSearch.mapping, + searchSource: SavedSearch.searchSource, + + id: id, + defaults: { + title: 'New Saved Search', + description: '', + columns: [], + hits: 0, + sort: [], + version: 1 + } + }); + } + + SavedSearch.type = 'search'; + + SavedSearch.mapping = { + title: 'string', + description: 'string', + hits: 'integer', + columns: 'string', + sort: 'string', + version: 'integer' + }; + + SavedSearch.searchSource = true; + + return SavedSearch; }); diff --git a/src/plugins/kibana/public/discover/saved_searches/saved_search_register.js b/src/plugins/kibana/public/discover/saved_searches/saved_search_register.js index 82a6f38df3ce4b..9ca6c654e17384 100644 --- a/src/plugins/kibana/public/discover/saved_searches/saved_search_register.js +++ b/src/plugins/kibana/public/discover/saved_searches/saved_search_register.js @@ -1,5 +1,3 @@ -define(function (require) { - return function savedSearchObjectFn(savedSearches) { - return savedSearches; - }; -}); +export default function savedSearchObjectFn(savedSearches) { + return savedSearches; +}; diff --git a/src/plugins/kibana/public/discover/saved_searches/saved_searches.js b/src/plugins/kibana/public/discover/saved_searches/saved_searches.js index fe311ee2ad0f2a..b1b56c20fa1ddc 100644 --- a/src/plugins/kibana/public/discover/saved_searches/saved_searches.js +++ b/src/plugins/kibana/public/discover/saved_searches/saved_searches.js @@ -2,98 +2,96 @@ import _ from 'lodash'; import Scanner from 'ui/utils/scanner'; import 'plugins/kibana/discover/saved_searches/_saved_search'; import 'ui/notify'; -define(function (require) { - const module = require('ui/modules').get('discover/saved_searches', [ - 'kibana/notify' - ]); +const module = require('ui/modules').get('discover/saved_searches', [ + 'kibana/notify' +]); - // Register this service with the saved object registry so it can be - // edited by the object editor. - require('plugins/kibana/settings/saved_object_registry').register({ - service: 'savedSearches', - title: 'searches' +// Register this service with the saved object registry so it can be +// edited by the object editor. +require('plugins/kibana/settings/saved_object_registry').register({ + service: 'savedSearches', + title: 'searches' +}); + +module.service('savedSearches', function (Promise, config, kbnIndex, es, createNotifier, SavedSearch, kbnUrl) { + const scanner = new Scanner(es, { + index: kbnIndex, + type: 'search' }); - module.service('savedSearches', function (Promise, config, kbnIndex, es, createNotifier, SavedSearch, kbnUrl) { - const scanner = new Scanner(es, { - index: kbnIndex, - type: 'search' - }); + const notify = createNotifier({ + location: 'Saved Searches' + }); - const notify = createNotifier({ - location: 'Saved Searches' - }); + this.type = SavedSearch.type; + this.Class = SavedSearch; + + this.loaderProperties = { + name: 'searches', + noun: 'Saved Search', + nouns: 'saved searches' + }; + + + this.scanAll = function (queryString, pageSize = 1000) { + return scanner.scanAndMap(queryString, { + pageSize, + docCount: Infinity + }, (hit) => this.mapHits(hit)); + }; - this.type = SavedSearch.type; - this.Class = SavedSearch; - - this.loaderProperties = { - name: 'searches', - noun: 'Saved Search', - nouns: 'saved searches' - }; - - - this.scanAll = function (queryString, pageSize = 1000) { - return scanner.scanAndMap(queryString, { - pageSize, - docCount: Infinity - }, (hit) => this.mapHits(hit)); - }; - - - this.get = function (id) { - return (new SavedSearch(id)).init(); - }; - - this.urlFor = function (id) { - return kbnUrl.eval('#/discover/{{id}}', {id: id}); - }; - - this.delete = function (ids) { - ids = !_.isArray(ids) ? [ids] : ids; - return Promise.map(ids, function (id) { - return (new SavedSearch(id)).delete(); - }); - }; - - this.mapHits = function (hit) { - const source = hit._source; - source.id = hit._id; - source.url = this.urlFor(hit._id); - return source; - }; - - this.find = function (searchString, size = 100) { - let body; - if (searchString) { - body = { - query: { - simple_query_string: { - query: searchString + '*', - fields: ['title^3', 'description'], - default_operator: 'AND' - } + + this.get = function (id) { + return (new SavedSearch(id)).init(); + }; + + this.urlFor = function (id) { + return kbnUrl.eval('#/discover/{{id}}', {id: id}); + }; + + this.delete = function (ids) { + ids = !_.isArray(ids) ? [ids] : ids; + return Promise.map(ids, function (id) { + return (new SavedSearch(id)).delete(); + }); + }; + + this.mapHits = function (hit) { + const source = hit._source; + source.id = hit._id; + source.url = this.urlFor(hit._id); + return source; + }; + + this.find = function (searchString, size = 100) { + let body; + if (searchString) { + body = { + query: { + simple_query_string: { + query: searchString + '*', + fields: ['title^3', 'description'], + default_operator: 'AND' } - }; - } else { - body = { query: {match_all: {}}}; - } - - return es.search({ - index: kbnIndex, - type: 'search', - body: body, - size: size - }) - .then((resp) => { - return { - total: resp.hits.total, - hits: resp.hits.hits.map((hit) => this.mapHits(hit)) - }; - }); - }; - }); + } + }; + } else { + body = { query: {match_all: {}}}; + } + + return es.search({ + index: kbnIndex, + type: 'search', + body: body, + size: size + }) + .then((resp) => { + return { + total: resp.hits.total, + hits: resp.hits.hits.map((hit) => this.mapHits(hit)) + }; + }); + }; }); diff --git a/src/plugins/kibana/public/doc/controllers/doc.js b/src/plugins/kibana/public/doc/controllers/doc.js index ce50a5bffb03fa..602069123577c7 100644 --- a/src/plugins/kibana/public/doc/controllers/doc.js +++ b/src/plugins/kibana/public/doc/controllers/doc.js @@ -5,71 +5,69 @@ import 'ui/courier'; import 'ui/doc_viewer'; import 'ui/index_patterns'; import html from 'plugins/kibana/doc/index.html'; -define(function (require) { - const app = require('ui/modules').get('apps/doc', [ - 'kibana/notify', - 'kibana/courier', - 'kibana/index_patterns' - ]); +const app = require('ui/modules').get('apps/doc', [ + 'kibana/notify', + 'kibana/courier', + 'kibana/index_patterns' +]); - const resolveIndexPattern = { - indexPattern: function (courier, savedSearches, $route) { - return courier.indexPatterns.get($route.current.params.indexPattern); - } - }; +const resolveIndexPattern = { + indexPattern: function (courier, savedSearches, $route) { + return courier.indexPatterns.get($route.current.params.indexPattern); + } +}; - require('ui/routes') - .when('/doc/:indexPattern/:index/:type/:id', { - template: html, - resolve: resolveIndexPattern - }) - .when('/doc/:indexPattern/:index/:type', { - template: html, - resolve: resolveIndexPattern - }); +require('ui/routes') +.when('/doc/:indexPattern/:index/:type/:id', { + template: html, + resolve: resolveIndexPattern +}) +.when('/doc/:indexPattern/:index/:type', { + template: html, + resolve: resolveIndexPattern +}); - app.controller('doc', function ($scope, $route, es, timefilter) { +app.controller('doc', function ($scope, $route, es, timefilter) { - timefilter.enabled = false; + timefilter.enabled = false; - // Pretty much only need this for formatting, not actually using it for fetching anything. - $scope.indexPattern = $route.current.locals.indexPattern; + // Pretty much only need this for formatting, not actually using it for fetching anything. + $scope.indexPattern = $route.current.locals.indexPattern; - const computedFields = $scope.indexPattern.getComputedFields(); + const computedFields = $scope.indexPattern.getComputedFields(); - es.search({ - index: $route.current.params.index, - body: { - query: { - ids: { - type: $route.current.params.type, - values: [$route.current.params.id] - } - }, - fields: computedFields.fields, - script_fields: computedFields.scriptFields, - fielddata_fields: computedFields.fielddataFields - } - }).then(function (resp) { - if (resp.hits) { - if (resp.hits.total < 1) { - $scope.status = 'notFound'; - } else { - $scope.status = 'found'; - $scope.hit = resp.hits.hits[0]; + es.search({ + index: $route.current.params.index, + body: { + query: { + ids: { + type: $route.current.params.type, + values: [$route.current.params.id] } - } - }).catch(function (err) { - if (err.status === 404) { + }, + fields: computedFields.fields, + script_fields: computedFields.scriptFields, + fielddata_fields: computedFields.fielddataFields + } + }).then(function (resp) { + if (resp.hits) { + if (resp.hits.total < 1) { $scope.status = 'notFound'; } else { - $scope.status = 'error'; - $scope.resp = err; + $scope.status = 'found'; + $scope.hit = resp.hits.hits[0]; } - }); - + } + }).catch(function (err) { + if (err.status === 404) { + $scope.status = 'notFound'; + } else { + $scope.status = 'error'; + $scope.resp = err; + } }); + }); diff --git a/src/plugins/kibana/public/doc/index.js b/src/plugins/kibana/public/doc/index.js index ac770f69359dc9..7f57d3e414b26e 100644 --- a/src/plugins/kibana/public/doc/index.js +++ b/src/plugins/kibana/public/doc/index.js @@ -1,3 +1 @@ import 'plugins/kibana/doc/controllers/doc'; -define(function (require) { -}); diff --git a/src/plugins/kibana/public/settings/index.js b/src/plugins/kibana/public/settings/index.js index 13da6dd62db317..bb3e64bb67bafb 100644 --- a/src/plugins/kibana/public/settings/index.js +++ b/src/plugins/kibana/public/settings/index.js @@ -5,40 +5,38 @@ import 'ui/filters/start_from'; import 'ui/field_editor'; import 'plugins/kibana/settings/sections/indices/_indexed_fields'; import 'plugins/kibana/settings/sections/indices/_scripted_fields'; -define(function (require) { - require('ui/routes') - .when('/settings', { - redirectTo: '/settings/indices' - }); - - require('ui/index_patterns/routeSetup/loadDefault')({ - notRequiredRe: /^\/settings\//, - whenMissingRedirectTo: '/settings/indices' - }); +require('ui/routes') +.when('/settings', { + redirectTo: '/settings/indices' +}); - require('ui/modules') - .get('apps/settings') - .directive('kbnSettingsApp', function (Private, $route, timefilter) { - return { - restrict: 'E', - template: require('plugins/kibana/settings/app.html'), - transclude: true, - scope: { - sectionName: '@section' - }, - link: function ($scope, $el) { - timefilter.enabled = false; - $scope.sections = sections; - $scope.section = _.find($scope.sections, { name: $scope.sectionName }); +require('ui/index_patterns/routeSetup/loadDefault')({ + notRequiredRe: /^\/settings\//, + whenMissingRedirectTo: '/settings/indices' +}); - $scope.sections.forEach(function (section) { - section.class = (section === $scope.section) ? 'active' : void 0; - }); - } - }; - }); +require('ui/modules') +.get('apps/settings') +.directive('kbnSettingsApp', function (Private, $route, timefilter) { + return { + restrict: 'E', + template: require('plugins/kibana/settings/app.html'), + transclude: true, + scope: { + sectionName: '@section' + }, + link: function ($scope, $el) { + timefilter.enabled = false; + $scope.sections = sections; + $scope.section = _.find($scope.sections, { name: $scope.sectionName }); - // preload + $scope.sections.forEach(function (section) { + section.class = (section === $scope.section) ? 'active' : void 0; + }); + } + }; }); + +// preload diff --git a/src/plugins/kibana/public/settings/saved_object_registry.js b/src/plugins/kibana/public/settings/saved_object_registry.js index ea23f5f25f2aee..35ee02449246f4 100644 --- a/src/plugins/kibana/public/settings/saved_object_registry.js +++ b/src/plugins/kibana/public/settings/saved_object_registry.js @@ -1,15 +1,13 @@ import _ from 'lodash'; -define(function (require) { - const registry = []; - return { - register: function (service) { - registry.push(service); - }, - all: function () { - return registry; - }, - get: function (id) { - return _.find(registry, { service: id }); - } - }; -}); +const registry = []; +export default { + register: function (service) { + registry.push(service); + }, + all: function () { + return registry; + }, + get: function (id) { + return _.find(registry, { service: id }); + } +}; diff --git a/src/plugins/kibana/public/settings/sections/about/index.js b/src/plugins/kibana/public/settings/sections/about/index.js index 6cebf1e650dcf6..142863345e1340 100644 --- a/src/plugins/kibana/public/settings/sections/about/index.js +++ b/src/plugins/kibana/public/settings/sections/about/index.js @@ -1,22 +1,20 @@ import _ from 'lodash'; -define(function (require) { - require('ui/routes') - .when('/settings/about', { - template: require('plugins/kibana/settings/sections/about/index.html') - }); - - require('ui/modules').get('apps/settings') - .controller('settingsAbout', function ($scope, kbnVersion, buildNum, buildSha) { - $scope.kbnVersion = kbnVersion; - $scope.buildNum = buildNum; - $scope.buildSha = buildSha; - }); +require('ui/routes') +.when('/settings/about', { + template: require('plugins/kibana/settings/sections/about/index.html') +}); - return { - order: Infinity, - name: 'about', - display: 'About', - url: '#/settings/about' - }; +require('ui/modules').get('apps/settings') +.controller('settingsAbout', function ($scope, kbnVersion, buildNum, buildSha) { + $scope.kbnVersion = kbnVersion; + $scope.buildNum = buildNum; + $scope.buildSha = buildSha; }); + +export default { + order: Infinity, + name: 'about', + display: 'About', + url: '#/settings/about' +}; diff --git a/src/plugins/kibana/public/settings/sections/advanced/advanced_row.js b/src/plugins/kibana/public/settings/sections/advanced/advanced_row.js index 4075f074004c5d..caba23bf79aa52 100644 --- a/src/plugins/kibana/public/settings/sections/advanced/advanced_row.js +++ b/src/plugins/kibana/public/settings/sections/advanced/advanced_row.js @@ -1,72 +1,70 @@ import _ from 'lodash'; import 'ui/elastic_textarea'; import ConfigDefaultsProvider from 'ui/config/defaults'; -define(function (require) { - require('ui/modules').get('apps/settings') - .directive('advancedRow', function (config, Notifier, Private) { - return { - restrict: 'A', - replace: true, - template: require('plugins/kibana/settings/sections/advanced/advanced_row.html'), - scope: { - conf: '=advancedRow', - configs: '=' - }, - link: function ($scope) { - const configDefaults = Private(ConfigDefaultsProvider); - const notify = new Notifier(); - const keyCodes = { - ESC: 27 - }; +require('ui/modules').get('apps/settings') +.directive('advancedRow', function (config, Notifier, Private) { + return { + restrict: 'A', + replace: true, + template: require('plugins/kibana/settings/sections/advanced/advanced_row.html'), + scope: { + conf: '=advancedRow', + configs: '=' + }, + link: function ($scope) { + const configDefaults = Private(ConfigDefaultsProvider); + const notify = new Notifier(); + const keyCodes = { + ESC: 27 + }; - // To allow passing form validation state back - $scope.forms = {}; + // To allow passing form validation state back + $scope.forms = {}; - // setup loading flag, run async op, then clear loading and editing flag (just in case) - const loading = function (conf, fn) { - conf.loading = true; - fn() - .finally(function () { - conf.loading = conf.editing = false; - }) - .catch(notify.fatal); - }; + // setup loading flag, run async op, then clear loading and editing flag (just in case) + const loading = function (conf, fn) { + conf.loading = true; + fn() + .finally(function () { + conf.loading = conf.editing = false; + }) + .catch(notify.fatal); + }; - $scope.maybeCancel = function ($event, conf) { - if ($event.keyCode === keyCodes.ESC) { - $scope.cancelEdit(conf); - } - }; + $scope.maybeCancel = function ($event, conf) { + if ($event.keyCode === keyCodes.ESC) { + $scope.cancelEdit(conf); + } + }; - $scope.edit = function (conf) { - conf.unsavedValue = conf.value == null ? conf.defVal : conf.value; - $scope.configs.forEach(function (c) { - c.editing = (c === conf); - }); - }; + $scope.edit = function (conf) { + conf.unsavedValue = conf.value == null ? conf.defVal : conf.value; + $scope.configs.forEach(function (c) { + c.editing = (c === conf); + }); + }; - $scope.save = function (conf) { - loading(conf, function () { - if (conf.unsavedValue === conf.defVal) { - return config.clear(conf.name); - } + $scope.save = function (conf) { + loading(conf, function () { + if (conf.unsavedValue === conf.defVal) { + return config.clear(conf.name); + } - return config.set(conf.name, conf.unsavedValue); - }); - }; + return config.set(conf.name, conf.unsavedValue); + }); + }; - $scope.cancelEdit = function (conf) { - conf.editing = false; - }; + $scope.cancelEdit = function (conf) { + conf.editing = false; + }; - $scope.clear = function (conf) { - return loading(conf, function () { - return config.clear(conf.name); - }); - }; + $scope.clear = function (conf) { + return loading(conf, function () { + return config.clear(conf.name); + }); + }; - } - }; - }); + } + }; }); diff --git a/src/plugins/kibana/public/settings/sections/advanced/index.js b/src/plugins/kibana/public/settings/sections/advanced/index.js index d30e0a1e3e2280..09541ff9895882 100644 --- a/src/plugins/kibana/public/settings/sections/advanced/index.js +++ b/src/plugins/kibana/public/settings/sections/advanced/index.js @@ -2,61 +2,59 @@ import _ from 'lodash'; import toEditableConfig from 'plugins/kibana/settings/sections/advanced/lib/to_editable_config'; import 'plugins/kibana/settings/sections/advanced/advanced_row'; import ConfigDefaultsProvider from 'ui/config/defaults'; -define(function (require) { - require('ui/routes') - .when('/settings/advanced', { - template: require('plugins/kibana/settings/sections/advanced/index.html') - }); - - require('ui/modules').get('apps/settings') - .directive('kbnSettingsAdvanced', function (config, Notifier, Private, $rootScope) { - return { - restrict: 'E', - link: function ($scope) { - const configDefaults = Private(ConfigDefaultsProvider); - const keyCodes = { - ESC: 27 - }; - - function isTypeComplex(conf) { - return !(conf.json || conf.array || conf.bool || conf.normal); - } - - function notDefaultConfig(configName) { - return !(configName in configDefaults); - } +require('ui/routes') +.when('/settings/advanced', { + template: require('plugins/kibana/settings/sections/advanced/index.html') +}); - function readConfigVals() { - const configVals = config._vals(); +require('ui/modules').get('apps/settings') +.directive('kbnSettingsAdvanced', function (config, Notifier, Private, $rootScope) { + return { + restrict: 'E', + link: function ($scope) { + const configDefaults = Private(ConfigDefaultsProvider); + const keyCodes = { + ESC: 27 + }; + + function isTypeComplex(conf) { + return !(conf.json || conf.array || conf.bool || conf.normal); + } - const customConfig = Object.keys(configVals) - .filter(notDefaultConfig) - .map(name => toEditableConfig(false, name, configVals[name])); + function notDefaultConfig(configName) { + return !(configName in configDefaults); + } - $scope.configs = _(configDefaults) - .map((def, name) => toEditableConfig(def, name, configVals[name])) - .reject('readonly') - .concat(customConfig) - .value(); - } + function readConfigVals() { + const configVals = config._vals(); - // react to changes of the config values - const unhook = $rootScope.$on('change:config', readConfigVals); - $scope.$on('$destroy', unhook); + const customConfig = Object.keys(configVals) + .filter(notDefaultConfig) + .map(name => toEditableConfig(false, name, configVals[name])); - // initial config setup - readConfigVals(); + $scope.configs = _(configDefaults) + .map((def, name) => toEditableConfig(def, name, configVals[name])) + .reject('readonly') + .concat(customConfig) + .value(); } - }; - }); - return { - order: 2, - name: 'advanced', - display: 'Advanced', - url: '#/settings/advanced' + // react to changes of the config values + const unhook = $rootScope.$on('change:config', readConfigVals); + $scope.$on('$destroy', unhook); + + // initial config setup + readConfigVals(); + } }; }); + +export default { + order: 2, + name: 'advanced', + display: 'Advanced', + url: '#/settings/advanced' +}; diff --git a/src/plugins/kibana/public/settings/sections/advanced/lib/get_editor_type.js b/src/plugins/kibana/public/settings/sections/advanced/lib/get_editor_type.js index 4001adbe53540f..a9ce2bd3b962a5 100644 --- a/src/plugins/kibana/public/settings/sections/advanced/lib/get_editor_type.js +++ b/src/plugins/kibana/public/settings/sections/advanced/lib/get_editor_type.js @@ -1,17 +1,15 @@ import _ from 'lodash'; -define(function (require) { - const NAMED_EDITORS = ['json', 'array', 'boolean', 'select']; - const NORMAL_EDITOR = ['number', 'string', 'null', 'undefined']; +const NAMED_EDITORS = ['json', 'array', 'boolean', 'select']; +const NORMAL_EDITOR = ['number', 'string', 'null', 'undefined']; - /** - * @param {object} advanced setting configuration object - * @returns {string} the editor type to use when editing value - */ - function getEditorType(conf) { - if (_.contains(NAMED_EDITORS, conf.type)) return conf.type; - if (_.contains(NORMAL_EDITOR, conf.type)) return 'normal'; - } +/** + * @param {object} advanced setting configuration object + * @returns {string} the editor type to use when editing value + */ +function getEditorType(conf) { + if (_.contains(NAMED_EDITORS, conf.type)) return conf.type; + if (_.contains(NORMAL_EDITOR, conf.type)) return 'normal'; +} - return getEditorType; -}); +export default getEditorType; diff --git a/src/plugins/kibana/public/settings/sections/advanced/lib/get_val_type.js b/src/plugins/kibana/public/settings/sections/advanced/lib/get_val_type.js index c923044251bf8b..7b9f65c9a49257 100644 --- a/src/plugins/kibana/public/settings/sections/advanced/lib/get_val_type.js +++ b/src/plugins/kibana/public/settings/sections/advanced/lib/get_val_type.js @@ -1,22 +1,20 @@ import _ from 'lodash'; -define(function (require) { - /** - * @param {object} advanced setting definition object - * @param {?} current value of the setting - * @returns {string} the type to use for determining the display and editor - */ - function getValType(def, value) { - if (def.type) { - return def.type; - } - - if (_.isArray(value) || _.isArray(def.value)) { - return 'array'; - } +/** + * @param {object} advanced setting definition object + * @param {?} current value of the setting + * @returns {string} the type to use for determining the display and editor + */ +function getValType(def, value) { + if (def.type) { + return def.type; + } - return (def.value != null ? typeof def.value : typeof value); + if (_.isArray(value) || _.isArray(def.value)) { + return 'array'; } - return getValType; -}); + return (def.value != null ? typeof def.value : typeof value); +} + +export default getValType; diff --git a/src/plugins/kibana/public/settings/sections/advanced/lib/to_editable_config.js b/src/plugins/kibana/public/settings/sections/advanced/lib/to_editable_config.js index 3eaddfa47542ff..1ee13b567b067d 100644 --- a/src/plugins/kibana/public/settings/sections/advanced/lib/to_editable_config.js +++ b/src/plugins/kibana/public/settings/sections/advanced/lib/to_editable_config.js @@ -1,39 +1,37 @@ import _ from 'lodash'; import getValType from './get_val_type'; import getEditorType from './get_editor_type'; -define(function (require) { - /** - * @param {object} advanced setting definition object - * @param {object} name of setting - * @param {object} current value of setting - * @returns {object} the editable config object - */ - function toEditableConfig(def, name, value) { - const isCustom = !def; - if (isCustom) def = {}; +/** + * @param {object} advanced setting definition object + * @param {object} name of setting + * @param {object} current value of setting + * @returns {object} the editable config object + */ +function toEditableConfig(def, name, value) { + const isCustom = !def; + if (isCustom) def = {}; - const conf = { - name, - value, - isCustom, - readonly: !!def.readonly, - defVal: def.value, - type: getValType(def, value), - description: def.description, - options: def.options - }; + const conf = { + name, + value, + isCustom, + readonly: !!def.readonly, + defVal: def.value, + type: getValType(def, value), + description: def.description, + options: def.options + }; - const editor = getEditorType(conf); - conf.json = editor === 'json'; - conf.select = editor === 'select'; - conf.bool = editor === 'boolean'; - conf.array = editor === 'array'; - conf.normal = editor === 'normal'; - conf.tooComplex = !editor; + const editor = getEditorType(conf); + conf.json = editor === 'json'; + conf.select = editor === 'select'; + conf.bool = editor === 'boolean'; + conf.array = editor === 'array'; + conf.normal = editor === 'normal'; + conf.tooComplex = !editor; - return conf; - } + return conf; +} - return toEditableConfig; -}); +export default toEditableConfig; diff --git a/src/plugins/kibana/public/settings/sections/index.js b/src/plugins/kibana/public/settings/sections/index.js index c2be1402c526c1..81f97f867fd249 100644 --- a/src/plugins/kibana/public/settings/sections/index.js +++ b/src/plugins/kibana/public/settings/sections/index.js @@ -1,11 +1,9 @@ -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/kibana/settings/sections/indices/index'), - require('plugins/kibana/settings/sections/advanced/index'), - require('plugins/kibana/settings/sections/objects/index'), - require('plugins/kibana/settings/sections/status/index'), - require('plugins/kibana/settings/sections/about/index') - ]; -}); +// each of these private modules returns an object defining that section, their properties +// are used to create the nav bar +export default [ + require('plugins/kibana/settings/sections/indices/index'), + require('plugins/kibana/settings/sections/advanced/index'), + require('plugins/kibana/settings/sections/objects/index'), + require('plugins/kibana/settings/sections/status/index'), + require('plugins/kibana/settings/sections/about/index') +]; diff --git a/src/plugins/kibana/public/settings/sections/indices/_create.js b/src/plugins/kibana/public/settings/sections/indices/_create.js index f052aa0f799d6a..4e1df2107d045b 100644 --- a/src/plugins/kibana/public/settings/sections/indices/_create.js +++ b/src/plugins/kibana/public/settings/sections/indices/_create.js @@ -4,292 +4,290 @@ import { IndexPatternMissingIndices } from 'ui/errors'; import 'ui/directives/validate_index_name'; import 'ui/directives/auto_select_if_only_one'; import PluginsKibanaSettingsSectionsIndicesRefreshKibanaIndexProvider from 'plugins/kibana/settings/sections/indices/_refresh_kibana_index'; -define(function (require) { - require('ui/routes') - .when('/settings/indices/', { - template: require('plugins/kibana/settings/sections/indices/_create.html') - }); - - require('ui/modules').get('apps/settings') - .controller('settingsIndicesCreate', function ($scope, kbnUrl, Private, Notifier, indexPatterns, es, config, Promise) { - const notify = new Notifier(); - const refreshKibanaIndex = Private(PluginsKibanaSettingsSectionsIndicesRefreshKibanaIndexProvider); - const intervals = indexPatterns.intervals; - let samplePromise; - - // this and child scopes will write pattern vars here - const index = $scope.index = { - name: 'logstash-*', - - isTimeBased: true, - nameIsPattern: false, - notExpandable: false, - sampleCount: 5, - nameIntervalOptions: intervals, - - fetchFieldsError: 'Loading' - }; - - index.nameInterval = _.find(index.nameIntervalOptions, { name: 'daily' }); - index.timeField = null; - - $scope.canExpandIndices = function () { - // to maximize performance in the digest cycle, move from the least - // expensive operation to most - return index.isTimeBased && !index.nameIsPattern && _.includes(index.name, '*'); - }; - - $scope.refreshFieldList = function () { - fetchFieldList().then(updateFieldList); - }; - - $scope.createIndexPattern = function () { - // get an empty indexPattern to start - indexPatterns.get() - .then(function (indexPattern) { - // set both the id and title to the index index - indexPattern.id = indexPattern.title = index.name; - if (index.isTimeBased) { - indexPattern.timeFieldName = index.timeField.name; - if (index.nameIsPattern) { - indexPattern.intervalName = index.nameInterval.name; - } - } - - if (index.notExpandable && $scope.canExpandIndices()) { - indexPattern.notExpandable = true; - } - - // fetch the fields - return indexPattern.create() - .then(function (id) { - if (id) { - refreshKibanaIndex().then(function () { - if (!config.get('defaultIndex')) { - config.set('defaultIndex', indexPattern.id); - } - indexPatterns.cache.clear(indexPattern.id); - kbnUrl.change('/settings/indices/' + indexPattern.id); - }); - } - }); +require('ui/routes') +.when('/settings/indices/', { + template: require('plugins/kibana/settings/sections/indices/_create.html') +}); - // refreshFields calls save() after a successfull fetch, no need to save again - // .then(function () { indexPattern.save(); }) - }) - .catch(function (err) { - if (err instanceof IndexPatternMissingIndices) { - notify.error('Could not locate any indices matching that pattern. Please add the index to Elasticsearch'); +require('ui/modules').get('apps/settings') +.controller('settingsIndicesCreate', function ($scope, kbnUrl, Private, Notifier, indexPatterns, es, config, Promise) { + const notify = new Notifier(); + const refreshKibanaIndex = Private(PluginsKibanaSettingsSectionsIndicesRefreshKibanaIndexProvider); + const intervals = indexPatterns.intervals; + let samplePromise; + + // this and child scopes will write pattern vars here + const index = $scope.index = { + name: 'logstash-*', + + isTimeBased: true, + nameIsPattern: false, + notExpandable: false, + sampleCount: 5, + nameIntervalOptions: intervals, + + fetchFieldsError: 'Loading' + }; + + index.nameInterval = _.find(index.nameIntervalOptions, { name: 'daily' }); + index.timeField = null; + + $scope.canExpandIndices = function () { + // to maximize performance in the digest cycle, move from the least + // expensive operation to most + return index.isTimeBased && !index.nameIsPattern && _.includes(index.name, '*'); + }; + + $scope.refreshFieldList = function () { + fetchFieldList().then(updateFieldList); + }; + + $scope.createIndexPattern = function () { + // get an empty indexPattern to start + indexPatterns.get() + .then(function (indexPattern) { + // set both the id and title to the index index + indexPattern.id = indexPattern.title = index.name; + if (index.isTimeBased) { + indexPattern.timeFieldName = index.timeField.name; + if (index.nameIsPattern) { + indexPattern.intervalName = index.nameInterval.name; } - else notify.fatal(err); - }); - }; - - - $scope.$watchMulti([ - 'index.isTimeBased', - 'index.nameIsPattern', - 'index.nameInterval.name' - ], function (newVal, oldVal) { - const isTimeBased = newVal[0]; - const nameIsPattern = newVal[1]; - const newDefault = getPatternDefault(newVal[2]); - const oldDefault = getPatternDefault(oldVal[2]); - - if (index.name === oldDefault) { - index.name = newDefault; } - if (!isTimeBased) { - index.nameIsPattern = false; + if (index.notExpandable && $scope.canExpandIndices()) { + indexPattern.notExpandable = true; } - if (!nameIsPattern) { - delete index.nameInterval; - delete index.timeField; - } else { - index.nameInterval = index.nameInterval || intervals.byName.days; - index.name = index.name || getPatternDefault(index.nameInterval); - } - }); - - $scope.moreSamples = function (andUpdate) { - index.sampleCount += 5; - if (andUpdate) updateSamples(); - }; - - $scope.$watchMulti([ - 'index.name', - 'index.nameInterval' - ], function (newVal, oldVal) { - let lastPromise; - resetIndex(); - samplePromise = lastPromise = updateSamples() - .then(function () { - promiseMatch(lastPromise, function () { - index.samples = null; - index.patternErrors = []; - }); - }) - .catch(function (errors) { - promiseMatch(lastPromise, function () { - index.existing = null; - index.patternErrors = errors; - }); - }) - .finally(function () { - // prevent running when no change happened (ie, first watcher call) - if (!_.isEqual(newVal, oldVal)) { - fetchFieldList().then(function (results) { - if (lastPromise === samplePromise) { - updateFieldList(results); - samplePromise = null; + // fetch the fields + return indexPattern.create() + .then(function (id) { + if (id) { + refreshKibanaIndex().then(function () { + if (!config.get('defaultIndex')) { + config.set('defaultIndex', indexPattern.id); } + indexPatterns.cache.clear(indexPattern.id); + kbnUrl.change('/settings/indices/' + indexPattern.id); }); } }); - }); - - $scope.$watchMulti([ - 'index.isTimeBased', - 'index.sampleCount' - ], $scope.refreshFieldList); - function updateSamples() { - const patternErrors = []; - - if (!index.nameInterval || !index.name) { - return Promise.resolve(); + // refreshFields calls save() after a successfull fetch, no need to save again + // .then(function () { indexPattern.save(); }) + }) + .catch(function (err) { + if (err instanceof IndexPatternMissingIndices) { + notify.error('Could not locate any indices matching that pattern. Please add the index to Elasticsearch'); } + else notify.fatal(err); + }); + }; - const pattern = mockIndexPattern(index); - - return indexPatterns.mapper.getIndicesForIndexPattern(pattern) - .catch(function (err) { - if (err instanceof IndexPatternMissingIndices) return; - notify.error(err); - }) - .then(function (existing) { - const all = _.get(existing, 'all', []); - const matches = _.get(existing, 'matches', []); - if (all.length) { - index.existing = { - class: 'success', - all: all, - matches: matches, - matchPercent: Math.round((matches.length / all.length) * 100) + '%', - failures: _.difference(all, matches) - }; - return; - } - - patternErrors.push('Pattern does not match any existing indices'); - const radius = Math.round(index.sampleCount / 2); - const samples = intervals.toIndexList(index.name, index.nameInterval, -radius, radius); - if (_.uniq(samples).length !== samples.length) { - patternErrors.push('Invalid pattern, interval does not create unique index names'); - } else { - index.samples = samples; - } + $scope.$watchMulti([ + 'index.isTimeBased', + 'index.nameIsPattern', + 'index.nameInterval.name' + ], function (newVal, oldVal) { + const isTimeBased = newVal[0]; + const nameIsPattern = newVal[1]; + const newDefault = getPatternDefault(newVal[2]); + const oldDefault = getPatternDefault(oldVal[2]); - throw patternErrors; - }); + if (index.name === oldDefault) { + index.name = newDefault; } - function fetchFieldList() { - index.dateFields = index.timeField = index.listUsed = null; - const useIndexList = index.isTimeBased && index.nameIsPattern; - let fetchFieldsError; - let dateFields; + if (!isTimeBased) { + index.nameIsPattern = false; + } - // we don't have enough info to continue - if (!index.name) { - fetchFieldsError = 'Set an index name first'; - return; - } + if (!nameIsPattern) { + delete index.nameInterval; + delete index.timeField; + } else { + index.nameInterval = index.nameInterval || intervals.byName.days; + index.name = index.name || getPatternDefault(index.nameInterval); + } + }); - if (useIndexList && !index.nameInterval) { - fetchFieldsError = 'Select the interval at which your indices are populated.'; - return; + $scope.moreSamples = function (andUpdate) { + index.sampleCount += 5; + if (andUpdate) updateSamples(); + }; + + $scope.$watchMulti([ + 'index.name', + 'index.nameInterval' + ], function (newVal, oldVal) { + let lastPromise; + resetIndex(); + samplePromise = lastPromise = updateSamples() + .then(function () { + promiseMatch(lastPromise, function () { + index.samples = null; + index.patternErrors = []; + }); + }) + .catch(function (errors) { + promiseMatch(lastPromise, function () { + index.existing = null; + index.patternErrors = errors; + }); + }) + .finally(function () { + // prevent running when no change happened (ie, first watcher call) + if (!_.isEqual(newVal, oldVal)) { + fetchFieldList().then(function (results) { + if (lastPromise === samplePromise) { + updateFieldList(results); + samplePromise = null; + } + }); } + }); + }); - return indexPatterns.mapper.clearCache(index.name) - .then(function () { - const pattern = mockIndexPattern(index); + $scope.$watchMulti([ + 'index.isTimeBased', + 'index.sampleCount' + ], $scope.refreshFieldList); - return indexPatterns.mapper.getFieldsForIndexPattern(pattern, true) - .catch(function (err) { - // TODO: we should probably display a message of some kind - if (err instanceof IndexPatternMissingIndices) { - fetchFieldsError = 'Unable to fetch mapping. Do you have indices matching the pattern?'; - return []; - } + function updateSamples() { + const patternErrors = []; - throw err; - }); - }) - .then(function (fields) { - if (fields.length > 0) { - fetchFieldsError = null; - dateFields = fields.filter(function (field) { - return field.type === 'date'; - }); - } + if (!index.nameInterval || !index.name) { + return Promise.resolve(); + } - return { - fetchFieldsError: fetchFieldsError, - dateFields: dateFields + const pattern = mockIndexPattern(index); + + return indexPatterns.mapper.getIndicesForIndexPattern(pattern) + .catch(function (err) { + if (err instanceof IndexPatternMissingIndices) return; + notify.error(err); + }) + .then(function (existing) { + const all = _.get(existing, 'all', []); + const matches = _.get(existing, 'matches', []); + if (all.length) { + index.existing = { + class: 'success', + all: all, + matches: matches, + matchPercent: Math.round((matches.length / all.length) * 100) + '%', + failures: _.difference(all, matches) }; - }, notify.fatal); - } + return; + } - function updateFieldList(results) { - index.fetchFieldsError = results.fetchFieldsError; - index.dateFields = results.dateFields; - } + patternErrors.push('Pattern does not match any existing indices'); + const radius = Math.round(index.sampleCount / 2); + const samples = intervals.toIndexList(index.name, index.nameInterval, -radius, radius); - function promiseMatch(lastPromise, cb) { - if (lastPromise === samplePromise) { - cb(); - } else if (samplePromise != null) { - // haven't hit the last promise yet, reset index params - resetIndex(); + if (_.uniq(samples).length !== samples.length) { + patternErrors.push('Invalid pattern, interval does not create unique index names'); + } else { + index.samples = samples; } + + throw patternErrors; + }); + } + + function fetchFieldList() { + index.dateFields = index.timeField = index.listUsed = null; + const useIndexList = index.isTimeBased && index.nameIsPattern; + let fetchFieldsError; + let dateFields; + + // we don't have enough info to continue + if (!index.name) { + fetchFieldsError = 'Set an index name first'; + return; } - function resetIndex() { - index.patternErrors = []; - index.samples = null; - index.existing = null; - index.fetchFieldsError = 'Loading'; + if (useIndexList && !index.nameInterval) { + fetchFieldsError = 'Select the interval at which your indices are populated.'; + return; } - function getPatternDefault(interval) { - switch (interval) { - case 'hours': - return '[logstash-]YYYY.MM.DD.HH'; - case 'days': - return '[logstash-]YYYY.MM.DD'; - case 'weeks': - return '[logstash-]GGGG.WW'; - case 'months': - return '[logstash-]YYYY.MM'; - case 'years': - return '[logstash-]YYYY'; - default: - return 'logstash-*'; + return indexPatterns.mapper.clearCache(index.name) + .then(function () { + const pattern = mockIndexPattern(index); + + return indexPatterns.mapper.getFieldsForIndexPattern(pattern, true) + .catch(function (err) { + // TODO: we should probably display a message of some kind + if (err instanceof IndexPatternMissingIndices) { + fetchFieldsError = 'Unable to fetch mapping. Do you have indices matching the pattern?'; + return []; + } + + throw err; + }); + }) + .then(function (fields) { + if (fields.length > 0) { + fetchFieldsError = null; + dateFields = fields.filter(function (field) { + return field.type === 'date'; + }); } - } - function mockIndexPattern(index) { - // trick the mapper into thinking this is an indexPattern return { - id: index.name, - intervalName: index.nameInterval + fetchFieldsError: fetchFieldsError, + dateFields: dateFields }; + }, notify.fatal); + } + + function updateFieldList(results) { + index.fetchFieldsError = results.fetchFieldsError; + index.dateFields = results.dateFields; + } + + function promiseMatch(lastPromise, cb) { + if (lastPromise === samplePromise) { + cb(); + } else if (samplePromise != null) { + // haven't hit the last promise yet, reset index params + resetIndex(); } - }); + } + + function resetIndex() { + index.patternErrors = []; + index.samples = null; + index.existing = null; + index.fetchFieldsError = 'Loading'; + } + + function getPatternDefault(interval) { + switch (interval) { + case 'hours': + return '[logstash-]YYYY.MM.DD.HH'; + case 'days': + return '[logstash-]YYYY.MM.DD'; + case 'weeks': + return '[logstash-]GGGG.WW'; + case 'months': + return '[logstash-]YYYY.MM'; + case 'years': + return '[logstash-]YYYY'; + default: + return 'logstash-*'; + } + } + + function mockIndexPattern(index) { + // trick the mapper into thinking this is an indexPattern + return { + id: index.name, + intervalName: index.nameInterval + }; + } }); diff --git a/src/plugins/kibana/public/settings/sections/indices/_date_scripts.js b/src/plugins/kibana/public/settings/sections/indices/_date_scripts.js index 3e5b52b002b795..02d4788d45916c 100644 --- a/src/plugins/kibana/public/settings/sections/indices/_date_scripts.js +++ b/src/plugins/kibana/public/settings/sections/indices/_date_scripts.js @@ -1,28 +1,26 @@ import _ from 'lodash'; -define(function (require) { - return function (indexPattern) { - const dateScripts = {}; - const scripts = { - __dayOfMonth: 'dayOfMonth', - __dayOfWeek: 'dayOfWeek', - __dayOfYear: 'dayOfYear', - __hourOfDay: 'hourOfDay', - __minuteOfDay: 'minuteOfDay', - __minuteOfHour: 'minuteOfHour', - __monthOfYear: 'monthOfYear', - __weekOfYear: 'weekOfWeekyear', - __year: 'year' - }; +export default function (indexPattern) { + const dateScripts = {}; + const scripts = { + __dayOfMonth: 'dayOfMonth', + __dayOfWeek: 'dayOfWeek', + __dayOfYear: 'dayOfYear', + __hourOfDay: 'hourOfDay', + __minuteOfDay: 'minuteOfDay', + __minuteOfHour: 'minuteOfHour', + __monthOfYear: 'monthOfYear', + __weekOfYear: 'weekOfWeekyear', + __year: 'year' + }; - _.each(indexPattern.fields.byType.date, function (field) { - if (field.indexed) { - _.each(scripts, function (value, key) { - dateScripts[field.name + '.' + key] = 'doc["' + field.name + '"].date.' + value; - }); - } - }); + _.each(indexPattern.fields.byType.date, function (field) { + if (field.indexed) { + _.each(scripts, function (value, key) { + dateScripts[field.name + '.' + key] = 'doc["' + field.name + '"].date.' + value; + }); + } + }); - return dateScripts; - }; -}); + return dateScripts; +}; diff --git a/src/plugins/kibana/public/settings/sections/indices/_edit.js b/src/plugins/kibana/public/settings/sections/indices/_edit.js index c6aae0fa789226..3a90e5760513b5 100644 --- a/src/plugins/kibana/public/settings/sections/indices/_edit.js +++ b/src/plugins/kibana/public/settings/sections/indices/_edit.js @@ -5,80 +5,78 @@ import 'plugins/kibana/settings/sections/indices/_index_header'; import PluginsKibanaSettingsSectionsIndicesRefreshKibanaIndexProvider from 'plugins/kibana/settings/sections/indices/_refresh_kibana_index'; import UrlProvider from 'ui/url'; import PluginsKibanaSettingsSectionsIndicesFieldTypesProvider from 'plugins/kibana/settings/sections/indices/_field_types'; -define(function (require) { - require('ui/routes') - .when('/settings/indices/:indexPatternId', { - template: require('plugins/kibana/settings/sections/indices/_edit.html'), - resolve: { - indexPattern: function ($route, courier) { - return courier.indexPatterns.get($route.current.params.indexPatternId) - .catch(courier.redirectWhenMissing('/settings/indices')); - } +require('ui/routes') +.when('/settings/indices/:indexPatternId', { + template: require('plugins/kibana/settings/sections/indices/_edit.html'), + resolve: { + indexPattern: function ($route, courier) { + return courier.indexPatterns.get($route.current.params.indexPatternId) + .catch(courier.redirectWhenMissing('/settings/indices')); } - }); + } +}); - require('ui/modules').get('apps/settings') - .controller('settingsIndicesEdit', function ($scope, $location, $route, config, courier, Notifier, Private, AppState, docTitle) { +require('ui/modules').get('apps/settings') +.controller('settingsIndicesEdit', function ($scope, $location, $route, config, courier, Notifier, Private, AppState, docTitle) { - const notify = new Notifier(); - const $state = $scope.state = new AppState(); - const refreshKibanaIndex = Private(PluginsKibanaSettingsSectionsIndicesRefreshKibanaIndexProvider); + const notify = new Notifier(); + const $state = $scope.state = new AppState(); + const refreshKibanaIndex = Private(PluginsKibanaSettingsSectionsIndicesRefreshKibanaIndexProvider); - $scope.kbnUrl = Private(UrlProvider); - $scope.indexPattern = $route.current.locals.indexPattern; - docTitle.change($scope.indexPattern.id); - const otherIds = _.without($route.current.locals.indexPatternIds, $scope.indexPattern.id); + $scope.kbnUrl = Private(UrlProvider); + $scope.indexPattern = $route.current.locals.indexPattern; + docTitle.change($scope.indexPattern.id); + const otherIds = _.without($route.current.locals.indexPatternIds, $scope.indexPattern.id); - const fieldTypes = Private(PluginsKibanaSettingsSectionsIndicesFieldTypesProvider); - $scope.$watch('indexPattern.fields', function () { - $scope.fieldTypes = fieldTypes($scope.indexPattern); - }); + const fieldTypes = Private(PluginsKibanaSettingsSectionsIndicesFieldTypesProvider); + $scope.$watch('indexPattern.fields', function () { + $scope.fieldTypes = fieldTypes($scope.indexPattern); + }); - $scope.changeTab = function (obj) { - $state.tab = obj.index; - $state.save(); - }; + $scope.changeTab = function (obj) { + $state.tab = obj.index; + $state.save(); + }; - $scope.$watch('state.tab', function (tab) { - if (!tab) $scope.changeTab($scope.fieldTypes[0]); - }); + $scope.$watch('state.tab', function (tab) { + if (!tab) $scope.changeTab($scope.fieldTypes[0]); + }); - $scope.$watchCollection('indexPattern.fields', function () { - $scope.conflictFields = _.filter($scope.indexPattern.fields, {type: 'conflict'}); - }); + $scope.$watchCollection('indexPattern.fields', function () { + $scope.conflictFields = _.filter($scope.indexPattern.fields, {type: 'conflict'}); + }); - $scope.refreshFields = function () { - $scope.indexPattern.refreshFields(); - }; + $scope.refreshFields = function () { + $scope.indexPattern.refreshFields(); + }; - $scope.removePattern = function () { - if ($scope.indexPattern.id === config.get('defaultIndex')) { - config.delete('defaultIndex'); - if (otherIds.length) { - config.set('defaultIndex', otherIds[0]); - } + $scope.removePattern = function () { + if ($scope.indexPattern.id === config.get('defaultIndex')) { + config.delete('defaultIndex'); + if (otherIds.length) { + config.set('defaultIndex', otherIds[0]); } + } - courier.indexPatterns.delete($scope.indexPattern) - .then(refreshKibanaIndex) - .then(function () { - $location.url('/settings/indices'); - }) - .catch(notify.fatal); - }; + courier.indexPatterns.delete($scope.indexPattern) + .then(refreshKibanaIndex) + .then(function () { + $location.url('/settings/indices'); + }) + .catch(notify.fatal); + }; - $scope.setDefaultPattern = function () { - config.set('defaultIndex', $scope.indexPattern.id); - }; + $scope.setDefaultPattern = function () { + config.set('defaultIndex', $scope.indexPattern.id); + }; - $scope.setIndexPatternsTimeField = function (field) { - if (field.type !== 'date') { - notify.error('That field is a ' + field.type + ' not a date.'); - return; - } - $scope.indexPattern.timeFieldName = field.name; - return $scope.indexPattern.save(); - }; - }); + $scope.setIndexPatternsTimeField = function (field) { + if (field.type !== 'date') { + notify.error('That field is a ' + field.type + ' not a date.'); + return; + } + $scope.indexPattern.timeFieldName = field.name; + return $scope.indexPattern.save(); + }; }); diff --git a/src/plugins/kibana/public/settings/sections/indices/_field_editor.js b/src/plugins/kibana/public/settings/sections/indices/_field_editor.js index 902e35d2154c0c..42c07fd3f07316 100644 --- a/src/plugins/kibana/public/settings/sections/indices/_field_editor.js +++ b/src/plugins/kibana/public/settings/sections/indices/_field_editor.js @@ -2,56 +2,54 @@ import 'ui/field_editor'; import 'plugins/kibana/settings/sections/indices/_index_header'; import IndexPatternsFieldProvider from 'ui/index_patterns/_field'; import UrlProvider from 'ui/url'; -define(function (require) { - - require('ui/routes') - .when('/settings/indices/:indexPatternId/field/:fieldName', { mode: 'edit' }) - .when('/settings/indices/:indexPatternId/create-field/', { mode: 'create' }) - .defaults(/settings\/indices\/[^\/]+\/(field|create-field)(\/|$)/, { - template: require('plugins/kibana/settings/sections/indices/_field_editor.html'), - resolve: { - indexPattern: function ($route, courier) { - return courier.indexPatterns.get($route.current.params.indexPatternId) - .catch(courier.redirectWhenMissing('/settings/indices')); - } - }, - controllerAs: 'fieldSettings', - controller: function FieldEditorPageController($route, Private, Notifier, docTitle) { - const Field = Private(IndexPatternsFieldProvider); - const notify = new Notifier({ location: 'Field Editor' }); - const kbnUrl = Private(UrlProvider); +require('ui/routes') +.when('/settings/indices/:indexPatternId/field/:fieldName', { mode: 'edit' }) +.when('/settings/indices/:indexPatternId/create-field/', { mode: 'create' }) +.defaults(/settings\/indices\/[^\/]+\/(field|create-field)(\/|$)/, { + template: require('plugins/kibana/settings/sections/indices/_field_editor.html'), + resolve: { + indexPattern: function ($route, courier) { + return courier.indexPatterns.get($route.current.params.indexPatternId) + .catch(courier.redirectWhenMissing('/settings/indices')); + } + }, + controllerAs: 'fieldSettings', + controller: function FieldEditorPageController($route, Private, Notifier, docTitle) { + const Field = Private(IndexPatternsFieldProvider); + const notify = new Notifier({ location: 'Field Editor' }); + const kbnUrl = Private(UrlProvider); - this.mode = $route.current.mode; - this.indexPattern = $route.current.locals.indexPattern; + this.mode = $route.current.mode; + this.indexPattern = $route.current.locals.indexPattern; - if (this.mode === 'edit') { - const fieldName = $route.current.params.fieldName; - this.field = this.indexPattern.fields.byName[fieldName]; - if (!this.field) { - notify.error(this.indexPattern + ' does not have a "' + fieldName + '" field.'); - kbnUrl.redirectToRoute(this.indexPattern, 'edit'); - return; - } + if (this.mode === 'edit') { + const fieldName = $route.current.params.fieldName; + this.field = this.indexPattern.fields.byName[fieldName]; - } - else if (this.mode === 'create') { - this.field = new Field(this.indexPattern, { - scripted: true, - type: 'number' - }); - } - else { - throw new Error('unknown fieldSettings mode ' + this.mode); + if (!this.field) { + notify.error(this.indexPattern + ' does not have a "' + fieldName + '" field.'); + kbnUrl.redirectToRoute(this.indexPattern, 'edit'); + return; } - docTitle.change([this.field.name || 'New Scripted Field', this.indexPattern.id]); - this.goBack = function () { - kbnUrl.changeToRoute(this.indexPattern, 'edit'); - }; } - }); + else if (this.mode === 'create') { + this.field = new Field(this.indexPattern, { + scripted: true, + type: 'number' + }); + } + else { + throw new Error('unknown fieldSettings mode ' + this.mode); + } + docTitle.change([this.field.name || 'New Scripted Field', this.indexPattern.id]); + this.goBack = function () { + kbnUrl.changeToRoute(this.indexPattern, 'edit'); + }; + } }); + diff --git a/src/plugins/kibana/public/settings/sections/indices/_field_types.js b/src/plugins/kibana/public/settings/sections/indices/_field_types.js index 6e436964cf8b33..b1336ce1c69734 100644 --- a/src/plugins/kibana/public/settings/sections/indices/_field_types.js +++ b/src/plugins/kibana/public/settings/sections/indices/_field_types.js @@ -1,26 +1,24 @@ import _ from 'lodash'; -define(function (require) { - return function GetFieldTypes() { +export default function GetFieldTypes() { - return function (indexPattern) { - const fieldCount = _.countBy(indexPattern.fields, function (field) { - return (field.scripted) ? 'scripted' : 'indexed'; - }); + return function (indexPattern) { + const fieldCount = _.countBy(indexPattern.fields, function (field) { + return (field.scripted) ? 'scripted' : 'indexed'; + }); - _.defaults(fieldCount, { - indexed: 0, - scripted: 0 - }); + _.defaults(fieldCount, { + indexed: 0, + scripted: 0 + }); - return [{ - title: 'fields', - index: 'indexedFields', - count: fieldCount.indexed - }, { - title: 'scripted fields', - index: 'scriptedFields', - count: fieldCount.scripted - }]; - }; + return [{ + title: 'fields', + index: 'indexedFields', + count: fieldCount.indexed + }, { + title: 'scripted fields', + index: 'scriptedFields', + count: fieldCount.scripted + }]; }; -}); +}; diff --git a/src/plugins/kibana/public/settings/sections/indices/_index_header.js b/src/plugins/kibana/public/settings/sections/indices/_index_header.js index e079aae64a003c..916bce645f751f 100644 --- a/src/plugins/kibana/public/settings/sections/indices/_index_header.js +++ b/src/plugins/kibana/public/settings/sections/indices/_index_header.js @@ -1,22 +1,20 @@ -define(function (require) { - require('ui/modules') - .get('apps/settings') - .directive('kbnSettingsIndexHeader', function (config) { - return { - restrict: 'E', - template: require('plugins/kibana/settings/sections/indices/_index_header.html'), - scope: { - indexPattern: '=', - setDefault: '&', - refreshFields: '&', - delete: '&' - }, - link: function ($scope, $el, attrs) { - $scope.delete = attrs.delete ? $scope.delete : null; - $scope.setDefault = attrs.setDefault ? $scope.setDefault : null; - $scope.refreshFields = attrs.refreshFields ? $scope.refreshFields : null; - config.$bind($scope, 'defaultIndex'); - } - }; - }); +require('ui/modules') +.get('apps/settings') +.directive('kbnSettingsIndexHeader', function (config) { + return { + restrict: 'E', + template: require('plugins/kibana/settings/sections/indices/_index_header.html'), + scope: { + indexPattern: '=', + setDefault: '&', + refreshFields: '&', + delete: '&' + }, + link: function ($scope, $el, attrs) { + $scope.delete = attrs.delete ? $scope.delete : null; + $scope.setDefault = attrs.setDefault ? $scope.setDefault : null; + $scope.refreshFields = attrs.refreshFields ? $scope.refreshFields : null; + config.$bind($scope, 'defaultIndex'); + } + }; }); diff --git a/src/plugins/kibana/public/settings/sections/indices/_indexed_fields.js b/src/plugins/kibana/public/settings/sections/indices/_indexed_fields.js index bdb33c3d718bfd..54b79d5b8fe4d0 100644 --- a/src/plugins/kibana/public/settings/sections/indices/_indexed_fields.js +++ b/src/plugins/kibana/public/settings/sections/indices/_indexed_fields.js @@ -3,71 +3,69 @@ import 'ui/paginated_table'; import nameHtml from 'plugins/kibana/settings/sections/indices/_field_name.html'; import typeHtml from 'plugins/kibana/settings/sections/indices/_field_type.html'; import controlsHtml from 'plugins/kibana/settings/sections/indices/_field_controls.html'; -define(function (require) { - require('ui/modules').get('apps/settings') - .directive('indexedFields', function ($filter) { - const yesTemplate = ''; - const noTemplate = ''; - const filter = $filter('filter'); +require('ui/modules').get('apps/settings') +.directive('indexedFields', function ($filter) { + const yesTemplate = ''; + const noTemplate = ''; + const filter = $filter('filter'); - return { - restrict: 'E', - template: require('plugins/kibana/settings/sections/indices/_indexed_fields.html'), - scope: true, - link: function ($scope) { - const rowScopes = []; // track row scopes, so they can be destroyed as needed - $scope.perPage = 25; - $scope.columns = [ - { title: 'name' }, - { title: 'type' }, - { title: 'format' }, - { title: 'analyzed', info: 'Analyzed fields may require extra memory to visualize' }, - { title: 'indexed', info: 'Fields that are not indexed are unavailable for search' }, - { title: 'controls', sortable: false } - ]; + return { + restrict: 'E', + template: require('plugins/kibana/settings/sections/indices/_indexed_fields.html'), + scope: true, + link: function ($scope) { + const rowScopes = []; // track row scopes, so they can be destroyed as needed + $scope.perPage = 25; + $scope.columns = [ + { title: 'name' }, + { title: 'type' }, + { title: 'format' }, + { title: 'analyzed', info: 'Analyzed fields may require extra memory to visualize' }, + { title: 'indexed', info: 'Fields that are not indexed are unavailable for search' }, + { title: 'controls', sortable: false } + ]; - $scope.$watchMulti(['[]indexPattern.fields', 'fieldFilter'], refreshRows); + $scope.$watchMulti(['[]indexPattern.fields', 'fieldFilter'], refreshRows); - function refreshRows() { - // clear and destroy row scopes - _.invoke(rowScopes.splice(0), '$destroy'); + function refreshRows() { + // clear and destroy row scopes + _.invoke(rowScopes.splice(0), '$destroy'); - const fields = filter($scope.indexPattern.getNonScriptedFields(), $scope.fieldFilter); - _.find($scope.fieldTypes, {index: 'indexedFields'}).count = fields.length; // Update the tab count + const fields = filter($scope.indexPattern.getNonScriptedFields(), $scope.fieldFilter); + _.find($scope.fieldTypes, {index: 'indexedFields'}).count = fields.length; // Update the tab count - $scope.rows = fields.map(function (field) { - const childScope = _.assign($scope.$new(), { field: field }); - rowScopes.push(childScope); + $scope.rows = fields.map(function (field) { + const childScope = _.assign($scope.$new(), { field: field }); + rowScopes.push(childScope); - return [ - { - markup: nameHtml, - scope: childScope, - value: field.displayName - }, - { - markup: typeHtml, - scope: childScope, - value: field.type - }, - _.get($scope.indexPattern, ['fieldFormatMap', field.name, 'type', 'title']), - { - markup: field.analyzed ? yesTemplate : noTemplate, - value: field.analyzed - }, - { - markup: field.indexed ? yesTemplate : noTemplate, - value: field.indexed - }, - { - markup: controlsHtml, - scope: childScope - } - ]; - }); - } + return [ + { + markup: nameHtml, + scope: childScope, + value: field.displayName + }, + { + markup: typeHtml, + scope: childScope, + value: field.type + }, + _.get($scope.indexPattern, ['fieldFormatMap', field.name, 'type', 'title']), + { + markup: field.analyzed ? yesTemplate : noTemplate, + value: field.analyzed + }, + { + markup: field.indexed ? yesTemplate : noTemplate, + value: field.indexed + }, + { + markup: controlsHtml, + scope: childScope + } + ]; + }); } - }; - }); + } + }; }); diff --git a/src/plugins/kibana/public/settings/sections/indices/_refresh_kibana_index.js b/src/plugins/kibana/public/settings/sections/indices/_refresh_kibana_index.js index 190cc961815d29..e0becc475ab43e 100644 --- a/src/plugins/kibana/public/settings/sections/indices/_refresh_kibana_index.js +++ b/src/plugins/kibana/public/settings/sections/indices/_refresh_kibana_index.js @@ -1,9 +1,7 @@ -define(function (require) { - return function RefreshKibanaIndexFn(es, kbnIndex) { - return function () { - return es.indices.refresh({ - index: kbnIndex - }); - }; +export default function RefreshKibanaIndexFn(es, kbnIndex) { + return function () { + return es.indices.refresh({ + index: kbnIndex + }); }; -}); +}; diff --git a/src/plugins/kibana/public/settings/sections/indices/_scripted_fields.js b/src/plugins/kibana/public/settings/sections/indices/_scripted_fields.js index 75abc14f2e4fd3..42b1b9f5569e39 100644 --- a/src/plugins/kibana/public/settings/sections/indices/_scripted_fields.js +++ b/src/plugins/kibana/public/settings/sections/indices/_scripted_fields.js @@ -3,100 +3,98 @@ import 'ui/paginated_table'; import popularityHtml from 'plugins/kibana/settings/sections/indices/_field_popularity.html'; import controlsHtml from 'plugins/kibana/settings/sections/indices/_field_controls.html'; import dateScripts from 'plugins/kibana/settings/sections/indices/_date_scripts'; -define(function (require) { - - require('ui/modules').get('apps/settings') - .directive('scriptedFields', function (kbnUrl, Notifier, $filter) { - const rowScopes = []; // track row scopes, so they can be destroyed as needed - const filter = $filter('filter'); - - const notify = new Notifier(); - - return { - restrict: 'E', - template: require('plugins/kibana/settings/sections/indices/_scripted_fields.html'), - scope: true, - link: function ($scope) { - - const fieldCreatorPath = '/settings/indices/{{ indexPattern }}/scriptedField'; - const fieldEditorPath = fieldCreatorPath + '/{{ fieldName }}'; - - $scope.perPage = 25; - $scope.columns = [ - { title: 'name' }, - { title: 'script' }, - { title: 'format' }, - { title: 'controls', sortable: false } - ]; - - $scope.$watchMulti(['[]indexPattern.fields', 'fieldFilter'], refreshRows); - - function refreshRows() { - _.invoke(rowScopes, '$destroy'); - rowScopes.length = 0; - - const fields = filter($scope.indexPattern.getScriptedFields(), $scope.fieldFilter); - _.find($scope.fieldTypes, {index: 'scriptedFields'}).count = fields.length; // Update the tab count - - $scope.rows = fields.map(function (field) { - const rowScope = $scope.$new(); - rowScope.field = field; - rowScopes.push(rowScope); - - return [ - _.escape(field.name), - _.escape(field.script), - _.get($scope.indexPattern, ['fieldFormatMap', field.name, 'type', 'title']), - { - markup: controlsHtml, - scope: rowScope - } - ]; - }); - } - $scope.addDateScripts = function () { - const conflictFields = []; - let fieldsAdded = 0; - _.each(dateScripts($scope.indexPattern), function (script, field) { - try { - $scope.indexPattern.addScriptedField(field, script, 'number'); - fieldsAdded++; - } catch (e) { - conflictFields.push(field); +require('ui/modules').get('apps/settings') +.directive('scriptedFields', function (kbnUrl, Notifier, $filter) { + const rowScopes = []; // track row scopes, so they can be destroyed as needed + const filter = $filter('filter'); + + const notify = new Notifier(); + + return { + restrict: 'E', + template: require('plugins/kibana/settings/sections/indices/_scripted_fields.html'), + scope: true, + link: function ($scope) { + + const fieldCreatorPath = '/settings/indices/{{ indexPattern }}/scriptedField'; + const fieldEditorPath = fieldCreatorPath + '/{{ fieldName }}'; + + $scope.perPage = 25; + $scope.columns = [ + { title: 'name' }, + { title: 'script' }, + { title: 'format' }, + { title: 'controls', sortable: false } + ]; + + $scope.$watchMulti(['[]indexPattern.fields', 'fieldFilter'], refreshRows); + + function refreshRows() { + _.invoke(rowScopes, '$destroy'); + rowScopes.length = 0; + + const fields = filter($scope.indexPattern.getScriptedFields(), $scope.fieldFilter); + _.find($scope.fieldTypes, {index: 'scriptedFields'}).count = fields.length; // Update the tab count + + $scope.rows = fields.map(function (field) { + const rowScope = $scope.$new(); + rowScope.field = field; + rowScopes.push(rowScope); + + return [ + _.escape(field.name), + _.escape(field.script), + _.get($scope.indexPattern, ['fieldFormatMap', field.name, 'type', 'title']), + { + markup: controlsHtml, + scope: rowScope } - }); + ]; + }); + } - if (fieldsAdded > 0) { - notify.info(fieldsAdded + ' script fields created'); + $scope.addDateScripts = function () { + const conflictFields = []; + let fieldsAdded = 0; + _.each(dateScripts($scope.indexPattern), function (script, field) { + try { + $scope.indexPattern.addScriptedField(field, script, 'number'); + fieldsAdded++; + } catch (e) { + conflictFields.push(field); } + }); - if (conflictFields.length > 0) { - notify.info('Not adding ' + conflictFields.length + ' duplicate fields: ' + conflictFields.join(', ')); - } - }; + if (fieldsAdded > 0) { + notify.info(fieldsAdded + ' script fields created'); + } - $scope.create = function () { - const params = { - indexPattern: $scope.indexPattern.id - }; + if (conflictFields.length > 0) { + notify.info('Not adding ' + conflictFields.length + ' duplicate fields: ' + conflictFields.join(', ')); + } + }; - kbnUrl.change(fieldCreatorPath, params); + $scope.create = function () { + const params = { + indexPattern: $scope.indexPattern.id }; - $scope.edit = function (field) { - const params = { - indexPattern: $scope.indexPattern.id, - fieldName: field.name - }; + kbnUrl.change(fieldCreatorPath, params); + }; - kbnUrl.change(fieldEditorPath, params); + $scope.edit = function (field) { + const params = { + indexPattern: $scope.indexPattern.id, + fieldName: field.name }; - $scope.remove = function (field) { - $scope.indexPattern.removeScriptedField(field.name); - }; - } - }; - }); + kbnUrl.change(fieldEditorPath, params); + }; + + $scope.remove = function (field) { + $scope.indexPattern.removeScriptedField(field.name); + }; + } + }; }); diff --git a/src/plugins/kibana/public/settings/sections/indices/index.js b/src/plugins/kibana/public/settings/sections/indices/index.js index dfba694eef411b..6cf0e6bdef5fff 100644 --- a/src/plugins/kibana/public/settings/sections/indices/index.js +++ b/src/plugins/kibana/public/settings/sections/indices/index.js @@ -2,50 +2,48 @@ import _ from 'lodash'; import 'plugins/kibana/settings/sections/indices/_create'; import 'plugins/kibana/settings/sections/indices/_edit'; import 'plugins/kibana/settings/sections/indices/_field_editor'; -define(function (require) { - // add a dependency to all of the subsection routes - require('ui/routes') - .defaults(/settings\/indices/, { - resolve: { - indexPatternIds: function (courier) { - return courier.indexPatterns.getIds(); - } +// add a dependency to all of the subsection routes +require('ui/routes') +.defaults(/settings\/indices/, { + resolve: { + indexPatternIds: function (courier) { + return courier.indexPatterns.getIds(); } - }); + } +}); - // wrapper directive, which sets some global stuff up like the left nav - require('ui/modules').get('apps/settings') - .directive('kbnSettingsIndices', function ($route, config, kbnUrl) { - return { - restrict: 'E', - transclude: true, - template: require('plugins/kibana/settings/sections/indices/index.html'), - link: function ($scope) { - $scope.editingId = $route.current.params.indexPatternId; - config.$bind($scope, 'defaultIndex'); +// wrapper directive, which sets some global stuff up like the left nav +require('ui/modules').get('apps/settings') +.directive('kbnSettingsIndices', function ($route, config, kbnUrl) { + return { + restrict: 'E', + transclude: true, + template: require('plugins/kibana/settings/sections/indices/index.html'), + link: function ($scope) { + $scope.editingId = $route.current.params.indexPatternId; + config.$bind($scope, 'defaultIndex'); - $scope.$watch('defaultIndex', function () { - const ids = $route.current.locals.indexPatternIds; - $scope.indexPatternList = ids.map(function (id) { - return { - id: id, - url: kbnUrl.eval('#/settings/indices/{{id}}', {id: id}), - class: 'sidebar-item-title ' + ($scope.editingId === id ? 'active' : ''), - default: $scope.defaultIndex === id - }; - }); + $scope.$watch('defaultIndex', function () { + const ids = $route.current.locals.indexPatternIds; + $scope.indexPatternList = ids.map(function (id) { + return { + id: id, + url: kbnUrl.eval('#/settings/indices/{{id}}', {id: id}), + class: 'sidebar-item-title ' + ($scope.editingId === id ? 'active' : ''), + default: $scope.defaultIndex === id + }; }); + }); - $scope.$emit('application.load'); - } - }; - }); - - return { - name: 'indices', - display: 'Indices', - url: '#/settings/indices', + $scope.$emit('application.load'); + } }; }); + +export default { + name: 'indices', + display: 'Indices', + url: '#/settings/indices', +}; diff --git a/src/plugins/kibana/public/settings/sections/objects/_objects.js b/src/plugins/kibana/public/settings/sections/objects/_objects.js index a84b6028351109..bbbdc2a5b6263b 100644 --- a/src/plugins/kibana/public/settings/sections/objects/_objects.js +++ b/src/plugins/kibana/public/settings/sections/objects/_objects.js @@ -4,165 +4,163 @@ import angular from 'angular'; import registry from 'plugins/kibana/settings/saved_object_registry'; import objectIndexHTML from 'plugins/kibana/settings/sections/objects/_objects.html'; import 'ui/directives/file_upload'; -define(function (require) { - const MAX_SIZE = Math.pow(2, 31) - 1; - - - require('ui/routes') - .when('/settings/objects', { - template: objectIndexHTML - }); - - require('ui/modules').get('apps/settings') - .directive('kbnSettingsObjects', function (kbnIndex, Notifier, Private, kbnUrl, Promise) { - return { - restrict: 'E', - controller: function ($scope, $injector, $q, AppState, es) { - const notify = new Notifier({ location: 'Saved Objects' }); - - const $state = $scope.state = new AppState(); - $scope.currentTab = null; - $scope.selectedItems = []; - - const getData = function (filter) { - const services = registry.all().map(function (obj) { - const service = $injector.get(obj.service); - return service.find(filter).then(function (data) { - return { - service: service, - serviceName: obj.service, - title: obj.title, - type: service.type, - data: data.hits, - total: data.total - }; - }); - }); +const MAX_SIZE = Math.pow(2, 31) - 1; - $q.all(services).then(function (data) { - $scope.services = _.sortBy(data, 'title'); - let tab = $scope.services[0]; - if ($state.tab) $scope.currentTab = tab = _.find($scope.services, {title: $state.tab}); - $scope.$watch('state.tab', function (tab) { - if (!tab) $scope.changeTab($scope.services[0]); - }); - }); - }; +require('ui/routes') +.when('/settings/objects', { + template: objectIndexHTML +}); +require('ui/modules').get('apps/settings') +.directive('kbnSettingsObjects', function (kbnIndex, Notifier, Private, kbnUrl, Promise) { + return { + restrict: 'E', + controller: function ($scope, $injector, $q, AppState, es) { + const notify = new Notifier({ location: 'Saved Objects' }); + + const $state = $scope.state = new AppState(); + $scope.currentTab = null; + $scope.selectedItems = []; + + const getData = function (filter) { + const services = registry.all().map(function (obj) { + const service = $injector.get(obj.service); + return service.find(filter).then(function (data) { + return { + service: service, + serviceName: obj.service, + title: obj.title, + type: service.type, + data: data.hits, + total: data.total + }; + }); + }); - $scope.toggleAll = function () { - if ($scope.selectedItems.length === $scope.currentTab.data.length) { - $scope.selectedItems.length = 0; - } else { - $scope.selectedItems = [].concat($scope.currentTab.data); - } - }; + $q.all(services).then(function (data) { + $scope.services = _.sortBy(data, 'title'); + let tab = $scope.services[0]; + if ($state.tab) $scope.currentTab = tab = _.find($scope.services, {title: $state.tab}); - $scope.toggleItem = function (item) { - const i = $scope.selectedItems.indexOf(item); - if (i >= 0) { - $scope.selectedItems.splice(i, 1); - } else { - $scope.selectedItems.push(item); - } - }; + $scope.$watch('state.tab', function (tab) { + if (!tab) $scope.changeTab($scope.services[0]); + }); + }); + }; - $scope.open = function (item) { - kbnUrl.change(item.url.substr(1)); - }; - $scope.edit = function (service, item) { - const params = { - service: service.serviceName, - id: item.id - }; + $scope.toggleAll = function () { + if ($scope.selectedItems.length === $scope.currentTab.data.length) { + $scope.selectedItems.length = 0; + } else { + $scope.selectedItems = [].concat($scope.currentTab.data); + } + }; + + $scope.toggleItem = function (item) { + const i = $scope.selectedItems.indexOf(item); + if (i >= 0) { + $scope.selectedItems.splice(i, 1); + } else { + $scope.selectedItems.push(item); + } + }; - kbnUrl.change('/settings/objects/{{ service }}/{{ id }}', params); - }; + $scope.open = function (item) { + kbnUrl.change(item.url.substr(1)); + }; - $scope.bulkDelete = function () { - $scope.currentTab.service.delete(_.pluck($scope.selectedItems, 'id')).then(refreshData).then(function () { - $scope.selectedItems.length = 0; - }); + $scope.edit = function (service, item) { + const params = { + service: service.serviceName, + id: item.id }; - $scope.bulkExport = function () { - const objs = $scope.selectedItems.map(_.partialRight(_.extend, {type: $scope.currentTab.type})); - retrieveAndExportDocs(objs); - }; + kbnUrl.change('/settings/objects/{{ service }}/{{ id }}', params); + }; - $scope.exportAll = () => { - Promise.map($scope.services, (service) => - service.service.scanAll('').then((results) => - results.hits.map((hit) => _.extend(hit, {type: service.type})) - ) - ).then((results) => retrieveAndExportDocs(_.flattenDeep(results))); - }; + $scope.bulkDelete = function () { + $scope.currentTab.service.delete(_.pluck($scope.selectedItems, 'id')).then(refreshData).then(function () { + $scope.selectedItems.length = 0; + }); + }; + + $scope.bulkExport = function () { + const objs = $scope.selectedItems.map(_.partialRight(_.extend, {type: $scope.currentTab.type})); + retrieveAndExportDocs(objs); + }; + + $scope.exportAll = () => { + Promise.map($scope.services, (service) => + service.service.scanAll('').then((results) => + results.hits.map((hit) => _.extend(hit, {type: service.type})) + ) + ).then((results) => retrieveAndExportDocs(_.flattenDeep(results))); + }; + + function retrieveAndExportDocs(objs) { + if (!objs.length) return notify.error('No saved objects to export.'); + es.mget({ + index: kbnIndex, + body: {docs: objs.map(transformToMget)} + }) + .then(function (response) { + saveToFile(response.docs.map(_.partialRight(_.pick, '_id', '_type', '_source'))); + }); + } - function retrieveAndExportDocs(objs) { - if (!objs.length) return notify.error('No saved objects to export.'); - es.mget({ - index: kbnIndex, - body: {docs: objs.map(transformToMget)} - }) - .then(function (response) { - saveToFile(response.docs.map(_.partialRight(_.pick, '_id', '_type', '_source'))); - }); - } + // Takes an object and returns the associated data needed for an mget API request + function transformToMget(obj) { + return {_id: obj.id, _type: obj.type}; + } - // Takes an object and returns the associated data needed for an mget API request - function transformToMget(obj) { - return {_id: obj.id, _type: obj.type}; - } + function saveToFile(results) { + const blob = new Blob([angular.toJson(results, true)], {type: 'application/json'}); + saveAs(blob, 'export.json'); + } - function saveToFile(results) { - const blob = new Blob([angular.toJson(results, true)], {type: 'application/json'}); - saveAs(blob, 'export.json'); + $scope.importAll = function (fileContents) { + let docs; + try { + docs = JSON.parse(fileContents); + } catch (e) { + notify.error('The file could not be processed.'); } - $scope.importAll = function (fileContents) { - let docs; - try { - docs = JSON.parse(fileContents); - } catch (e) { - notify.error('The file could not be processed.'); - } - - return Promise.map(docs, function (doc) { - const service = _.find($scope.services, {type: doc._type}).service; - return service.get().then(function (obj) { - obj.id = doc._id; - return obj.applyESResp(doc).then(function () { - return obj.save(); - }); + return Promise.map(docs, function (doc) { + const service = _.find($scope.services, {type: doc._type}).service; + return service.get().then(function (obj) { + obj.id = doc._id; + return obj.applyESResp(doc).then(function () { + return obj.save(); }); - }) - .then(refreshIndex) - .then(refreshData, notify.error); - }; - - function refreshIndex() { - return es.indices.refresh({ - index: kbnIndex }); - } - - function refreshData() { - return getData($scope.advancedFilter); - } - - $scope.changeTab = function (tab) { - $scope.currentTab = tab; - $scope.selectedItems.length = 0; - $state.tab = tab.title; - $state.save(); - }; - - $scope.$watch('advancedFilter', function (filter) { - getData(filter); + }) + .then(refreshIndex) + .then(refreshData, notify.error); + }; + + function refreshIndex() { + return es.indices.refresh({ + index: kbnIndex }); } - }; - }); + + function refreshData() { + return getData($scope.advancedFilter); + } + + $scope.changeTab = function (tab) { + $scope.currentTab = tab; + $scope.selectedItems.length = 0; + $state.tab = tab.title; + $state.save(); + }; + + $scope.$watch('advancedFilter', function (filter) { + getData(filter); + }); + } + }; }); diff --git a/src/plugins/kibana/public/settings/sections/objects/_view.js b/src/plugins/kibana/public/settings/sections/objects/_view.js index ba26e6e07f030f..9cb8fb8acfa23e 100644 --- a/src/plugins/kibana/public/settings/sections/objects/_view.js +++ b/src/plugins/kibana/public/settings/sections/objects/_view.js @@ -4,220 +4,218 @@ import rison from 'ui/utils/rison'; import registry from 'plugins/kibana/settings/saved_object_registry'; import objectViewHTML from 'plugins/kibana/settings/sections/objects/_view.html'; import IndexPatternsCastMappingTypeProvider from 'ui/index_patterns/_cast_mapping_type'; -define(function (require) { - - require('ui/routes') - .when('/settings/objects/:service/:id', { - template: objectViewHTML - }); - - require('ui/modules').get('apps/settings') - .directive('kbnSettingsObjectsView', function (kbnIndex, Notifier) { - return { - restrict: 'E', - controller: function ($scope, $injector, $routeParams, $location, $window, $rootScope, es, Private) { - const notify = new Notifier({ location: 'SavedObject view' }); - const castMappingType = Private(IndexPatternsCastMappingTypeProvider); - const serviceObj = registry.get($routeParams.service); - const service = $injector.get(serviceObj.service); - - /** - * Creates a field definition and pushes it to the memo stack. This function - * is designed to be used in conjunction with _.reduce(). If the - * values is plain object it will recurse through all the keys till it hits - * a string, number or an array. - * - * @param {array} memo The stack of fields - * @param {mixed} value The value of the field - * @param {string} key The key of the field - * @param {object} collection This is a reference the collection being reduced - * @param {array} parents The parent keys to the field - * @returns {array} - */ - const createField = function (memo, val, key, collection, parents) { - if (_.isArray(parents)) { - parents.push(key); - } else { - parents = [key]; - } - const field = { type: 'text', name: parents.join('.'), value: val }; +require('ui/routes') +.when('/settings/objects/:service/:id', { + template: objectViewHTML +}); - if (_.isString(field.value)) { - try { - field.value = angular.toJson(JSON.parse(field.value), true); - field.type = 'json'; - } catch (err) { - field.value = field.value; - } - } else if (_.isNumeric(field.value)) { - field.type = 'number'; - } else if (_.isArray(field.value)) { - field.type = 'array'; - field.value = angular.toJson(field.value, true); - } else if (_.isBoolean(field.value)) { - field.type = 'boolean'; +require('ui/modules').get('apps/settings') +.directive('kbnSettingsObjectsView', function (kbnIndex, Notifier) { + return { + restrict: 'E', + controller: function ($scope, $injector, $routeParams, $location, $window, $rootScope, es, Private) { + const notify = new Notifier({ location: 'SavedObject view' }); + const castMappingType = Private(IndexPatternsCastMappingTypeProvider); + const serviceObj = registry.get($routeParams.service); + const service = $injector.get(serviceObj.service); + + /** + * Creates a field definition and pushes it to the memo stack. This function + * is designed to be used in conjunction with _.reduce(). If the + * values is plain object it will recurse through all the keys till it hits + * a string, number or an array. + * + * @param {array} memo The stack of fields + * @param {mixed} value The value of the field + * @param {string} key The key of the field + * @param {object} collection This is a reference the collection being reduced + * @param {array} parents The parent keys to the field + * @returns {array} + */ + const createField = function (memo, val, key, collection, parents) { + if (_.isArray(parents)) { + parents.push(key); + } else { + parents = [key]; + } + + const field = { type: 'text', name: parents.join('.'), value: val }; + + if (_.isString(field.value)) { + try { + field.value = angular.toJson(JSON.parse(field.value), true); + field.type = 'json'; + } catch (err) { field.value = field.value; - } else if (_.isPlainObject(field.value)) { - // do something recursive - return _.reduce(field.value, _.partialRight(createField, parents), memo); } + } else if (_.isNumeric(field.value)) { + field.type = 'number'; + } else if (_.isArray(field.value)) { + field.type = 'array'; + field.value = angular.toJson(field.value, true); + } else if (_.isBoolean(field.value)) { + field.type = 'boolean'; + field.value = field.value; + } else if (_.isPlainObject(field.value)) { + // do something recursive + return _.reduce(field.value, _.partialRight(createField, parents), memo); + } - memo.push(field); - - // once the field is added to the object you need to pop the parents - // to remove it since we've hit the end of the branch. - parents.pop(); - return memo; - }; - - const readObjectClass = function (fields, Class) { - const fieldMap = _.indexBy(fields, 'name'); - - _.forOwn(Class.mapping, function (esType, name) { - if (fieldMap[name]) return; - - fields.push({ - name: name, - type: (function () { - switch (castMappingType(esType)) { - case 'string': return 'text'; - case 'number': return 'number'; - case 'boolean': return 'boolean'; - default: return 'json'; - } - }()) - }); - }); + memo.push(field); - if (Class.searchSource && !fieldMap['kibanaSavedObjectMeta.searchSourceJSON']) { - fields.push({ - name: 'kibanaSavedObjectMeta.searchSourceJSON', - type: 'json', - value: '{}' - }); - } - }; + // once the field is added to the object you need to pop the parents + // to remove it since we've hit the end of the branch. + parents.pop(); + return memo; + }; - $scope.notFound = $routeParams.notFound; + const readObjectClass = function (fields, Class) { + const fieldMap = _.indexBy(fields, 'name'); - $scope.title = service.type; + _.forOwn(Class.mapping, function (esType, name) { + if (fieldMap[name]) return; + + fields.push({ + name: name, + type: (function () { + switch (castMappingType(esType)) { + case 'string': return 'text'; + case 'number': return 'number'; + case 'boolean': return 'boolean'; + default: return 'json'; + } + }()) + }); + }); + + if (Class.searchSource && !fieldMap['kibanaSavedObjectMeta.searchSourceJSON']) { + fields.push({ + name: 'kibanaSavedObjectMeta.searchSourceJSON', + type: 'json', + value: '{}' + }); + } + }; + + $scope.notFound = $routeParams.notFound; + + $scope.title = service.type; + + es.get({ + index: kbnIndex, + type: service.type, + id: $routeParams.id + }) + .then(function (obj) { + $scope.obj = obj; + $scope.link = service.urlFor(obj._id); + + const fields = _.reduce(obj._source, createField, []); + if (service.Class) readObjectClass(fields, service.Class); + $scope.fields = _.sortBy(fields, 'name'); + }) + .catch(notify.fatal); + + // This handles the validation of the Ace Editor. Since we don't have any + // other hooks into the editors to tell us if the content is valid or not + // we need to use the annotations to see if they have any errors. If they + // do then we push the field.name to aceInvalidEditor variable. + // Otherwise we remove it. + const loadedEditors = []; + $scope.aceInvalidEditors = []; + + $scope.aceLoaded = function (editor) { + if (_.contains(loadedEditors, editor)) return; + loadedEditors.push(editor); + + editor.$blockScrolling = Infinity; + + const session = editor.getSession(); + const fieldName = editor.container.id; + + session.setTabSize(2); + session.setUseSoftTabs(true); + session.on('changeAnnotation', function () { + const annotations = session.getAnnotations(); + if (_.some(annotations, { type: 'error'})) { + if (!_.contains($scope.aceInvalidEditors, fieldName)) { + $scope.aceInvalidEditors.push(fieldName); + } + } else { + $scope.aceInvalidEditors = _.without($scope.aceInvalidEditors, fieldName); + } - es.get({ + if ($rootScope.$$phase) $scope.$apply(); + }); + }; + + $scope.cancel = function () { + $window.history.back(); + return false; + }; + + /** + * Deletes an object and sets the notification + * @param {type} name description + * @returns {type} description + */ + $scope.delete = function () { + es.delete({ index: kbnIndex, type: service.type, id: $routeParams.id }) - .then(function (obj) { - $scope.obj = obj; - $scope.link = service.urlFor(obj._id); - - const fields = _.reduce(obj._source, createField, []); - if (service.Class) readObjectClass(fields, service.Class); - $scope.fields = _.sortBy(fields, 'name'); + .then(function (resp) { + return redirectHandler('deleted'); }) .catch(notify.fatal); + }; - // This handles the validation of the Ace Editor. Since we don't have any - // other hooks into the editors to tell us if the content is valid or not - // we need to use the annotations to see if they have any errors. If they - // do then we push the field.name to aceInvalidEditor variable. - // Otherwise we remove it. - const loadedEditors = []; - $scope.aceInvalidEditors = []; - - $scope.aceLoaded = function (editor) { - if (_.contains(loadedEditors, editor)) return; - loadedEditors.push(editor); - - editor.$blockScrolling = Infinity; - - const session = editor.getSession(); - const fieldName = editor.container.id; - - session.setTabSize(2); - session.setUseSoftTabs(true); - session.on('changeAnnotation', function () { - const annotations = session.getAnnotations(); - if (_.some(annotations, { type: 'error'})) { - if (!_.contains($scope.aceInvalidEditors, fieldName)) { - $scope.aceInvalidEditors.push(fieldName); - } - } else { - $scope.aceInvalidEditors = _.without($scope.aceInvalidEditors, fieldName); - } + $scope.submit = function () { + const source = _.cloneDeep($scope.obj._source); - if ($rootScope.$$phase) $scope.$apply(); - }); - }; - - $scope.cancel = function () { - $window.history.back(); - return false; - }; - - /** - * Deletes an object and sets the notification - * @param {type} name description - * @returns {type} description - */ - $scope.delete = function () { - es.delete({ - index: kbnIndex, - type: service.type, - id: $routeParams.id - }) - .then(function (resp) { - return redirectHandler('deleted'); - }) - .catch(notify.fatal); - }; - - $scope.submit = function () { - const source = _.cloneDeep($scope.obj._source); - - _.each($scope.fields, function (field) { - let value = field.value; - - if (field.type === 'number') { - value = Number(field.value); - } + _.each($scope.fields, function (field) { + let value = field.value; - if (field.type === 'array') { - value = JSON.parse(field.value); - } + if (field.type === 'number') { + value = Number(field.value); + } - _.set(source, field.name, value); - }); + if (field.type === 'array') { + value = JSON.parse(field.value); + } + + _.set(source, field.name, value); + }); - es.index({ - index: kbnIndex, - type: service.type, - id: $routeParams.id, - body: source - }) - .then(function (resp) { - return redirectHandler('updated'); - }) - .catch(notify.fatal); - }; - - function redirectHandler(action) { - return es.indices.refresh({ - index: kbnIndex - }) - .then(function (resp) { - const msg = 'You successfully ' + action + ' the "' + $scope.obj._source.title + '" ' + $scope.title.toLowerCase() + ' object'; - - $location.path('/settings/objects').search({ - _a: rison.encode({ - tab: serviceObj.title - }) - }); - notify.info(msg); + es.index({ + index: kbnIndex, + type: service.type, + id: $routeParams.id, + body: source + }) + .then(function (resp) { + return redirectHandler('updated'); + }) + .catch(notify.fatal); + }; + + function redirectHandler(action) { + return es.indices.refresh({ + index: kbnIndex + }) + .then(function (resp) { + const msg = 'You successfully ' + action + ' the "' + $scope.obj._source.title + '" ' + $scope.title.toLowerCase() + ' object'; + + $location.path('/settings/objects').search({ + _a: rison.encode({ + tab: serviceObj.title + }) }); - } + notify.info(msg); + }); } - }; - }); + } + }; }); diff --git a/src/plugins/kibana/public/settings/sections/objects/index.js b/src/plugins/kibana/public/settings/sections/objects/index.js index e5f13954516441..6cf3f95148e807 100644 --- a/src/plugins/kibana/public/settings/sections/objects/index.js +++ b/src/plugins/kibana/public/settings/sections/objects/index.js @@ -2,15 +2,13 @@ import 'plugins/kibana/settings/sections/objects/_view'; import 'plugins/kibana/settings/sections/objects/_objects'; import 'ace'; import 'ui/directives/confirm_click'; -define(function (require) { - // add the module deps to this module - require('ui/modules').get('apps/settings'); +// add the module deps to this module +require('ui/modules').get('apps/settings'); - return { - name: 'objects', - display: 'Objects', - url: '#/settings/objects' - }; -}); +export default { + name: 'objects', + display: 'Objects', + url: '#/settings/objects' +}; diff --git a/src/plugins/kibana/public/settings/sections/status/index.js b/src/plugins/kibana/public/settings/sections/status/index.js index 9dbbf3a1473f7b..ad8b9bc9871294 100644 --- a/src/plugins/kibana/public/settings/sections/status/index.js +++ b/src/plugins/kibana/public/settings/sections/status/index.js @@ -1,10 +1,8 @@ import _ from 'lodash'; -define(function (require) { - return { - order: 3, - name: 'status', - display: 'Status', - url: '/status' - }; -}); +export default { + order: 3, + name: 'status', + display: 'Status', + url: '/status' +}; diff --git a/src/plugins/kibana/public/visualize/editor/agg.js b/src/plugins/kibana/public/visualize/editor/agg.js index 21603033da5b4d..c636356cfcc06c 100644 --- a/src/plugins/kibana/public/visualize/editor/agg.js +++ b/src/plugins/kibana/public/visualize/editor/agg.js @@ -4,90 +4,88 @@ import _ from 'lodash'; import $ from 'jquery'; import advancedToggleHtml from 'plugins/kibana/visualize/editor/advanced_toggle.html'; import AggTypesIndexProvider from 'ui/agg_types/index'; -define(function (require) { - require('ui/modules') - .get('app/visualize') - .directive('visEditorAgg', function ($compile, $parse, $filter, Private, Notifier) { - - const aggTypes = Private(AggTypesIndexProvider); - - const notify = new Notifier({ - location: 'visAggGroup' - }); - - return { - restrict: 'A', - template: require('plugins/kibana/visualize/editor/agg.html'), - require: 'form', - link: function ($scope, $el, attrs, kbnForm) { - $scope.$bind('outputAgg', 'outputVis.aggs.byId[agg.id]', $scope); - $scope.editorOpen = !!$scope.agg.brandNew; - - $scope.$watch('editorOpen', function (open) { - // make sure that all of the form inputs are "touched" - // so that their errors propogate - if (!open) kbnForm.$setTouched(); - }); +require('ui/modules') +.get('app/visualize') +.directive('visEditorAgg', function ($compile, $parse, $filter, Private, Notifier) { - $scope.$watchMulti([ - '$index', - 'group.length' - ], function () { - $scope.aggIsTooLow = calcAggIsTooLow(); - }); + const aggTypes = Private(AggTypesIndexProvider); - /** - * Describe the aggregation, for display in the collapsed agg header - * @return {[type]} [description] - */ - $scope.describe = function () { - if (!$scope.agg.type.makeLabel) return ''; - const label = $scope.agg.type.makeLabel($scope.agg); - return label ? label : ''; - }; - - function move(below, agg) { - _.move($scope.vis.aggs, agg, below, function (otherAgg) { - return otherAgg.schema.group === agg.schema.group; - }); - } - $scope.moveUp = _.partial(move, false); - $scope.moveDown = _.partial(move, true); + const notify = new Notifier({ + location: 'visAggGroup' + }); - $scope.remove = function (agg) { - const aggs = $scope.vis.aggs; + return { + restrict: 'A', + template: require('plugins/kibana/visualize/editor/agg.html'), + require: 'form', + link: function ($scope, $el, attrs, kbnForm) { + $scope.$bind('outputAgg', 'outputVis.aggs.byId[agg.id]', $scope); + $scope.editorOpen = !!$scope.agg.brandNew; + + $scope.$watch('editorOpen', function (open) { + // make sure that all of the form inputs are "touched" + // so that their errors propogate + if (!open) kbnForm.$setTouched(); + }); + + $scope.$watchMulti([ + '$index', + 'group.length' + ], function () { + $scope.aggIsTooLow = calcAggIsTooLow(); + }); + + /** + * Describe the aggregation, for display in the collapsed agg header + * @return {[type]} [description] + */ + $scope.describe = function () { + if (!$scope.agg.type.makeLabel) return ''; + const label = $scope.agg.type.makeLabel($scope.agg); + return label ? label : ''; + }; + + function move(below, agg) { + _.move($scope.vis.aggs, agg, below, function (otherAgg) { + return otherAgg.schema.group === agg.schema.group; + }); + } + $scope.moveUp = _.partial(move, false); + $scope.moveDown = _.partial(move, true); - const index = aggs.indexOf(agg); - if (index === -1) return notify.log('already removed'); + $scope.remove = function (agg) { + const aggs = $scope.vis.aggs; - aggs.splice(index, 1); - }; + const index = aggs.indexOf(agg); + if (index === -1) return notify.log('already removed'); - $scope.canRemove = function (aggregation) { - const metricCount = _.reduce($scope.group, function (count, agg) { - return (agg.schema.name === aggregation.schema.name) ? ++count : count; - }, 0); + aggs.splice(index, 1); + }; - // make sure the the number of these aggs is above the min - return metricCount > aggregation.schema.min; - }; + $scope.canRemove = function (aggregation) { + const metricCount = _.reduce($scope.group, function (count, agg) { + return (agg.schema.name === aggregation.schema.name) ? ++count : count; + }, 0); - function calcAggIsTooLow() { - if (!$scope.agg.schema.mustBeFirst) { - return false; - } + // make sure the the number of these aggs is above the min + return metricCount > aggregation.schema.min; + }; - const firstDifferentSchema = _.findIndex($scope.group, function (agg) { - return agg.schema !== $scope.agg.schema; - }); + function calcAggIsTooLow() { + if (!$scope.agg.schema.mustBeFirst) { + return false; + } - if (firstDifferentSchema === -1) { - return false; - } + const firstDifferentSchema = _.findIndex($scope.group, function (agg) { + return agg.schema !== $scope.agg.schema; + }); - return $scope.$index > firstDifferentSchema; + if (firstDifferentSchema === -1) { + return false; } + + return $scope.$index > firstDifferentSchema; } - }; - }); + } + }; }); diff --git a/src/plugins/kibana/public/visualize/editor/agg_add.js b/src/plugins/kibana/public/visualize/editor/agg_add.js index 841a04bab4a894..bf07bdd43a8e75 100644 --- a/src/plugins/kibana/public/visualize/editor/agg_add.js +++ b/src/plugins/kibana/public/visualize/editor/agg_add.js @@ -1,30 +1,28 @@ import VisAggConfigProvider from 'ui/Vis/AggConfig'; -define(function (require) { - require('ui/modules') - .get('kibana') - .directive('visEditorAggAdd', function (Private) { - const AggConfig = Private(VisAggConfigProvider); +require('ui/modules') +.get('kibana') +.directive('visEditorAggAdd', function (Private) { + const AggConfig = Private(VisAggConfigProvider); - return { - restrict: 'E', - template: require('plugins/kibana/visualize/editor/agg_add.html'), - controllerAs: 'add', - controller: function ($scope) { - const self = this; + return { + restrict: 'E', + template: require('plugins/kibana/visualize/editor/agg_add.html'), + controllerAs: 'add', + controller: function ($scope) { + const self = this; + self.form = false; + self.submit = function (schema) { self.form = false; - self.submit = function (schema) { - self.form = false; - const aggConfig = new AggConfig($scope.vis, { - schema: schema - }); - aggConfig.brandNew = true; + const aggConfig = new AggConfig($scope.vis, { + schema: schema + }); + aggConfig.brandNew = true; - $scope.vis.aggs.push(aggConfig); - }; - } - }; - }); + $scope.vis.aggs.push(aggConfig); + }; + } + }; }); diff --git a/src/plugins/kibana/public/visualize/editor/agg_filter.js b/src/plugins/kibana/public/visualize/editor/agg_filter.js index 86dc69c3df48bf..70895381467ea4 100644 --- a/src/plugins/kibana/public/visualize/editor/agg_filter.js +++ b/src/plugins/kibana/public/visualize/editor/agg_filter.js @@ -1,10 +1,8 @@ import _ from 'lodash'; import propFilter from 'ui/filters/_prop_filter'; -define(function (require) { - require('ui/modules') - .get('kibana') - .filter('aggFilter', function () { - return propFilter('name'); - }); +require('ui/modules') +.get('kibana') +.filter('aggFilter', function () { + return propFilter('name'); }); diff --git a/src/plugins/kibana/public/visualize/editor/agg_group.js b/src/plugins/kibana/public/visualize/editor/agg_group.js index c1983cecf8281d..9e09ad069d63f4 100644 --- a/src/plugins/kibana/public/visualize/editor/agg_group.js +++ b/src/plugins/kibana/public/visualize/editor/agg_group.js @@ -3,44 +3,42 @@ import 'plugins/kibana/visualize/editor/agg'; import 'plugins/kibana/visualize/editor/agg_add'; import 'plugins/kibana/visualize/editor/nesting_indicator'; -define(function (require) { - require('ui/modules') - .get('app/visualize') - .directive('visEditorAggGroup', function (Private) { +require('ui/modules') +.get('app/visualize') +.directive('visEditorAggGroup', function (Private) { - return { - restrict: 'E', - template: require('plugins/kibana/visualize/editor/agg_group.html'), - scope: true, - link: function ($scope, $el, attr) { - $scope.groupName = attr.groupName; - $scope.$bind('group', 'vis.aggs.bySchemaGroup["' + $scope.groupName + '"]'); - $scope.$bind('schemas', 'vis.type.schemas["' + $scope.groupName + '"]'); + return { + restrict: 'E', + template: require('plugins/kibana/visualize/editor/agg_group.html'), + scope: true, + link: function ($scope, $el, attr) { + $scope.groupName = attr.groupName; + $scope.$bind('group', 'vis.aggs.bySchemaGroup["' + $scope.groupName + '"]'); + $scope.$bind('schemas', 'vis.type.schemas["' + $scope.groupName + '"]'); - $scope.$watchMulti([ - 'schemas', - '[]group' - ], function () { - const stats = $scope.stats = { - min: 0, - max: 0, - count: $scope.group ? $scope.group.length : 0 - }; + $scope.$watchMulti([ + 'schemas', + '[]group' + ], function () { + const stats = $scope.stats = { + min: 0, + max: 0, + count: $scope.group ? $scope.group.length : 0 + }; - if (!$scope.schemas) return; + if (!$scope.schemas) return; - $scope.schemas.forEach(function (schema) { - stats.min += schema.min; - stats.max += schema.max; - }); + $scope.schemas.forEach(function (schema) { + stats.min += schema.min; + stats.max += schema.max; + }); - $scope.availableSchema = $scope.schemas.filter(function (schema) { - const count = _.where($scope.group, { schema }).length; - if (count < schema.max) return true; - }); + $scope.availableSchema = $scope.schemas.filter(function (schema) { + const count = _.where($scope.group, { schema }).length; + if (count < schema.max) return true; }); - } - }; + }); + } + }; - }); }); diff --git a/src/plugins/kibana/public/visualize/editor/agg_param.js b/src/plugins/kibana/public/visualize/editor/agg_param.js index f704bdf8489bbd..229401e7239d14 100644 --- a/src/plugins/kibana/public/visualize/editor/agg_param.js +++ b/src/plugins/kibana/public/visualize/editor/agg_param.js @@ -1,31 +1,29 @@ import _ from 'lodash'; -define(function (require) { - require('ui/modules') - .get('app/visualize') - .directive('visAggParamEditor', function (config, $parse, Private) { - return { - restrict: 'E', - scope: true, - template: function ($el) { - return $el.html(); +require('ui/modules') +.get('app/visualize') +.directive('visAggParamEditor', function (config, $parse, Private) { + return { + restrict: 'E', + scope: true, + template: function ($el) { + return $el.html(); + }, + link: { + pre: function ($scope, $el, attr) { + $scope.$bind('aggParam', attr.aggParam); }, - link: { - pre: function ($scope, $el, attr) { - $scope.$bind('aggParam', attr.aggParam); - }, - post: function ($scope, $el, attr) { - $scope.config = config; + post: function ($scope, $el, attr) { + $scope.config = config; - $scope.optionEnabled = function (option) { - if (option && _.isFunction(option.enabled)) { - return option.enabled($scope.agg); - } + $scope.optionEnabled = function (option) { + if (option && _.isFunction(option.enabled)) { + return option.enabled($scope.agg); + } - return true; - }; - } + return true; + }; } - }; - }); + } + }; }); diff --git a/src/plugins/kibana/public/visualize/editor/agg_params.js b/src/plugins/kibana/public/visualize/editor/agg_params.js index 2439ff32e52f28..3de6df50a0b7c1 100644 --- a/src/plugins/kibana/public/visualize/editor/agg_params.js +++ b/src/plugins/kibana/public/visualize/editor/agg_params.js @@ -6,160 +6,158 @@ import advancedToggleHtml from 'plugins/kibana/visualize/editor/advanced_toggle. import 'ui/filters/match_any'; import 'plugins/kibana/visualize/editor/agg_param'; import AggTypesIndexProvider from 'ui/agg_types/index'; -define(function (require) { - - require('ui/modules') - .get('app/visualize') - .directive('visEditorAggParams', function ($compile, $parse, Private, Notifier, $filter) { - const aggTypes = Private(AggTypesIndexProvider); - - const notify = new Notifier({ - location: 'visAggGroup' - }); - - return { - restrict: 'E', - template: require('plugins/kibana/visualize/editor/agg_params.html'), - scope: true, - link: function ($scope, $el, attr) { - $scope.$bind('agg', attr.agg); - $scope.$bind('groupName', attr.groupName); - - $scope.aggTypeOptions = aggTypes.byType[$scope.groupName]; - $scope.advancedToggled = false; - - // this will contain the controls for the schema (rows or columns?), which are unrelated to - // controls for the agg, which is why they are first - const $schemaEditor = $('
      ').addClass('schemaEditors').appendTo($el); - - if ($scope.agg.schema.editor) { - $schemaEditor.append($scope.agg.schema.editor); - $compile($schemaEditor)($scope.$new()); - } - // allow selection of an aggregation - const $aggSelect = $(aggSelectHtml).appendTo($el); - $compile($aggSelect)($scope); - - // params for the selected agg, these are rebuilt every time the agg in $aggSelect changes - let $aggParamEditors; // container for agg type param editors - let $aggParamEditorsScope; - $scope.$watch('agg.type', function updateAggParamEditor(newType, oldType) { - if ($aggParamEditors) { - $aggParamEditors.remove(); - $aggParamEditors = null; - } +require('ui/modules') +.get('app/visualize') +.directive('visEditorAggParams', function ($compile, $parse, Private, Notifier, $filter) { + const aggTypes = Private(AggTypesIndexProvider); - // if there's an old scope, destroy it - if ($aggParamEditorsScope) { - $aggParamEditorsScope.$destroy(); - $aggParamEditorsScope = null; - } + const notify = new Notifier({ + location: 'visAggGroup' + }); - // create child scope, used in the editors - $aggParamEditorsScope = $scope.$new(); + return { + restrict: 'E', + template: require('plugins/kibana/visualize/editor/agg_params.html'), + scope: true, + link: function ($scope, $el, attr) { + $scope.$bind('agg', attr.agg); + $scope.$bind('groupName', attr.groupName); - const agg = $scope.agg; - if (!agg) return; + $scope.aggTypeOptions = aggTypes.byType[$scope.groupName]; + $scope.advancedToggled = false; - const type = $scope.agg.type; + // this will contain the controls for the schema (rows or columns?), which are unrelated to + // controls for the agg, which is why they are first + const $schemaEditor = $('
      ').addClass('schemaEditors').appendTo($el); - if (newType !== oldType) { - // don't reset on initial load, the - // saved params should persist - agg.resetParams(); - } + if ($scope.agg.schema.editor) { + $schemaEditor.append($scope.agg.schema.editor); + $compile($schemaEditor)($scope.$new()); + } + + // allow selection of an aggregation + const $aggSelect = $(aggSelectHtml).appendTo($el); + $compile($aggSelect)($scope); + + // params for the selected agg, these are rebuilt every time the agg in $aggSelect changes + let $aggParamEditors; // container for agg type param editors + let $aggParamEditorsScope; + $scope.$watch('agg.type', function updateAggParamEditor(newType, oldType) { + if ($aggParamEditors) { + $aggParamEditors.remove(); + $aggParamEditors = null; + } - if (!type) return; + // if there's an old scope, destroy it + if ($aggParamEditorsScope) { + $aggParamEditorsScope.$destroy(); + $aggParamEditorsScope = null; + } - const aggParamHTML = { - basic: [], - advanced: [] - }; + // create child scope, used in the editors + $aggParamEditorsScope = $scope.$new(); - // build collection of agg params html - type.params.forEach(function (param, i) { - let aggParam; - // if field param exists, compute allowed fields - if (param.name === 'field') { - $aggParamEditorsScope.indexedFields = getIndexedFields(param); - } + const agg = $scope.agg; + if (!agg) return; - if ($aggParamEditorsScope.indexedFields) { - const hasIndexedFields = $aggParamEditorsScope.indexedFields.length > 0; - const isExtraParam = i > 0; - if (!hasIndexedFields && isExtraParam) { // don't draw the rest of the options if their are no indexed fields. - return; - } - } + const type = $scope.agg.type; + if (newType !== oldType) { + // don't reset on initial load, the + // saved params should persist + agg.resetParams(); + } + + if (!type) return; - let type = 'basic'; - if (param.advanced) type = 'advanced'; + const aggParamHTML = { + basic: [], + advanced: [] + }; - if (aggParam = getAggParamHTML(param, i)) { - aggParamHTML[type].push(aggParam); + // build collection of agg params html + type.params.forEach(function (param, i) { + let aggParam; + // if field param exists, compute allowed fields + if (param.name === 'field') { + $aggParamEditorsScope.indexedFields = getIndexedFields(param); + } + + if ($aggParamEditorsScope.indexedFields) { + const hasIndexedFields = $aggParamEditorsScope.indexedFields.length > 0; + const isExtraParam = i > 0; + if (!hasIndexedFields && isExtraParam) { // don't draw the rest of the options if their are no indexed fields. + return; } + } - }); - // compile the paramEditors html elements - let paramEditors = aggParamHTML.basic; + let type = 'basic'; + if (param.advanced) type = 'advanced'; - if (aggParamHTML.advanced.length) { - paramEditors.push($(advancedToggleHtml).get(0)); - paramEditors = paramEditors.concat(aggParamHTML.advanced); + if (aggParam = getAggParamHTML(param, i)) { + aggParamHTML[type].push(aggParam); } - $aggParamEditors = $(paramEditors).appendTo($el); - $compile($aggParamEditors)($aggParamEditorsScope); }); - // build HTML editor given an aggParam and index - function getAggParamHTML(param, idx) { - // don't show params without an editor - if (!param.editor) { - return; - } + // compile the paramEditors html elements + let paramEditors = aggParamHTML.basic; - const attrs = { - 'agg-param': 'agg.type.params[' + idx + ']' - }; + if (aggParamHTML.advanced.length) { + paramEditors.push($(advancedToggleHtml).get(0)); + paramEditors = paramEditors.concat(aggParamHTML.advanced); + } - if (param.advanced) { - attrs['ng-show'] = 'advancedToggled'; - } + $aggParamEditors = $(paramEditors).appendTo($el); + $compile($aggParamEditors)($aggParamEditorsScope); + }); - return $('') - .attr(attrs) - .append(param.editor) - .get(0); + // build HTML editor given an aggParam and index + function getAggParamHTML(param, idx) { + // don't show params without an editor + if (!param.editor) { + return; } - function getIndexedFields(param) { - let fields = $scope.agg.vis.indexPattern.fields.raw; - const fieldTypes = param.filterFieldTypes; + const attrs = { + 'agg-param': 'agg.type.params[' + idx + ']' + }; - if (fieldTypes) { - fields = $filter('fieldType')(fields, fieldTypes); - fields = $filter('orderBy')(fields, ['type', 'name']); - } + if (param.advanced) { + attrs['ng-show'] = 'advancedToggled'; + } - return new IndexedArray({ + return $('') + .attr(attrs) + .append(param.editor) + .get(0); + } - /** - * @type {Array} - */ - index: ['name'], + function getIndexedFields(param) { + let fields = $scope.agg.vis.indexPattern.fields.raw; + const fieldTypes = param.filterFieldTypes; - /** - * [group description] - * @type {Array} - */ - initialSet: fields - }); + if (fieldTypes) { + fields = $filter('fieldType')(fields, fieldTypes); + fields = $filter('orderBy')(fields, ['type', 'name']); } + + return new IndexedArray({ + + /** + * @type {Array} + */ + index: ['name'], + + /** + * [group description] + * @type {Array} + */ + initialSet: fields + }); } - }; - }); + } + }; }); diff --git a/src/plugins/kibana/public/visualize/editor/editor.js b/src/plugins/kibana/public/visualize/editor/editor.js index 799c9b93b35982..cf45ddee0c4134 100644 --- a/src/plugins/kibana/public/visualize/editor/editor.js +++ b/src/plugins/kibana/public/visualize/editor/editor.js @@ -14,277 +14,275 @@ import DocTitleProvider from 'ui/doc_title'; import UtilsBrushEventProvider from 'ui/utils/brush_event'; import FilterBarQueryFilterProvider from 'ui/filter_bar/query_filter'; import FilterBarFilterBarClickHandlerProvider from 'ui/filter_bar/filter_bar_click_handler'; -define(function (require) { - - - require('ui/routes') - .when('/visualize/create', { - template: require('plugins/kibana/visualize/editor/editor.html'), - resolve: { - savedVis: function (savedVisualizations, courier, $route, Private) { - const visTypes = Private(RegistryVisTypesProvider); - const visType = _.find(visTypes, {name: $route.current.params.type}); - if (visType.requiresSearch && !$route.current.params.indexPattern && !$route.current.params.savedSearchId) { - throw new Error('You must provide either an indexPattern or a savedSearchId'); - } - - return savedVisualizations.get($route.current.params) - .catch(courier.redirectWhenMissing({ - '*': '/visualize' - })); + + +require('ui/routes') +.when('/visualize/create', { + template: require('plugins/kibana/visualize/editor/editor.html'), + resolve: { + savedVis: function (savedVisualizations, courier, $route, Private) { + const visTypes = Private(RegistryVisTypesProvider); + const visType = _.find(visTypes, {name: $route.current.params.type}); + if (visType.requiresSearch && !$route.current.params.indexPattern && !$route.current.params.savedSearchId) { + throw new Error('You must provide either an indexPattern or a savedSearchId'); } + + return savedVisualizations.get($route.current.params) + .catch(courier.redirectWhenMissing({ + '*': '/visualize' + })); } - }) - .when('/visualize/edit/:id', { - template: require('plugins/kibana/visualize/editor/editor.html'), - resolve: { - savedVis: function (savedVisualizations, courier, $route) { - return savedVisualizations.get($route.current.params.id) - .catch(courier.redirectWhenMissing({ - 'visualization': '/visualize', - 'search': '/settings/objects/savedVisualizations/' + $route.current.params.id, - 'index-pattern': '/settings/objects/savedVisualizations/' + $route.current.params.id, - 'index-pattern-field': '/settings/objects/savedVisualizations/' + $route.current.params.id - })); - } + } +}) +.when('/visualize/edit/:id', { + template: require('plugins/kibana/visualize/editor/editor.html'), + resolve: { + savedVis: function (savedVisualizations, courier, $route) { + return savedVisualizations.get($route.current.params.id) + .catch(courier.redirectWhenMissing({ + 'visualization': '/visualize', + 'search': '/settings/objects/savedVisualizations/' + $route.current.params.id, + 'index-pattern': '/settings/objects/savedVisualizations/' + $route.current.params.id, + 'index-pattern-field': '/settings/objects/savedVisualizations/' + $route.current.params.id + })); } + } +}); + +require('ui/modules') +.get('app/visualize', [ + 'kibana/notify', + 'kibana/courier' +]) +.controller('VisEditor', function ($scope, $route, timefilter, AppState, $location, kbnUrl, $timeout, courier, Private, Promise) { + + const docTitle = Private(DocTitleProvider); + const brushEvent = Private(UtilsBrushEventProvider); + const queryFilter = Private(FilterBarQueryFilterProvider); + const filterBarClickHandler = Private(FilterBarFilterBarClickHandlerProvider); + + const notify = new Notifier({ + location: 'Visualization Editor' }); - require('ui/modules') - .get('app/visualize', [ - 'kibana/notify', - 'kibana/courier' - ]) - .controller('VisEditor', function ($scope, $route, timefilter, AppState, $location, kbnUrl, $timeout, courier, Private, Promise) { + const savedVis = $route.current.locals.savedVis; - const docTitle = Private(DocTitleProvider); - const brushEvent = Private(UtilsBrushEventProvider); - const queryFilter = Private(FilterBarQueryFilterProvider); - const filterBarClickHandler = Private(FilterBarFilterBarClickHandlerProvider); + const vis = savedVis.vis; + const editableVis = vis.createEditableVis(); + vis.requesting = function () { + const requesting = editableVis.requesting; + requesting.call(vis); + requesting.call(editableVis); + }; - const notify = new Notifier({ - location: 'Visualization Editor' - }); + const searchSource = savedVis.searchSource; - const savedVis = $route.current.locals.savedVis; + // config panel templates + const configTemplate = new ConfigTemplate({ + save: require('plugins/kibana/visualize/editor/panels/save.html'), + load: require('plugins/kibana/visualize/editor/panels/load.html'), + share: require('plugins/kibana/visualize/editor/panels/share.html'), + }); - const vis = savedVis.vis; - const editableVis = vis.createEditableVis(); - vis.requesting = function () { - const requesting = editableVis.requesting; - requesting.call(vis); - requesting.call(editableVis); + if (savedVis.id) { + docTitle.change(savedVis.title); + } + + let $state = $scope.$state = (function initState() { + const savedVisState = vis.getState(); + const stateDefaults = { + uiState: savedVis.uiStateJSON ? JSON.parse(savedVis.uiStateJSON) : {}, + linked: !!savedVis.savedSearchId, + query: searchSource.getOwn('query') || {query_string: {query: '*'}}, + filters: searchSource.getOwn('filter') || [], + vis: savedVisState }; - const searchSource = savedVis.searchSource; - - // config panel templates - const configTemplate = new ConfigTemplate({ - save: require('plugins/kibana/visualize/editor/panels/save.html'), - load: require('plugins/kibana/visualize/editor/panels/load.html'), - share: require('plugins/kibana/visualize/editor/panels/share.html'), - }); + $state = new AppState(stateDefaults); - if (savedVis.id) { - docTitle.change(savedVis.title); + if (!angular.equals($state.vis, savedVisState)) { + Promise.try(function () { + vis.setState($state.vis); + editableVis.setState($state.vis); + }) + .catch(courier.redirectWhenMissing({ + 'index-pattern-field': '/visualize' + })); } - let $state = $scope.$state = (function initState() { - const savedVisState = vis.getState(); - const stateDefaults = { - uiState: savedVis.uiStateJSON ? JSON.parse(savedVis.uiStateJSON) : {}, - linked: !!savedVis.savedSearchId, - query: searchSource.getOwn('query') || {query_string: {query: '*'}}, - filters: searchSource.getOwn('filter') || [], - vis: savedVisState - }; - - $state = new AppState(stateDefaults); - - if (!angular.equals($state.vis, savedVisState)) { - Promise.try(function () { - vis.setState($state.vis); - editableVis.setState($state.vis); - }) - .catch(courier.redirectWhenMissing({ - 'index-pattern-field': '/visualize' - })); + return $state; + }()); + + function init() { + // export some objects + $scope.savedVis = savedVis; + $scope.searchSource = searchSource; + $scope.vis = vis; + $scope.indexPattern = vis.indexPattern; + $scope.editableVis = editableVis; + $scope.state = $state; + $scope.uiState = $state.makeStateful('uiState'); + + $scope.conf = _.pick($scope, 'doSave', 'savedVis', 'shareData'); + $scope.configTemplate = configTemplate; + + editableVis.listeners.click = vis.listeners.click = filterBarClickHandler($state); + editableVis.listeners.brush = vis.listeners.brush = brushEvent; + + // track state of editable vis vs. "actual" vis + $scope.stageEditableVis = transferVisState(editableVis, vis, true); + $scope.resetEditableVis = transferVisState(vis, editableVis); + $scope.$watch(function () { + return editableVis.getState(); + }, function (newState) { + editableVis.dirty = !angular.equals(newState, vis.getState()); + + $scope.responseValueAggs = null; + try { + $scope.responseValueAggs = editableVis.aggs.getResponseAggs().filter(function (agg) { + return _.get(agg, 'schema.group') === 'metrics'; + }); } + // this can fail when the agg.type is changed but the + // params have not been set yet. watcher will trigger again + // when the params update + catch (e) {} // eslint-disable-line no-empty + }, true); - return $state; - }()); - - function init() { - // export some objects - $scope.savedVis = savedVis; - $scope.searchSource = searchSource; - $scope.vis = vis; - $scope.indexPattern = vis.indexPattern; - $scope.editableVis = editableVis; - $scope.state = $state; - $scope.uiState = $state.makeStateful('uiState'); - - $scope.conf = _.pick($scope, 'doSave', 'savedVis', 'shareData'); - $scope.configTemplate = configTemplate; - - editableVis.listeners.click = vis.listeners.click = filterBarClickHandler($state); - editableVis.listeners.brush = vis.listeners.brush = brushEvent; - - // track state of editable vis vs. "actual" vis - $scope.stageEditableVis = transferVisState(editableVis, vis, true); - $scope.resetEditableVis = transferVisState(vis, editableVis); - $scope.$watch(function () { - return editableVis.getState(); - }, function (newState) { - editableVis.dirty = !angular.equals(newState, vis.getState()); - - $scope.responseValueAggs = null; - try { - $scope.responseValueAggs = editableVis.aggs.getResponseAggs().filter(function (agg) { - return _.get(agg, 'schema.group') === 'metrics'; - }); - } - // this can fail when the agg.type is changed but the - // params have not been set yet. watcher will trigger again - // when the params update - catch (e) {} // eslint-disable-line no-empty - }, true); - - $state.replace(); - - $scope.$watch('searchSource.get("index").timeFieldName', function (timeField) { - timefilter.enabled = !!timeField; - }); - - // update the searchSource when filters update - $scope.$listen(queryFilter, 'update', function () { - searchSource.set('filter', queryFilter.getFilters()); - $state.save(); - }); - - // fetch data when filters fire fetch event - $scope.$listen(queryFilter, 'fetch', $scope.fetch); - - - $scope.$listen($state, 'fetch_with_changes', function (keys) { - if (_.contains(keys, 'linked') && $state.linked === true) { - // abort and reload route - $route.reload(); - return; - } - - if (_.contains(keys, 'vis')) { - $state.vis.listeners = _.defaults($state.vis.listeners || {}, vis.listeners); - - // only update when we need to, otherwise colors change and we - // risk loosing an in-progress result - vis.setState($state.vis); - editableVis.setState($state.vis); - } - - // we use state to track query, must write before we fetch - if ($state.query && !$state.linked) { - searchSource.set('query', $state.query); - } else { - searchSource.set('query', null); - } - - if (_.isEqual(keys, ['filters'])) { - // updates will happen in filter watcher if needed - return; - } - - $scope.fetch(); - }); - - // Without this manual emission, we'd miss filters and queries that were on the $state initially - $state.emit('fetch_with_changes'); - - $scope.$listen(timefilter, 'fetch', _.bindKey($scope, 'fetch')); - - $scope.$on('ready:vis', function () { - $scope.$emit('application.load'); - }); - - $scope.$on('$destroy', function () { - savedVis.destroy(); - }); - } + $state.replace(); - $scope.fetch = function () { - $state.save(); + $scope.$watch('searchSource.get("index").timeFieldName', function (timeField) { + timefilter.enabled = !!timeField; + }); + + // update the searchSource when filters update + $scope.$listen(queryFilter, 'update', function () { searchSource.set('filter', queryFilter.getFilters()); - if (!$state.linked) searchSource.set('query', $state.query); - if ($scope.vis.type.requiresSearch) { - courier.fetch(); + $state.save(); + }); + + // fetch data when filters fire fetch event + $scope.$listen(queryFilter, 'fetch', $scope.fetch); + + + $scope.$listen($state, 'fetch_with_changes', function (keys) { + if (_.contains(keys, 'linked') && $state.linked === true) { + // abort and reload route + $route.reload(); + return; } - }; - $scope.startOver = function () { - kbnUrl.change('/visualize', {}); - }; + if (_.contains(keys, 'vis')) { + $state.vis.listeners = _.defaults($state.vis.listeners || {}, vis.listeners); - $scope.doSave = function () { - savedVis.id = savedVis.title; - savedVis.visState = $state.vis; - savedVis.uiStateJSON = angular.toJson($scope.uiState.getChanges()); - - savedVis.save() - .then(function (id) { - configTemplate.close('save'); - - if (id) { - notify.info('Saved Visualization "' + savedVis.title + '"'); - if (savedVis.id === $route.current.params.id) return; - kbnUrl.change('/visualize/edit/{{id}}', {id: savedVis.id}); - } - }, notify.fatal); - }; + // only update when we need to, otherwise colors change and we + // risk loosing an in-progress result + vis.setState($state.vis); + editableVis.setState($state.vis); + } - $scope.unlink = function () { - if (!$state.linked) return; + // we use state to track query, must write before we fetch + if ($state.query && !$state.linked) { + searchSource.set('query', $state.query); + } else { + searchSource.set('query', null); + } - $state.linked = false; - const parent = searchSource.getParent(true); - const parentsParent = parent.getParent(true); + if (_.isEqual(keys, ['filters'])) { + // updates will happen in filter watcher if needed + return; + } - // display unlinking for 2 seconds, unless it is double clicked - $scope.unlinking = $timeout($scope.clearUnlinking, 2000); + $scope.fetch(); + }); - delete savedVis.savedSearchId; - parent.set('filter', _.union(searchSource.getOwn('filter'), parent.getOwn('filter'))); + // Without this manual emission, we'd miss filters and queries that were on the $state initially + $state.emit('fetch_with_changes'); - // copy over all state except "aggs" and filter, which is already copied - _(parent.toJSON()) - .omit('aggs') - .forOwn(function (val, key) { - searchSource.set(key, val); - }) - .commit(); + $scope.$listen(timefilter, 'fetch', _.bindKey($scope, 'fetch')); - $state.query = searchSource.get('query'); - $state.filters = searchSource.get('filter'); - searchSource.inherits(parentsParent); - }; + $scope.$on('ready:vis', function () { + $scope.$emit('application.load'); + }); - $scope.clearUnlinking = function () { - if ($scope.unlinking) { - $timeout.cancel($scope.unlinking); - $scope.unlinking = null; - } - }; + $scope.$on('$destroy', function () { + savedVis.destroy(); + }); + } + + $scope.fetch = function () { + $state.save(); + searchSource.set('filter', queryFilter.getFilters()); + if (!$state.linked) searchSource.set('query', $state.query); + if ($scope.vis.type.requiresSearch) { + courier.fetch(); + } + }; - function transferVisState(fromVis, toVis, fetch) { - return function () { - toVis.setState(fromVis.getState()); - editableVis.dirty = false; - $state.vis = vis.getState(); - $state.save(); + $scope.startOver = function () { + kbnUrl.change('/visualize', {}); + }; - if (fetch) $scope.fetch(); - }; + $scope.doSave = function () { + savedVis.id = savedVis.title; + savedVis.visState = $state.vis; + savedVis.uiStateJSON = angular.toJson($scope.uiState.getChanges()); + + savedVis.save() + .then(function (id) { + configTemplate.close('save'); + + if (id) { + notify.info('Saved Visualization "' + savedVis.title + '"'); + if (savedVis.id === $route.current.params.id) return; + kbnUrl.change('/visualize/edit/{{id}}', {id: savedVis.id}); + } + }, notify.fatal); + }; + + $scope.unlink = function () { + if (!$state.linked) return; + + $state.linked = false; + const parent = searchSource.getParent(true); + const parentsParent = parent.getParent(true); + + // display unlinking for 2 seconds, unless it is double clicked + $scope.unlinking = $timeout($scope.clearUnlinking, 2000); + + delete savedVis.savedSearchId; + parent.set('filter', _.union(searchSource.getOwn('filter'), parent.getOwn('filter'))); + + // copy over all state except "aggs" and filter, which is already copied + _(parent.toJSON()) + .omit('aggs') + .forOwn(function (val, key) { + searchSource.set(key, val); + }) + .commit(); + + $state.query = searchSource.get('query'); + $state.filters = searchSource.get('filter'); + searchSource.inherits(parentsParent); + }; + + $scope.clearUnlinking = function () { + if ($scope.unlinking) { + $timeout.cancel($scope.unlinking); + $scope.unlinking = null; } + }; - init(); - }); + function transferVisState(fromVis, toVis, fetch) { + return function () { + toVis.setState(fromVis.getState()); + editableVis.dirty = false; + $state.vis = vis.getState(); + $state.save(); + + if (fetch) $scope.fetch(); + }; + } + + init(); }); diff --git a/src/plugins/kibana/public/visualize/editor/nesting_indicator.js b/src/plugins/kibana/public/visualize/editor/nesting_indicator.js index 01863706507783..d258ad8e37f8a5 100644 --- a/src/plugins/kibana/public/visualize/editor/nesting_indicator.js +++ b/src/plugins/kibana/public/visualize/editor/nesting_indicator.js @@ -1,33 +1,31 @@ import _ from 'lodash'; import $ from 'jquery'; import VislibComponentsColorColorPaletteProvider from 'ui/vislib/components/color/color_palette'; -define(function (require) { - require('ui/modules') - .get('kibana') - .directive('nestingIndicator', function ($rootScope, $parse, Private) { - const getColors = Private(VislibComponentsColorColorPaletteProvider); +require('ui/modules') +.get('kibana') +.directive('nestingIndicator', function ($rootScope, $parse, Private) { + const getColors = Private(VislibComponentsColorColorPaletteProvider); - return { - restrict: 'E', - scope: { - item: '=', - list: '=' - }, - link: function ($scope, $el, attr) { - $scope.$watchCollection('list', function () { - if (!$scope.list || !$scope.item) return; + return { + restrict: 'E', + scope: { + item: '=', + list: '=' + }, + link: function ($scope, $el, attr) { + $scope.$watchCollection('list', function () { + if (!$scope.list || !$scope.item) return; - const item = $scope.item; - const index = $scope.list.indexOf($scope.item); - const bars = $scope.list.slice(0, index + 1); - const colors = getColors(bars.length); + const item = $scope.item; + const index = $scope.list.indexOf($scope.item); + const bars = $scope.list.slice(0, index + 1); + const colors = getColors(bars.length); - $el.html(bars.map(function (bar, i) { - return $(document.createElement('span')) - .css('background-color', colors[i]); - })); - }); - } - }; - }); + $el.html(bars.map(function (bar, i) { + return $(document.createElement('span')) + .css('background-color', colors[i]); + })); + }); + } + }; }); diff --git a/src/plugins/kibana/public/visualize/editor/sidebar.js b/src/plugins/kibana/public/visualize/editor/sidebar.js index 0c403ed30c9a6c..89deef582c3af5 100644 --- a/src/plugins/kibana/public/visualize/editor/sidebar.js +++ b/src/plugins/kibana/public/visualize/editor/sidebar.js @@ -1,22 +1,20 @@ import _ from 'lodash'; import 'plugins/kibana/visualize/editor/agg_group'; import 'plugins/kibana/visualize/editor/vis_options'; -define(function (require) { - require('ui/modules') - .get('app/visualize') - .directive('visEditorSidebar', function () { +require('ui/modules') +.get('app/visualize') +.directive('visEditorSidebar', function () { - return { - restrict: 'E', - template: require('plugins/kibana/visualize/editor/sidebar.html'), - scope: true, - controllerAs: 'sidebar', - controller: function ($scope) { - $scope.$bind('vis', 'editableVis'); - $scope.$bind('outputVis', 'vis'); - this.section = _.get($scope, 'vis.type.requiresSearch') ? 'data' : 'options'; - } - }; - }); + return { + restrict: 'E', + template: require('plugins/kibana/visualize/editor/sidebar.html'), + scope: true, + controllerAs: 'sidebar', + controller: function ($scope) { + $scope.$bind('vis', 'editableVis'); + $scope.$bind('outputVis', 'vis'); + this.section = _.get($scope, 'vis.type.requiresSearch') ? 'data' : 'options'; + } + }; }); diff --git a/src/plugins/kibana/public/visualize/editor/vis_options.js b/src/plugins/kibana/public/visualize/editor/vis_options.js index 2daccc18512677..d41706cd82f050 100644 --- a/src/plugins/kibana/public/visualize/editor/vis_options.js +++ b/src/plugins/kibana/public/visualize/editor/vis_options.js @@ -1,25 +1,23 @@ import _ from 'lodash'; import $ from 'jquery'; -define(function (require) { - require('ui/modules') - .get('app/visualize') - .directive('visEditorVisOptions', function (Private, $timeout, $compile) { - return { - restrict: 'E', - template: require('plugins/kibana/visualize/editor/vis_options.html'), - scope: { - vis: '=', - }, - link: function ($scope, $el) { - const $optionContainer = $el.find('.visualization-options'); - const $editor = $compile($scope.vis.type.params.editor)($scope); - $optionContainer.append($editor); +require('ui/modules') +.get('app/visualize') +.directive('visEditorVisOptions', function (Private, $timeout, $compile) { + return { + restrict: 'E', + template: require('plugins/kibana/visualize/editor/vis_options.html'), + scope: { + vis: '=', + }, + link: function ($scope, $el) { + const $optionContainer = $el.find('.visualization-options'); + const $editor = $compile($scope.vis.type.params.editor)($scope); + $optionContainer.append($editor); - $scope.$watch('vis.type.schemas.all.length', function (len) { - $scope.alwaysShowOptions = len === 0; - }); - } - }; - }); + $scope.$watch('vis.type.schemas.all.length', function (len) { + $scope.alwaysShowOptions = len === 0; + }); + } + }; }); diff --git a/src/plugins/kibana/public/visualize/index.js b/src/plugins/kibana/public/visualize/index.js index ae3b6734a7594c..8e9f3924b9cad5 100644 --- a/src/plugins/kibana/public/visualize/index.js +++ b/src/plugins/kibana/public/visualize/index.js @@ -13,17 +13,15 @@ import 'plugins/kibana/visualize/editor/sidebar'; import 'plugins/kibana/visualize/editor/vis_options'; import 'plugins/kibana/visualize/saved_visualizations/_saved_vis'; import 'plugins/kibana/visualize/saved_visualizations/saved_visualizations'; -define(function (require) { - require('ui/routes') - .when('/visualize', { - redirectTo: '/visualize/step/1' - }); +require('ui/routes') +.when('/visualize', { + redirectTo: '/visualize/step/1' +}); - // preloading +// preloading - require('ui/saved_objects/saved_object_registry') - .register(require('plugins/kibana/visualize/saved_visualizations/saved_visualization_register')); +require('ui/saved_objects/saved_object_registry') +.register(require('plugins/kibana/visualize/saved_visualizations/saved_visualization_register')); -}); diff --git a/src/plugins/kibana/public/visualize/saved_visualizations/_saved_vis.js b/src/plugins/kibana/public/visualize/saved_visualizations/_saved_vis.js index 38e841e1f5c698..a15f72bb496a85 100644 --- a/src/plugins/kibana/public/visualize/saved_visualizations/_saved_vis.js +++ b/src/plugins/kibana/public/visualize/saved_visualizations/_saved_vis.js @@ -1,131 +1,129 @@ import _ from 'lodash'; import VisProvider from 'ui/Vis'; -define(function (require) { - require('ui/modules') - .get('app/visualize') - .factory('SavedVis', function (config, $injector, courier, Promise, savedSearches, Private, Notifier) { - const Vis = Private(VisProvider); - - const notify = new Notifier({ - location: 'SavedVis' - }); +require('ui/modules') +.get('app/visualize') +.factory('SavedVis', function (config, $injector, courier, Promise, savedSearches, Private, Notifier) { + const Vis = Private(VisProvider); - _.class(SavedVis).inherits(courier.SavedObject); - function SavedVis(opts) { - const self = this; - opts = opts || {}; - if (typeof opts !== 'object') opts = { id: opts }; - - SavedVis.Super.call(self, { - type: SavedVis.type, - mapping: SavedVis.mapping, - searchSource: SavedVis.searchSource, - - id: opts.id, - indexPattern: opts.indexPattern, - defaults: { - title: 'New Visualization', - visState: (function () { - if (!opts.type) return null; - const def = {}; - def.type = opts.type; - return def; - }()), - uiStateJSON: '{}', - description: '', - savedSearchId: opts.savedSearchId, - version: 1 - }, - - afterESResp: this._afterEsResp - }); - } - - SavedVis.type = 'visualization'; + const notify = new Notifier({ + location: 'SavedVis' + }); - SavedVis.mapping = { - title: 'string', - visState: 'json', - uiStateJSON: 'string', - description: 'string', - savedSearchId: 'string', - version: 'integer' - }; + _.class(SavedVis).inherits(courier.SavedObject); + function SavedVis(opts) { + const self = this; + opts = opts || {}; + if (typeof opts !== 'object') opts = { id: opts }; + + SavedVis.Super.call(self, { + type: SavedVis.type, + mapping: SavedVis.mapping, + searchSource: SavedVis.searchSource, + + id: opts.id, + indexPattern: opts.indexPattern, + defaults: { + title: 'New Visualization', + visState: (function () { + if (!opts.type) return null; + const def = {}; + def.type = opts.type; + return def; + }()), + uiStateJSON: '{}', + description: '', + savedSearchId: opts.savedSearchId, + version: 1 + }, + + afterESResp: this._afterEsResp + }); + } + + SavedVis.type = 'visualization'; + + SavedVis.mapping = { + title: 'string', + visState: 'json', + uiStateJSON: 'string', + description: 'string', + savedSearchId: 'string', + version: 'integer' + }; + + SavedVis.searchSource = true; + + SavedVis.prototype._afterEsResp = function () { + const self = this; + + return self._getLinkedSavedSearch() + .then(function () { + self.searchSource.size(0); + + return self.vis ? self._updateVis() : self._createVis(); + }) + .then(function (vis) { + self.searchSource.aggs(function () { + self.vis.requesting(); + return self.vis.aggs.toDsl(); + }); - SavedVis.searchSource = true; + return self; + }); + }; - SavedVis.prototype._afterEsResp = function () { - const self = this; + SavedVis.prototype._getLinkedSavedSearch = Promise.method(function () { + const self = this; + const linkedSearch = !!self.savedSearchId; + const current = self.savedSearch; - return self._getLinkedSavedSearch() - .then(function () { - self.searchSource.size(0); + if (linkedSearch && current && current.id === self.savedSearchId) { + return; + } - return self.vis ? self._updateVis() : self._createVis(); - }) - .then(function (vis) { - self.searchSource.aggs(function () { - self.vis.requesting(); - return self.vis.aggs.toDsl(); - }); + if (self.savedSearch) { + self.searchSource.inherits(self.savedSearch.searchSource.getParent()); + self.savedSearch.destroy(); + self.savedSearch = null; + } - return self; + if (linkedSearch) { + return savedSearches.get(self.savedSearchId) + .then(function (savedSearch) { + self.savedSearch = savedSearch; + self.searchSource.inherits(self.savedSearch.searchSource); }); - }; - - SavedVis.prototype._getLinkedSavedSearch = Promise.method(function () { - const self = this; - const linkedSearch = !!self.savedSearchId; - const current = self.savedSearch; - - if (linkedSearch && current && current.id === self.savedSearchId) { - return; - } - - if (self.savedSearch) { - self.searchSource.inherits(self.savedSearch.searchSource.getParent()); - self.savedSearch.destroy(); - self.savedSearch = null; - } - - if (linkedSearch) { - return savedSearches.get(self.savedSearchId) - .then(function (savedSearch) { - self.savedSearch = savedSearch; - self.searchSource.inherits(self.savedSearch.searchSource); - }); - } - }); + } + }); - SavedVis.prototype._createVis = function () { - const self = this; + SavedVis.prototype._createVis = function () { + const self = this; - if (self.stateJSON) { - self.visState = Vis.convertOldState(self.typeName, JSON.parse(self.stateJSON)); - } + if (self.stateJSON) { + self.visState = Vis.convertOldState(self.typeName, JSON.parse(self.stateJSON)); + } - // visState doesn't yet exist when importing a visualization, so we can't - // assume that exists at this point. If it does exist, then we're not - // importing a visualization, so we want to sync the title. - if (self.visState) { - self.visState.title = self.title; - } - self.vis = new Vis( - self.searchSource.get('index'), - self.visState - ); + // visState doesn't yet exist when importing a visualization, so we can't + // assume that exists at this point. If it does exist, then we're not + // importing a visualization, so we want to sync the title. + if (self.visState) { + self.visState.title = self.title; + } + self.vis = new Vis( + self.searchSource.get('index'), + self.visState + ); - return self.vis; - }; + return self.vis; + }; - SavedVis.prototype._updateVis = function () { - const self = this; + SavedVis.prototype._updateVis = function () { + const self = this; - self.vis.indexPattern = self.searchSource.get('index'); - self.visState.title = self.title; - self.vis.setState(self.visState); - }; + self.vis.indexPattern = self.searchSource.get('index'); + self.visState.title = self.title; + self.vis.setState(self.visState); + }; - return SavedVis; - }); + return SavedVis; }); diff --git a/src/plugins/kibana/public/visualize/saved_visualizations/saved_visualization_register.js b/src/plugins/kibana/public/visualize/saved_visualizations/saved_visualization_register.js index a6d59dda16fed9..36d563ca69b08a 100644 --- a/src/plugins/kibana/public/visualize/saved_visualizations/saved_visualization_register.js +++ b/src/plugins/kibana/public/visualize/saved_visualizations/saved_visualization_register.js @@ -1,5 +1,3 @@ -define(function (require) { - return function savedVisualizationFn(savedVisualizations) { - return savedVisualizations; - }; -}); +export default function savedVisualizationFn(savedVisualizations) { + return savedVisualizations; +}; diff --git a/src/plugins/kibana/public/visualize/saved_visualizations/saved_visualizations.js b/src/plugins/kibana/public/visualize/saved_visualizations/saved_visualizations.js index 25bacdd12a50f2..fd68778afb9729 100644 --- a/src/plugins/kibana/public/visualize/saved_visualizations/saved_visualizations.js +++ b/src/plugins/kibana/public/visualize/saved_visualizations/saved_visualizations.js @@ -2,110 +2,108 @@ import _ from 'lodash'; import Scanner from 'ui/utils/scanner'; import 'plugins/kibana/visualize/saved_visualizations/_saved_vis'; import RegistryVisTypesProvider from 'ui/registry/vis_types'; -define(function (require) { - const app = require('ui/modules').get('app/visualize'); +const app = require('ui/modules').get('app/visualize'); - // Register this service with the saved object registry so it can be - // edited by the object editor. - require('plugins/kibana/settings/saved_object_registry').register({ - service: 'savedVisualizations', - title: 'visualizations' +// Register this service with the saved object registry so it can be +// edited by the object editor. +require('plugins/kibana/settings/saved_object_registry').register({ + service: 'savedVisualizations', + title: 'visualizations' +}); + +app.service('savedVisualizations', function (Promise, es, kbnIndex, SavedVis, Private, Notifier, kbnUrl) { + const visTypes = Private(RegistryVisTypesProvider); + + const scanner = new Scanner(es, { + index: kbnIndex, + type: 'visualization' }); - app.service('savedVisualizations', function (Promise, es, kbnIndex, SavedVis, Private, Notifier, kbnUrl) { - const visTypes = Private(RegistryVisTypesProvider); + const notify = new Notifier({ + location: 'Saved Visualization Service' + }); - const scanner = new Scanner(es, { - index: kbnIndex, - type: 'visualization' - }); + this.type = SavedVis.type; + this.Class = SavedVis; - const notify = new Notifier({ - location: 'Saved Visualization Service' - }); + this.loaderProperties = { + name: 'visualizations', + noun: 'Visualization', + nouns: 'visualizations' + }; - this.type = SavedVis.type; - this.Class = SavedVis; - - this.loaderProperties = { - name: 'visualizations', - noun: 'Visualization', - nouns: 'visualizations' - }; - - this.get = function (id) { - return (new SavedVis(id)).init(); - }; - - this.urlFor = function (id) { - return kbnUrl.eval('#/visualize/edit/{{id}}', {id: id}); - }; - - this.delete = function (ids) { - ids = !_.isArray(ids) ? [ids] : ids; - return Promise.map(ids, function (id) { - return (new SavedVis(id)).delete(); - }); - }; - - this.scanAll = function (queryString, pageSize = 1000) { - return scanner.scanAndMap(queryString, { - pageSize, - docCount: Infinity - }, (hit) => this.mapHits(hit)); - }; - - this.mapHits = function (hit) { - const source = hit._source; - source.id = hit._id; - source.url = this.urlFor(hit._id); - - let typeName = source.typeName; - if (source.visState) { - try { typeName = JSON.parse(source.visState).type; } - catch (e) { /* missing typename handled below */ } // eslint-disable-line no-empty - } - - if (!typeName || !visTypes.byName[typeName]) { - if (!typeName) notify.error('Visualization type is missing. Please add a type to this visualization.', hit); - else notify.error('Visualization type of "' + typeName + '" is invalid. Please change to a valid type.', hit); - return kbnUrl.redirect('/settings/objects/savedVisualizations/{{id}}', {id: source.id}); - } - - source.type = visTypes.byName[typeName]; - source.icon = source.type.icon; - return source; - }; - - this.find = function (searchString, size = 100) { - let body; - if (searchString) { - body = { - query: { - simple_query_string: { - query: searchString + '*', - fields: ['title^3', 'description'], - default_operator: 'AND' - } + this.get = function (id) { + return (new SavedVis(id)).init(); + }; + + this.urlFor = function (id) { + return kbnUrl.eval('#/visualize/edit/{{id}}', {id: id}); + }; + + this.delete = function (ids) { + ids = !_.isArray(ids) ? [ids] : ids; + return Promise.map(ids, function (id) { + return (new SavedVis(id)).delete(); + }); + }; + + this.scanAll = function (queryString, pageSize = 1000) { + return scanner.scanAndMap(queryString, { + pageSize, + docCount: Infinity + }, (hit) => this.mapHits(hit)); + }; + + this.mapHits = function (hit) { + const source = hit._source; + source.id = hit._id; + source.url = this.urlFor(hit._id); + + let typeName = source.typeName; + if (source.visState) { + try { typeName = JSON.parse(source.visState).type; } + catch (e) { /* missing typename handled below */ } // eslint-disable-line no-empty + } + + if (!typeName || !visTypes.byName[typeName]) { + if (!typeName) notify.error('Visualization type is missing. Please add a type to this visualization.', hit); + else notify.error('Visualization type of "' + typeName + '" is invalid. Please change to a valid type.', hit); + return kbnUrl.redirect('/settings/objects/savedVisualizations/{{id}}', {id: source.id}); + } + + source.type = visTypes.byName[typeName]; + source.icon = source.type.icon; + return source; + }; + + this.find = function (searchString, size = 100) { + let body; + if (searchString) { + body = { + query: { + simple_query_string: { + query: searchString + '*', + fields: ['title^3', 'description'], + default_operator: 'AND' } - }; - } else { - body = { query: {match_all: {}}}; - } - - return es.search({ - index: kbnIndex, - type: 'visualization', - body: body, - size: size - }) - .then((resp) => { - return { - total: resp.hits.total, - hits: resp.hits.hits.map((hit) => this.mapHits(hit)) - }; - }); - }; - }); + } + }; + } else { + body = { query: {match_all: {}}}; + } + + return es.search({ + index: kbnIndex, + type: 'visualization', + body: body, + size: size + }) + .then((resp) => { + return { + total: resp.hits.total, + hits: resp.hits.hits.map((hit) => this.mapHits(hit)) + }; + }); + }; }); diff --git a/src/plugins/kibana/public/visualize/wizard/wizard.js b/src/plugins/kibana/public/visualize/wizard/wizard.js index 77e4373e2a9269..7601fd5f24c611 100644 --- a/src/plugins/kibana/public/visualize/wizard/wizard.js +++ b/src/plugins/kibana/public/visualize/wizard/wizard.js @@ -4,69 +4,67 @@ import 'ui/directives/saved_object_finder'; import 'plugins/kibana/discover/saved_searches/saved_searches'; import routes from 'ui/routes'; import RegistryVisTypesProvider from 'ui/registry/vis_types'; -define(function (require) { - const templateStep = function (num, txt) { - return '
      ' + txt + '
      '; - }; +const templateStep = function (num, txt) { + return '
      ' + txt + '
      '; +}; - const module = require('ui/modules').get('app/visualize', ['kibana/courier']); +const module = require('ui/modules').get('app/visualize', ['kibana/courier']); - /******** - /** Wizard Step 1 - /********/ - routes.when('/visualize/step/1', { - template: templateStep(1, require('plugins/kibana/visualize/wizard/step_1.html')) - }); +/******** +/** Wizard Step 1 +/********/ +routes.when('/visualize/step/1', { + template: templateStep(1, require('plugins/kibana/visualize/wizard/step_1.html')) +}); - module.controller('VisualizeWizardStep1', function ($scope, $route, $location, timefilter, Private) { - timefilter.enabled = false; +module.controller('VisualizeWizardStep1', function ($scope, $route, $location, timefilter, Private) { + timefilter.enabled = false; - $scope.visTypes = Private(RegistryVisTypesProvider); - $scope.visTypeUrl = function (visType) { - if (!visType.requiresSearch) return '#/visualize/create?type=' + encodeURIComponent(visType.name); - else return '#/visualize/step/2?type=' + encodeURIComponent(visType.name); - }; - }); + $scope.visTypes = Private(RegistryVisTypesProvider); + $scope.visTypeUrl = function (visType) { + if (!visType.requiresSearch) return '#/visualize/create?type=' + encodeURIComponent(visType.name); + else return '#/visualize/step/2?type=' + encodeURIComponent(visType.name); + }; +}); - /******** - /** Wizard Step 2 - /********/ - routes.when('/visualize/step/2', { - template: templateStep(2, require('plugins/kibana/visualize/wizard/step_2.html')), - resolve: { - indexPatternIds: function (courier) { - return courier.indexPatterns.getIds(); - } +/******** +/** Wizard Step 2 +/********/ +routes.when('/visualize/step/2', { + template: templateStep(2, require('plugins/kibana/visualize/wizard/step_2.html')), + resolve: { + indexPatternIds: function (courier) { + return courier.indexPatterns.getIds(); } - }); + } +}); - module.controller('VisualizeWizardStep2', function ($route, $scope, $location, timefilter, kbnUrl) { - const type = $route.current.params.type; +module.controller('VisualizeWizardStep2', function ($route, $scope, $location, timefilter, kbnUrl) { + const type = $route.current.params.type; - $scope.step2WithSearchUrl = function (hit) { - return kbnUrl.eval('#/visualize/create?&type={{type}}&savedSearchId={{id}}', {type: type, id: hit.id}); - }; + $scope.step2WithSearchUrl = function (hit) { + return kbnUrl.eval('#/visualize/create?&type={{type}}&savedSearchId={{id}}', {type: type, id: hit.id}); + }; - timefilter.enabled = false; + timefilter.enabled = false; - $scope.indexPattern = { - selection: null, - list: $route.current.locals.indexPatternIds - }; + $scope.indexPattern = { + selection: null, + list: $route.current.locals.indexPatternIds + }; - $scope.$watch('stepTwoMode', function (mode) { - if (mode === 'new') { - if ($scope.indexPattern.list && $scope.indexPattern.list.length === 1) { - $scope.indexPattern.selection = $scope.indexPattern.list[0]; - } + $scope.$watch('stepTwoMode', function (mode) { + if (mode === 'new') { + if ($scope.indexPattern.list && $scope.indexPattern.list.length === 1) { + $scope.indexPattern.selection = $scope.indexPattern.list[0]; } - }); + } + }); - $scope.$watch('indexPattern.selection', function (pattern) { - if (!pattern) return; - kbnUrl.change('/visualize/create?type={{type}}&indexPattern={{pattern}}', {type: type, pattern: pattern}); - }); + $scope.$watch('indexPattern.selection', function (pattern) { + if (!pattern) return; + kbnUrl.change('/visualize/create?type={{type}}&indexPattern={{pattern}}', {type: type, pattern: pattern}); }); }); diff --git a/src/plugins/markdown_vis/public/markdown_vis.js b/src/plugins/markdown_vis/public/markdown_vis.js index 588a16c4ce1532..593a0b06498c20 100644 --- a/src/plugins/markdown_vis/public/markdown_vis.js +++ b/src/plugins/markdown_vis/public/markdown_vis.js @@ -1,32 +1,30 @@ import 'plugins/markdown_vis/markdown_vis.less'; import 'plugins/markdown_vis/markdown_vis_controller'; import TemplateVisTypeTemplateVisTypeProvider from 'ui/template_vis_type/TemplateVisType'; -define(function (require) { - // we need to load the css ourselves +// we need to load the css ourselves - // we also need to load the controller and used by the template +// we also need to load the controller and used by the template - // register the provider with the visTypes registry so that other know it exists - require('ui/registry/vis_types').register(MarkdownVisProvider); +// register the provider with the visTypes registry so that other know it exists +require('ui/registry/vis_types').register(MarkdownVisProvider); - function MarkdownVisProvider(Private) { - const TemplateVisType = Private(TemplateVisTypeTemplateVisTypeProvider); +function MarkdownVisProvider(Private) { + const TemplateVisType = Private(TemplateVisTypeTemplateVisTypeProvider); - // return the visType object, which kibana will use to display and configure new - // Vis object of this type. - return new TemplateVisType({ - name: 'markdown', - title: 'Markdown widget', - icon: 'fa-code', - description: 'Useful for displaying explanations or instructions for dashboards.', - template: require('plugins/markdown_vis/markdown_vis.html'), - params: { - editor: require('plugins/markdown_vis/markdown_vis_params.html') - }, - requiresSearch: false - }); - } + // return the visType object, which kibana will use to display and configure new + // Vis object of this type. + return new TemplateVisType({ + name: 'markdown', + title: 'Markdown widget', + icon: 'fa-code', + description: 'Useful for displaying explanations or instructions for dashboards.', + template: require('plugins/markdown_vis/markdown_vis.html'), + params: { + editor: require('plugins/markdown_vis/markdown_vis_params.html') + }, + requiresSearch: false + }); +} - // export the provider so that the visType can be required with Private() - return MarkdownVisProvider; -}); +// export the provider so that the visType can be required with Private() +export default MarkdownVisProvider; diff --git a/src/plugins/markdown_vis/public/markdown_vis_controller.js b/src/plugins/markdown_vis/public/markdown_vis_controller.js index f67944a135787e..d9b5032bc911f3 100644 --- a/src/plugins/markdown_vis/public/markdown_vis_controller.js +++ b/src/plugins/markdown_vis/public/markdown_vis_controller.js @@ -1,15 +1,13 @@ import marked from 'marked'; -define(function (require) { - marked.setOptions({ - gfm: true, // Github-flavored markdown - sanitize: true // Sanitize HTML tags - }); +marked.setOptions({ + gfm: true, // Github-flavored markdown + sanitize: true // Sanitize HTML tags +}); - const module = require('ui/modules').get('kibana/markdown_vis', ['kibana']); - module.controller('KbnMarkdownVisController', function ($scope, $sce) { - $scope.$watch('vis.params.markdown', function (html) { - if (!html) return; - $scope.html = $sce.trustAsHtml(marked(html)); - }); +const module = require('ui/modules').get('kibana/markdown_vis', ['kibana']); +module.controller('KbnMarkdownVisController', function ($scope, $sce) { + $scope.$watch('vis.params.markdown', function (html) { + if (!html) return; + $scope.html = $sce.trustAsHtml(marked(html)); }); }); diff --git a/src/plugins/metric_vis/public/metric_vis.js b/src/plugins/metric_vis/public/metric_vis.js index 38d9a27fe5956c..1b3678aec69aca 100644 --- a/src/plugins/metric_vis/public/metric_vis.js +++ b/src/plugins/metric_vis/public/metric_vis.js @@ -2,48 +2,46 @@ import 'plugins/metric_vis/metric_vis.less'; import 'plugins/metric_vis/metric_vis_controller'; import TemplateVisTypeTemplateVisTypeProvider from 'ui/template_vis_type/TemplateVisType'; import VisSchemasProvider from 'ui/Vis/Schemas'; -define(function (require) { - // we need to load the css ourselves +// we need to load the css ourselves - // we also need to load the controller and used by the template +// we also need to load the controller and used by the template - // register the provider with the visTypes registry - require('ui/registry/vis_types').register(MetricVisProvider); +// register the provider with the visTypes registry +require('ui/registry/vis_types').register(MetricVisProvider); - function MetricVisProvider(Private) { - const TemplateVisType = Private(TemplateVisTypeTemplateVisTypeProvider); - const Schemas = Private(VisSchemasProvider); +function MetricVisProvider(Private) { + const TemplateVisType = Private(TemplateVisTypeTemplateVisTypeProvider); + const Schemas = Private(VisSchemasProvider); - // return the visType object, which kibana will use to display and configure new - // Vis object of this type. - return new TemplateVisType({ - name: 'metric', - title: 'Metric', - description: 'One big number for all of your one big number needs. Perfect for showing ' + - 'a count of hits, or the exact average a numeric field.', - icon: 'fa-calculator', - template: require('plugins/metric_vis/metric_vis.html'), - params: { - defaults: { - handleNoResults: true, - fontSize: 60 - }, - editor: require('plugins/metric_vis/metric_vis_params.html') + // return the visType object, which kibana will use to display and configure new + // Vis object of this type. + return new TemplateVisType({ + name: 'metric', + title: 'Metric', + description: 'One big number for all of your one big number needs. Perfect for showing ' + + 'a count of hits, or the exact average a numeric field.', + icon: 'fa-calculator', + template: require('plugins/metric_vis/metric_vis.html'), + params: { + defaults: { + handleNoResults: true, + fontSize: 60 }, - schemas: new Schemas([ - { - group: 'metrics', - name: 'metric', - title: 'Metric', - min: 1, - defaults: [ - { type: 'count', schema: 'metric' } - ] - } - ]) - }); - } + editor: require('plugins/metric_vis/metric_vis_params.html') + }, + schemas: new Schemas([ + { + group: 'metrics', + name: 'metric', + title: 'Metric', + min: 1, + defaults: [ + { type: 'count', schema: 'metric' } + ] + } + ]) + }); +} - // export the provider so that the visType can be required with Private() - return MetricVisProvider; -}); +// export the provider so that the visType can be required with Private() +export default MetricVisProvider; diff --git a/src/plugins/metric_vis/public/metric_vis_controller.js b/src/plugins/metric_vis/public/metric_vis_controller.js index 7d57cf1ec1a7a8..e8f6d4aedf6f2c 100644 --- a/src/plugins/metric_vis/public/metric_vis_controller.js +++ b/src/plugins/metric_vis/public/metric_vis_controller.js @@ -1,40 +1,38 @@ import _ from 'lodash'; import AggResponseTabifyTabifyProvider from 'ui/agg_response/tabify/tabify'; -define(function (require) { - // get the kibana/metric_vis module, and make sure that it requires the "kibana" module if it - // didn't already - const module = require('ui/modules').get('kibana/metric_vis', ['kibana']); +// get the kibana/metric_vis module, and make sure that it requires the "kibana" module if it +// didn't already +const module = require('ui/modules').get('kibana/metric_vis', ['kibana']); - module.controller('KbnMetricVisController', function ($scope, Private) { - const tabifyAggResponse = Private(AggResponseTabifyTabifyProvider); +module.controller('KbnMetricVisController', function ($scope, Private) { + const tabifyAggResponse = Private(AggResponseTabifyTabifyProvider); - const metrics = $scope.metrics = []; + const metrics = $scope.metrics = []; - function isInvalid(val) { - return _.isUndefined(val) || _.isNull(val) || _.isNaN(val); - } + function isInvalid(val) { + return _.isUndefined(val) || _.isNull(val) || _.isNaN(val); + } - $scope.processTableGroups = function (tableGroups) { - tableGroups.tables.forEach(function (table) { - table.columns.forEach(function (column, i) { - const fieldFormatter = table.aggConfig(column).fieldFormatter(); - let value = table.rows[0][i]; + $scope.processTableGroups = function (tableGroups) { + tableGroups.tables.forEach(function (table) { + table.columns.forEach(function (column, i) { + const fieldFormatter = table.aggConfig(column).fieldFormatter(); + let value = table.rows[0][i]; - value = isInvalid(value) ? '?' : fieldFormatter(value); + value = isInvalid(value) ? '?' : fieldFormatter(value); - metrics.push({ - label: column.title, - value: value - }); + metrics.push({ + label: column.title, + value: value }); }); - }; - - $scope.$watch('esResponse', function (resp) { - if (resp) { - metrics.length = 0; - $scope.processTableGroups(tabifyAggResponse($scope.vis, resp)); - } }); + }; + + $scope.$watch('esResponse', function (resp) { + if (resp) { + metrics.length = 0; + $scope.processTableGroups(tabifyAggResponse($scope.vis, resp)); + } }); }); diff --git a/src/plugins/spyModes/public/reqRespStatsSpyMode.js b/src/plugins/spyModes/public/reqRespStatsSpyMode.js index 2ffcb614f31cd5..967260c7f2b1b9 100644 --- a/src/plugins/spyModes/public/reqRespStatsSpyMode.js +++ b/src/plugins/spyModes/public/reqRespStatsSpyMode.js @@ -1,59 +1,57 @@ import _ from 'lodash'; import reqRespStatsHTML from 'plugins/spyModes/reqRespStatsSpyMode.html'; -define(function (require) { - const linkReqRespStats = function ($scope, config) { - $scope.$bind('req', 'searchSource.history[searchSource.history.length - 1]'); - $scope.$watchMulti([ - 'req', - 'req.started', - 'req.stopped', - 'searchSource' - ], function () { - if (!$scope.searchSource || !$scope.req) return; +const linkReqRespStats = function ($scope, config) { + $scope.$bind('req', 'searchSource.history[searchSource.history.length - 1]'); + $scope.$watchMulti([ + 'req', + 'req.started', + 'req.stopped', + 'searchSource' + ], function () { + if (!$scope.searchSource || !$scope.req) return; - const req = $scope.req; - const resp = $scope.req.resp; - const stats = $scope.stats = []; + const req = $scope.req; + const resp = $scope.req.resp; + const stats = $scope.stats = []; - if (resp && resp.took != null) stats.push(['Query Duration', resp.took + 'ms']); - if (req && req.ms != null) stats.push(['Request Duration', req.ms + 'ms']); - if (resp && resp.hits) stats.push(['Hits', resp.hits.total]); + if (resp && resp.took != null) stats.push(['Query Duration', resp.took + 'ms']); + if (req && req.ms != null) stats.push(['Request Duration', req.ms + 'ms']); + if (resp && resp.hits) stats.push(['Hits', resp.hits.total]); - if (req.fetchParams) { - if (req.fetchParams.index) stats.push(['Index', req.fetchParams.index]); - if (req.fetchParams.type) stats.push(['Type', req.fetchParams.type]); - if (req.fetchParams.id) stats.push(['Id', req.fetchParams.id]); - } - }); - }; - - require('ui/registry/spy_modes') - .register(function () { - return { - name: 'request', - display: 'Request', - order: 2, - template: reqRespStatsHTML, - link: linkReqRespStats - }; - }) - .register(function () { - return { - name: 'response', - display: 'Response', - order: 3, - template: reqRespStatsHTML, - link: linkReqRespStats - }; - }) - .register(function () { - return { - name: 'stats', - display: 'Statistics', - order: 4, - template: reqRespStatsHTML, - link: linkReqRespStats - }; + if (req.fetchParams) { + if (req.fetchParams.index) stats.push(['Index', req.fetchParams.index]); + if (req.fetchParams.type) stats.push(['Type', req.fetchParams.type]); + if (req.fetchParams.id) stats.push(['Id', req.fetchParams.id]); + } }); +}; + +require('ui/registry/spy_modes') +.register(function () { + return { + name: 'request', + display: 'Request', + order: 2, + template: reqRespStatsHTML, + link: linkReqRespStats + }; +}) +.register(function () { + return { + name: 'response', + display: 'Response', + order: 3, + template: reqRespStatsHTML, + link: linkReqRespStats + }; +}) +.register(function () { + return { + name: 'stats', + display: 'Statistics', + order: 4, + template: reqRespStatsHTML, + link: linkReqRespStats + }; }); diff --git a/src/plugins/spyModes/public/tableSpyMode.js b/src/plugins/spyModes/public/tableSpyMode.js index 1a528b1ed46708..e1f7285b4b856a 100644 --- a/src/plugins/spyModes/public/tableSpyMode.js +++ b/src/plugins/spyModes/public/tableSpyMode.js @@ -2,40 +2,38 @@ import { saveAs } from '@spalger/filesaver'; import _ from 'lodash'; import 'ui/agg_table'; import AggResponseTabifyTabifyProvider from 'ui/agg_response/tabify/tabify'; -define(function (require) { - function VisSpyTableProvider(Notifier, $filter, $rootScope, config, Private) { - const tabifyAggResponse = Private(AggResponseTabifyTabifyProvider); +function VisSpyTableProvider(Notifier, $filter, $rootScope, config, Private) { + const tabifyAggResponse = Private(AggResponseTabifyTabifyProvider); - const PER_PAGE_DEFAULT = 10; + const PER_PAGE_DEFAULT = 10; - return { - name: 'table', - display: 'Table', - order: 1, - template: require('plugins/spyModes/tableSpyMode.html'), - link: function tableLinkFn($scope, $el) { - $rootScope.$watchMulti.call($scope, [ - 'vis', - 'esResp' - ], function () { - if (!$scope.vis || !$scope.esResp) { - $scope.table = null; - } else { - if (!$scope.spy.params.spyPerPage) { - $scope.spy.params.spyPerPage = PER_PAGE_DEFAULT; - } - - $scope.table = tabifyAggResponse($scope.vis, $scope.esResp, { - canSplit: false, - asAggConfigResults: true, - partialRows: true - }); + return { + name: 'table', + display: 'Table', + order: 1, + template: require('plugins/spyModes/tableSpyMode.html'), + link: function tableLinkFn($scope, $el) { + $rootScope.$watchMulti.call($scope, [ + 'vis', + 'esResp' + ], function () { + if (!$scope.vis || !$scope.esResp) { + $scope.table = null; + } else { + if (!$scope.spy.params.spyPerPage) { + $scope.spy.params.spyPerPage = PER_PAGE_DEFAULT; } - }); - } - }; - } - require('ui/registry/spy_modes').register(VisSpyTableProvider); -}); + $scope.table = tabifyAggResponse($scope.vis, $scope.esResp, { + canSplit: false, + asAggConfigResults: true, + partialRows: true + }); + } + }); + } + }; +} + +require('ui/registry/spy_modes').register(VisSpyTableProvider); diff --git a/src/plugins/table_vis/public/table_vis.js b/src/plugins/table_vis/public/table_vis.js index f0ecbf69ae8acc..0b7fbdf8c08572 100644 --- a/src/plugins/table_vis/public/table_vis.js +++ b/src/plugins/table_vis/public/table_vis.js @@ -5,69 +5,67 @@ import 'ui/agg_table'; import 'ui/agg_table/agg_table_group'; import TemplateVisTypeTemplateVisTypeProvider from 'ui/template_vis_type/TemplateVisType'; import VisSchemasProvider from 'ui/Vis/Schemas'; -define(function (require) { - // we need to load the css ourselves +// we need to load the css ourselves - // we also need to load the controller and used by the template +// we also need to load the controller and used by the template - // our params are a bit complex so we will manage them with a directive +// our params are a bit complex so we will manage them with a directive - // require the directives that we use as well +// require the directives that we use as well - // register the provider with the visTypes registry - require('ui/registry/vis_types').register(TableVisTypeProvider); +// register the provider with the visTypes registry +require('ui/registry/vis_types').register(TableVisTypeProvider); - // define the TableVisType - function TableVisTypeProvider(Private) { - const TemplateVisType = Private(TemplateVisTypeTemplateVisTypeProvider); - const Schemas = Private(VisSchemasProvider); +// define the TableVisType +function TableVisTypeProvider(Private) { + const TemplateVisType = Private(TemplateVisTypeTemplateVisTypeProvider); + const Schemas = Private(VisSchemasProvider); - // define the TableVisController which is used in the template - // by angular's ng-controller directive + // define the TableVisController which is used in the template + // by angular's ng-controller directive - // return the visType object, which kibana will use to display and configure new - // Vis object of this type. - return new TemplateVisType({ - name: 'table', - title: 'Data table', - icon: 'fa-table', - description: 'The data table provides a detailed breakdown, in tabular format, of the results of a composed ' + - 'aggregation. Tip, a data table is available from many other charts by clicking grey bar at the bottom of the chart.', - template: require('plugins/table_vis/table_vis.html'), - params: { - defaults: { - perPage: 10, - showPartialRows: false, - showMeticsAtAllLevels: false - }, - editor: '' + // return the visType object, which kibana will use to display and configure new + // Vis object of this type. + return new TemplateVisType({ + name: 'table', + title: 'Data table', + icon: 'fa-table', + description: 'The data table provides a detailed breakdown, in tabular format, of the results of a composed ' + + 'aggregation. Tip, a data table is available from many other charts by clicking grey bar at the bottom of the chart.', + template: require('plugins/table_vis/table_vis.html'), + params: { + defaults: { + perPage: 10, + showPartialRows: false, + showMeticsAtAllLevels: false }, - hierarchicalData: function (vis) { - return Boolean(vis.params.showPartialRows || vis.params.showMeticsAtAllLevels); + editor: '' + }, + hierarchicalData: function (vis) { + return Boolean(vis.params.showPartialRows || vis.params.showMeticsAtAllLevels); + }, + schemas: new Schemas([ + { + group: 'metrics', + name: 'metric', + title: 'Metric', + min: 1, + defaults: [ + { type: 'count', schema: 'metric' } + ] }, - schemas: new Schemas([ - { - group: 'metrics', - name: 'metric', - title: 'Metric', - min: 1, - defaults: [ - { type: 'count', schema: 'metric' } - ] - }, - { - group: 'buckets', - name: 'bucket', - title: 'Split Rows' - }, - { - group: 'buckets', - name: 'split', - title: 'Split Table' - } - ]) - }); - } + { + group: 'buckets', + name: 'bucket', + title: 'Split Rows' + }, + { + group: 'buckets', + name: 'split', + title: 'Split Table' + } + ]) + }); +} - return TableVisTypeProvider; -}); +export default TableVisTypeProvider; diff --git a/src/plugins/table_vis/public/table_vis_controller.js b/src/plugins/table_vis/public/table_vis_controller.js index 8b3540b9ead340..82bb3bb1b6e172 100644 --- a/src/plugins/table_vis/public/table_vis_controller.js +++ b/src/plugins/table_vis/public/table_vis_controller.js @@ -1,40 +1,38 @@ import AggResponseTabifyTabifyProvider from 'ui/agg_response/tabify/tabify'; -define(function (require) { - // get the kibana/table_vis module, and make sure that it requires the "kibana" module if it - // didn't already - const module = require('ui/modules').get('kibana/table_vis', ['kibana']); - - // add a controller to tha module, which will transform the esResponse into a - // tabular format that we can pass to the table directive - module.controller('KbnTableVisController', function ($scope, Private) { - const tabifyAggResponse = Private(AggResponseTabifyTabifyProvider); - - $scope.$watch('esResponse', function (resp, oldResp) { - let tableGroups = $scope.tableGroups = null; - let hasSomeRows = $scope.hasSomeRows = null; - - if (resp) { - const vis = $scope.vis; - const params = vis.params; - - tableGroups = tabifyAggResponse(vis, resp, { - partialRows: params.showPartialRows, - minimalColumns: vis.isHierarchical() && !params.showMeticsAtAllLevels, - asAggConfigResults: true - }); - - hasSomeRows = tableGroups.tables.some(function haveRows(table) { - if (table.tables) return table.tables.some(haveRows); - return table.rows.length > 0; - }); - } - - $scope.hasSomeRows = hasSomeRows; - if (hasSomeRows) { - $scope.tableGroups = tableGroups; - } - }); +// get the kibana/table_vis module, and make sure that it requires the "kibana" module if it +// didn't already +const module = require('ui/modules').get('kibana/table_vis', ['kibana']); + +// add a controller to tha module, which will transform the esResponse into a +// tabular format that we can pass to the table directive +module.controller('KbnTableVisController', function ($scope, Private) { + const tabifyAggResponse = Private(AggResponseTabifyTabifyProvider); + + $scope.$watch('esResponse', function (resp, oldResp) { + let tableGroups = $scope.tableGroups = null; + let hasSomeRows = $scope.hasSomeRows = null; + + if (resp) { + const vis = $scope.vis; + const params = vis.params; + + tableGroups = tabifyAggResponse(vis, resp, { + partialRows: params.showPartialRows, + minimalColumns: vis.isHierarchical() && !params.showMeticsAtAllLevels, + asAggConfigResults: true + }); + + hasSomeRows = tableGroups.tables.some(function haveRows(table) { + if (table.tables) return table.tables.some(haveRows); + return table.rows.length > 0; + }); + } + + $scope.hasSomeRows = hasSomeRows; + if (hasSomeRows) { + $scope.tableGroups = tableGroups; + } }); - }); + diff --git a/src/plugins/table_vis/public/table_vis_params.js b/src/plugins/table_vis/public/table_vis_params.js index ca65aa1f978afe..277704bf6c982c 100644 --- a/src/plugins/table_vis/public/table_vis_params.js +++ b/src/plugins/table_vis/public/table_vis_params.js @@ -1,26 +1,24 @@ import _ from 'lodash'; -define(function (require) { - require('ui/modules').get('kibana/table_vis') - .directive('tableVisParams', function () { - return { - restrict: 'E', - template: require('plugins/table_vis/table_vis_params.html'), - link: function ($scope) { - $scope.$watchMulti([ - 'vis.params.showPartialRows', - 'vis.params.showMeticsAtAllLevels' - ], function () { - if (!$scope.vis) return; +require('ui/modules').get('kibana/table_vis') +.directive('tableVisParams', function () { + return { + restrict: 'E', + template: require('plugins/table_vis/table_vis_params.html'), + link: function ($scope) { + $scope.$watchMulti([ + 'vis.params.showPartialRows', + 'vis.params.showMeticsAtAllLevels' + ], function () { + if (!$scope.vis) return; - const params = $scope.vis.params; - if (params.showPartialRows || params.showMeticsAtAllLevels) { - $scope.metricsAtAllLevels = true; - } else { - $scope.metricsAtAllLevels = false; - } - }); - } - }; - }); + const params = $scope.vis.params; + if (params.showPartialRows || params.showMeticsAtAllLevels) { + $scope.metricsAtAllLevels = true; + } else { + $scope.metricsAtAllLevels = false; + } + }); + } + }; }); diff --git a/src/testUtils/simulateKeys.js b/src/testUtils/simulateKeys.js index 2a3d71f78c4ea2..0eb8c5d7a79b3a 100644 --- a/src/testUtils/simulateKeys.js +++ b/src/testUtils/simulateKeys.js @@ -2,105 +2,103 @@ import $ from 'jquery'; import _ from 'lodash'; import Promise from 'bluebird'; import keyMap from 'ui/utils/key_map'; -define(function (require) { - var reverseKeyMap = _.mapValues(_.invert(keyMap), _.ary(_.parseInt, 1)); - var KeyboardEvent = window.KeyboardEvent; +var reverseKeyMap = _.mapValues(_.invert(keyMap), _.ary(_.parseInt, 1)); +var KeyboardEvent = window.KeyboardEvent; - /** - * Simulate keyboard events in an element. This allows testing the way that - * elements respond to keyboard input. - * - * # sequence style - * keyboard events occur in a sequence, this array of events describe that sequence. - * - * ## event - * an object with a type property, or a string which will be turned into a single press - * - * ## event types - * ### press - * represents a key press - * - `key`: the key for the button pressed - * - `events`: optional list of events that occur before this press completes - * - * ### wait - * represents a pause in a sequence - * - `ms`: the number of milliseconds that the pause takes - * - * ### repeat - * represents a key being repeated because it is held down. Should only exist as a - * sub event of `press` events. - * - `count`: the number of times the repeat occurs - * - * @param {element} $el - jQuery element where events should occur - * @param {[type]} sequence - an array of events - * @async - */ - return function ($el, sequence) { - var modifierState = { - ctrlKey: false, - shiftKey: false, - altKey: false, - metaKey: false - }; +/** + * Simulate keyboard events in an element. This allows testing the way that + * elements respond to keyboard input. + * + * # sequence style + * keyboard events occur in a sequence, this array of events describe that sequence. + * + * ## event + * an object with a type property, or a string which will be turned into a single press + * + * ## event types + * ### press + * represents a key press + * - `key`: the key for the button pressed + * - `events`: optional list of events that occur before this press completes + * + * ### wait + * represents a pause in a sequence + * - `ms`: the number of milliseconds that the pause takes + * + * ### repeat + * represents a key being repeated because it is held down. Should only exist as a + * sub event of `press` events. + * - `count`: the number of times the repeat occurs + * + * @param {element} $el - jQuery element where events should occur + * @param {[type]} sequence - an array of events + * @async + */ +export default function ($el, sequence) { + var modifierState = { + ctrlKey: false, + shiftKey: false, + altKey: false, + metaKey: false + }; - return doList(_.clone(sequence)); + return doList(_.clone(sequence)); - function setModifier(key, state) { - var name = key + 'Key'; - if (modifierState.hasOwnProperty(name)) { - modifierState[name] = !!state; - } + function setModifier(key, state) { + var name = key + 'Key'; + if (modifierState.hasOwnProperty(name)) { + modifierState[name] = !!state; } + } - function doList(list) { - return Promise.try(function () { - if (!list || !list.length) return; + function doList(list) { + return Promise.try(function () { + if (!list || !list.length) return; - var event = list[0]; - if (_.isString(event)) { - event = { type: 'press', key: event }; - } + var event = list[0]; + if (_.isString(event)) { + event = { type: 'press', key: event }; + } - switch (event.type) { - case 'press': - return Promise.resolve() - .then(_.partial(fire, 'keydown', event.key)) - .then(_.partial(fire, 'keypress', event.key)) - .then(_.partial(doList, event.events)) - .then(_.partial(fire, 'keyup', event.key)); + switch (event.type) { + case 'press': + return Promise.resolve() + .then(_.partial(fire, 'keydown', event.key)) + .then(_.partial(fire, 'keypress', event.key)) + .then(_.partial(doList, event.events)) + .then(_.partial(fire, 'keyup', event.key)); - case 'wait': - return Promise.delay(event.ms); + case 'wait': + return Promise.delay(event.ms); - case 'repeat': - return (function again(remaining) { - if (!remaining) return Promise.resolve(); - remaining = remaining - 1; - return Promise.resolve() - .then(_.partial(fire, 'keydown', event.key, true)) - .then(_.partial(fire, 'keypress', event.key, true)) - .then(_.partial(again, remaining)); - }(event.count)); + case 'repeat': + return (function again(remaining) { + if (!remaining) return Promise.resolve(); + remaining = remaining - 1; + return Promise.resolve() + .then(_.partial(fire, 'keydown', event.key, true)) + .then(_.partial(fire, 'keypress', event.key, true)) + .then(_.partial(again, remaining)); + }(event.count)); - default: - throw new TypeError('invalid event type "' + event.type + '"'); - } - }) - .then(function () { - if (_.size(list) > 1) return doList(list.slice(1)); - }); - } + default: + throw new TypeError('invalid event type "' + event.type + '"'); + } + }) + .then(function () { + if (_.size(list) > 1) return doList(list.slice(1)); + }); + } - function fire(type, key, repeat) { - var keyCode = reverseKeyMap[key]; - if (!keyCode) throw new TypeError('invalid key "' + key + '"'); + function fire(type, key, repeat) { + var keyCode = reverseKeyMap[key]; + if (!keyCode) throw new TypeError('invalid key "' + key + '"'); - if (type === 'keydown') setModifier(key, true); - if (type === 'keyup') setModifier(key, false); + if (type === 'keydown') setModifier(key, true); + if (type === 'keyup') setModifier(key, false); - var $target = _.isFunction($el) ? $el() : $el; - var $event = new $.Event(type, _.defaults({ keyCode: keyCode }, modifierState)); - $target.trigger($event); - } - }; -}); + var $target = _.isFunction($el) ? $el() : $el; + var $event = new $.Event(type, _.defaults({ keyCode: keyCode }, modifierState)); + $target.trigger($event); + } +}; diff --git a/src/testUtils/stub_index_pattern.js b/src/testUtils/stub_index_pattern.js index 17960536ce2340..48311a8a1a7149 100644 --- a/src/testUtils/stub_index_pattern.js +++ b/src/testUtils/stub_index_pattern.js @@ -8,49 +8,47 @@ import getComputedFields from 'ui/index_patterns/_get_computed_fields'; import RegistryFieldFormatsProvider from 'ui/registry/field_formats'; import IndexPatternsFlattenHitProvider from 'ui/index_patterns/_flatten_hit'; import IndexPatternsFieldProvider from 'ui/index_patterns/_field'; -define(function (require) { - return function (Private) { - var fieldFormats = Private(RegistryFieldFormatsProvider); - var flattenHit = Private(IndexPatternsFlattenHitProvider); +export default function (Private) { + var fieldFormats = Private(RegistryFieldFormatsProvider); + var flattenHit = Private(IndexPatternsFlattenHitProvider); - var Field = Private(IndexPatternsFieldProvider); + var Field = Private(IndexPatternsFieldProvider); - function StubIndexPattern(pattern, timeField, fields) { - this.id = pattern; - this.popularizeField = sinon.spy(); - this.timeFieldName = timeField; - this.getNonScriptedFields = sinon.spy(); - this.getScriptedFields = sinon.spy(); - this.metaFields = ['_id', '_type', '_source']; - this.fieldFormatMap = {}; - this.routes = IndexPattern.prototype.routes; + function StubIndexPattern(pattern, timeField, fields) { + this.id = pattern; + this.popularizeField = sinon.spy(); + this.timeFieldName = timeField; + this.getNonScriptedFields = sinon.spy(); + this.getScriptedFields = sinon.spy(); + this.metaFields = ['_id', '_type', '_source']; + this.fieldFormatMap = {}; + this.routes = IndexPattern.prototype.routes; - this.toIndexList = _.constant(Promise.resolve([pattern])); - this.toDetailedIndexList = _.constant(Promise.resolve([ - { - index: pattern, - min: 0, - max: 1 - } - ])); - this.getComputedFields = _.bind(getComputedFields, this); - this.flattenHit = flattenHit(this); - this.formatHit = formatHit(this, fieldFormats.getDefaultInstance('string')); - this.formatField = this.formatHit.formatField; + this.toIndexList = _.constant(Promise.resolve([pattern])); + this.toDetailedIndexList = _.constant(Promise.resolve([ + { + index: pattern, + min: 0, + max: 1 + } + ])); + this.getComputedFields = _.bind(getComputedFields, this); + this.flattenHit = flattenHit(this); + this.formatHit = formatHit(this, fieldFormats.getDefaultInstance('string')); + this.formatField = this.formatHit.formatField; - this._indexFields = function () { - this.fields = new IndexedArray({ - index: ['name'], - group: ['type'], - initialSet: fields.map(function (field) { - return new Field(this, field); - }, this) - }); - }; + this._indexFields = function () { + this.fields = new IndexedArray({ + index: ['name'], + group: ['type'], + initialSet: fields.map(function (field) { + return new Field(this, field); + }, this) + }); + }; - this._indexFields(); - } + this._indexFields(); + } - return StubIndexPattern; - }; -}); + return StubIndexPattern; +}; diff --git a/src/ui/public/ConfigTemplate.js b/src/ui/public/ConfigTemplate.js index b0ebb3a5a80077..2430d033c7b769 100644 --- a/src/ui/public/ConfigTemplate.js +++ b/src/ui/public/ConfigTemplate.js @@ -1,36 +1,34 @@ import _ from 'lodash'; -define(function (require) { - - function ConfigTemplate(templates) { - var template = this; - template.current = null; - template.toggle = _.partial(update, null); - template.open = _.partial(update, true); - template.close = _.partial(update, false); - - function update(newState, name) { - var toUpdate = templates[name]; - var curState = template.is(name); - if (newState == null) newState = !curState; - - if (newState) { - template.current = toUpdate; - } else { - template.current = null; - } - - return newState; - } - template.is = function (name) { - return template.current === templates[name]; - }; +function ConfigTemplate(templates) { + var template = this; + template.current = null; + template.toggle = _.partial(update, null); + template.open = _.partial(update, true); + template.close = _.partial(update, false); + + function update(newState, name) { + var toUpdate = templates[name]; + var curState = template.is(name); + if (newState == null) newState = !curState; + + if (newState) { + template.current = toUpdate; + } else { + template.current = null; + } - template.toString = function () { - return template.current; - }; + return newState; } - return ConfigTemplate; + template.is = function (name) { + return template.current === templates[name]; + }; + + template.toString = function () { + return template.current; + }; +} + +export default ConfigTemplate; -}); diff --git a/src/ui/public/IndexedArray/IndexedArray.js b/src/ui/public/IndexedArray/IndexedArray.js index ff0095f5326440..c6cef5ef007175 100644 --- a/src/ui/public/IndexedArray/IndexedArray.js +++ b/src/ui/public/IndexedArray/IndexedArray.js @@ -1,160 +1,158 @@ import _ from 'lodash'; import inflector from 'ui/IndexedArray/inflector'; -define(function (require) { - - - var pathGetter = _(_.get).rearg(1, 0).ary(2); - var inflectIndex = inflector('by'); - var inflectOrder = inflector('in', 'Order'); - - var CLEAR_CACHE = {}; - var OPT_NAMES = IndexedArray.OPT_NAMES = ['index', 'group', 'order', 'initialSet', 'immutable']; - - /** - * Generic extension of Array class, which will index (and reindex) the - * objects it contains based on their properties. - * - * @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 IndexedArray should contain. - * @param {boolean} [config.immutable] - a flag that hints to people reading the implementation - * that this IndexedArray should not be modified. It's modification - * methods are also removed - */ - _.class(IndexedArray).inherits(Array); - function IndexedArray(config) { - IndexedArray.Super.call(this); - - // just to remind future us that this list is important - config = _.pick(config || {}, OPT_NAMES); - - this.raw = []; - - // setup indices - this._indexNames = _.union( - this._setupIndices(config.group, inflectIndex, _.organizeBy), - this._setupIndices(config.index, inflectIndex, _.indexBy), - this._setupIndices(config.order, inflectOrder, _.sortBy) - ); - - if (config.initialSet) { - this.push.apply(this, config.initialSet); - } - - if (config.immutable) { - // just a hint, bugs caused by updates not propogating would be very - // very very hard to track down - this.push = this.splice = undefined; - } - } - - /** - * Create indices for a group of object properties. getters and setters are used to - * read and control the indices. - * - * @param {string[]} props - the properties that should be used to index docs - * @param {function} inflect - a function that will be called with a property name, and - * creates the public property at which the index will be exposed - * @param {function} op - the function that will be used to create the indices, it is passed - * the raw representaion of the registry, and a getter for reading the - * right prop - * - * @returns {string[]} - the public keys of all indices created - */ - IndexedArray.prototype._setupIndices = function (props, inflect, op) { - // shortcut for empty props - if (!props || props.length === 0) return; - - var self = this; - return props.map(function (prop) { - - var from = pathGetter.partial(prop).value(); - var to = inflect(prop); - var cache; - - Object.defineProperty(self, to, { - enumerable: false, - configurable: false, - - set: function (val) { - // can't set any value other than the CLEAR_CACHE constant - if (val === CLEAR_CACHE) { - cache = false; - } else { - throw new TypeError(to + ' can not be set, it is a computed index of values'); - } - }, - get: function () { - return cache || (cache = op(self.raw, from)); - } - }); - return to; - }); - }; +var pathGetter = _(_.get).rearg(1, 0).ary(2); +var inflectIndex = inflector('by'); +var inflectOrder = inflector('in', 'Order'); + +var CLEAR_CACHE = {}; +var OPT_NAMES = IndexedArray.OPT_NAMES = ['index', 'group', 'order', 'initialSet', 'immutable']; + +/** + * Generic extension of Array class, which will index (and reindex) the + * objects it contains based on their properties. + * + * @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 IndexedArray should contain. + * @param {boolean} [config.immutable] - a flag that hints to people reading the implementation + * that this IndexedArray should not be modified. It's modification + * methods are also removed + */ +_.class(IndexedArray).inherits(Array); +function IndexedArray(config) { + IndexedArray.Super.call(this); + + // just to remind future us that this list is important + config = _.pick(config || {}, OPT_NAMES); + + this.raw = []; + + // setup indices + this._indexNames = _.union( + this._setupIndices(config.group, inflectIndex, _.organizeBy), + this._setupIndices(config.index, inflectIndex, _.indexBy), + this._setupIndices(config.order, inflectOrder, _.sortBy) + ); + + if (config.initialSet) { + this.push.apply(this, config.initialSet); + } - /** - * (Re)run index/group/order procedures to create indices of - * sub-objects. - * - * @return {undefined} - */ - IndexedArray.prototype._clearIndices = function () { - var self = this; - self._indexNames.forEach(function (name) { - self[name] = CLEAR_CACHE; + if (config.immutable) { + // just a hint, bugs caused by updates not propogating would be very + // very very hard to track down + this.push = this.splice = undefined; + } +} + +/** + * Create indices for a group of object properties. getters and setters are used to + * read and control the indices. + * + * @param {string[]} props - the properties that should be used to index docs + * @param {function} inflect - a function that will be called with a property name, and + * creates the public property at which the index will be exposed + * @param {function} op - the function that will be used to create the indices, it is passed + * the raw representaion of the registry, and a getter for reading the + * right prop + * + * @returns {string[]} - the public keys of all indices created + */ +IndexedArray.prototype._setupIndices = function (props, inflect, op) { + // shortcut for empty props + if (!props || props.length === 0) return; + + var self = this; + return props.map(function (prop) { + + var from = pathGetter.partial(prop).value(); + var to = inflect(prop); + var cache; + + Object.defineProperty(self, to, { + enumerable: false, + configurable: false, + + set: function (val) { + // can't set any value other than the CLEAR_CACHE constant + if (val === CLEAR_CACHE) { + cache = false; + } else { + throw new TypeError(to + ' can not be set, it is a computed index of values'); + } + }, + get: function () { + return cache || (cache = op(self.raw, from)); + } }); - }; - /** - * 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 IndexedArray. - * - * @param {[type]} method [description] - * @return {[type]} [description] - */ - 'pop push shift splice unshift reverse'.split(' ').forEach(function (method) { - var orig = Array.prototype[method]; - - IndexedArray.prototype[method] = function (/* args... */) { - // call the original method with this context - orig.apply(this, arguments); - - // run the indexers - this._clearIndices(); - - // call the original method on our "raw" array, and return the result(s) - return orig.apply(this.raw, arguments); - }; + return to; }); - /** - * Remove items from this based on a predicate - * @param {function|object|string} predicate - the predicate used to decide what is removed - * @param {object} context - this binding for predicate - * @return {array} - the removed data - */ - IndexedArray.prototype.remove = function (predicate, context) { - var out = _.remove(this, predicate, context); - _.remove(this.raw, predicate, context); +}; + +/** + * (Re)run index/group/order procedures to create indices of + * sub-objects. + * + * @return {undefined} + */ +IndexedArray.prototype._clearIndices = function () { + var self = this; + self._indexNames.forEach(function (name) { + self[name] = CLEAR_CACHE; + }); +}; + +/** + * 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 IndexedArray. + * + * @param {[type]} method [description] + * @return {[type]} [description] + */ +'pop push shift splice unshift reverse'.split(' ').forEach(function (method) { + var orig = Array.prototype[method]; + + IndexedArray.prototype[method] = function (/* args... */) { + // call the original method with this context + orig.apply(this, arguments); + + // run the indexers this._clearIndices(); - return out; - }; - /** - * provide a hook for the JSON serializer - * @return {array} - a plain, vanilla array with our same data - */ - IndexedArray.prototype.toJSON = function () { - return this.raw; + // call the original method on our "raw" array, and return the result(s) + return orig.apply(this.raw, arguments); }; - - return IndexedArray; }); + +/** +* Remove items from this based on a predicate +* @param {function|object|string} predicate - the predicate used to decide what is removed +* @param {object} context - this binding for predicate +* @return {array} - the removed data +*/ +IndexedArray.prototype.remove = function (predicate, context) { + var out = _.remove(this, predicate, context); + _.remove(this.raw, predicate, context); + this._clearIndices(); + return out; +}; + +/** + * provide a hook for the JSON serializer + * @return {array} - a plain, vanilla array with our same data + */ +IndexedArray.prototype.toJSON = function () { + return this.raw; +}; + +export default IndexedArray; diff --git a/src/ui/public/IndexedArray/inflector.js b/src/ui/public/IndexedArray/inflector.js index 38f324274d4969..de221ea533c67a 100644 --- a/src/ui/public/IndexedArray/inflector.js +++ b/src/ui/public/IndexedArray/inflector.js @@ -1,46 +1,44 @@ -define(function (require) { - - function upFirst(str, total) { - return str.charAt(0).toUpperCase() + (total ? str.substr(1).toLowerCase() : str.substr(1)); - } - - function startsWith(str, test) { - return str.substr(0, test.length).toLowerCase() === test.toLowerCase(); - } - - function endsWith(str, test) { - var tooShort = str.length < test.length; - if (tooShort) return; - - return str.substr(str.length - test.length).toLowerCase() === test.toLowerCase(); - } - - function inflector(prefix, postfix) { - return function inflect(key) { - var inflected; - - if (key.indexOf('.') !== -1) { - inflected = key - .split('.') - .map(function (step, i) { - return (i === 0) ? step : upFirst(step, true); - }) - .join(''); - } else { - inflected = key; - } - - if (prefix && !startsWith(key, prefix)) { - inflected = prefix + upFirst(inflected); - } - - if (postfix && !endsWith(key, postfix)) { - inflected = inflected + postfix; - } - - return inflected; - }; - } - - return inflector; -}); + +function upFirst(str, total) { + return str.charAt(0).toUpperCase() + (total ? str.substr(1).toLowerCase() : str.substr(1)); +} + +function startsWith(str, test) { + return str.substr(0, test.length).toLowerCase() === test.toLowerCase(); +} + +function endsWith(str, test) { + var tooShort = str.length < test.length; + if (tooShort) return; + + return str.substr(str.length - test.length).toLowerCase() === test.toLowerCase(); +} + +function inflector(prefix, postfix) { + return function inflect(key) { + var inflected; + + if (key.indexOf('.') !== -1) { + inflected = key + .split('.') + .map(function (step, i) { + return (i === 0) ? step : upFirst(step, true); + }) + .join(''); + } else { + inflected = key; + } + + if (prefix && !startsWith(key, prefix)) { + inflected = prefix + upFirst(inflected); + } + + if (postfix && !endsWith(key, postfix)) { + inflected = inflected + postfix; + } + + return inflected; + }; +} + +export default inflector; diff --git a/src/ui/public/Vis/AggConfig.js b/src/ui/public/Vis/AggConfig.js index 98bdae8ffb9680..362e7c60bfdd31 100644 --- a/src/ui/public/Vis/AggConfig.js +++ b/src/ui/public/Vis/AggConfig.js @@ -1,307 +1,305 @@ import _ from 'lodash'; import RegistryFieldFormatsProvider from 'ui/registry/field_formats'; -define(function (require) { - return function AggConfigFactory(Private, fieldTypeFilter) { - var fieldFormats = Private(RegistryFieldFormatsProvider); - - function AggConfig(vis, opts) { - var self = this; - - self.id = String(opts.id || AggConfig.nextId(vis.aggs)); - self.vis = vis; - self._opts = opts = (opts || {}); - - // setters - self.type = opts.type; - self.schema = opts.schema; +export default function AggConfigFactory(Private, fieldTypeFilter) { + var fieldFormats = Private(RegistryFieldFormatsProvider); + + function AggConfig(vis, opts) { + var self = this; + + self.id = String(opts.id || AggConfig.nextId(vis.aggs)); + self.vis = vis; + self._opts = opts = (opts || {}); + + // setters + self.type = opts.type; + self.schema = opts.schema; + + // resolve the params + self.fillDefaults(opts.params); + } + + /** + * Ensure that all of the objects in the list have ids, the objects + * and list are modified by reference. + * + * @param {array[object]} list - a list of objects, objects can be anything really + * @return {array} - the list that was passed in + */ + AggConfig.ensureIds = function (list) { + var have = []; + var haveNot = []; + list.forEach(function (obj) { + (obj.id ? have : haveNot).push(obj); + }); - // resolve the params - self.fillDefaults(opts.params); - } + var nextId = AggConfig.nextId(have); + haveNot.forEach(function (obj) { + obj.id = String(nextId++); + }); - /** - * Ensure that all of the objects in the list have ids, the objects - * and list are modified by reference. - * - * @param {array[object]} list - a list of objects, objects can be anything really - * @return {array} - the list that was passed in - */ - AggConfig.ensureIds = function (list) { - var have = []; - var haveNot = []; - list.forEach(function (obj) { - (obj.id ? have : haveNot).push(obj); - }); + return list; + }; - var nextId = AggConfig.nextId(have); - haveNot.forEach(function (obj) { - obj.id = String(nextId++); - }); + /** + * Calculate the next id based on the ids in this list + * + * @return {array} list - a list of objects with id properties + */ + AggConfig.nextId = function (list) { + return 1 + list.reduce(function (max, obj) { + return Math.max(max, +obj.id || 0); + }, 0); + }; - return list; - }; + Object.defineProperties(AggConfig.prototype, { + type: { + get: function () { + return this.__type; + }, + set: function (type) { + if (this.__typeDecorations) { + _.forOwn(this.__typeDecorations, function (prop, name) { + delete this[name]; + }, this); + } - /** - * Calculate the next id based on the ids in this list - * - * @return {array} list - a list of objects with id properties - */ - AggConfig.nextId = function (list) { - return 1 + list.reduce(function (max, obj) { - return Math.max(max, +obj.id || 0); - }, 0); - }; + if (_.isString(type)) { + type = AggConfig.aggTypes.byName[type]; + } - Object.defineProperties(AggConfig.prototype, { - type: { - get: function () { - return this.__type; - }, - set: function (type) { - if (this.__typeDecorations) { - _.forOwn(this.__typeDecorations, function (prop, name) { - delete this[name]; - }, this); - } - - if (_.isString(type)) { - type = AggConfig.aggTypes.byName[type]; - } - - if (type && _.isFunction(type.decorateAggConfig)) { - this.__typeDecorations = type.decorateAggConfig(); - Object.defineProperties(this, this.__typeDecorations); - } - - this.__type = type; + if (type && _.isFunction(type.decorateAggConfig)) { + this.__typeDecorations = type.decorateAggConfig(); + Object.defineProperties(this, this.__typeDecorations); } + + this.__type = type; + } + }, + schema: { + get: function () { + return this.__schema; }, - schema: { - get: function () { - return this.__schema; - }, - set: function (schema) { - if (_.isString(schema)) { - schema = this.vis.type.schemas.all.byName[schema]; - } - - this.__schema = schema; + set: function (schema) { + if (_.isString(schema)) { + schema = this.vis.type.schemas.all.byName[schema]; } - } - }); - /** - * Write the current values to this.params, filling in the defaults as we go - * - * @param {object} [from] - optional object to read values from, - * used when initializing - * @return {undefined} - */ - AggConfig.prototype.fillDefaults = function (from) { - var self = this; - from = from || self.params || {}; - var to = self.params = {}; - - self.getAggParams().forEach(function (aggParam) { - var val = from[aggParam.name]; - - if (val == null) { - if (aggParam.default == null) return; - - if (!_.isFunction(aggParam.default)) { - val = aggParam.default; - } else { - val = aggParam.default(self); - if (val == null) return; - } + this.__schema = schema; + } + } + }); + + /** + * Write the current values to this.params, filling in the defaults as we go + * + * @param {object} [from] - optional object to read values from, + * used when initializing + * @return {undefined} + */ + AggConfig.prototype.fillDefaults = function (from) { + var self = this; + from = from || self.params || {}; + var to = self.params = {}; + + self.getAggParams().forEach(function (aggParam) { + var val = from[aggParam.name]; + + if (val == null) { + if (aggParam.default == null) return; + + if (!_.isFunction(aggParam.default)) { + val = aggParam.default; + } else { + val = aggParam.default(self); + if (val == null) return; } + } - if (aggParam.deserialize) { - var isTyped = _.isFunction(aggParam.type); - - var isType = isTyped && (val instanceof aggParam.type); - var isObject = !isTyped && _.isObject(val); - var isDeserialized = (isType || isObject); + if (aggParam.deserialize) { + var isTyped = _.isFunction(aggParam.type); - if (!isDeserialized) { - val = aggParam.deserialize(val, self); - } + var isType = isTyped && (val instanceof aggParam.type); + var isObject = !isTyped && _.isObject(val); + var isDeserialized = (isType || isObject); - to[aggParam.name] = val; - return; + if (!isDeserialized) { + val = aggParam.deserialize(val, self); } - to[aggParam.name] = _.cloneDeep(val); - }); - }; - - /** - * Clear the parameters for this aggConfig - * - * @return {object} the new params object - */ - AggConfig.prototype.resetParams = function () { - var fieldParam = this.type && this.type.params.byName.field; - var field; - - if (fieldParam) { - var prevField = this.params.field; - var fieldOpts = fieldTypeFilter(this.vis.indexPattern.fields, fieldParam.filterFieldTypes); - field = _.contains(fieldOpts, prevField) ? prevField : null; + to[aggParam.name] = val; + return; } - return this.fillDefaults({ row: this.params.row, field: field }); - }; - - AggConfig.prototype.write = function () { - return this.type.params.write(this); - }; + to[aggParam.name] = _.cloneDeep(val); + }); + }; - AggConfig.prototype.createFilter = function (key) { - if (!_.isFunction(this.type.createFilter)) { - throw new TypeError('The "' + this.type.title + '" aggregation does not support filtering.'); - } + /** + * Clear the parameters for this aggConfig + * + * @return {object} the new params object + */ + AggConfig.prototype.resetParams = function () { + var fieldParam = this.type && this.type.params.byName.field; + var field; + + if (fieldParam) { + var prevField = this.params.field; + var fieldOpts = fieldTypeFilter(this.vis.indexPattern.fields, fieldParam.filterFieldTypes); + field = _.contains(fieldOpts, prevField) ? prevField : null; + } - var field = this.field(); - var label = this.fieldDisplayName(); - if (field && !field.filterable) { - var message = 'The "' + label + '" field can not be used for filtering.'; - if (field.scripted) { - message = 'The "' + label + '" field is scripted and can not be used for filtering.'; - } - throw new TypeError(message); - } + return this.fillDefaults({ row: this.params.row, field: field }); + }; - return this.type.createFilter(this, key); - }; + AggConfig.prototype.write = function () { + return this.type.params.write(this); + }; - /** - * Hook into param onRequest handling, and tell the aggConfig that it - * is being sent to elasticsearc. - * - * @return {[type]} [description] - */ - AggConfig.prototype.requesting = function () { - var self = this; - self.type && self.type.params.forEach(function (param) { - if (param.onRequest) param.onRequest(self); - }); - }; + AggConfig.prototype.createFilter = function (key) { + if (!_.isFunction(this.type.createFilter)) { + throw new TypeError('The "' + this.type.title + '" aggregation does not support filtering.'); + } - /** - * Convert this aggConfig to it's dsl syntax. - * - * Adds params and adhoc subaggs to a pojo, then returns it - * - * @param {AggConfig} aggConfig - the config object to convert - * @return {void|Object} - if the config has a dsl representation, it is - * returned, else undefined is returned - */ - AggConfig.prototype.toDsl = function () { - if (this.type.hasNoDsl) return; - var output = this.write(); - - var configDsl = {}; - configDsl[this.type.dslName || this.type.name] = output.params; - - // if the config requires subAggs, write them to the dsl as well - if (output.subAggs) { - var subDslLvl = configDsl.aggs || (configDsl.aggs = {}); - output.subAggs.forEach(function nestAdhocSubAggs(subAggConfig) { - subDslLvl[subAggConfig.id] = subAggConfig.toDsl(); - }); + var field = this.field(); + var label = this.fieldDisplayName(); + if (field && !field.filterable) { + var message = 'The "' + label + '" field can not be used for filtering.'; + if (field.scripted) { + message = 'The "' + label + '" field is scripted and can not be used for filtering.'; } + throw new TypeError(message); + } - return configDsl; - }; + return this.type.createFilter(this, key); + }; - AggConfig.prototype.toJSON = function () { - var self = this; - var params = self.params; + /** + * Hook into param onRequest handling, and tell the aggConfig that it + * is being sent to elasticsearc. + * + * @return {[type]} [description] + */ + AggConfig.prototype.requesting = function () { + var self = this; + self.type && self.type.params.forEach(function (param) { + if (param.onRequest) param.onRequest(self); + }); + }; - var outParams = _.transform(self.getAggParams(), function (out, aggParam) { - var val = params[aggParam.name]; + /** + * Convert this aggConfig to it's dsl syntax. + * + * Adds params and adhoc subaggs to a pojo, then returns it + * + * @param {AggConfig} aggConfig - the config object to convert + * @return {void|Object} - if the config has a dsl representation, it is + * returned, else undefined is returned + */ + AggConfig.prototype.toDsl = function () { + if (this.type.hasNoDsl) return; + var output = this.write(); + + var configDsl = {}; + configDsl[this.type.dslName || this.type.name] = output.params; + + // if the config requires subAggs, write them to the dsl as well + if (output.subAggs) { + var subDslLvl = configDsl.aggs || (configDsl.aggs = {}); + output.subAggs.forEach(function nestAdhocSubAggs(subAggConfig) { + subDslLvl[subAggConfig.id] = subAggConfig.toDsl(); + }); + } - // don't serialize undefined/null values - if (val == null) return; - if (aggParam.serialize) val = aggParam.serialize(val, self); - if (val == null) return; + return configDsl; + }; - // to prevent accidental leaking, we will clone all complex values - out[aggParam.name] = _.cloneDeep(val); - }, {}); + AggConfig.prototype.toJSON = function () { + var self = this; + var params = self.params; - return { - id: self.id, - type: self.type && self.type.name, - schema: self.schema && self.schema.name, - params: outParams - }; - }; + var outParams = _.transform(self.getAggParams(), function (out, aggParam) { + var val = params[aggParam.name]; - AggConfig.prototype.getAggParams = function () { - return [].concat( - (this.type) ? this.type.params.raw : [], - (this.schema) ? this.schema.params.raw : [] - ); - }; + // don't serialize undefined/null values + if (val == null) return; + if (aggParam.serialize) val = aggParam.serialize(val, self); + if (val == null) return; - AggConfig.prototype.getResponseAggs = function () { - if (!this.type) return; - return this.type.getResponseAggs(this) || [this]; - }; + // to prevent accidental leaking, we will clone all complex values + out[aggParam.name] = _.cloneDeep(val); + }, {}); - AggConfig.prototype.getValue = function (bucket) { - return this.type.getValue(this, bucket); + return { + id: self.id, + type: self.type && self.type.name, + schema: self.schema && self.schema.name, + params: outParams }; + }; - AggConfig.prototype.getKey = function (bucket, key) { - return this.type.getKey(bucket, key, this); - }; + AggConfig.prototype.getAggParams = function () { + return [].concat( + (this.type) ? this.type.params.raw : [], + (this.schema) ? this.schema.params.raw : [] + ); + }; - AggConfig.prototype.makeLabel = function () { - if (this.params.customLabel) { - return this.params.customLabel; - } + AggConfig.prototype.getResponseAggs = function () { + if (!this.type) return; + return this.type.getResponseAggs(this) || [this]; + }; - if (!this.type) return ''; - var pre = (_.get(this.vis, 'params.mode') === 'percentage') ? 'Percentage of ' : ''; - return pre += this.type.makeLabel(this); - }; + AggConfig.prototype.getValue = function (bucket) { + return this.type.getValue(this, bucket); + }; - AggConfig.prototype.field = function () { - return this.params.field; - }; + AggConfig.prototype.getKey = function (bucket, key) { + return this.type.getKey(bucket, key, this); + }; - AggConfig.prototype.fieldFormatter = function (contentType, defaultFormat) { - var format = this.type && this.type.getFormat(this); - if (format) return format.getConverterFor(contentType); - return this.fieldOwnFormatter(contentType, defaultFormat); - }; + AggConfig.prototype.makeLabel = function () { + if (this.params.customLabel) { + return this.params.customLabel; + } - AggConfig.prototype.fieldOwnFormatter = function (contentType, defaultFormat) { - var field = this.field(); - var format = field && field.format; - if (!format) format = defaultFormat; - if (!format) format = fieldFormats.getDefaultInstance('string'); - return format.getConverterFor(contentType); - }; + if (!this.type) return ''; + var pre = (_.get(this.vis, 'params.mode') === 'percentage') ? 'Percentage of ' : ''; + return pre += this.type.makeLabel(this); + }; - AggConfig.prototype.fieldName = function () { - var field = this.field(); - return field ? field.name : ''; - }; + AggConfig.prototype.field = function () { + return this.params.field; + }; - AggConfig.prototype.fieldDisplayName = function () { - var field = this.field(); - return field ? (field.displayName || this.fieldName()) : ''; - }; + AggConfig.prototype.fieldFormatter = function (contentType, defaultFormat) { + var format = this.type && this.type.getFormat(this); + if (format) return format.getConverterFor(contentType); + return this.fieldOwnFormatter(contentType, defaultFormat); + }; - AggConfig.prototype.fieldIsTimeField = function () { - var timeFieldName = this.vis.indexPattern.timeFieldName; - return timeFieldName && this.fieldName() === timeFieldName; - }; + AggConfig.prototype.fieldOwnFormatter = function (contentType, defaultFormat) { + var field = this.field(); + var format = field && field.format; + if (!format) format = defaultFormat; + if (!format) format = fieldFormats.getDefaultInstance('string'); + return format.getConverterFor(contentType); + }; - return AggConfig; + AggConfig.prototype.fieldName = function () { + var field = this.field(); + return field ? field.name : ''; }; -}); + + AggConfig.prototype.fieldDisplayName = function () { + var field = this.field(); + return field ? (field.displayName || this.fieldName()) : ''; + }; + + AggConfig.prototype.fieldIsTimeField = function () { + var timeFieldName = this.vis.indexPattern.timeFieldName; + return timeFieldName && this.fieldName() === timeFieldName; + }; + + return AggConfig; +}; diff --git a/src/ui/public/Vis/AggConfigs.js b/src/ui/public/Vis/AggConfigs.js index 9e1fb3d127ccbe..f95c871e2a5a2d 100644 --- a/src/ui/public/Vis/AggConfigs.js +++ b/src/ui/public/Vis/AggConfigs.js @@ -2,149 +2,147 @@ import _ from 'lodash'; import IndexedArray from 'ui/IndexedArray'; import VisAggConfigProvider from 'ui/Vis/AggConfig'; import AggTypesIndexProvider from 'ui/agg_types/index'; -define(function (require) { - return function AggConfigsFactory(Private) { - var AggConfig = Private(VisAggConfigProvider); - - AggConfig.aggTypes = Private(AggTypesIndexProvider); - - _.class(AggConfigs).inherits(IndexedArray); - function AggConfigs(vis, configStates) { - var self = this; - self.vis = vis; - - configStates = AggConfig.ensureIds(configStates || []); - - AggConfigs.Super.call(self, { - index: ['id'], - group: ['schema.group', 'type.name', 'schema.name'], - initialSet: configStates.map(function (aggConfigState) { - if (aggConfigState instanceof AggConfig) return aggConfigState; - return new AggConfig(vis, aggConfigState); - }) - }); - - - // Set the defaults for any schema which has them. If the defaults - // for some reason has more then the max only set the max number - // of defaults (not sure why a someone define more... - // but whatever). Also if a schema.name is already set then don't - // set anything. - if (vis && vis.type && vis.type.schemas && vis.type.schemas.all) { - _(vis.type.schemas.all) - .filter(function (schema) { - return _.isArray(schema.defaults) && schema.defaults.length > 0; - }) - .each(function (schema) { - if (!self.bySchemaName[schema.name]) { - var defaults = schema.defaults.slice(0, schema.max); - _.each(defaults, function (defaultState) { - var state = _.defaults({ id: AggConfig.nextId(self) }, defaultState); - self.push(new AggConfig(vis, state)); - }); - } - }) - .commit(); - } - } +export default function AggConfigsFactory(Private) { + var AggConfig = Private(VisAggConfigProvider); - AggConfigs.prototype.toDsl = function () { - var dslTopLvl = {}; - var dslLvlCursor; - var nestedMetrics; - - if (this.vis.isHierarchical()) { - // collect all metrics, and filter out the ones that we won't be copying - nestedMetrics = _(this.vis.aggs.bySchemaGroup.metrics) - .filter(function (agg) { - return agg.type.name !== 'count'; - }) - .map(function (agg) { - return { - config: agg, - dsl: agg.toDsl() - }; - }) - .value(); - } + AggConfig.aggTypes = Private(AggTypesIndexProvider); + + _.class(AggConfigs).inherits(IndexedArray); + function AggConfigs(vis, configStates) { + var self = this; + self.vis = vis; - this.getRequestAggs() - .filter(function (config) { - return !config.type.hasNoDsl; + configStates = AggConfig.ensureIds(configStates || []); + + AggConfigs.Super.call(self, { + index: ['id'], + group: ['schema.group', 'type.name', 'schema.name'], + initialSet: configStates.map(function (aggConfigState) { + if (aggConfigState instanceof AggConfig) return aggConfigState; + return new AggConfig(vis, aggConfigState); + }) + }); + + + // Set the defaults for any schema which has them. If the defaults + // for some reason has more then the max only set the max number + // of defaults (not sure why a someone define more... + // but whatever). Also if a schema.name is already set then don't + // set anything. + if (vis && vis.type && vis.type.schemas && vis.type.schemas.all) { + _(vis.type.schemas.all) + .filter(function (schema) { + return _.isArray(schema.defaults) && schema.defaults.length > 0; }) - .forEach(function nestEachConfig(config, i, list) { - if (!dslLvlCursor) { - // start at the top level - dslLvlCursor = dslTopLvl; - } else { - var prevConfig = list[i - 1]; - var prevDsl = dslLvlCursor[prevConfig.id]; - - // advance the cursor and nest under the previous agg, or - // put it on the same level if the previous agg doesn't accept - // sub aggs - dslLvlCursor = prevDsl.aggs || dslLvlCursor; + .each(function (schema) { + if (!self.bySchemaName[schema.name]) { + var defaults = schema.defaults.slice(0, schema.max); + _.each(defaults, function (defaultState) { + var state = _.defaults({ id: AggConfig.nextId(self) }, defaultState); + self.push(new AggConfig(vis, state)); + }); } + }) + .commit(); + } + } + + AggConfigs.prototype.toDsl = function () { + var dslTopLvl = {}; + var dslLvlCursor; + var nestedMetrics; + + if (this.vis.isHierarchical()) { + // collect all metrics, and filter out the ones that we won't be copying + nestedMetrics = _(this.vis.aggs.bySchemaGroup.metrics) + .filter(function (agg) { + return agg.type.name !== 'count'; + }) + .map(function (agg) { + return { + config: agg, + dsl: agg.toDsl() + }; + }) + .value(); + } - var dsl = dslLvlCursor[config.id] = config.toDsl(); - var subAggs; + this.getRequestAggs() + .filter(function (config) { + return !config.type.hasNoDsl; + }) + .forEach(function nestEachConfig(config, i, list) { + if (!dslLvlCursor) { + // start at the top level + dslLvlCursor = dslTopLvl; + } else { + var prevConfig = list[i - 1]; + var prevDsl = dslLvlCursor[prevConfig.id]; + + // advance the cursor and nest under the previous agg, or + // put it on the same level if the previous agg doesn't accept + // sub aggs + dslLvlCursor = prevDsl.aggs || dslLvlCursor; + } - if (config.schema.group === 'buckets' && i < list.length - 1) { - // buckets that are not the last item in the list accept sub-aggs - subAggs = dsl.aggs || (dsl.aggs = {}); - } + var dsl = dslLvlCursor[config.id] = config.toDsl(); + var subAggs; - if (subAggs && nestedMetrics) { - nestedMetrics.forEach(function (agg) { - subAggs[agg.config.id] = agg.dsl; - }); - } - }); - - return dslTopLvl; - }; - - AggConfigs.prototype.getRequestAggs = function () { - return _.sortBy(this, function (agg) { - return agg.schema.group === 'metrics' ? 1 : 0; - }); - }; - - /** - * Gets the AggConfigs (and possibly ResponseAggConfigs) that - * represent the values that will be produced when all aggs - * are run. - * - * With multi-value metric aggs it is possible for a single agg - * request to result in multiple agg values, which is why the length - * of a vis' responseValuesAggs may be different than the vis' aggs - * - * @return {array[AggConfig]} - */ - AggConfigs.prototype.getResponseAggs = function () { - return this.getRequestAggs().reduce(function (responseValuesAggs, agg) { - var aggs = agg.getResponseAggs(); - return aggs ? responseValuesAggs.concat(aggs) : responseValuesAggs; - }, []); - }; - - - /** - * Find a response agg by it's id. This may be an agg in the aggConfigs, or one - * created specifically for a response value - * - * @param {string} id - the id of the agg to find - * @return {AggConfig} - */ - AggConfigs.prototype.getResponseAggById = function (id) { - id = String(id); - var reqAgg = _.find(this.getRequestAggs(), function (agg) { - return id.substr(0, String(agg.id).length) === agg.id; - }); - if (!reqAgg) return; - return _.find(reqAgg.getResponseAggs(), { id: id }); - }; - - return AggConfigs; + if (config.schema.group === 'buckets' && i < list.length - 1) { + // buckets that are not the last item in the list accept sub-aggs + subAggs = dsl.aggs || (dsl.aggs = {}); + } + + if (subAggs && nestedMetrics) { + nestedMetrics.forEach(function (agg) { + subAggs[agg.config.id] = agg.dsl; + }); + } + }); + + return dslTopLvl; + }; + + AggConfigs.prototype.getRequestAggs = function () { + return _.sortBy(this, function (agg) { + return agg.schema.group === 'metrics' ? 1 : 0; + }); + }; + + /** + * Gets the AggConfigs (and possibly ResponseAggConfigs) that + * represent the values that will be produced when all aggs + * are run. + * + * With multi-value metric aggs it is possible for a single agg + * request to result in multiple agg values, which is why the length + * of a vis' responseValuesAggs may be different than the vis' aggs + * + * @return {array[AggConfig]} + */ + AggConfigs.prototype.getResponseAggs = function () { + return this.getRequestAggs().reduce(function (responseValuesAggs, agg) { + var aggs = agg.getResponseAggs(); + return aggs ? responseValuesAggs.concat(aggs) : responseValuesAggs; + }, []); }; -}); + + + /** + * Find a response agg by it's id. This may be an agg in the aggConfigs, or one + * created specifically for a response value + * + * @param {string} id - the id of the agg to find + * @return {AggConfig} + */ + AggConfigs.prototype.getResponseAggById = function (id) { + id = String(id); + var reqAgg = _.find(this.getRequestAggs(), function (agg) { + return id.substr(0, String(agg.id).length) === agg.id; + }); + if (!reqAgg) return; + return _.find(reqAgg.getResponseAggs(), { id: id }); + }; + + return AggConfigs; +}; diff --git a/src/ui/public/Vis/Renderbot.js b/src/ui/public/Vis/Renderbot.js index fd29b2ce86685a..0cf7707ba8e9b0 100644 --- a/src/ui/public/Vis/Renderbot.js +++ b/src/ui/public/Vis/Renderbot.js @@ -1,52 +1,50 @@ import _ from 'lodash'; -define(function (require) { - return function RenderbotFactory(Private) { +export default function RenderbotFactory(Private) { - /** - * "Abstract" renderbot class which just defines the expected API - * - * @param {Vis} vis - the vis object that contains all configuration data required to render the vis - * @param {jQuery} $el - a jQuery wrapped element to render into - */ - function Renderbot(vis, $el, uiState) { - this.vis = vis; - this.$el = $el; - this.uiState = uiState; - } + /** + * "Abstract" renderbot class which just defines the expected API + * + * @param {Vis} vis - the vis object that contains all configuration data required to render the vis + * @param {jQuery} $el - a jQuery wrapped element to render into + */ + function Renderbot(vis, $el, uiState) { + this.vis = vis; + this.$el = $el; + this.uiState = uiState; + } - /** - * Each renderbot should implement a #render() method which - * should accept an elasticsearch response and update the underlying visualization - * - * @override - * @param {object} esResp - The raw elasticsearch response - * @return {undefined} - */ - Renderbot.prototype.render = function (esResp) { - throw new Error('not implemented'); - }; + /** + * Each renderbot should implement a #render() method which + * should accept an elasticsearch response and update the underlying visualization + * + * @override + * @param {object} esResp - The raw elasticsearch response + * @return {undefined} + */ + Renderbot.prototype.render = function (esResp) { + throw new Error('not implemented'); + }; - /** - * Each renderbot should implement the #destroy() method which - * should tear down the owned element, remove event listeners, etc. - * - * @override - * @return {undefined} - */ - Renderbot.prototype.destroy = function () { - throw new Error('not implemented'); - }; + /** + * Each renderbot should implement the #destroy() method which + * should tear down the owned element, remove event listeners, etc. + * + * @override + * @return {undefined} + */ + Renderbot.prototype.destroy = function () { + throw new Error('not implemented'); + }; - /** - * Each renderbot can optionally implement the #updateParams() method which - * is used to pass in new vis params. It should not re-render the vis - * - * @override - * @return {undefined} - */ - Renderbot.prototype.updateParams = _.noop; + /** + * Each renderbot can optionally implement the #updateParams() method which + * is used to pass in new vis params. It should not re-render the vis + * + * @override + * @return {undefined} + */ + Renderbot.prototype.updateParams = _.noop; - return Renderbot; - }; -}); + return Renderbot; +}; diff --git a/src/ui/public/Vis/Schemas.js b/src/ui/public/Vis/Schemas.js index 5ab1075534bc0d..7df9d57a37ebd6 100644 --- a/src/ui/public/Vis/Schemas.js +++ b/src/ui/public/Vis/Schemas.js @@ -1,63 +1,61 @@ import _ from 'lodash'; import IndexedArray from 'ui/IndexedArray'; import AggTypesAggParamsProvider from 'ui/agg_types/AggParams'; -define(function (require) { - return function VisTypeSchemasFactory(Private) { - var AggParams = Private(AggTypesAggParamsProvider); +export default function VisTypeSchemasFactory(Private) { + var AggParams = Private(AggTypesAggParamsProvider); - function Schemas(schemas) { - var self = this; + function Schemas(schemas) { + var self = this; - _(schemas || []) - .map(function (schema) { - if (!schema.name) throw new Error('all schema must have a unique name'); + _(schemas || []) + .map(function (schema) { + if (!schema.name) throw new Error('all schema must have a unique name'); - if (schema.name === 'split') { - schema.params = [ - { - name: 'row', - default: true - } - ]; - schema.editor = require('plugins/kbn_vislib_vis_types/controls/rows_or_columns.html'); - } else if (schema.name === 'radius') { - schema.editor = require('plugins/kbn_vislib_vis_types/controls/radius_ratio_option.html'); - } + if (schema.name === 'split') { + schema.params = [ + { + name: 'row', + default: true + } + ]; + schema.editor = require('plugins/kbn_vislib_vis_types/controls/rows_or_columns.html'); + } else if (schema.name === 'radius') { + schema.editor = require('plugins/kbn_vislib_vis_types/controls/radius_ratio_option.html'); + } - _.defaults(schema, { - min: 0, - max: Infinity, - group: 'buckets', - title: schema.name, - aggFilter: '*', - editor: false, - params: [] - }); + _.defaults(schema, { + min: 0, + max: Infinity, + group: 'buckets', + title: schema.name, + aggFilter: '*', + editor: false, + params: [] + }); - // convert the params into a params registry - schema.params = new AggParams(schema.params); + // convert the params into a params registry + schema.params = new AggParams(schema.params); - return schema; - }) - .tap(function (schemas) { - self.all = new IndexedArray({ - index: ['name'], - group: ['group'], - immutable: true, - initialSet: schemas - }); - }) - .groupBy('group') - .forOwn(function (group, groupName) { - self[groupName] = new IndexedArray({ - index: ['name'], - immutable: true, - initialSet: group - }); - }) - .commit(); - } + return schema; + }) + .tap(function (schemas) { + self.all = new IndexedArray({ + index: ['name'], + group: ['group'], + immutable: true, + initialSet: schemas + }); + }) + .groupBy('group') + .forOwn(function (group, groupName) { + self[groupName] = new IndexedArray({ + index: ['name'], + immutable: true, + initialSet: group + }); + }) + .commit(); + } - return Schemas; - }; -}); + return Schemas; +}; diff --git a/src/ui/public/Vis/Vis.js b/src/ui/public/Vis/Vis.js index 30c2d157480329..c13fa144cbab30 100644 --- a/src/ui/public/Vis/Vis.js +++ b/src/ui/public/Vis/Vis.js @@ -2,130 +2,128 @@ import _ from 'lodash'; import AggTypesIndexProvider from 'ui/agg_types/index'; import RegistryVisTypesProvider from 'ui/registry/vis_types'; import VisAggConfigsProvider from 'ui/Vis/AggConfigs'; -define(function (require) { - return function VisFactory(Notifier, Private) { - var aggTypes = Private(AggTypesIndexProvider); - var visTypes = Private(RegistryVisTypesProvider); - var AggConfigs = Private(VisAggConfigsProvider); - - var notify = new Notifier({ - location: 'Vis' - }); +export default function VisFactory(Notifier, Private) { + var aggTypes = Private(AggTypesIndexProvider); + var visTypes = Private(RegistryVisTypesProvider); + var AggConfigs = Private(VisAggConfigsProvider); - function Vis(indexPattern, state) { - state = state || {}; + var notify = new Notifier({ + location: 'Vis' + }); - if (_.isString(state)) { - state = { - type: state - }; - } + function Vis(indexPattern, state) { + state = state || {}; + + if (_.isString(state)) { + state = { + type: state + }; + } + + this.indexPattern = indexPattern; - this.indexPattern = indexPattern; + // http://aphyr.com/data/posts/317/state.gif + this.setState(state); + } - // http://aphyr.com/data/posts/317/state.gif - this.setState(state); + Vis.convertOldState = function (type, oldState) { + if (!type || _.isString(type)) { + type = visTypes.byName[type || 'histogram']; } - Vis.convertOldState = function (type, oldState) { - if (!type || _.isString(type)) { - type = visTypes.byName[type || 'histogram']; - } + var schemas = type.schemas; - var schemas = type.schemas; + var aggs = _.transform(oldState, function (newConfigs, oldConfigs, oldGroupName) { + var schema = schemas.all.byName[oldGroupName]; - var aggs = _.transform(oldState, function (newConfigs, oldConfigs, oldGroupName) { - var schema = schemas.all.byName[oldGroupName]; + if (!schema) { + notify.log('unable to match old schema', oldGroupName, 'to a new schema'); + return; + } - if (!schema) { - notify.log('unable to match old schema', oldGroupName, 'to a new schema'); + oldConfigs.forEach(function (oldConfig) { + var agg = { + schema: schema.name, + type: oldConfig.agg, + }; + + var aggType = aggTypes.byName[agg.type]; + if (!aggType) { + notify.log('unable to find an agg type for old confg', oldConfig); return; } - oldConfigs.forEach(function (oldConfig) { - var agg = { - schema: schema.name, - type: oldConfig.agg, - }; - - var aggType = aggTypes.byName[agg.type]; - if (!aggType) { - notify.log('unable to find an agg type for old confg', oldConfig); - return; - } - - agg.params = _.pick(oldConfig, _.keys(aggType.params.byName)); + agg.params = _.pick(oldConfig, _.keys(aggType.params.byName)); - newConfigs.push(agg); - }); - }, []); + newConfigs.push(agg); + }); + }, []); - return { - type: type, - aggs: aggs - }; + return { + type: type, + aggs: aggs }; + }; - Vis.prototype.type = 'histogram'; - - Vis.prototype.setState = function (state) { - this.title = state.title || ''; - this.type = state.type || this.type; - if (_.isString(this.type)) this.type = visTypes.byName[this.type]; + Vis.prototype.type = 'histogram'; - this.listeners = _.assign({}, state.listeners, this.type.listeners); - this.params = _.defaults({}, - _.cloneDeep(state.params || {}), - _.cloneDeep(this.type.params.defaults || {}) - ); + Vis.prototype.setState = function (state) { + this.title = state.title || ''; + this.type = state.type || this.type; + if (_.isString(this.type)) this.type = visTypes.byName[this.type]; - this.aggs = new AggConfigs(this, state.aggs); - }; + this.listeners = _.assign({}, state.listeners, this.type.listeners); + this.params = _.defaults({}, + _.cloneDeep(state.params || {}), + _.cloneDeep(this.type.params.defaults || {}) + ); - Vis.prototype.getState = function () { - return { - title: this.title, - type: this.type.name, - params: this.params, - aggs: this.aggs.map(function (agg) { - return agg.toJSON(); - }).filter(Boolean), - listeners: this.listeners - }; - }; + this.aggs = new AggConfigs(this, state.aggs); + }; - Vis.prototype.createEditableVis = function () { - return this._editableVis || (this._editableVis = this.clone()); + Vis.prototype.getState = function () { + return { + title: this.title, + type: this.type.name, + params: this.params, + aggs: this.aggs.map(function (agg) { + return agg.toJSON(); + }).filter(Boolean), + listeners: this.listeners }; + }; - Vis.prototype.getEditableVis = function () { - return this._editableVis || undefined; - }; + Vis.prototype.createEditableVis = function () { + return this._editableVis || (this._editableVis = this.clone()); + }; - Vis.prototype.clone = function () { - return new Vis(this.indexPattern, this.getState()); - }; + Vis.prototype.getEditableVis = function () { + return this._editableVis || undefined; + }; - Vis.prototype.requesting = function () { - _.invoke(this.aggs.getRequestAggs(), 'requesting'); - }; + Vis.prototype.clone = function () { + return new Vis(this.indexPattern, this.getState()); + }; - Vis.prototype.isHierarchical = function () { - if (_.isFunction(this.type.hierarchicalData)) { - return !!this.type.hierarchicalData(this); - } else { - return !!this.type.hierarchicalData; - } - }; + Vis.prototype.requesting = function () { + _.invoke(this.aggs.getRequestAggs(), 'requesting'); + }; - Vis.prototype.hasSchemaAgg = function (schemaName, aggTypeName) { - var aggs = this.aggs.bySchemaName[schemaName] || []; - return aggs.some(function (agg) { - if (!agg.type || !agg.type.name) return false; - return agg.type.name === aggTypeName; - }); - }; + Vis.prototype.isHierarchical = function () { + if (_.isFunction(this.type.hierarchicalData)) { + return !!this.type.hierarchicalData(this); + } else { + return !!this.type.hierarchicalData; + } + }; - return Vis; + Vis.prototype.hasSchemaAgg = function (schemaName, aggTypeName) { + var aggs = this.aggs.bySchemaName[schemaName] || []; + return aggs.some(function (agg) { + if (!agg.type || !agg.type.name) return false; + return agg.type.name === aggTypeName; + }); }; -}); + + return Vis; +}; diff --git a/src/ui/public/Vis/VisType.js b/src/ui/public/Vis/VisType.js index bb2148d96629e9..bb223dabd450a7 100644 --- a/src/ui/public/Vis/VisType.js +++ b/src/ui/public/Vis/VisType.js @@ -1,23 +1,21 @@ import VisSchemasProvider from 'ui/Vis/Schemas'; -define(function (require) { - return function VisTypeFactory(Private) { - var VisTypeSchemas = Private(VisSchemasProvider); +export default function VisTypeFactory(Private) { + var VisTypeSchemas = Private(VisSchemasProvider); - function VisType(opts) { - opts = opts || {}; + function VisType(opts) { + opts = opts || {}; - this.name = opts.name; - this.title = opts.title; - this.responseConverter = opts.responseConverter; - this.hierarchicalData = opts.hierarchicalData || false; - this.icon = opts.icon; - this.description = opts.description; - this.schemas = opts.schemas || new VisTypeSchemas(); - this.params = opts.params || {}; - this.requiresSearch = opts.requiresSearch == null ? true : opts.requiresSearch; // Default to true unless otherwise specified - } + this.name = opts.name; + this.title = opts.title; + this.responseConverter = opts.responseConverter; + this.hierarchicalData = opts.hierarchicalData || false; + this.icon = opts.icon; + this.description = opts.description; + this.schemas = opts.schemas || new VisTypeSchemas(); + this.params = opts.params || {}; + this.requiresSearch = opts.requiresSearch == null ? true : opts.requiresSearch; // Default to true unless otherwise specified + } - return VisType; - }; -}); + return VisType; +}; diff --git a/src/ui/public/agg_response/geo_json/_tooltip_formatter.js b/src/ui/public/agg_response/geo_json/_tooltip_formatter.js index 4cd5d387f369dc..bb32a5e81821a5 100644 --- a/src/ui/public/agg_response/geo_json/_tooltip_formatter.js +++ b/src/ui/public/agg_response/geo_json/_tooltip_formatter.js @@ -1,42 +1,40 @@ import $ from 'jquery'; import _ from 'lodash'; import RegistryFieldFormatsProvider from 'ui/registry/field_formats'; -define(function (require) { - return function TileMapTooltipFormatter($compile, $rootScope, Private) { +export default function TileMapTooltipFormatter($compile, $rootScope, Private) { - var fieldFormats = Private(RegistryFieldFormatsProvider); - var $tooltipScope = $rootScope.$new(); - var $el = $('
      ').html(require('ui/agg_response/geo_json/_tooltip.html')); - $compile($el)($tooltipScope); + var fieldFormats = Private(RegistryFieldFormatsProvider); + var $tooltipScope = $rootScope.$new(); + var $el = $('
      ').html(require('ui/agg_response/geo_json/_tooltip.html')); + $compile($el)($tooltipScope); - return function tooltipFormatter(feature) { - if (!feature) return ''; + return function tooltipFormatter(feature) { + if (!feature) return ''; - var value = feature.properties.value; - var acr = feature.properties.aggConfigResult; - var vis = acr.aggConfig.vis; + var value = feature.properties.value; + var acr = feature.properties.aggConfigResult; + var vis = acr.aggConfig.vis; - var metricAgg = acr.aggConfig; - var geoFormat = _.get(vis.aggs, 'byTypeName.geohash_grid[0].format'); - if (!geoFormat) geoFormat = fieldFormats.getDefaultInstance('geo_point'); + var metricAgg = acr.aggConfig; + var geoFormat = _.get(vis.aggs, 'byTypeName.geohash_grid[0].format'); + if (!geoFormat) geoFormat = fieldFormats.getDefaultInstance('geo_point'); - $tooltipScope.details = [ - { - label: metricAgg.makeLabel(), - value: metricAgg.fieldFormatter()(value) - }, - { - label: 'Center', - value: geoFormat.convert({ - lat: feature.geometry.coordinates[1], - lon: feature.geometry.coordinates[0] - }) - } - ]; + $tooltipScope.details = [ + { + label: metricAgg.makeLabel(), + value: metricAgg.fieldFormatter()(value) + }, + { + label: 'Center', + value: geoFormat.convert({ + lat: feature.geometry.coordinates[1], + lon: feature.geometry.coordinates[0] + }) + } + ]; - $tooltipScope.$apply(); + $tooltipScope.$apply(); - return $el.html(); - }; + return $el.html(); }; -}); +}; diff --git a/src/ui/public/agg_response/geo_json/geo_json.js b/src/ui/public/agg_response/geo_json/geo_json.js index 1d26d9b123bd19..e5a9d11bb364f2 100644 --- a/src/ui/public/agg_response/geo_json/geo_json.js +++ b/src/ui/public/agg_response/geo_json/geo_json.js @@ -1,45 +1,43 @@ import _ from 'lodash'; import rowsToFeatures from 'ui/agg_response/geo_json/rowsToFeatures'; import AggResponseGeoJsonTooltipFormatterProvider from 'ui/agg_response/geo_json/_tooltip_formatter'; -define(function (require) { - return function TileMapConverterFn(Private, timefilter, $compile, $rootScope) { +export default function TileMapConverterFn(Private, timefilter, $compile, $rootScope) { - var tooltipFormatter = Private(AggResponseGeoJsonTooltipFormatterProvider); + var tooltipFormatter = Private(AggResponseGeoJsonTooltipFormatterProvider); - return function (vis, table) { + return function (vis, table) { - function columnIndex(schema) { - return _.findIndex(table.columns, function (col) { - return col.aggConfig.schema.name === schema; - }); - } + function columnIndex(schema) { + return _.findIndex(table.columns, function (col) { + return col.aggConfig.schema.name === schema; + }); + } - var geoI = columnIndex('segment'); - var metricI = columnIndex('metric'); - var geoAgg = _.get(table.columns, [geoI, 'aggConfig']); - var metricAgg = _.get(table.columns, [metricI, 'aggConfig']); + var geoI = columnIndex('segment'); + var metricI = columnIndex('metric'); + var geoAgg = _.get(table.columns, [geoI, 'aggConfig']); + var metricAgg = _.get(table.columns, [metricI, 'aggConfig']); - var features = rowsToFeatures(table, geoI, metricI); - var values = features.map(function (feature) { - return feature.properties.value; - }); + var features = rowsToFeatures(table, geoI, metricI); + var values = features.map(function (feature) { + return feature.properties.value; + }); - return { - title: table.title(), - valueFormatter: metricAgg && metricAgg.fieldFormatter(), - tooltipFormatter: tooltipFormatter, - geohashGridAgg: geoAgg, - geoJson: { - type: 'FeatureCollection', - features: features, - properties: { - min: _.min(values), - max: _.max(values), - zoom: _.get(geoAgg, 'params.mapZoom'), - center: _.get(geoAgg, 'params.mapCenter') - } + return { + title: table.title(), + valueFormatter: metricAgg && metricAgg.fieldFormatter(), + tooltipFormatter: tooltipFormatter, + geohashGridAgg: geoAgg, + geoJson: { + type: 'FeatureCollection', + features: features, + properties: { + min: _.min(values), + max: _.max(values), + zoom: _.get(geoAgg, 'params.mapZoom'), + center: _.get(geoAgg, 'params.mapCenter') } - }; + } }; }; -}); +}; diff --git a/src/ui/public/agg_response/geo_json/rowsToFeatures.js b/src/ui/public/agg_response/geo_json/rowsToFeatures.js index 15f5aa3f6f160b..b80ef6086673a1 100644 --- a/src/ui/public/agg_response/geo_json/rowsToFeatures.js +++ b/src/ui/public/agg_response/geo_json/rowsToFeatures.js @@ -1,55 +1,53 @@ import decodeGeoHash from 'ui/utils/decode_geo_hash'; import AggConfigResult from 'ui/Vis/AggConfigResult'; import _ from 'lodash'; -define(function (require) { - - function getAcr(val) { - return val instanceof AggConfigResult ? val : null; - } - - function unwrap(val) { - return getAcr(val) ? val.value : val; - } - - function convertRowsToFeatures(table, geoI, metricI) { - return _.transform(table.rows, function (features, row) { - var geohash = unwrap(row[geoI]); - if (!geohash) return; - - // fetch latLn of northwest and southeast corners, and center point - var location = decodeGeoHash(geohash); - - var centerLatLng = [ - location.latitude[2], - location.longitude[2] - ]; - - // order is nw, ne, se, sw - var rectangle = [ - [location.latitude[0], location.longitude[0]], - [location.latitude[0], location.longitude[1]], - [location.latitude[1], location.longitude[1]], - [location.latitude[1], location.longitude[0]], - ]; - - // geoJson coords use LngLat, so we reverse the centerLatLng - // See here for details: http://geojson.org/geojson-spec.html#positions - features.push({ - type: 'Feature', - geometry: { - type: 'Point', - coordinates: centerLatLng.slice(0).reverse() - }, - properties: { - geohash: geohash, - value: unwrap(row[metricI]), - aggConfigResult: getAcr(row[metricI]), - center: centerLatLng, - rectangle: rectangle - } - }); - }, []); - } - - return convertRowsToFeatures; -}); + +function getAcr(val) { + return val instanceof AggConfigResult ? val : null; +} + +function unwrap(val) { + return getAcr(val) ? val.value : val; +} + +function convertRowsToFeatures(table, geoI, metricI) { + return _.transform(table.rows, function (features, row) { + var geohash = unwrap(row[geoI]); + if (!geohash) return; + + // fetch latLn of northwest and southeast corners, and center point + var location = decodeGeoHash(geohash); + + var centerLatLng = [ + location.latitude[2], + location.longitude[2] + ]; + + // order is nw, ne, se, sw + var rectangle = [ + [location.latitude[0], location.longitude[0]], + [location.latitude[0], location.longitude[1]], + [location.latitude[1], location.longitude[1]], + [location.latitude[1], location.longitude[0]], + ]; + + // geoJson coords use LngLat, so we reverse the centerLatLng + // See here for details: http://geojson.org/geojson-spec.html#positions + features.push({ + type: 'Feature', + geometry: { + type: 'Point', + coordinates: centerLatLng.slice(0).reverse() + }, + properties: { + geohash: geohash, + value: unwrap(row[metricI]), + aggConfigResult: getAcr(row[metricI]), + center: centerLatLng, + rectangle: rectangle + } + }); + }, []); +} + +export default convertRowsToFeatures; diff --git a/src/ui/public/agg_response/hierarchical/_array_to_linked_list.js b/src/ui/public/agg_response/hierarchical/_array_to_linked_list.js index bd9949f5e84347..be26787b56b4d3 100644 --- a/src/ui/public/agg_response/hierarchical/_array_to_linked_list.js +++ b/src/ui/public/agg_response/hierarchical/_array_to_linked_list.js @@ -1,14 +1,12 @@ import _ from 'lodash'; -define(function (require) { - return function (buckets) { - var previous; - _.each(buckets, function (bucket) { - if (previous) { - bucket._previous = previous; - previous._next = bucket; - } - previous = bucket; - }); - return buckets; - }; -}); +export default function (buckets) { + var previous; + _.each(buckets, function (bucket) { + if (previous) { + bucket._previous = previous; + previous._next = bucket; + } + previous = bucket; + }); + return buckets; +}; diff --git a/src/ui/public/agg_response/hierarchical/_build_split.js b/src/ui/public/agg_response/hierarchical/_build_split.js index e43fdeab2b5fd0..8435b3c521bd83 100644 --- a/src/ui/public/agg_response/hierarchical/_build_split.js +++ b/src/ui/public/agg_response/hierarchical/_build_split.js @@ -1,18 +1,16 @@ import collectKeys from 'ui/agg_response/hierarchical/_collect_keys'; import AggResponseHierarchicalTransformAggregationProvider from 'ui/agg_response/hierarchical/_transform_aggregation'; -define(function (require) { - return function biuldSplitProvider(Private) { - var transformer = Private(AggResponseHierarchicalTransformAggregationProvider); - return function (agg, metric, aggData) { - // Ceate the split structure - var split = { label: '', slices: { children: [] } }; +export default function biuldSplitProvider(Private) { + var transformer = Private(AggResponseHierarchicalTransformAggregationProvider); + return function (agg, metric, aggData) { + // Ceate the split structure + var split = { label: '', slices: { children: [] } }; - // Transform the aggData into splits - split.slices.children = transformer(agg, metric, aggData); + // Transform the aggData into splits + split.slices.children = transformer(agg, metric, aggData); - // Collect all the keys - split.names = collectKeys(split.slices.children); - return split; - }; + // Collect all the keys + split.names = collectKeys(split.slices.children); + return split; }; -}); +}; diff --git a/src/ui/public/agg_response/hierarchical/_collect_keys.js b/src/ui/public/agg_response/hierarchical/_collect_keys.js index e8cb7e24f92dee..f19a3d8cf3b16b 100644 --- a/src/ui/public/agg_response/hierarchical/_collect_keys.js +++ b/src/ui/public/agg_response/hierarchical/_collect_keys.js @@ -1,12 +1,10 @@ import _ from 'lodash'; -define(function (require) { - return function collectKeys(children) { - var nextChildren = _.pluck(children, 'children'); - var keys = _.pluck(children, 'name'); - return _(nextChildren) - .map(collectKeys) - .flattenDeep() - .union(keys) - .value(); - }; -}); +export default function collectKeys(children) { + var nextChildren = _.pluck(children, 'children'); + var keys = _.pluck(children, 'name'); + return _(nextChildren) + .map(collectKeys) + .flattenDeep() + .union(keys) + .value(); +}; diff --git a/src/ui/public/agg_response/hierarchical/_create_raw_data.js b/src/ui/public/agg_response/hierarchical/_create_raw_data.js index f1fae932087a87..ae79c41665dbf8 100644 --- a/src/ui/public/agg_response/hierarchical/_create_raw_data.js +++ b/src/ui/public/agg_response/hierarchical/_create_raw_data.js @@ -1,94 +1,92 @@ import _ from 'lodash'; import extractBuckets from 'ui/agg_response/hierarchical/_extract_buckets'; -define(function (require) { - return function (vis, resp) { +export default function (vis, resp) { - // Create the initial results structure - var results = { rows: [] }; + // Create the initial results structure + var results = { rows: [] }; - // Create a reference to the buckets and metrics - var metrics = vis.aggs.bySchemaGroup.metrics; - var buckets = vis.aggs.bySchemaGroup.buckets; - var aggs = []; + // Create a reference to the buckets and metrics + var metrics = vis.aggs.bySchemaGroup.metrics; + var buckets = vis.aggs.bySchemaGroup.buckets; + var aggs = []; - if (buckets) { - _.each(buckets, function (bucket) { - aggs.push(bucket); - aggs.push(metrics); - }); - } else { + if (buckets) { + _.each(buckets, function (bucket) { + aggs.push(bucket); aggs.push(metrics); - } + }); + } else { + aggs.push(metrics); + } - // Create the columns - results.columns = _(aggs) - .flattenDeep() - .map(function (agg) { - return { - categoryName: agg.schema.name, - id: agg.id, - aggConfig: agg, - aggType: agg.type, - field: agg.params.field, - label: agg.type.makeLabel(agg) - }; - }) - .value(); + // Create the columns + results.columns = _(aggs) + .flattenDeep() + .map(function (agg) { + return { + categoryName: agg.schema.name, + id: agg.id, + aggConfig: agg, + aggType: agg.type, + field: agg.params.field, + label: agg.type.makeLabel(agg) + }; + }) + .value(); - // if there are no buckets then we need to just set the value and return - if (!buckets) { - var value = resp.aggregations - && resp.aggregations[metrics[0].id] - && resp.aggregations[metrics[0].id].value - || resp.hits.total; - results.rows.push([value]); - return results; - } - - /** - * Walk the buckets and create records for each leaf - * @param {aggConfig} agg The aggConfig for the current level - * @param {object} data The aggergation object - * @param {array} [record] The record that will eventually get pushed to the rows - * @returns {void} - */ - function walkBuckets(agg, data, record) { - if (!_.isArray(record)) { - record = []; - } + // if there are no buckets then we need to just set the value and return + if (!buckets) { + var value = resp.aggregations + && resp.aggregations[metrics[0].id] + && resp.aggregations[metrics[0].id].value + || resp.hits.total; + results.rows.push([value]); + return results; + } - // iterate through all the buckets - _.each(extractBuckets(data[agg.id], agg), function (bucket) { + /** + * Walk the buckets and create records for each leaf + * @param {aggConfig} agg The aggConfig for the current level + * @param {object} data The aggergation object + * @param {array} [record] The record that will eventually get pushed to the rows + * @returns {void} + */ + function walkBuckets(agg, data, record) { + if (!_.isArray(record)) { + record = []; + } - var _record = _.flattenDeep([record, bucket.key]); - _.each(metrics, function (metric) { - var value = bucket.doc_count; - if (bucket[metric.id] && !_.isUndefined(bucket[metric.id].value)) { - value = bucket[metric.id].value; - } - _record.push(value); - }); + // iterate through all the buckets + _.each(extractBuckets(data[agg.id], agg), function (bucket) { - // If there is another agg to call we need to check to see if it has - // buckets. If it does then we need to keep on walking the tree. - // This is where the recursion happens. - if (agg._next) { - var nextBucket = bucket[agg._next.id]; - if (nextBucket && nextBucket.buckets) { - walkBuckets(agg._next, bucket, _record); - } - } - // if there are no more aggs to walk then push the record to the rows. - else { - results.rows.push(_record); + var _record = _.flattenDeep([record, bucket.key]); + _.each(metrics, function (metric) { + var value = bucket.doc_count; + if (bucket[metric.id] && !_.isUndefined(bucket[metric.id].value)) { + value = bucket[metric.id].value; } + _record.push(value); }); - } - // Start walking the buckets at the beginning of the aggregations object. - walkBuckets(buckets[0], resp.aggregations); + // If there is another agg to call we need to check to see if it has + // buckets. If it does then we need to keep on walking the tree. + // This is where the recursion happens. + if (agg._next) { + var nextBucket = bucket[agg._next.id]; + if (nextBucket && nextBucket.buckets) { + walkBuckets(agg._next, bucket, _record); + } + } + // if there are no more aggs to walk then push the record to the rows. + else { + results.rows.push(_record); + } + }); + } - return results; - }; -}); + // Start walking the buckets at the beginning of the aggregations object. + walkBuckets(buckets[0], resp.aggregations); + + return results; +}; diff --git a/src/ui/public/agg_response/hierarchical/_extract_buckets.js b/src/ui/public/agg_response/hierarchical/_extract_buckets.js index 15e8733d97ceef..f6228c62b5797e 100644 --- a/src/ui/public/agg_response/hierarchical/_extract_buckets.js +++ b/src/ui/public/agg_response/hierarchical/_extract_buckets.js @@ -1,15 +1,13 @@ import _ from 'lodash'; -define(function (require) { - return function (bucket, agg) { - if (bucket && _.isPlainObject(bucket.buckets)) { - return _.map(bucket.buckets, function (value, key) { - var item = _.cloneDeep(value); - item.key = agg ? agg.getKey(value, key) : key; - return item; - }); +export default function (bucket, agg) { + if (bucket && _.isPlainObject(bucket.buckets)) { + return _.map(bucket.buckets, function (value, key) { + var item = _.cloneDeep(value); + item.key = agg ? agg.getKey(value, key) : key; + return item; + }); - } else { - return bucket && bucket.buckets || []; - } - }; -}); + } else { + return bucket && bucket.buckets || []; + } +}; diff --git a/src/ui/public/agg_response/hierarchical/_hierarchical_tooltip_formatter.js b/src/ui/public/agg_response/hierarchical/_hierarchical_tooltip_formatter.js index 100f7f1c47c899..7db92b6805916d 100644 --- a/src/ui/public/agg_response/hierarchical/_hierarchical_tooltip_formatter.js +++ b/src/ui/public/agg_response/hierarchical/_hierarchical_tooltip_formatter.js @@ -2,45 +2,43 @@ import _ from 'lodash'; import $ from 'jquery'; import collectBranch from 'ui/agg_response/hierarchical/_collect_branch'; import numeral from 'numeral'; -define(function (require) { - return function HierarchicalTooltipFormaterProvider($rootScope, $compile, $sce) { - var $tooltip = $(require('ui/agg_response/hierarchical/_tooltip.html')); - var $tooltipScope = $rootScope.$new(); +export default function HierarchicalTooltipFormaterProvider($rootScope, $compile, $sce) { + var $tooltip = $(require('ui/agg_response/hierarchical/_tooltip.html')); + var $tooltipScope = $rootScope.$new(); - $compile($tooltip)($tooltipScope); + $compile($tooltip)($tooltipScope); - return function (columns) { - return function (event) { - var datum = event.datum; + return function (columns) { + return function (event) { + var datum = event.datum; - // Collect the current leaf and parents into an array of values - $tooltipScope.rows = collectBranch(datum); + // Collect the current leaf and parents into an array of values + $tooltipScope.rows = collectBranch(datum); - var metricCol = $tooltipScope.metricCol = _.find(columns, { categoryName: 'metric' }); + var metricCol = $tooltipScope.metricCol = _.find(columns, { categoryName: 'metric' }); - // Map those values to what the tooltipSource.rows format. - _.forEachRight($tooltipScope.rows, function (row, i, rows) { - row.spacer = $sce.trustAsHtml(_.repeat(' ', row.depth)); + // Map those values to what the tooltipSource.rows format. + _.forEachRight($tooltipScope.rows, function (row, i, rows) { + row.spacer = $sce.trustAsHtml(_.repeat(' ', row.depth)); - var percent; - if (row.item.percentOfGroup != null) { - percent = row.item.percentOfGroup; - } + var percent; + if (row.item.percentOfGroup != null) { + percent = row.item.percentOfGroup; + } - row.metric = metricCol.aggConfig.fieldFormatter()(row.metric); + row.metric = metricCol.aggConfig.fieldFormatter()(row.metric); - if (percent != null) { - row.metric += ' (' + numeral(percent).format('0.[00]%') + ')'; - } + if (percent != null) { + row.metric += ' (' + numeral(percent).format('0.[00]%') + ')'; + } - return row; - }); - - $tooltipScope.$apply(); - return $tooltip[0].outerHTML; - }; + return row; + }); + $tooltipScope.$apply(); + return $tooltip[0].outerHTML; }; }; -}); + +}; diff --git a/src/ui/public/agg_response/hierarchical/_transform_aggregation.js b/src/ui/public/agg_response/hierarchical/_transform_aggregation.js index 9f0108b5cfeebc..199a2fcd0b1785 100644 --- a/src/ui/public/agg_response/hierarchical/_transform_aggregation.js +++ b/src/ui/public/agg_response/hierarchical/_transform_aggregation.js @@ -1,41 +1,39 @@ import _ from 'lodash'; import extractBuckets from 'ui/agg_response/hierarchical/_extract_buckets'; import AggConfigResult from 'ui/Vis/AggConfigResult'; -define(function (require) { - return function transformAggregationProvider(Private) { - return function transformAggregation(agg, metric, aggData, parent) { - return _.map(extractBuckets(aggData, agg), function (bucket) { - var aggConfigResult = new AggConfigResult( - agg, - parent && parent.aggConfigResult, - metric.getValue(bucket), - agg.getKey(bucket) - ); +export default function transformAggregationProvider(Private) { + return function transformAggregation(agg, metric, aggData, parent) { + return _.map(extractBuckets(aggData, agg), function (bucket) { + var aggConfigResult = new AggConfigResult( + agg, + parent && parent.aggConfigResult, + metric.getValue(bucket), + agg.getKey(bucket) + ); - var branch = { - name: agg.fieldFormatter()(bucket.key), - size: aggConfigResult.value, - aggConfig: agg, - aggConfigResult: aggConfigResult - }; + var branch = { + name: agg.fieldFormatter()(bucket.key), + size: aggConfigResult.value, + aggConfig: agg, + aggConfigResult: aggConfigResult + }; - // if the parent is defined then we need to set the parent of the branch - // this will be used later for filters for waking up the parent path. - if (parent) { - branch.parent = parent; - } + // if the parent is defined then we need to set the parent of the branch + // this will be used later for filters for waking up the parent path. + if (parent) { + branch.parent = parent; + } - // If the next bucket exists and it has children the we need to - // transform it as well. This is where the recursion happens. - if (agg._next) { - var nextBucket = bucket[agg._next.id]; - if (nextBucket && nextBucket.buckets) { - branch.children = transformAggregation(agg._next, metric, nextBucket, branch); - } + // If the next bucket exists and it has children the we need to + // transform it as well. This is where the recursion happens. + if (agg._next) { + var nextBucket = bucket[agg._next.id]; + if (nextBucket && nextBucket.buckets) { + branch.children = transformAggregation(agg._next, metric, nextBucket, branch); } + } - return branch; - }); - }; + return branch; + }); }; -}); +}; diff --git a/src/ui/public/agg_response/hierarchical/build_hierarchical_data.js b/src/ui/public/agg_response/hierarchical/build_hierarchical_data.js index 4a0c33cb442e04..fe58f2f19dff52 100644 --- a/src/ui/public/agg_response/hierarchical/build_hierarchical_data.js +++ b/src/ui/public/agg_response/hierarchical/build_hierarchical_data.js @@ -5,95 +5,93 @@ import arrayToLinkedList from 'ui/agg_response/hierarchical/_array_to_linked_lis import AggConfigResult from 'ui/Vis/AggConfigResult'; import AggResponseHierarchicalBuildSplitProvider from 'ui/agg_response/hierarchical/_build_split'; import AggResponseHierarchicalHierarchicalTooltipFormatterProvider from 'ui/agg_response/hierarchical/_hierarchical_tooltip_formatter'; -define(function (require) { - return function buildHierarchicalDataProvider(Private, Notifier) { - var buildSplit = Private(AggResponseHierarchicalBuildSplitProvider); - var tooltipFormatter = Private(AggResponseHierarchicalHierarchicalTooltipFormatterProvider); - - - var notify = new Notifier({ - location: 'Pie chart response converter' - }); - - return function (vis, resp) { - // Create a refrenece to the buckets - var buckets = vis.aggs.bySchemaGroup.buckets; - - - // Find the metric so it's easier to reference. - // TODO: Change this to support multiple metrics. - var metric = vis.aggs.bySchemaGroup.metrics[0]; - - // Link each agg to the next agg. This will be - // to identify the next bucket aggregation - buckets = arrayToLinkedList(buckets); - - // Create the raw data to be used in the spy panel - var raw = createRawData(vis, resp); - - // If buckets is falsy then we should just return the aggs - if (!buckets) { - var label = 'Count'; - var value = resp.aggregations - && resp.aggregations[metric.id] - && resp.aggregations[metric.id].value - || resp.hits.total; - return { - hits: resp.hits.total, - raw: raw, - names: [label], - tooltipFormatter: tooltipFormatter(raw.columns), - slices: { - children: [ - { name: label, size: value } - ] - } - }; - } - - var firstAgg = buckets[0]; - var aggData = resp.aggregations[firstAgg.id]; - - if (!firstAgg._next && firstAgg.schema.name === 'split') { - notify.error('Splitting charts without splitting slices is not supported. Pretending that we are just splitting slices.'); - } - - // start with splitting slices - if (!firstAgg._next || firstAgg.schema.name === 'segment') { - var split = buildSplit(firstAgg, metric, aggData); - split.hits = resp.hits.total; - split.raw = raw; - split.tooltipFormatter = tooltipFormatter(raw.columns); - return split; - } - - // map the split aggregations into rows. - var rows = _.map(extractBuckets(aggData, firstAgg), function (bucket) { - var agg = firstAgg._next; - var split = buildSplit(agg, metric, bucket[agg.id]); - // Since splits display labels we need to set it. - split.label = firstAgg.fieldFormatter()(agg.getKey(bucket)); - - var displayName = firstAgg.fieldDisplayName(); - if (!_.isEmpty(displayName)) split.label += ': ' + displayName; - - split.tooltipFormatter = tooltipFormatter(raw.columns); - var aggConfigResult = new AggConfigResult(firstAgg, null, null, firstAgg.getKey(bucket)); - split.split = { aggConfig: firstAgg, aggConfigResult: aggConfigResult, key: bucket.key }; - _.each(split.slices.children, function (child) { - child.aggConfigResult.$parent = aggConfigResult; - }); - return split; +export default function buildHierarchicalDataProvider(Private, Notifier) { + var buildSplit = Private(AggResponseHierarchicalBuildSplitProvider); + var tooltipFormatter = Private(AggResponseHierarchicalHierarchicalTooltipFormatterProvider); + + + var notify = new Notifier({ + location: 'Pie chart response converter' + }); + + return function (vis, resp) { + // Create a refrenece to the buckets + var buckets = vis.aggs.bySchemaGroup.buckets; + + + // Find the metric so it's easier to reference. + // TODO: Change this to support multiple metrics. + var metric = vis.aggs.bySchemaGroup.metrics[0]; + + // Link each agg to the next agg. This will be + // to identify the next bucket aggregation + buckets = arrayToLinkedList(buckets); + + // Create the raw data to be used in the spy panel + var raw = createRawData(vis, resp); + + // If buckets is falsy then we should just return the aggs + if (!buckets) { + var label = 'Count'; + var value = resp.aggregations + && resp.aggregations[metric.id] + && resp.aggregations[metric.id].value + || resp.hits.total; + return { + hits: resp.hits.total, + raw: raw, + names: [label], + tooltipFormatter: tooltipFormatter(raw.columns), + slices: { + children: [ + { name: label, size: value } + ] + } + }; + } + + var firstAgg = buckets[0]; + var aggData = resp.aggregations[firstAgg.id]; + + if (!firstAgg._next && firstAgg.schema.name === 'split') { + notify.error('Splitting charts without splitting slices is not supported. Pretending that we are just splitting slices.'); + } + + // start with splitting slices + if (!firstAgg._next || firstAgg.schema.name === 'segment') { + var split = buildSplit(firstAgg, metric, aggData); + split.hits = resp.hits.total; + split.raw = raw; + split.tooltipFormatter = tooltipFormatter(raw.columns); + return split; + } + + // map the split aggregations into rows. + var rows = _.map(extractBuckets(aggData, firstAgg), function (bucket) { + var agg = firstAgg._next; + var split = buildSplit(agg, metric, bucket[agg.id]); + // Since splits display labels we need to set it. + split.label = firstAgg.fieldFormatter()(agg.getKey(bucket)); + + var displayName = firstAgg.fieldDisplayName(); + if (!_.isEmpty(displayName)) split.label += ': ' + displayName; + + split.tooltipFormatter = tooltipFormatter(raw.columns); + var aggConfigResult = new AggConfigResult(firstAgg, null, null, firstAgg.getKey(bucket)); + split.split = { aggConfig: firstAgg, aggConfigResult: aggConfigResult, key: bucket.key }; + _.each(split.slices.children, function (child) { + child.aggConfigResult.$parent = aggConfigResult; }); + return split; + }); - var result = { hits: resp.hits.total, raw: raw }; - if (firstAgg.params.row) { - result.rows = rows; - } else { - result.columns = rows; - } + var result = { hits: resp.hits.total, raw: raw }; + if (firstAgg.params.row) { + result.rows = rows; + } else { + result.columns = rows; + } - return result; - }; + return result; }; -}); +}; diff --git a/src/ui/public/agg_response/index.js b/src/ui/public/agg_response/index.js index 072cb304bb8baf..ae098a8cb8536d 100644 --- a/src/ui/public/agg_response/index.js +++ b/src/ui/public/agg_response/index.js @@ -3,13 +3,11 @@ import AggResponsePointSeriesPointSeriesProvider from 'ui/agg_response/point_ser import AggResponseTabifyTabifyProvider from 'ui/agg_response/tabify/tabify'; import AggResponseGeoJsonGeoJsonProvider from 'ui/agg_response/geo_json/geo_json'; -define(function (require) { - return function NormalizeChartDataFactory(Private) { - return { - hierarchical: Private(AggResponseHierarchicalBuildHierarchicalDataProvider), - pointSeries: Private(AggResponsePointSeriesPointSeriesProvider), - tabify: Private(AggResponseTabifyTabifyProvider), - geoJson: Private(AggResponseGeoJsonGeoJsonProvider) - }; +export default function NormalizeChartDataFactory(Private) { + return { + hierarchical: Private(AggResponseHierarchicalBuildHierarchicalDataProvider), + pointSeries: Private(AggResponsePointSeriesPointSeriesProvider), + tabify: Private(AggResponseTabifyTabifyProvider), + geoJson: Private(AggResponseGeoJsonGeoJsonProvider) }; -}); +}; diff --git a/src/ui/public/agg_response/point_series/_add_to_siri.js b/src/ui/public/agg_response/point_series/_add_to_siri.js index df50b11f6c7e55..d5ad8a84530d96 100644 --- a/src/ui/public/agg_response/point_series/_add_to_siri.js +++ b/src/ui/public/agg_response/point_series/_add_to_siri.js @@ -1,17 +1,15 @@ -define(function (require) { - return function PointSeriesAddToSiri() { - return function addToSiri(series, point, id, label) { - id = id == null ? '' : id + ''; +export default function PointSeriesAddToSiri() { + return function addToSiri(series, point, id, label) { + id = id == null ? '' : id + ''; - if (series.has(id)) { - series.get(id).values.push(point); - return; - } + if (series.has(id)) { + series.get(id).values.push(point); + return; + } - series.set(id, { - label: label == null ? id : label, - values: [point] - }); - }; + series.set(id, { + label: label == null ? id : label, + values: [point] + }); }; -}); +}; diff --git a/src/ui/public/agg_response/point_series/_fake_x_aspect.js b/src/ui/public/agg_response/point_series/_fake_x_aspect.js index c05998b7d5290f..52bdc510daf646 100644 --- a/src/ui/public/agg_response/point_series/_fake_x_aspect.js +++ b/src/ui/public/agg_response/point_series/_fake_x_aspect.js @@ -1,32 +1,30 @@ import VisAggConfigProvider from 'ui/Vis/AggConfig'; import AggTypesAggTypeProvider from 'ui/agg_types/AggType'; -define(function (require) { - return function PointSeriesFakeXAxis(Private) { - var AggConfig = Private(VisAggConfigProvider); - var AggType = Private(AggTypesAggTypeProvider); +export default function PointSeriesFakeXAxis(Private) { + var AggConfig = Private(VisAggConfigProvider); + var AggType = Private(AggTypesAggTypeProvider); - var allAgg = new AggType({ - name: 'all', - title: 'All docs', - ordered: false, - hasNoDsl: true - }); + var allAgg = new AggType({ + name: 'all', + title: 'All docs', + ordered: false, + hasNoDsl: true + }); - return function makeFakeXAxis(vis) { - var fake = new AggConfig(vis, { - type: allAgg, - schema: vis.type.schemas.all.byName.segment - }); + return function makeFakeXAxis(vis) { + var fake = new AggConfig(vis, { + type: allAgg, + schema: vis.type.schemas.all.byName.segment + }); - return { - i: -1, - agg: fake, - col: { - aggConfig: fake, - label: fake.makeLabel() - } - }; + return { + i: -1, + agg: fake, + col: { + aggConfig: fake, + label: fake.makeLabel() + } }; }; -}); +}; diff --git a/src/ui/public/agg_response/point_series/_get_aspects.js b/src/ui/public/agg_response/point_series/_get_aspects.js index f9e7bb3a3dbf75..db8aaeff5cc82b 100644 --- a/src/ui/public/agg_response/point_series/_get_aspects.js +++ b/src/ui/public/agg_response/point_series/_get_aspects.js @@ -1,60 +1,58 @@ import _ from 'lodash'; import AggResponsePointSeriesFakeXAspectProvider from 'ui/agg_response/point_series/_fake_x_aspect'; -define(function (require) { - return function PointSeriesGetAspects(Private) { - var fakeXAspect = Private(AggResponsePointSeriesFakeXAspectProvider); - - var map = { - segment: 'x', - metric: 'y', - radius: 'z', - width: 'width', - group: 'series' - }; - - function columnToAspect(aspects, col, i) { - var schema = col.aggConfig.schema.name; +export default function PointSeriesGetAspects(Private) { + var fakeXAspect = Private(AggResponsePointSeriesFakeXAspectProvider); + + var map = { + segment: 'x', + metric: 'y', + radius: 'z', + width: 'width', + group: 'series' + }; - var name = map[schema]; - if (!name) throw new TypeError('unknown schema name "' + schema + '"'); + function columnToAspect(aspects, col, i) { + var schema = col.aggConfig.schema.name; - var aspect = { - i: i, - col: col, - agg: col.aggConfig - }; + var name = map[schema]; + if (!name) throw new TypeError('unknown schema name "' + schema + '"'); - if (!aspects[name]) aspects[name] = []; - aspects[name].push(aspect); - } + var aspect = { + i: i, + col: col, + agg: col.aggConfig + }; - /** - * Identify and group the columns based on the aspect of the pointSeries - * they represent. - * - * @param {array} columns - the list of columns - * @return {object} - an object with a key for each aspect (see map). The values - * may be undefined, a single aspect, or an array of aspects. - */ - return function getAspects(vis, table) { - var aspects = _(table.columns) - // write each column into the aspects under it's group - .transform(columnToAspect, {}) - // unwrap groups that only have one value, and validate groups that have more - .transform(function (aspects, group, name) { - if (name !== 'y' && group.length > 1) { - throw new TypeError('Only multiple metrics are supported in point series'); - } - - aspects[name] = group.length > 1 ? group : group[0]; - }) - .value(); - - if (!aspects.x) { - aspects.x = fakeXAspect(vis); + if (!aspects[name]) aspects[name] = []; + aspects[name].push(aspect); + } + + /** + * Identify and group the columns based on the aspect of the pointSeries + * they represent. + * + * @param {array} columns - the list of columns + * @return {object} - an object with a key for each aspect (see map). The values + * may be undefined, a single aspect, or an array of aspects. + */ + return function getAspects(vis, table) { + var aspects = _(table.columns) + // write each column into the aspects under it's group + .transform(columnToAspect, {}) + // unwrap groups that only have one value, and validate groups that have more + .transform(function (aspects, group, name) { + if (name !== 'y' && group.length > 1) { + throw new TypeError('Only multiple metrics are supported in point series'); } - return aspects; - }; + aspects[name] = group.length > 1 ? group : group[0]; + }) + .value(); + + if (!aspects.x) { + aspects.x = fakeXAspect(vis); + } + + return aspects; }; -}); +}; diff --git a/src/ui/public/agg_response/point_series/_get_point.js b/src/ui/public/agg_response/point_series/_get_point.js index 2ef62ff1a9da57..9d52d18bd536d6 100644 --- a/src/ui/public/agg_response/point_series/_get_point.js +++ b/src/ui/public/agg_response/point_series/_get_point.js @@ -1,40 +1,38 @@ import _ from 'lodash'; -define(function (require) { - return function PointSeriesGetPoint() { - function unwrap(aggConfigResult, def) { - return aggConfigResult ? aggConfigResult.value : def; - } +export default function PointSeriesGetPoint() { + function unwrap(aggConfigResult, def) { + return aggConfigResult ? aggConfigResult.value : def; + } - return function getPoint(x, series, yScale, row, y, z) { - var zRow = z && row[z.i]; - var xRow = row[x.i]; + return function getPoint(x, series, yScale, row, y, z) { + var zRow = z && row[z.i]; + var xRow = row[x.i]; - var point = { - x: unwrap(xRow, '_all'), - xi: xRow && xRow.$order, - y: unwrap(row[y.i]), - z: zRow && unwrap(zRow), - aggConfigResult: row[y.i], - extraMetrics: _.compact([zRow]), - yScale: yScale - }; + var point = { + x: unwrap(xRow, '_all'), + xi: xRow && xRow.$order, + y: unwrap(row[y.i]), + z: zRow && unwrap(zRow), + aggConfigResult: row[y.i], + extraMetrics: _.compact([zRow]), + yScale: yScale + }; - if (point.y === 'NaN') { - // filter out NaN from stats - // from metrics that are not based at zero - return; - } + if (point.y === 'NaN') { + // filter out NaN from stats + // from metrics that are not based at zero + return; + } - if (series) { - point.aggConfig = series.agg; - point.series = series.agg.fieldFormatter()(unwrap(row[series.i])); - } + if (series) { + point.aggConfig = series.agg; + point.series = series.agg.fieldFormatter()(unwrap(row[series.i])); + } - if (yScale) { - point.y *= yScale; - } + if (yScale) { + point.y *= yScale; + } - return point; - }; + return point; }; -}); +}; diff --git a/src/ui/public/agg_response/point_series/_get_series.js b/src/ui/public/agg_response/point_series/_get_series.js index 4b3d37b4366a34..ca79b74afacb21 100644 --- a/src/ui/public/agg_response/point_series/_get_series.js +++ b/src/ui/public/agg_response/point_series/_get_series.js @@ -1,57 +1,55 @@ import _ from 'lodash'; import AggResponsePointSeriesGetPointProvider from 'ui/agg_response/point_series/_get_point'; import AggResponsePointSeriesAddToSiriProvider from 'ui/agg_response/point_series/_add_to_siri'; -define(function (require) { - return function PointSeriesGetSeries(Private) { - var getPoint = Private(AggResponsePointSeriesGetPointProvider); - var addToSiri = Private(AggResponsePointSeriesAddToSiriProvider); - - return function getSeries(rows, chart) { - var aspects = chart.aspects; - var multiY = _.isArray(aspects.y); - var yScale = chart.yScale; - var partGetPoint = _.partial(getPoint, aspects.x, aspects.series, yScale); - - var series = _(rows) - .transform(function (series, row) { - if (!multiY) { - var point = partGetPoint(row, aspects.y, aspects.z); - if (point) addToSiri(series, point, point.series); - return; - } +export default function PointSeriesGetSeries(Private) { + var getPoint = Private(AggResponsePointSeriesGetPointProvider); + var addToSiri = Private(AggResponsePointSeriesAddToSiriProvider); + + return function getSeries(rows, chart) { + var aspects = chart.aspects; + var multiY = _.isArray(aspects.y); + var yScale = chart.yScale; + var partGetPoint = _.partial(getPoint, aspects.x, aspects.series, yScale); + + var series = _(rows) + .transform(function (series, row) { + if (!multiY) { + var point = partGetPoint(row, aspects.y, aspects.z); + if (point) addToSiri(series, point, point.series); + return; + } - aspects.y.forEach(function (y) { - var point = partGetPoint(row, y, aspects.z); - if (!point) return; + aspects.y.forEach(function (y) { + var point = partGetPoint(row, y, aspects.z); + if (!point) return; - var prefix = point.series ? point.series + ': ' : ''; - var seriesId = prefix + y.agg.id; - var seriesLabel = prefix + y.col.title; + var prefix = point.series ? point.series + ': ' : ''; + var seriesId = prefix + y.agg.id; + var seriesLabel = prefix + y.col.title; - addToSiri(series, point, seriesId, seriesLabel); - }); + addToSiri(series, point, seriesId, seriesLabel); + }); - }, new Map()) - .thru(series => [...series.values()]) - .value(); + }, new Map()) + .thru(series => [...series.values()]) + .value(); - if (multiY) { - series = _.sortBy(series, function (siri) { - var firstVal = siri.values[0]; - var y; + if (multiY) { + series = _.sortBy(series, function (siri) { + var firstVal = siri.values[0]; + var y; - if (firstVal) { - var agg = firstVal.aggConfigResult.aggConfig; - y = _.find(aspects.y, function (y) { - return y.agg === agg; - }); - } + if (firstVal) { + var agg = firstVal.aggConfigResult.aggConfig; + y = _.find(aspects.y, function (y) { + return y.agg === agg; + }); + } - return y ? y.i : series.length; - }); - } + return y ? y.i : series.length; + }); + } - return series; - }; + return series; }; -}); +}; diff --git a/src/ui/public/agg_response/point_series/_init_y_axis.js b/src/ui/public/agg_response/point_series/_init_y_axis.js index de0a967bc2fbe8..3c0e3313dd8bbb 100644 --- a/src/ui/public/agg_response/point_series/_init_y_axis.js +++ b/src/ui/public/agg_response/point_series/_init_y_axis.js @@ -1,22 +1,20 @@ import _ from 'lodash'; -define(function (require) { - return function PointSeriesInitYAxis() { +export default function PointSeriesInitYAxis() { - return function initYAxis(chart) { - var y = chart.aspects.y; - var x = chart.aspects.x; + return function initYAxis(chart) { + var y = chart.aspects.y; + var x = chart.aspects.x; - if (_.isArray(y)) { - // TODO: vis option should allow choosing this format - chart.yAxisFormatter = y[0].agg.fieldFormatter(); - chart.yAxisLabel = ''; // use the legend - } else { - chart.yAxisFormatter = y.agg.fieldFormatter(); - chart.yAxisLabel = y.col.title; - } + if (_.isArray(y)) { + // TODO: vis option should allow choosing this format + chart.yAxisFormatter = y[0].agg.fieldFormatter(); + chart.yAxisLabel = ''; // use the legend + } else { + chart.yAxisFormatter = y.agg.fieldFormatter(); + chart.yAxisLabel = y.col.title; + } - var xAggOutput = x.agg.write(); - chart.yScale = xAggOutput.metricScale || null; - }; + var xAggOutput = x.agg.write(); + chart.yScale = xAggOutput.metricScale || null; }; -}); +}; diff --git a/src/ui/public/agg_response/point_series/_ordered_date_axis.js b/src/ui/public/agg_response/point_series/_ordered_date_axis.js index c59586b337f82d..ad4acd09b20846 100644 --- a/src/ui/public/agg_response/point_series/_ordered_date_axis.js +++ b/src/ui/public/agg_response/point_series/_ordered_date_axis.js @@ -1,29 +1,27 @@ import moment from 'moment'; -define(function (require) { - return function PointSeriesOrderedDateAxis(timefilter) { +export default function PointSeriesOrderedDateAxis(timefilter) { - return function orderedDateAxis(vis, chart) { - var xAgg = chart.aspects.x.agg; - var buckets = xAgg.buckets; - var format = buckets.getScaledDateFormat(); + return function orderedDateAxis(vis, chart) { + var xAgg = chart.aspects.x.agg; + var buckets = xAgg.buckets; + var format = buckets.getScaledDateFormat(); - chart.xAxisFormatter = function (val) { - return moment(val).format(format); - }; - - chart.ordered = { - date: true, - interval: buckets.getInterval(), - }; + chart.xAxisFormatter = function (val) { + return moment(val).format(format); + }; - var axisOnTimeField = xAgg.fieldIsTimeField(); - var bounds = buckets.getBounds(); - if (bounds && axisOnTimeField) { - chart.ordered.min = bounds.min; - chart.ordered.max = bounds.max; - } else { - chart.ordered.endzones = false; - } + chart.ordered = { + date: true, + interval: buckets.getInterval(), }; + + var axisOnTimeField = xAgg.fieldIsTimeField(); + var bounds = buckets.getBounds(); + if (bounds && axisOnTimeField) { + chart.ordered.min = bounds.min; + chart.ordered.max = bounds.max; + } else { + chart.ordered.endzones = false; + } }; -}); +}; diff --git a/src/ui/public/agg_response/point_series/_tooltip_formatter.js b/src/ui/public/agg_response/point_series/_tooltip_formatter.js index f3ffdafb20702f..60a9627ea55d78 100644 --- a/src/ui/public/agg_response/point_series/_tooltip_formatter.js +++ b/src/ui/public/agg_response/point_series/_tooltip_formatter.js @@ -1,45 +1,43 @@ import $ from 'jquery'; -define(function (require) { - return function PointSeriesTooltipFormatter($compile, $rootScope) { - - var $tooltipScope = $rootScope.$new(); - var $tooltip = $(require('ui/agg_response/point_series/_tooltip.html')); - $compile($tooltip)($tooltipScope); - - return function tooltipFormatter(event) { - var datum = event.datum; - if (!datum || !datum.aggConfigResult) return ''; - - var details = $tooltipScope.details = []; - var result = { $parent: datum.aggConfigResult }; - - function addDetail(result) { - var agg = result.aggConfig; - var value = result.value; - - var detail = { - value: agg.fieldFormatter()(value), - label: agg.makeLabel() - }; - - if (agg === datum.aggConfigResult.aggConfig) { - detail.percent = event.percent; - if (datum.yScale != null) { - detail.value = agg.fieldFormatter()(value * datum.yScale); - } - } +export default function PointSeriesTooltipFormatter($compile, $rootScope) { - details.push(detail); - } + var $tooltipScope = $rootScope.$new(); + var $tooltip = $(require('ui/agg_response/point_series/_tooltip.html')); + $compile($tooltip)($tooltipScope); + + return function tooltipFormatter(event) { + var datum = event.datum; + if (!datum || !datum.aggConfigResult) return ''; + + var details = $tooltipScope.details = []; + var result = { $parent: datum.aggConfigResult }; + + function addDetail(result) { + var agg = result.aggConfig; + var value = result.value; - datum.extraMetrics.forEach(addDetail); - while ((result = result.$parent) && result.aggConfig) { - addDetail(result); + var detail = { + value: agg.fieldFormatter()(value), + label: agg.makeLabel() + }; + + if (agg === datum.aggConfigResult.aggConfig) { + detail.percent = event.percent; + if (datum.yScale != null) { + detail.value = agg.fieldFormatter()(value * datum.yScale); + } } + details.push(detail); + } + + datum.extraMetrics.forEach(addDetail); + while ((result = result.$parent) && result.aggConfig) { + addDetail(result); + } + - $tooltipScope.$apply(); - return $tooltip[0].outerHTML; - }; + $tooltipScope.$apply(); + return $tooltip[0].outerHTML; }; -}); +}; diff --git a/src/ui/public/agg_response/point_series/point_series.js b/src/ui/public/agg_response/point_series/point_series.js index 13cf16e65b4f20..f44c7fdc466c13 100644 --- a/src/ui/public/agg_response/point_series/point_series.js +++ b/src/ui/public/agg_response/point_series/point_series.js @@ -5,34 +5,32 @@ import AggResponsePointSeriesInitYAxisProvider from 'ui/agg_response/point_serie import AggResponsePointSeriesInitXAxisProvider from 'ui/agg_response/point_series/_init_x_axis'; import AggResponsePointSeriesOrderedDateAxisProvider from 'ui/agg_response/point_series/_ordered_date_axis'; import AggResponsePointSeriesTooltipFormatterProvider from 'ui/agg_response/point_series/_tooltip_formatter'; -define(function (require) { - return function PointSeriesProvider(Private) { +export default function PointSeriesProvider(Private) { - var getSeries = Private(AggResponsePointSeriesGetSeriesProvider); - var getAspects = Private(AggResponsePointSeriesGetAspectsProvider); - var initYAxis = Private(AggResponsePointSeriesInitYAxisProvider); - var initXAxis = Private(AggResponsePointSeriesInitXAxisProvider); - var setupOrderedDateXAxis = Private(AggResponsePointSeriesOrderedDateAxisProvider); - var tooltipFormatter = Private(AggResponsePointSeriesTooltipFormatterProvider); + var getSeries = Private(AggResponsePointSeriesGetSeriesProvider); + var getAspects = Private(AggResponsePointSeriesGetAspectsProvider); + var initYAxis = Private(AggResponsePointSeriesInitYAxisProvider); + var initXAxis = Private(AggResponsePointSeriesInitXAxisProvider); + var setupOrderedDateXAxis = Private(AggResponsePointSeriesOrderedDateAxisProvider); + var tooltipFormatter = Private(AggResponsePointSeriesTooltipFormatterProvider); - return function pointSeriesChartDataFromTable(vis, table) { - var chart = {}; - var aspects = chart.aspects = getAspects(vis, table); + return function pointSeriesChartDataFromTable(vis, table) { + var chart = {}; + var aspects = chart.aspects = getAspects(vis, table); - chart.tooltipFormatter = tooltipFormatter; + chart.tooltipFormatter = tooltipFormatter; - initXAxis(chart); - initYAxis(chart); + initXAxis(chart); + initYAxis(chart); - var datedX = aspects.x.agg.type.ordered && aspects.x.agg.type.ordered.date; - if (datedX) { - setupOrderedDateXAxis(vis, chart); - } + var datedX = aspects.x.agg.type.ordered && aspects.x.agg.type.ordered.date; + if (datedX) { + setupOrderedDateXAxis(vis, chart); + } - chart.series = getSeries(table.rows, chart); + chart.series = getSeries(table.rows, chart); - delete chart.aspects; - return chart; - }; + delete chart.aspects; + return chart; }; -}); +}; diff --git a/src/ui/public/agg_response/tabify/_buckets.js b/src/ui/public/agg_response/tabify/_buckets.js index 1c5d26a8b1f50b..965597be9bd0c5 100644 --- a/src/ui/public/agg_response/tabify/_buckets.js +++ b/src/ui/public/agg_response/tabify/_buckets.js @@ -1,34 +1,32 @@ import _ from 'lodash'; -define(function (require) { - return function AggResponseBucketsProvider() { +export default function AggResponseBucketsProvider() { - function Buckets(aggResp) { - aggResp = aggResp || false; - this.buckets = aggResp.buckets || []; - this.objectMode = _.isPlainObject(this.buckets); + function Buckets(aggResp) { + aggResp = aggResp || false; + this.buckets = aggResp.buckets || []; + this.objectMode = _.isPlainObject(this.buckets); - if (this.objectMode) { - this._keys = _.keys(this.buckets); - this.length = this._keys.length; - } else { - this.length = this.buckets.length; - } + if (this.objectMode) { + this._keys = _.keys(this.buckets); + this.length = this._keys.length; + } else { + this.length = this.buckets.length; } + } - Buckets.prototype.forEach = function (fn) { - var buckets = this.buckets; + Buckets.prototype.forEach = function (fn) { + var buckets = this.buckets; - if (this.objectMode) { - this._keys.forEach(function (key) { - fn(buckets[key], key); - }); - } else { - buckets.forEach(function (bucket) { - fn(bucket, bucket.key); - }); - } - }; - - return Buckets; + if (this.objectMode) { + this._keys.forEach(function (key) { + fn(buckets[key], key); + }); + } else { + buckets.forEach(function (bucket) { + fn(bucket, bucket.key); + }); + } }; -}); + + return Buckets; +}; diff --git a/src/ui/public/agg_response/tabify/_get_columns.js b/src/ui/public/agg_response/tabify/_get_columns.js index d617252d85beda..aae442938a8e0d 100644 --- a/src/ui/public/agg_response/tabify/_get_columns.js +++ b/src/ui/public/agg_response/tabify/_get_columns.js @@ -1,52 +1,50 @@ import _ from 'lodash'; import VisAggConfigProvider from 'ui/Vis/AggConfig'; -define(function (require) { - return function GetColumnsProvider(Private) { - var AggConfig = Private(VisAggConfigProvider); - - return function getColumns(vis, minimal) { - var aggs = vis.aggs.getResponseAggs(); - - if (minimal == null) minimal = !vis.isHierarchical(); - - if (!vis.aggs.bySchemaGroup.metrics) { - aggs.push(new AggConfig(vis, { - type: 'count', - schema: vis.type.schemas.metrics[0].name - })); - } - - // pick the columns - if (minimal) { - return aggs.map(function (agg) { - return { aggConfig: agg }; - }); - } - - // supposed to be bucket,...metrics,bucket,...metrics - var columns = []; - - // seperate the metrics - var grouped = _.groupBy(aggs, function (agg) { - return agg.schema.group; +export default function GetColumnsProvider(Private) { + var AggConfig = Private(VisAggConfigProvider); + + return function getColumns(vis, minimal) { + var aggs = vis.aggs.getResponseAggs(); + + if (minimal == null) minimal = !vis.isHierarchical(); + + if (!vis.aggs.bySchemaGroup.metrics) { + aggs.push(new AggConfig(vis, { + type: 'count', + schema: vis.type.schemas.metrics[0].name + })); + } + + // pick the columns + if (minimal) { + return aggs.map(function (agg) { + return { aggConfig: agg }; + }); + } + + // supposed to be bucket,...metrics,bucket,...metrics + var columns = []; + + // seperate the metrics + var grouped = _.groupBy(aggs, function (agg) { + return agg.schema.group; + }); + + if (!grouped.buckets) { + // return just the metrics, in column format + return grouped.metrics.map(function (agg) { + return { aggConfig: agg }; }); + } - if (!grouped.buckets) { - // return just the metrics, in column format - return grouped.metrics.map(function (agg) { - return { aggConfig: agg }; - }); - } - - // return the buckets, and after each place all of the metrics - grouped.buckets.forEach(function (agg, i) { - columns.push({ aggConfig: agg }); - grouped.metrics.forEach(function (metric) { - columns.push({ aggConfig: metric }); - }); + // return the buckets, and after each place all of the metrics + grouped.buckets.forEach(function (agg, i) { + columns.push({ aggConfig: agg }); + grouped.metrics.forEach(function (metric) { + columns.push({ aggConfig: metric }); }); + }); - return columns; - }; + return columns; }; -}); +}; diff --git a/src/ui/public/agg_response/tabify/_response_writer.js b/src/ui/public/agg_response/tabify/_response_writer.js index 4612fc01a6ecee..2e629ae3b6ba3a 100644 --- a/src/ui/public/agg_response/tabify/_response_writer.js +++ b/src/ui/public/agg_response/tabify/_response_writer.js @@ -3,283 +3,281 @@ import AggConfigResult from 'ui/Vis/AggConfigResult'; import AggResponseTabifyTableProvider from 'ui/agg_response/tabify/_table'; import AggResponseTabifyTableGroupProvider from 'ui/agg_response/tabify/_table_group'; import AggResponseTabifyGetColumnsProvider from 'ui/agg_response/tabify/_get_columns'; -define(function (require) { - return function TabbedAggResponseWriterProvider(Private) { - var Table = Private(AggResponseTabifyTableProvider); - var TableGroup = Private(AggResponseTabifyTableGroupProvider); - var getColumns = Private(AggResponseTabifyGetColumnsProvider); +export default function TabbedAggResponseWriterProvider(Private) { + var Table = Private(AggResponseTabifyTableProvider); + var TableGroup = Private(AggResponseTabifyTableGroupProvider); + var getColumns = Private(AggResponseTabifyGetColumnsProvider); + + + _.class(SplitAcr).inherits(AggConfigResult); + function SplitAcr(agg, parent, key) { + SplitAcr.Super.call(this, agg, parent, key, key); + } + + /** + * Writer class that collects information about an aggregation response and + * produces a table, or a series of tables. + * + * @param {Vis} vis - the vis object to which the aggregation response correlates + */ + function TabbedAggResponseWriter(vis, opts) { + this.vis = vis; + this.opts = opts || {}; + this.rowBuffer = []; + + var visIsHier = vis.isHierarchical(); + + // do the options allow for splitting? we will only split if true and + // tabify calls the split method. + this.canSplit = this.opts.canSplit !== false; + + // should we allow partial rows to be included in the tables? if a + // partial row is found, it is filled with empty strings '' + this.partialRows = this.opts.partialRows == null ? visIsHier : this.opts.partialRows; + + // if true, we will not place metric columns after every bucket + // even if the vis is hierarchical. if false, and the vis is + // hierarchical, then we will display metric columns after + // every bucket col + this.minimalColumns = visIsHier ? !!this.opts.minimalColumns : true; + + // true if we can expect metrics to have been calculated + // for every bucket + this.metricsForAllBuckets = visIsHier; + + // if true, values will be wrapped in aggConfigResult objects which link them + // to their aggConfig and enable the filterbar and tooltip formatters + this.asAggConfigResults = !!this.opts.asAggConfigResults; + + this.columns = getColumns(vis, this.minimalColumns); + this.aggStack = _.pluck(this.columns, 'aggConfig'); + + this.root = new TableGroup(); + this.acrStack = []; + this.splitStack = [this.root]; + } + + /** + * Create a Table of TableGroup object, link it to it's parent (if any), and determine if + * it's the root + * + * @param {boolean} group - is this a TableGroup or just a normal Table + * @param {AggConfig} agg - the aggregation that create this table, only applies to groups + * @param {any} key - the bucketKey that this table relates to + * @return {Table/TableGroup} table - the created table + */ + TabbedAggResponseWriter.prototype._table = function (group, agg, key) { + var Class = (group) ? TableGroup : Table; + var table = new Class(); + var parent = this.splitStack[0]; + + if (group) { + table.aggConfig = agg; + table.key = key; + table.title = (table.fieldFormatter()(key)) + ': ' + agg.makeLabel(); + } + // link the parent and child + table.$parent = parent; + parent.tables.push(table); - _.class(SplitAcr).inherits(AggConfigResult); - function SplitAcr(agg, parent, key) { - SplitAcr.Super.call(this, agg, parent, key, key); - } + return table; + }; - /** - * Writer class that collects information about an aggregation response and - * produces a table, or a series of tables. - * - * @param {Vis} vis - the vis object to which the aggregation response correlates - */ - function TabbedAggResponseWriter(vis, opts) { - this.vis = vis; - this.opts = opts || {}; - this.rowBuffer = []; - - var visIsHier = vis.isHierarchical(); - - // do the options allow for splitting? we will only split if true and - // tabify calls the split method. - this.canSplit = this.opts.canSplit !== false; - - // should we allow partial rows to be included in the tables? if a - // partial row is found, it is filled with empty strings '' - this.partialRows = this.opts.partialRows == null ? visIsHier : this.opts.partialRows; - - // if true, we will not place metric columns after every bucket - // even if the vis is hierarchical. if false, and the vis is - // hierarchical, then we will display metric columns after - // every bucket col - this.minimalColumns = visIsHier ? !!this.opts.minimalColumns : true; - - // true if we can expect metrics to have been calculated - // for every bucket - this.metricsForAllBuckets = visIsHier; - - // if true, values will be wrapped in aggConfigResult objects which link them - // to their aggConfig and enable the filterbar and tooltip formatters - this.asAggConfigResults = !!this.opts.asAggConfigResults; - - this.columns = getColumns(vis, this.minimalColumns); - this.aggStack = _.pluck(this.columns, 'aggConfig'); - - this.root = new TableGroup(); - this.acrStack = []; - this.splitStack = [this.root]; + /** + * Enter into a split table, called for each bucket of a splitting agg. The new table + * is either created or located using the agg and key arguments, and then the block is + * executed with the table as it's this context. Within this function, you should + * walk into the remaining branches and end up writing some rows to the table. + * + * @param {aggConfig} agg - the aggConfig that created this split + * @param {Buckets} buckets - the buckets produces by the agg + * @param {function} block - a function to execute for each sub bucket + */ + TabbedAggResponseWriter.prototype.split = function (agg, buckets, block) { + var self = this; + + if (!self.canSplit) { + throw new Error('attempted to split when splitting is disabled'); } - /** - * Create a Table of TableGroup object, link it to it's parent (if any), and determine if - * it's the root - * - * @param {boolean} group - is this a TableGroup or just a normal Table - * @param {AggConfig} agg - the aggregation that create this table, only applies to groups - * @param {any} key - the bucketKey that this table relates to - * @return {Table/TableGroup} table - the created table - */ - TabbedAggResponseWriter.prototype._table = function (group, agg, key) { - var Class = (group) ? TableGroup : Table; - var table = new Class(); - var parent = this.splitStack[0]; - - if (group) { - table.aggConfig = agg; - table.key = key; - table.title = (table.fieldFormatter()(key)) + ': ' + agg.makeLabel(); + self._removeAggFromColumns(agg); + + buckets.forEach(function (bucket, key) { + // find the existing split that we should extend + var tableGroup = _.find(self.splitStack[0].tables, { aggConfig: agg, key: key }); + // create the split if it doesn't exist yet + if (!tableGroup) tableGroup = self._table(true, agg, key); + + var splitAcr = false; + if (self.asAggConfigResults) { + splitAcr = self._injectParentSplit(agg, key); } - // link the parent and child - table.$parent = parent; - parent.tables.push(table); - - return table; - }; - - /** - * Enter into a split table, called for each bucket of a splitting agg. The new table - * is either created or located using the agg and key arguments, and then the block is - * executed with the table as it's this context. Within this function, you should - * walk into the remaining branches and end up writing some rows to the table. - * - * @param {aggConfig} agg - the aggConfig that created this split - * @param {Buckets} buckets - the buckets produces by the agg - * @param {function} block - a function to execute for each sub bucket - */ - TabbedAggResponseWriter.prototype.split = function (agg, buckets, block) { - var self = this; - - if (!self.canSplit) { - throw new Error('attempted to split when splitting is disabled'); + // push the split onto the stack so that it will receive written tables + self.splitStack.unshift(tableGroup); + + // call the block + if (_.isFunction(block)) block.call(self, bucket, key); + + // remove the split from the stack + self.splitStack.shift(); + splitAcr && _.pull(self.acrStack, splitAcr); + }); + }; + + TabbedAggResponseWriter.prototype._removeAggFromColumns = function (agg) { + var i = _.findIndex(this.columns, function (col) { + return col.aggConfig === agg; + }); + + // we must have already removed this column + if (i === -1) return; + + this.columns.splice(i, 1); + + if (this.minimalColumns) return; + + // hierarchical vis creats additional columns for each bucket + // we will remove those too + var mCol = this.columns.splice(i, 1).pop(); + var mI = _.findIndex(this.aggStack, function (agg) { + return agg === mCol.aggConfig; + }); + + if (mI > -1) this.aggStack.splice(mI, 1); + }; + + /** + * When a split is found while building the aggConfigResult tree, we + * want to push the split into the tree at another point. Since each + * branch in the tree is a double-linked list we need do some special + * shit to pull this off. + * + * @private + * @param {AggConfig} - The agg which produced the split bucket + * @param {any} - The value which identifies the bucket + * @return {SplitAcr} - the AggConfigResult created for the split bucket + */ + TabbedAggResponseWriter.prototype._injectParentSplit = function (agg, key) { + var oldList = this.acrStack; + var newList = this.acrStack = []; + + // walk from right to left through the old stack + // and move things to the new stack + var injected = false; + + if (!oldList.length) { + injected = new SplitAcr(agg, null, key); + newList.unshift(injected); + return injected; + } + + // walk from right to left, emptying the previous list + while (oldList.length) { + var acr = oldList.pop(); + + // ignore other splits + if (acr instanceof SplitAcr) { + newList.unshift(acr); + continue; } - self._removeAggFromColumns(agg); - - buckets.forEach(function (bucket, key) { - // find the existing split that we should extend - var tableGroup = _.find(self.splitStack[0].tables, { aggConfig: agg, key: key }); - // create the split if it doesn't exist yet - if (!tableGroup) tableGroup = self._table(true, agg, key); - - var splitAcr = false; - if (self.asAggConfigResults) { - splitAcr = self._injectParentSplit(agg, key); - } - - // push the split onto the stack so that it will receive written tables - self.splitStack.unshift(tableGroup); - - // call the block - if (_.isFunction(block)) block.call(self, bucket, key); - - // remove the split from the stack - self.splitStack.shift(); - splitAcr && _.pull(self.acrStack, splitAcr); - }); - }; - - TabbedAggResponseWriter.prototype._removeAggFromColumns = function (agg) { - var i = _.findIndex(this.columns, function (col) { - return col.aggConfig === agg; - }); - - // we must have already removed this column - if (i === -1) return; - - this.columns.splice(i, 1); - - if (this.minimalColumns) return; - - // hierarchical vis creats additional columns for each bucket - // we will remove those too - var mCol = this.columns.splice(i, 1).pop(); - var mI = _.findIndex(this.aggStack, function (agg) { - return agg === mCol.aggConfig; - }); - - if (mI > -1) this.aggStack.splice(mI, 1); - }; - - /** - * When a split is found while building the aggConfigResult tree, we - * want to push the split into the tree at another point. Since each - * branch in the tree is a double-linked list we need do some special - * shit to pull this off. - * - * @private - * @param {AggConfig} - The agg which produced the split bucket - * @param {any} - The value which identifies the bucket - * @return {SplitAcr} - the AggConfigResult created for the split bucket - */ - TabbedAggResponseWriter.prototype._injectParentSplit = function (agg, key) { - var oldList = this.acrStack; - var newList = this.acrStack = []; - - // walk from right to left through the old stack - // and move things to the new stack - var injected = false; - - if (!oldList.length) { - injected = new SplitAcr(agg, null, key); + // inject the split + if (!injected) { + injected = new SplitAcr(agg, newList[0], key); newList.unshift(injected); - return injected; } - // walk from right to left, emptying the previous list - while (oldList.length) { - var acr = oldList.pop(); - - // ignore other splits - if (acr instanceof SplitAcr) { - newList.unshift(acr); - continue; - } - - // inject the split - if (!injected) { - injected = new SplitAcr(agg, newList[0], key); - newList.unshift(injected); - } - - var newAcr = new AggConfigResult(acr.aggConfig, newList[0], acr.value, acr.aggConfig.getKey(acr)); - newList.unshift(newAcr); - - // and replace the acr in the row buffer if its there - var rowI = this.rowBuffer.indexOf(acr); - if (rowI > -1) { - this.rowBuffer[rowI] = newAcr; - } - } + var newAcr = new AggConfigResult(acr.aggConfig, newList[0], acr.value, acr.aggConfig.getKey(acr)); + newList.unshift(newAcr); - return injected; - }; - - /** - * Push a value into the row, then run a block. Once the block is - * complete the value is pulled from the stack. - * - * @param {any} value - the value that should be added to the row - * @param {function} block - the function to run while this value is in the row - * @return {any} - the value that was added - */ - TabbedAggResponseWriter.prototype.cell = function (agg, value, block) { - if (this.asAggConfigResults) { - value = new AggConfigResult(agg, this.acrStack[0], value, value); + // and replace the acr in the row buffer if its there + var rowI = this.rowBuffer.indexOf(acr); + if (rowI > -1) { + this.rowBuffer[rowI] = newAcr; } + } - var staskResult = this.asAggConfigResults && value.type === 'bucket'; + return injected; + }; - this.rowBuffer.push(value); - if (staskResult) this.acrStack.unshift(value); + /** + * Push a value into the row, then run a block. Once the block is + * complete the value is pulled from the stack. + * + * @param {any} value - the value that should be added to the row + * @param {function} block - the function to run while this value is in the row + * @return {any} - the value that was added + */ + TabbedAggResponseWriter.prototype.cell = function (agg, value, block) { + if (this.asAggConfigResults) { + value = new AggConfigResult(agg, this.acrStack[0], value, value); + } - if (_.isFunction(block)) block.call(this); + var staskResult = this.asAggConfigResults && value.type === 'bucket'; - this.rowBuffer.pop(value); - if (staskResult) this.acrStack.shift(); + this.rowBuffer.push(value); + if (staskResult) this.acrStack.unshift(value); - return value; - }; + if (_.isFunction(block)) block.call(this); - /** - * Create a new row by reading the row buffer. This will do nothing if - * the row is incomplete and the vis this data came from is NOT flagged as - * hierarchical. - * - * @param {array} [buffer] - optional buffer to use in place of the stored rowBuffer - * @return {undefined} - */ - TabbedAggResponseWriter.prototype.row = function (buffer) { - var cells = buffer || this.rowBuffer.slice(0); + this.rowBuffer.pop(value); + if (staskResult) this.acrStack.shift(); - if (!this.partialRows && cells.length < this.columns.length) { - return; - } + return value; + }; - var split = this.splitStack[0]; - var table = split.tables[0] || this._table(false); + /** + * Create a new row by reading the row buffer. This will do nothing if + * the row is incomplete and the vis this data came from is NOT flagged as + * hierarchical. + * + * @param {array} [buffer] - optional buffer to use in place of the stored rowBuffer + * @return {undefined} + */ + TabbedAggResponseWriter.prototype.row = function (buffer) { + var cells = buffer || this.rowBuffer.slice(0); + + if (!this.partialRows && cells.length < this.columns.length) { + return; + } - while (cells.length < this.columns.length) cells.push(''); - table.rows.push(cells); - return table; - }; + var split = this.splitStack[0]; + var table = split.tables[0] || this._table(false); - /** - * Get the actual response - * - * @return {object} - the final table-tree - */ - TabbedAggResponseWriter.prototype.response = function () { - var columns = this.columns; + while (cells.length < this.columns.length) cells.push(''); + table.rows.push(cells); + return table; + }; - // give the columns some metadata - columns.map(function (col) { - col.title = col.aggConfig.makeLabel(); - }); + /** + * Get the actual response + * + * @return {object} - the final table-tree + */ + TabbedAggResponseWriter.prototype.response = function () { + var columns = this.columns; - // walk the tree and write the columns to each table - (function step(table, group) { - if (table.tables) table.tables.forEach(step); - else table.columns = columns.slice(0); - }(this.root)); + // give the columns some metadata + columns.map(function (col) { + col.title = col.aggConfig.makeLabel(); + }); - if (this.canSplit) return this.root; + // walk the tree and write the columns to each table + (function step(table, group) { + if (table.tables) table.tables.forEach(step); + else table.columns = columns.slice(0); + }(this.root)); - var table = this.root.tables[0]; - if (!table) return; + if (this.canSplit) return this.root; - delete table.$parent; - return table; - }; + var table = this.root.tables[0]; + if (!table) return; - return TabbedAggResponseWriter; + delete table.$parent; + return table; }; -}); + + return TabbedAggResponseWriter; +}; diff --git a/src/ui/public/agg_response/tabify/_table.js b/src/ui/public/agg_response/tabify/_table.js index 5555cf2de44fc0..ac26c29f673725 100644 --- a/src/ui/public/agg_response/tabify/_table.js +++ b/src/ui/public/agg_response/tabify/_table.js @@ -1,40 +1,38 @@ import _ from 'lodash'; -define(function (require) { - return function TableProvider() { +export default function TableProvider() { - /** - * Simple table class that is used to contain the rows and columns that create - * a table. This is usually found at the root of the response or within a TableGroup - */ - function Table() { - this.columns = null; // written with the first row - this.rows = []; - } + /** + * Simple table class that is used to contain the rows and columns that create + * a table. This is usually found at the root of the response or within a TableGroup + */ + function Table() { + this.columns = null; // written with the first row + this.rows = []; + } - Table.prototype.title = function () { - if (this.$parent) { - return this.$parent.title; - } else { - return ''; - } - }; + Table.prototype.title = function () { + if (this.$parent) { + return this.$parent.title; + } else { + return ''; + } + }; - Table.prototype.aggConfig = function (col) { - if (!col.aggConfig) { - throw new TypeError('Column is missing the aggConfig property'); - } - return col.aggConfig; - }; + Table.prototype.aggConfig = function (col) { + if (!col.aggConfig) { + throw new TypeError('Column is missing the aggConfig property'); + } + return col.aggConfig; + }; - Table.prototype.field = function (col) { - return this.aggConfig(col).field(); - }; + Table.prototype.field = function (col) { + return this.aggConfig(col).field(); + }; - Table.prototype.fieldFormatter = function (col) { - return this.aggConfig(col).fieldFormatter(); - }; + Table.prototype.fieldFormatter = function (col) { + return this.aggConfig(col).fieldFormatter(); + }; - return Table; - }; -}); + return Table; +}; diff --git a/src/ui/public/agg_response/tabify/_table_group.js b/src/ui/public/agg_response/tabify/_table_group.js index 6f266efb708ab4..5f7eee52887d34 100644 --- a/src/ui/public/agg_response/tabify/_table_group.js +++ b/src/ui/public/agg_response/tabify/_table_group.js @@ -1,26 +1,24 @@ import _ from 'lodash'; -define(function (require) { - return function TableGroupProvider() { +export default function TableGroupProvider() { - /** - * Simple object that wraps multiple tables. It contains information about the aggConfig - * and bucket that created this group and a list of the tables within it. - */ - function TableGroup() { - this.aggConfig = null; - this.key = null; - this.title = null; - this.tables = []; - } + /** + * Simple object that wraps multiple tables. It contains information about the aggConfig + * and bucket that created this group and a list of the tables within it. + */ + function TableGroup() { + this.aggConfig = null; + this.key = null; + this.title = null; + this.tables = []; + } - TableGroup.prototype.field = function () { - if (this.aggConfig) return this.aggConfig.field(); - }; - - TableGroup.prototype.fieldFormatter = function () { - if (this.aggConfig) return this.aggConfig.fieldFormatter(); - }; + TableGroup.prototype.field = function () { + if (this.aggConfig) return this.aggConfig.field(); + }; - return TableGroup; + TableGroup.prototype.fieldFormatter = function () { + if (this.aggConfig) return this.aggConfig.fieldFormatter(); }; -}); + + return TableGroup; +}; diff --git a/src/ui/public/agg_response/tabify/tabify.js b/src/ui/public/agg_response/tabify/tabify.js index 980feb96d238e9..8b5d35a7b01600 100644 --- a/src/ui/public/agg_response/tabify/tabify.js +++ b/src/ui/public/agg_response/tabify/tabify.js @@ -2,105 +2,103 @@ import _ from 'lodash'; import VisAggConfigProvider from 'ui/Vis/AggConfig'; import AggResponseTabifyResponseWriterProvider from 'ui/agg_response/tabify/_response_writer'; import AggResponseTabifyBucketsProvider from 'ui/agg_response/tabify/_buckets'; -define(function (require) { - return function tabifyAggResponseProvider(Private, Notifier) { +export default function tabifyAggResponseProvider(Private, Notifier) { - var AggConfig = Private(VisAggConfigProvider); - var TabbedAggResponseWriter = Private(AggResponseTabifyResponseWriterProvider); - var Buckets = Private(AggResponseTabifyBucketsProvider); - var notify = new Notifier({ location: 'agg_response/tabify'}); + var AggConfig = Private(VisAggConfigProvider); + var TabbedAggResponseWriter = Private(AggResponseTabifyResponseWriterProvider); + var Buckets = Private(AggResponseTabifyBucketsProvider); + var notify = new Notifier({ location: 'agg_response/tabify'}); - function tabifyAggResponse(vis, esResponse, respOpts) { - var write = new TabbedAggResponseWriter(vis, respOpts); + function tabifyAggResponse(vis, esResponse, respOpts) { + var write = new TabbedAggResponseWriter(vis, respOpts); - var topLevelBucket = _.assign({}, esResponse.aggregations, { - doc_count: esResponse.hits.total - }); + var topLevelBucket = _.assign({}, esResponse.aggregations, { + doc_count: esResponse.hits.total + }); - collectBucket(write, topLevelBucket); + collectBucket(write, topLevelBucket); - return write.response(); - } + return write.response(); + } - /** - * read an aggregation from a bucket, which is *might* be found at key (if - * the response came in object form), and will recurse down the aggregation - * tree and will pass the read values to the ResponseWriter. - * - * @param {object} bucket - a bucket from the aggResponse - * @param {undefined|string} key - the key where the bucket was found - * @returns {undefined} - */ - function collectBucket(write, bucket, key) { - var agg = write.aggStack.shift(); + /** + * read an aggregation from a bucket, which is *might* be found at key (if + * the response came in object form), and will recurse down the aggregation + * tree and will pass the read values to the ResponseWriter. + * + * @param {object} bucket - a bucket from the aggResponse + * @param {undefined|string} key - the key where the bucket was found + * @returns {undefined} + */ + function collectBucket(write, bucket, key) { + var agg = write.aggStack.shift(); - switch (agg.schema.group) { - case 'buckets': - var buckets = new Buckets(bucket[agg.id]); - if (buckets.length) { - var splitting = write.canSplit && agg.schema.name === 'split'; - if (splitting) { - write.split(agg, buckets, function forEachBucket(subBucket, key) { - collectBucket(write, subBucket, agg.getKey(subBucket), key); - }); - } else { - buckets.forEach(function (subBucket, key) { - write.cell(agg, agg.getKey(subBucket, key), function () { - collectBucket(write, subBucket, agg.getKey(subBucket, key)); - }); - }); - } - } else if (write.partialRows && write.metricsForAllBuckets && write.minimalColumns) { - // we don't have any buckets, but we do have metrics at this - // level, then pass all the empty buckets and jump back in for - // the metrics. - write.aggStack.unshift(agg); - passEmptyBuckets(write, bucket, key); - write.aggStack.shift(); + switch (agg.schema.group) { + case 'buckets': + var buckets = new Buckets(bucket[agg.id]); + if (buckets.length) { + var splitting = write.canSplit && agg.schema.name === 'split'; + if (splitting) { + write.split(agg, buckets, function forEachBucket(subBucket, key) { + collectBucket(write, subBucket, agg.getKey(subBucket), key); + }); } else { - // we don't have any buckets, and we don't have isHierarchical - // data, so no metrics, just try to write the row + buckets.forEach(function (subBucket, key) { + write.cell(agg, agg.getKey(subBucket, key), function () { + collectBucket(write, subBucket, agg.getKey(subBucket, key)); + }); + }); + } + } else if (write.partialRows && write.metricsForAllBuckets && write.minimalColumns) { + // we don't have any buckets, but we do have metrics at this + // level, then pass all the empty buckets and jump back in for + // the metrics. + write.aggStack.unshift(agg); + passEmptyBuckets(write, bucket, key); + write.aggStack.shift(); + } else { + // we don't have any buckets, and we don't have isHierarchical + // data, so no metrics, just try to write the row + write.row(); + } + break; + case 'metrics': + var value = agg.getValue(bucket); + write.cell(agg, value, function () { + if (!write.aggStack.length) { + // row complete write.row(); + } else { + // process the next agg at this same level + collectBucket(write, bucket, key); } - break; - case 'metrics': - var value = agg.getValue(bucket); - write.cell(agg, value, function () { - if (!write.aggStack.length) { - // row complete - write.row(); - } else { - // process the next agg at this same level - collectBucket(write, bucket, key); - } - }); - break; - } - - write.aggStack.unshift(agg); + }); + break; } - // write empty values for each bucket agg, then write - // the metrics from the initial bucket using collectBucket() - function passEmptyBuckets(write, bucket, key) { - var agg = write.aggStack.shift(); + write.aggStack.unshift(agg); + } - switch (agg.schema.group) { - case 'metrics': - // pass control back to collectBucket() - write.aggStack.unshift(agg); - collectBucket(write, bucket, key); - return; + // write empty values for each bucket agg, then write + // the metrics from the initial bucket using collectBucket() + function passEmptyBuckets(write, bucket, key) { + var agg = write.aggStack.shift(); - case 'buckets': - write.cell(agg, '', function () { - passEmptyBuckets(write, bucket, key); - }); - } + switch (agg.schema.group) { + case 'metrics': + // pass control back to collectBucket() + write.aggStack.unshift(agg); + collectBucket(write, bucket, key); + return; - write.aggStack.unshift(agg); + case 'buckets': + write.cell(agg, '', function () { + passEmptyBuckets(write, bucket, key); + }); } - return notify.timed('tabify agg response', tabifyAggResponse); - }; -}); + write.aggStack.unshift(agg); + } + + return notify.timed('tabify agg response', tabifyAggResponse); +}; diff --git a/src/ui/public/agg_table/agg_table.js b/src/ui/public/agg_table/agg_table.js index 9104e94b1d478c..822bcac4dd25a4 100644 --- a/src/ui/public/agg_table/agg_table.js +++ b/src/ui/public/agg_table/agg_table.js @@ -2,100 +2,98 @@ import 'ui/paginated_table'; import 'ui/compile_recursive_directive'; import 'ui/agg_table/agg_table.less'; import _ from 'lodash'; -define(function (require) { - require('ui/modules') - .get('kibana') - .directive('kbnAggTable', function ($filter, config, Private, compileRecursiveDirective) { +require('ui/modules') +.get('kibana') +.directive('kbnAggTable', function ($filter, config, Private, compileRecursiveDirective) { - return { - restrict: 'E', - template: require('ui/agg_table/agg_table.html'), - scope: { - table: '=', - perPage: '=?', - exportTitle: '=?' - }, - controllerAs: 'aggTable', - compile: function ($el) { - // Use the compile function from the RecursionHelper, - // And return the linking function(s) which it returns - return compileRecursiveDirective.compile($el); - }, - controller: function ($scope) { - var self = this; + return { + restrict: 'E', + template: require('ui/agg_table/agg_table.html'), + scope: { + table: '=', + perPage: '=?', + exportTitle: '=?' + }, + controllerAs: 'aggTable', + compile: function ($el) { + // Use the compile function from the RecursionHelper, + // And return the linking function(s) which it returns + return compileRecursiveDirective.compile($el); + }, + controller: function ($scope) { + var self = this; - self.sort = null; - self._saveAs = require('@spalger/filesaver').saveAs; - self.csv = { - separator: config.get('csv:separator'), - quoteValues: config.get('csv:quoteValues') - }; + self.sort = null; + self._saveAs = require('@spalger/filesaver').saveAs; + self.csv = { + separator: config.get('csv:separator'), + quoteValues: config.get('csv:quoteValues') + }; - self.exportAsCsv = function (formatted) { - var csv = new Blob([self.toCsv(formatted)], { type: 'text/plain' }); - self._saveAs(csv, self.csv.filename); - }; + self.exportAsCsv = function (formatted) { + var csv = new Blob([self.toCsv(formatted)], { type: 'text/plain' }); + self._saveAs(csv, self.csv.filename); + }; - self.toCsv = function (formatted) { - var rows = $scope.table.rows; - var columns = formatted ? $scope.formattedColumns : $scope.table.columns; - var nonAlphaNumRE = /[^a-zA-Z0-9]/; - var allDoubleQuoteRE = /"/g; + self.toCsv = function (formatted) { + var rows = $scope.table.rows; + var columns = formatted ? $scope.formattedColumns : $scope.table.columns; + var nonAlphaNumRE = /[^a-zA-Z0-9]/; + var allDoubleQuoteRE = /"/g; - function escape(val) { - if (!formatted && _.isObject(val)) val = val.valueOf(); - val = String(val); - if (self.csv.quoteValues && nonAlphaNumRE.test(val)) { - val = '"' + val.replace(allDoubleQuoteRE, '""') + '"'; - } - return val; + function escape(val) { + if (!formatted && _.isObject(val)) val = val.valueOf(); + val = String(val); + if (self.csv.quoteValues && nonAlphaNumRE.test(val)) { + val = '"' + val.replace(allDoubleQuoteRE, '""') + '"'; } + return val; + } - // escape each cell in each row - var csvRows = rows.map(function (row) { - return row.map(escape); - }); + // escape each cell in each row + var csvRows = rows.map(function (row) { + return row.map(escape); + }); - // add the columns to the rows - csvRows.unshift(columns.map(function (col) { - return escape(col.title); - })); + // add the columns to the rows + csvRows.unshift(columns.map(function (col) { + return escape(col.title); + })); - return csvRows.map(function (row) { - return row.join(self.csv.separator) + '\r\n'; - }).join(''); - }; + return csvRows.map(function (row) { + return row.join(self.csv.separator) + '\r\n'; + }).join(''); + }; - $scope.$watch('table', function () { - var table = $scope.table; + $scope.$watch('table', function () { + var table = $scope.table; - if (!table) { - $scope.rows = null; - $scope.formattedColumns = null; - return; - } + if (!table) { + $scope.rows = null; + $scope.formattedColumns = null; + return; + } - self.csv.filename = ($scope.exportTitle || table.title() || 'table') + '.csv'; - $scope.rows = table.rows; - $scope.formattedColumns = table.columns.map(function (col, i) { - var agg = $scope.table.aggConfig(col); - var field = agg.field(); - var formattedColumn = { - title: col.title, - filterable: field && field.filterable && agg.schema.group === 'buckets' - }; + self.csv.filename = ($scope.exportTitle || table.title() || 'table') + '.csv'; + $scope.rows = table.rows; + $scope.formattedColumns = table.columns.map(function (col, i) { + var agg = $scope.table.aggConfig(col); + var field = agg.field(); + var formattedColumn = { + title: col.title, + filterable: field && field.filterable && agg.schema.group === 'buckets' + }; - var last = i === (table.columns.length - 1); + var last = i === (table.columns.length - 1); - if (last || (agg.schema.group === 'metrics')) { - formattedColumn.class = 'visualize-table-right'; - } + if (last || (agg.schema.group === 'metrics')) { + formattedColumn.class = 'visualize-table-right'; + } - return formattedColumn; - }); + return formattedColumn; }); - } - }; - }); + }); + } + }; }); diff --git a/src/ui/public/agg_table/agg_table_group.js b/src/ui/public/agg_table/agg_table_group.js index fb10e1c90c0a52..5f87a432093f72 100644 --- a/src/ui/public/agg_table/agg_table_group.js +++ b/src/ui/public/agg_table/agg_table_group.js @@ -1,39 +1,37 @@ import 'ui/compile_recursive_directive'; import 'ui/agg_table'; -define(function (require) { - require('ui/modules') - .get('kibana') - .directive('kbnAggTableGroup', function (compileRecursiveDirective) { - return { - restrict: 'E', - template: require('ui/agg_table/agg_table_group.html'), - scope: { - group: '=', - perPage: '=?', - exportTitle: '=?' - }, - compile: function ($el) { - // Use the compile function from the RecursionHelper, - // And return the linking function(s) which it returns - return compileRecursiveDirective.compile($el, { - post: function ($scope) { - $scope.$watch('group', function (group) { - // clear the previous "state" - $scope.rows = $scope.columns = false; +require('ui/modules') +.get('kibana') +.directive('kbnAggTableGroup', function (compileRecursiveDirective) { + return { + restrict: 'E', + template: require('ui/agg_table/agg_table_group.html'), + scope: { + group: '=', + perPage: '=?', + exportTitle: '=?' + }, + compile: function ($el) { + // Use the compile function from the RecursionHelper, + // And return the linking function(s) which it returns + return compileRecursiveDirective.compile($el, { + post: function ($scope) { + $scope.$watch('group', function (group) { + // clear the previous "state" + $scope.rows = $scope.columns = false; - if (!group || !group.tables.length) return; + if (!group || !group.tables.length) return; - var firstTable = group.tables[0]; - var params = firstTable.aggConfig && firstTable.aggConfig.params; - // render groups that have Table children as if they were rows, because iteration is cleaner - var childLayout = (params && !params.row) ? 'columns' : 'rows'; + var firstTable = group.tables[0]; + var params = firstTable.aggConfig && firstTable.aggConfig.params; + // render groups that have Table children as if they were rows, because iteration is cleaner + var childLayout = (params && !params.row) ? 'columns' : 'rows'; - $scope[childLayout] = group.tables; - }); - } - }); - } - }; - }); + $scope[childLayout] = group.tables; + }); + } + }); + } + }; }); diff --git a/src/ui/public/agg_types/AggParams.js b/src/ui/public/agg_types/AggParams.js index fcce3f5f121749..1cb60963eef755 100644 --- a/src/ui/public/agg_types/AggParams.js +++ b/src/ui/public/agg_types/AggParams.js @@ -7,73 +7,71 @@ import AggTypesParamTypesRegexProvider from 'ui/agg_types/param_types/regex'; import AggTypesParamTypesStringProvider from 'ui/agg_types/param_types/string'; import AggTypesParamTypesRawJsonProvider from 'ui/agg_types/param_types/raw_json'; import AggTypesParamTypesBaseProvider from 'ui/agg_types/param_types/base'; -define(function (require) { - return function AggParamsFactory(Private) { +export default function AggParamsFactory(Private) { - var paramTypeMap = { - field: Private(AggTypesParamTypesFieldProvider), - optioned: Private(AggTypesParamTypesOptionedProvider), - regex: Private(AggTypesParamTypesRegexProvider), - string: Private(AggTypesParamTypesStringProvider), - json: Private(AggTypesParamTypesRawJsonProvider), - _default: Private(AggTypesParamTypesBaseProvider) - }; - - /** - * Wraps a list of {{#crossLink "AggParam"}}{{/crossLink}} objects; owned by an {{#crossLink "AggType"}}{{/crossLink}} - * - * used to create: - * - `FieldAggParam` – When the config has `name: "field"` - * - `*AggParam` – When the type matches something in the map above - * - `BaseAggParam` – All other params - * - * @class AggParams - * @constructor - * @extends IndexedArray - * @param {object[]} params - array of params that get new-ed up as AggParam objects as descibed above - */ - _.class(AggParams).inherits(IndexedArray); - function AggParams(params) { - AggParams.Super.call(this, { - index: ['name'], - initialSet: params.map(function (config) { - var type = config.name === 'field' ? config.name : config.type; - var Class = paramTypeMap[type] || paramTypeMap._default; - return new Class(config); - }) - }); - } + var paramTypeMap = { + field: Private(AggTypesParamTypesFieldProvider), + optioned: Private(AggTypesParamTypesOptionedProvider), + regex: Private(AggTypesParamTypesRegexProvider), + string: Private(AggTypesParamTypesStringProvider), + json: Private(AggTypesParamTypesRawJsonProvider), + _default: Private(AggTypesParamTypesBaseProvider) + }; - /** - * Reads an aggConfigs - * - * @method write - * @param {AggConfig} aggConfig - * the AggConfig object who's type owns these aggParams and contains the param values for our param defs - * @param {object} [locals] - * an array of locals that will be available to the write function (can be used to enhance - * the quality of things like date_histogram's "auto" interval) - * @return {object} output - * output of the write calls, reduced into a single object. A `params: {}` property is exposed on the - * output object which is used to create the agg dsl for the search request. All other properties - * are dependent on the AggParam#write methods which should be studied for each AggType. - */ - AggParams.prototype.write = function (aggConfig, locals) { - var output = { params: {} }; - locals = locals || {}; + /** + * Wraps a list of {{#crossLink "AggParam"}}{{/crossLink}} objects; owned by an {{#crossLink "AggType"}}{{/crossLink}} + * + * used to create: + * - `FieldAggParam` – When the config has `name: "field"` + * - `*AggParam` – When the type matches something in the map above + * - `BaseAggParam` – All other params + * + * @class AggParams + * @constructor + * @extends IndexedArray + * @param {object[]} params - array of params that get new-ed up as AggParam objects as descibed above + */ + _.class(AggParams).inherits(IndexedArray); + function AggParams(params) { + AggParams.Super.call(this, { + index: ['name'], + initialSet: params.map(function (config) { + var type = config.name === 'field' ? config.name : config.type; + var Class = paramTypeMap[type] || paramTypeMap._default; + return new Class(config); + }) + }); + } - this.forEach(function (param) { - if (param.write) { - param.write(aggConfig, output, locals); - } else { - output.params[param.name] = aggConfig.params[param.name]; - } - }); + /** + * Reads an aggConfigs + * + * @method write + * @param {AggConfig} aggConfig + * the AggConfig object who's type owns these aggParams and contains the param values for our param defs + * @param {object} [locals] + * an array of locals that will be available to the write function (can be used to enhance + * the quality of things like date_histogram's "auto" interval) + * @return {object} output + * output of the write calls, reduced into a single object. A `params: {}` property is exposed on the + * output object which is used to create the agg dsl for the search request. All other properties + * are dependent on the AggParam#write methods which should be studied for each AggType. + */ + AggParams.prototype.write = function (aggConfig, locals) { + var output = { params: {} }; + locals = locals || {}; - return output; - }; + this.forEach(function (param) { + if (param.write) { + param.write(aggConfig, output, locals); + } else { + output.params[param.name] = aggConfig.params[param.name]; + } + }); - return AggParams; + return output; }; -}); + + return AggParams; +}; diff --git a/src/ui/public/agg_types/AggType.js b/src/ui/public/agg_types/AggType.js index 316d0fec84e498..92e53ef7969a33 100644 --- a/src/ui/public/agg_types/AggType.js +++ b/src/ui/public/agg_types/AggType.js @@ -1,152 +1,150 @@ import _ from 'lodash'; import AggTypesAggParamsProvider from 'ui/agg_types/AggParams'; import RegistryFieldFormatsProvider from 'ui/registry/field_formats'; -define(function (require) { - return function AggTypeFactory(Private) { - var AggParams = Private(AggTypesAggParamsProvider); - var fieldFormats = Private(RegistryFieldFormatsProvider); +export default function AggTypeFactory(Private) { + var AggParams = Private(AggTypesAggParamsProvider); + var fieldFormats = Private(RegistryFieldFormatsProvider); + + /** + * Generic AggType Constructor + * + * Used to create the values exposed by the agg_types module. + * + * @class AggType + * @private + * @param {object} config - used to set the properties of the AggType + */ + function AggType(config) { /** - * Generic AggType Constructor + * the unique, unchanging, name that we have assigned this aggType * - * Used to create the values exposed by the agg_types module. + * @property name + * @type {string} + */ + this.name = config.name; + + /** + * the name of the elasticsearch aggregation that this aggType represents. Usually just this.name * - * @class AggType - * @private - * @param {object} config - used to set the properties of the AggType + * @property name + * @type {string} */ - function AggType(config) { - - /** - * the unique, unchanging, name that we have assigned this aggType - * - * @property name - * @type {string} - */ - this.name = config.name; - - /** - * the name of the elasticsearch aggregation that this aggType represents. Usually just this.name - * - * @property name - * @type {string} - */ - this.dslName = config.dslName || config.name; - - /** - * the user friendly name that will be shown in the ui for this aggType - * - * @property title - * @type {string} - */ - this.title = config.title; - - /** - * a function that will be called when this aggType is assigned to - * an aggConfig, and that aggConfig is being rendered (in a form, chart, etc.). - * - * @method makeLabel - * @param {AggConfig} aggConfig - an agg config of this type - * @returns {string} - label that can be used in the ui to descripe the aggConfig - */ - this.makeLabel = config.makeLabel || _.constant(this.name); - - /** - * Describes if this aggType creates data that is ordered, and if that ordered data - * is some sort of time series. - * - * If the aggType does not create ordered data, set this to something "falsey". - * - * If this does create orderedData, then the value should be an object. - * - * If the orderdata is some sort of time series, `this.ordered` should be an object - * with the property `date: true` - * - * @property ordered - * @type {object|undefined} - */ - this.ordered = config.ordered; - - /** - * Flag that prevents this aggregation from being included in the dsl. This is only - * used by the count aggregation (currently) since it doesn't really exist and it's output - * is available on every bucket. - * - * @type {Boolean} - */ - this.hasNoDsl = !!config.hasNoDsl; - - /** - * The method to create a filter representation of the bucket - * @param {object} aggConfig The instance of the aggConfig - * @param {mixed} key The key for the bucket - * @returns {object} The filter - */ - this.createFilter = config.createFilter; - - /** - * An instance of {{#crossLink "AggParams"}}{{/crossLink}}. - * - * @property params - * @type {AggParams} - */ - this.params = config.params || []; - if (!(this.params instanceof AggParams)) { - // always append the raw JSON param - this.params.push({ - name: 'json', - type: 'json', - advanced: true - }); - // always append custom label + this.dslName = config.dslName || config.name; - if (config.customLabels !== false) { - this.params.push({ - name: 'customLabel', - type: 'string', - write: _.noop - }); - } + /** + * the user friendly name that will be shown in the ui for this aggType + * + * @property title + * @type {string} + */ + this.title = config.title; - this.params = new AggParams(this.params); - } + /** + * a function that will be called when this aggType is assigned to + * an aggConfig, and that aggConfig is being rendered (in a form, chart, etc.). + * + * @method makeLabel + * @param {AggConfig} aggConfig - an agg config of this type + * @returns {string} - label that can be used in the ui to descripe the aggConfig + */ + this.makeLabel = config.makeLabel || _.constant(this.name); + + /** + * Describes if this aggType creates data that is ordered, and if that ordered data + * is some sort of time series. + * + * If the aggType does not create ordered data, set this to something "falsey". + * + * If this does create orderedData, then the value should be an object. + * + * If the orderdata is some sort of time series, `this.ordered` should be an object + * with the property `date: true` + * + * @property ordered + * @type {object|undefined} + */ + this.ordered = config.ordered; - /** - * Designed for multi-value metric aggs, this method can return a - * set of AggConfigs that should replace this aggConfig in result sets - * that walk the AggConfig set. - * - * @method getResponseAggs - * @returns {array[AggConfig]|undefined} - an array of aggConfig objects - * that should replace this one, - * or undefined - */ - this.getResponseAggs = config.getResponseAggs || _.noop; - - /** - * A function that will be called each time an aggConfig of this type - * is created, giving the agg type a chance to modify the agg config - */ - this.decorateAggConfig = config.decorateAggConfig || null; - - if (config.getFormat) { - this.getFormat = config.getFormat; + /** + * Flag that prevents this aggregation from being included in the dsl. This is only + * used by the count aggregation (currently) since it doesn't really exist and it's output + * is available on every bucket. + * + * @type {Boolean} + */ + this.hasNoDsl = !!config.hasNoDsl; + + /** + * The method to create a filter representation of the bucket + * @param {object} aggConfig The instance of the aggConfig + * @param {mixed} key The key for the bucket + * @returns {object} The filter + */ + this.createFilter = config.createFilter; + + /** + * An instance of {{#crossLink "AggParams"}}{{/crossLink}}. + * + * @property params + * @type {AggParams} + */ + this.params = config.params || []; + if (!(this.params instanceof AggParams)) { + // always append the raw JSON param + this.params.push({ + name: 'json', + type: 'json', + advanced: true + }); + // always append custom label + + if (config.customLabels !== false) { + this.params.push({ + name: 'customLabel', + type: 'string', + write: _.noop + }); } + + this.params = new AggParams(this.params); } /** - * Pick a format for the values produced by this agg type, - * overriden by several metrics that always output a simple - * number + * Designed for multi-value metric aggs, this method can return a + * set of AggConfigs that should replace this aggConfig in result sets + * that walk the AggConfig set. * - * @param {agg} agg - the agg to pick a format for - * @return {FieldFromat} + * @method getResponseAggs + * @returns {array[AggConfig]|undefined} - an array of aggConfig objects + * that should replace this one, + * or undefined */ - AggType.prototype.getFormat = function (agg) { - var field = agg.field(); - return field ? field.format : fieldFormats.getDefaultInstance('string'); - }; + this.getResponseAggs = config.getResponseAggs || _.noop; - return AggType; + /** + * A function that will be called each time an aggConfig of this type + * is created, giving the agg type a chance to modify the agg config + */ + this.decorateAggConfig = config.decorateAggConfig || null; + + if (config.getFormat) { + this.getFormat = config.getFormat; + } + } + + /** + * Pick a format for the values produced by this agg type, + * overriden by several metrics that always output a simple + * number + * + * @param {agg} agg - the agg to pick a format for + * @return {FieldFromat} + */ + AggType.prototype.getFormat = function (agg) { + var field = agg.field(); + return field ? field.format : fieldFormats.getDefaultInstance('string'); }; -}); + + return AggType; +}; diff --git a/src/ui/public/agg_types/buckets/_bucket_agg_type.js b/src/ui/public/agg_types/buckets/_bucket_agg_type.js index cc16227d886550..830cd635fbee1a 100644 --- a/src/ui/public/agg_types/buckets/_bucket_agg_type.js +++ b/src/ui/public/agg_types/buckets/_bucket_agg_type.js @@ -1,22 +1,20 @@ import _ from 'lodash'; import AggTypesAggTypeProvider from 'ui/agg_types/AggType'; -define(function (require) { - return function BucketAggTypeProvider(Private) { - var AggType = Private(AggTypesAggTypeProvider); +export default function BucketAggTypeProvider(Private) { + var AggType = Private(AggTypesAggTypeProvider); - _.class(BucketAggType).inherits(AggType); - function BucketAggType(config) { - BucketAggType.Super.call(this, config); + _.class(BucketAggType).inherits(AggType); + function BucketAggType(config) { + BucketAggType.Super.call(this, config); - if (_.isFunction(config.getKey)) { - this.getKey = config.getKey; - } + if (_.isFunction(config.getKey)) { + this.getKey = config.getKey; } + } - BucketAggType.prototype.getKey = function (bucket, key) { - return key || bucket.key; - }; - - return BucketAggType; + BucketAggType.prototype.getKey = function (bucket, key) { + return key || bucket.key; }; -}); + + return BucketAggType; +}; diff --git a/src/ui/public/agg_types/buckets/_bucket_count_between.js b/src/ui/public/agg_types/buckets/_bucket_count_between.js index a969011a9cfec8..9acc16c66e041e 100644 --- a/src/ui/public/agg_types/buckets/_bucket_count_between.js +++ b/src/ui/public/agg_types/buckets/_bucket_count_between.js @@ -1,44 +1,42 @@ -define(function (require) { - return function BucketCountBetweenProvider() { +export default function BucketCountBetweenProvider() { - /** - * Count the number of bucket aggs between two agg config objects owned - * by the same vis. - * - * If one of the two aggs was not found in the agg list, returns null. - * If a was found after b, the count will be negative - * If a was found first, the count will be positive. - * - * @param {AggConfig} aggConfigA - the aggConfig that is expected first - * @param {AggConfig} aggConfigB - the aggConfig that is expected second - * @return {null|number} - */ - function bucketCountBetween(aggConfigA, aggConfigB) { - var aggs = aggConfigA.vis.aggs.getRequestAggs(); + /** + * Count the number of bucket aggs between two agg config objects owned + * by the same vis. + * + * If one of the two aggs was not found in the agg list, returns null. + * If a was found after b, the count will be negative + * If a was found first, the count will be positive. + * + * @param {AggConfig} aggConfigA - the aggConfig that is expected first + * @param {AggConfig} aggConfigB - the aggConfig that is expected second + * @return {null|number} + */ + function bucketCountBetween(aggConfigA, aggConfigB) { + var aggs = aggConfigA.vis.aggs.getRequestAggs(); - var aIndex = aggs.indexOf(aggConfigA); - var bIndex = aggs.indexOf(aggConfigB); + var aIndex = aggs.indexOf(aggConfigA); + var bIndex = aggs.indexOf(aggConfigB); - if (aIndex === -1 || bIndex === -1) { - return null; - } + if (aIndex === -1 || bIndex === -1) { + return null; + } - // return a negative distance, if b is before a - var negative = (aIndex > bIndex); + // return a negative distance, if b is before a + var negative = (aIndex > bIndex); - var count = aggs - .slice(Math.min(aIndex, bIndex), Math.max(aIndex, bIndex)) - .reduce(function (count, cfg) { - if (cfg === aggConfigA || cfg === aggConfigB || cfg.schema.group !== 'buckets') { - return count; - } else { - return count + 1; - } - }, 0); + var count = aggs + .slice(Math.min(aIndex, bIndex), Math.max(aIndex, bIndex)) + .reduce(function (count, cfg) { + if (cfg === aggConfigA || cfg === aggConfigB || cfg.schema.group !== 'buckets') { + return count; + } else { + return count + 1; + } + }, 0); - return (negative ? -1 : 1) * count; - } + return (negative ? -1 : 1) * count; + } - return bucketCountBetween; - }; -}); + return bucketCountBetween; +}; diff --git a/src/ui/public/agg_types/buckets/_interval_options.js b/src/ui/public/agg_types/buckets/_interval_options.js index e3d81875d422c2..a8ad506e1db09d 100644 --- a/src/ui/public/agg_types/buckets/_interval_options.js +++ b/src/ui/public/agg_types/buckets/_interval_options.js @@ -1,53 +1,51 @@ import moment from 'moment'; import 'ui/directives/input_whole_number'; -define(function (require) { - return function IntervalOptionsService(Private) { +export default function IntervalOptionsService(Private) { - // shorthand - var ms = function (type) { return moment.duration(1, type).asMilliseconds(); }; + // shorthand + var ms = function (type) { return moment.duration(1, type).asMilliseconds(); }; - return [ - { - display: 'Auto', - val: 'auto', - enabled: function (agg) { - // not only do we need a time field, but the selected field needs - // to be the time field. (see #3028) - return agg.fieldIsTimeField(); - } - }, - { - display: 'Second', - val: 's' - }, - { - display: 'Minute', - val: 'm' - }, - { - display: 'Hourly', - val: 'h' - }, - { - display: 'Daily', - val: 'd' - }, - { - display: 'Weekly', - val: 'w' - }, - { - display: 'Monthly', - val: 'M' - }, - { - display: 'Yearly', - val: 'y' - }, - { - display: 'Custom', - val: 'custom' + return [ + { + display: 'Auto', + val: 'auto', + enabled: function (agg) { + // not only do we need a time field, but the selected field needs + // to be the time field. (see #3028) + return agg.fieldIsTimeField(); } - ]; - }; -}); + }, + { + display: 'Second', + val: 's' + }, + { + display: 'Minute', + val: 'm' + }, + { + display: 'Hourly', + val: 'h' + }, + { + display: 'Daily', + val: 'd' + }, + { + display: 'Weekly', + val: 'w' + }, + { + display: 'Monthly', + val: 'M' + }, + { + display: 'Yearly', + val: 'y' + }, + { + display: 'Custom', + val: 'custom' + } + ]; +}; diff --git a/src/ui/public/agg_types/buckets/create_filter/date_histogram.js b/src/ui/public/agg_types/buckets/create_filter/date_histogram.js index def48fb3cab57c..da88378324b7a7 100644 --- a/src/ui/public/agg_types/buckets/create_filter/date_histogram.js +++ b/src/ui/public/agg_types/buckets/create_filter/date_histogram.js @@ -1,17 +1,15 @@ import moment from 'moment'; import buildRangeFilter from 'ui/filter_manager/lib/range'; -define(function (require) { - return function createDateHistogramFilterProvider(Private) { +export default function createDateHistogramFilterProvider(Private) { - return function (agg, key) { - var start = moment(key); - var interval = agg.buckets.getInterval(); - - return buildRangeFilter(agg.params.field, { - gte: start.valueOf(), - lte: start.add(interval).subtract(1, 'ms').valueOf() - }, agg.vis.indexPattern); - }; + return function (agg, key) { + var start = moment(key); + var interval = agg.buckets.getInterval(); + return buildRangeFilter(agg.params.field, { + gte: start.valueOf(), + lte: start.add(interval).subtract(1, 'ms').valueOf() + }, agg.vis.indexPattern); }; -}); + +}; diff --git a/src/ui/public/agg_types/buckets/create_filter/date_range.js b/src/ui/public/agg_types/buckets/create_filter/date_range.js index c0bb06fa46848f..fba9d3c64d1bdb 100644 --- a/src/ui/public/agg_types/buckets/create_filter/date_range.js +++ b/src/ui/public/agg_types/buckets/create_filter/date_range.js @@ -1,19 +1,17 @@ import dateRange from 'ui/utils/date_range'; import buildRangeFilter from 'ui/filter_manager/lib/range'; -define(function (require) { - return function createDateRangeFilterProvider(config) { +export default function createDateRangeFilterProvider(config) { - return function (agg, key) { - var range = dateRange.parse(key, config.get('dateFormat')); + return function (agg, key) { + var range = dateRange.parse(key, config.get('dateFormat')); - var filter = {}; - if (range.from) filter.gte = +range.from; - if (range.to) filter.lt = +range.to; - if (range.to && range.from) filter.format = 'epoch_millis'; - - return buildRangeFilter(agg.params.field, filter, agg.vis.indexPattern); - }; + var filter = {}; + if (range.from) filter.gte = +range.from; + if (range.to) filter.lt = +range.to; + if (range.to && range.from) filter.format = 'epoch_millis'; + return buildRangeFilter(agg.params.field, filter, agg.vis.indexPattern); }; -}); + +}; diff --git a/src/ui/public/agg_types/buckets/create_filter/filters.js b/src/ui/public/agg_types/buckets/create_filter/filters.js index c4252bb2010adf..60409405af0004 100644 --- a/src/ui/public/agg_types/buckets/create_filter/filters.js +++ b/src/ui/public/agg_types/buckets/create_filter/filters.js @@ -1,15 +1,13 @@ import buildQueryFilter from 'ui/filter_manager/lib/query'; import _ from 'lodash'; -define(function (require) { - return function CreateFilterFiltersProvider(Private) { - return function (aggConfig, key) { - // have the aggConfig write agg dsl params - var dslFilters = _.get(aggConfig.toDsl(), 'filters.filters'); - var filter = dslFilters[key]; +export default function CreateFilterFiltersProvider(Private) { + return function (aggConfig, key) { + // have the aggConfig write agg dsl params + var dslFilters = _.get(aggConfig.toDsl(), 'filters.filters'); + var filter = dslFilters[key]; - if (filter) { - return buildQueryFilter(filter.query, aggConfig.vis.indexPattern.id); - } - }; + if (filter) { + return buildQueryFilter(filter.query, aggConfig.vis.indexPattern.id); + } }; -}); +}; diff --git a/src/ui/public/agg_types/buckets/create_filter/histogram.js b/src/ui/public/agg_types/buckets/create_filter/histogram.js index d491857d5dc2bb..250bebbeae239c 100644 --- a/src/ui/public/agg_types/buckets/create_filter/histogram.js +++ b/src/ui/public/agg_types/buckets/create_filter/histogram.js @@ -1,16 +1,14 @@ import buildRangeFilter from 'ui/filter_manager/lib/range'; -define(function (require) { - return function createHistogramFitlerProvider(Private) { - return function (aggConfig, key) { - var value = parseInt(key, 10); +export default function createHistogramFitlerProvider(Private) { + return function (aggConfig, key) { + var value = parseInt(key, 10); - return buildRangeFilter( - aggConfig.params.field, - {gte: value, lt: value + aggConfig.params.interval}, - aggConfig.vis.indexPattern, - aggConfig.fieldFormatter()(key) - ); - }; + return buildRangeFilter( + aggConfig.params.field, + {gte: value, lt: value + aggConfig.params.interval}, + aggConfig.vis.indexPattern, + aggConfig.fieldFormatter()(key) + ); }; -}); +}; diff --git a/src/ui/public/agg_types/buckets/create_filter/ip_range.js b/src/ui/public/agg_types/buckets/create_filter/ip_range.js index cbc3e52f12e946..c28fe940afa0e2 100644 --- a/src/ui/public/agg_types/buckets/create_filter/ip_range.js +++ b/src/ui/public/agg_types/buckets/create_filter/ip_range.js @@ -1,20 +1,18 @@ import CidrMask from 'ui/utils/CidrMask'; import buildRangeFilter from 'ui/filter_manager/lib/range'; -define(function (require) { - return function createIpRangeFilterProvider() { - return function (aggConfig, key) { - var range; - if (aggConfig.params.ipRangeType === 'mask') { - range = new CidrMask(key).getRange(); - } else { - var addresses = key.split(/\-/); - range = { - from: addresses[0], - to: addresses[1] - }; - } +export default function createIpRangeFilterProvider() { + return function (aggConfig, key) { + var range; + if (aggConfig.params.ipRangeType === 'mask') { + range = new CidrMask(key).getRange(); + } else { + var addresses = key.split(/\-/); + range = { + from: addresses[0], + to: addresses[1] + }; + } - return buildRangeFilter(aggConfig.params.field, {gte: range.from, lte: range.to}, aggConfig.vis.indexPattern); - }; + return buildRangeFilter(aggConfig.params.field, {gte: range.from, lte: range.to}, aggConfig.vis.indexPattern); }; -}); +}; diff --git a/src/ui/public/agg_types/buckets/create_filter/range.js b/src/ui/public/agg_types/buckets/create_filter/range.js index 5bd87ef924bed3..a64a31dd4fe84a 100644 --- a/src/ui/public/agg_types/buckets/create_filter/range.js +++ b/src/ui/public/agg_types/buckets/create_filter/range.js @@ -1,13 +1,11 @@ import buildRangeFilter from 'ui/filter_manager/lib/range'; -define(function (require) { - return function createRangeFilterProvider(Private) { - return function (aggConfig, key) { - return buildRangeFilter( - aggConfig.params.field, - key, - aggConfig.vis.indexPattern, - aggConfig.fieldFormatter()(key) - ); - }; +export default function createRangeFilterProvider(Private) { + return function (aggConfig, key) { + return buildRangeFilter( + aggConfig.params.field, + key, + aggConfig.vis.indexPattern, + aggConfig.fieldFormatter()(key) + ); }; -}); +}; diff --git a/src/ui/public/agg_types/buckets/create_filter/terms.js b/src/ui/public/agg_types/buckets/create_filter/terms.js index a4f53db533c382..c3a6774e3682e1 100644 --- a/src/ui/public/agg_types/buckets/create_filter/terms.js +++ b/src/ui/public/agg_types/buckets/create_filter/terms.js @@ -1,8 +1,6 @@ import buildPhraseFilter from 'ui/filter_manager/lib/phrase'; -define(function (require) { - return function createTermsFilterProvider(Private) { - return function (aggConfig, key) { - return buildPhraseFilter(aggConfig.params.field, key, aggConfig.vis.indexPattern); - }; +export default function createTermsFilterProvider(Private) { + return function (aggConfig, key) { + return buildPhraseFilter(aggConfig.params.field, key, aggConfig.vis.indexPattern); }; -}); +}; diff --git a/src/ui/public/agg_types/buckets/date_histogram.js b/src/ui/public/agg_types/buckets/date_histogram.js index 75f785953d78a3..904021f015d063 100644 --- a/src/ui/public/agg_types/buckets/date_histogram.js +++ b/src/ui/public/agg_types/buckets/date_histogram.js @@ -8,159 +8,157 @@ import TimeBucketsProvider from 'ui/time_buckets'; import AggTypesBucketsCreateFilterDateHistogramProvider from 'ui/agg_types/buckets/create_filter/date_histogram'; import AggTypesBucketsIntervalOptionsProvider from 'ui/agg_types/buckets/_interval_options'; import ConfigDefaultsProvider from 'ui/config/defaults'; -define(function (require) { - return function DateHistogramAggType(timefilter, config, Private) { - var BucketAggType = Private(AggTypesBucketsBucketAggTypeProvider); - var TimeBuckets = Private(TimeBucketsProvider); - var createFilter = Private(AggTypesBucketsCreateFilterDateHistogramProvider); - var intervalOptions = Private(AggTypesBucketsIntervalOptionsProvider); - var configDefaults = Private(ConfigDefaultsProvider); - - var detectedTimezone = tzDetect.determine().name(); - var tzOffset = moment().format('Z'); - - function getInterval(agg) { - var interval = _.get(agg, ['params', 'interval']); - if (interval && interval.val === 'custom') interval = _.get(agg, ['params', 'customInterval']); - return interval; - } - - function setBounds(agg, force) { - if (agg.buckets._alreadySet && !force) return; - agg.buckets._alreadySet = true; - agg.buckets.setBounds(agg.fieldIsTimeField() && timefilter.getActiveBounds()); - } - - - return new BucketAggType({ - name: 'date_histogram', - title: 'Date Histogram', - ordered: { - date: true - }, - makeLabel: function (agg) { - var output = this.params.write(agg); - var params = output.params; - return params.field + ' per ' + (output.metricScaleText || output.bucketInterval.description); - }, - createFilter: createFilter, - decorateAggConfig: function () { - var buckets; - return { - buckets: { - configurable: true, - get: function () { - if (buckets) return buckets; - - buckets = new TimeBuckets(); - buckets.setInterval(getInterval(this)); - setBounds(this); - - return buckets; - } - } - }; - }, - params: [ - { - name: 'field', - filterFieldTypes: 'date', - default: function (agg) { - return agg.vis.indexPattern.timeFieldName; - }, - onChange: function (agg) { - if (_.get(agg, 'params.interval.val') === 'auto' && !agg.fieldIsTimeField()) { - delete agg.params.interval; - } - - setBounds(agg, true); +export default function DateHistogramAggType(timefilter, config, Private) { + var BucketAggType = Private(AggTypesBucketsBucketAggTypeProvider); + var TimeBuckets = Private(TimeBucketsProvider); + var createFilter = Private(AggTypesBucketsCreateFilterDateHistogramProvider); + var intervalOptions = Private(AggTypesBucketsIntervalOptionsProvider); + var configDefaults = Private(ConfigDefaultsProvider); + + var detectedTimezone = tzDetect.determine().name(); + var tzOffset = moment().format('Z'); + + function getInterval(agg) { + var interval = _.get(agg, ['params', 'interval']); + if (interval && interval.val === 'custom') interval = _.get(agg, ['params', 'customInterval']); + return interval; + } + + function setBounds(agg, force) { + if (agg.buckets._alreadySet && !force) return; + agg.buckets._alreadySet = true; + agg.buckets.setBounds(agg.fieldIsTimeField() && timefilter.getActiveBounds()); + } + + + return new BucketAggType({ + name: 'date_histogram', + title: 'Date Histogram', + ordered: { + date: true + }, + makeLabel: function (agg) { + var output = this.params.write(agg); + var params = output.params; + return params.field + ' per ' + (output.metricScaleText || output.bucketInterval.description); + }, + createFilter: createFilter, + decorateAggConfig: function () { + var buckets; + return { + buckets: { + configurable: true, + get: function () { + if (buckets) return buckets; + + buckets = new TimeBuckets(); + buckets.setInterval(getInterval(this)); + setBounds(this); + + return buckets; } + } + }; + }, + params: [ + { + name: 'field', + filterFieldTypes: 'date', + default: function (agg) { + return agg.vis.indexPattern.timeFieldName; }, + onChange: function (agg) { + if (_.get(agg, 'params.interval.val') === 'auto' && !agg.fieldIsTimeField()) { + delete agg.params.interval; + } - { - name: 'interval', - type: 'optioned', - deserialize: function (state) { - var interval = _.find(intervalOptions, {val: state}); - return interval || _.find(intervalOptions, function (option) { - // For upgrading from 4.0.x to 4.1.x - intervals are now stored as 'y' instead of 'year', - // but this maps the old values to the new values - return Number(moment.duration(1, state)) === Number(moment.duration(1, option.val)); + setBounds(agg, true); + } + }, + + { + name: 'interval', + type: 'optioned', + deserialize: function (state) { + var interval = _.find(intervalOptions, {val: state}); + return interval || _.find(intervalOptions, function (option) { + // For upgrading from 4.0.x to 4.1.x - intervals are now stored as 'y' instead of 'year', + // but this maps the old values to the new values + return Number(moment.duration(1, state)) === Number(moment.duration(1, option.val)); + }); + }, + default: 'auto', + options: intervalOptions, + editor: require('ui/agg_types/controls/interval.html'), + onRequest: function (agg) { + setBounds(agg, true); + }, + write: function (agg, output) { + setBounds(agg); + agg.buckets.setInterval(getInterval(agg)); + + var interval = agg.buckets.getInterval(); + output.bucketInterval = interval; + output.params.interval = interval.expression; + + var isDefaultTimezone = config.get('dateFormat:tz') === configDefaults['dateFormat:tz'].value; + output.params.time_zone = isDefaultTimezone ? + (detectedTimezone || tzOffset) : + config.get('dateFormat:tz'); + + var scaleMetrics = interval.scaled && interval.scale < 1; + if (scaleMetrics) { + scaleMetrics = _.every(agg.vis.aggs.bySchemaGroup.metrics, function (agg) { + return agg.type && (agg.type.name === 'count' || agg.type.name === 'sum'); }); - }, - default: 'auto', - options: intervalOptions, - editor: require('ui/agg_types/controls/interval.html'), - onRequest: function (agg) { - setBounds(agg, true); - }, - write: function (agg, output) { - setBounds(agg); - agg.buckets.setInterval(getInterval(agg)); - - var interval = agg.buckets.getInterval(); - output.bucketInterval = interval; - output.params.interval = interval.expression; - - var isDefaultTimezone = config.get('dateFormat:tz') === configDefaults['dateFormat:tz'].value; - output.params.time_zone = isDefaultTimezone ? - (detectedTimezone || tzOffset) : - config.get('dateFormat:tz'); - - var scaleMetrics = interval.scaled && interval.scale < 1; - if (scaleMetrics) { - scaleMetrics = _.every(agg.vis.aggs.bySchemaGroup.metrics, function (agg) { - return agg.type && (agg.type.name === 'count' || agg.type.name === 'sum'); - }); - } - - if (scaleMetrics) { - output.metricScale = interval.scale; - output.metricScaleText = interval.preScaled.description; - } } - }, - { - name: 'customInterval', - default: '2h', - write: _.noop - }, + if (scaleMetrics) { + output.metricScale = interval.scale; + output.metricScaleText = interval.preScaled.description; + } + } + }, - { - name: 'format' - }, + { + name: 'customInterval', + default: '2h', + write: _.noop + }, - { - name: 'min_doc_count', - default: 1 - }, + { + name: 'format' + }, + + { + name: 'min_doc_count', + default: 1 + }, + + { + name: 'extended_bounds', + default: {}, + write: function (agg, output) { + var val = agg.params.extended_bounds; + + if (val.min != null || val.max != null) { + output.params.extended_bounds = { + min: moment(val.min).valueOf(), + max: moment(val.max).valueOf() + }; + + return; + } - { - name: 'extended_bounds', - default: {}, - write: function (agg, output) { - var val = agg.params.extended_bounds; - - if (val.min != null || val.max != null) { - output.params.extended_bounds = { - min: moment(val.min).valueOf(), - max: moment(val.max).valueOf() - }; - - return; - } - - var bounds = timefilter.getActiveBounds(); - if (bounds) { - output.params.extended_bounds = { - min: moment(bounds.min).valueOf(), - max: moment(bounds.max).valueOf() - }; - } + var bounds = timefilter.getActiveBounds(); + if (bounds) { + output.params.extended_bounds = { + min: moment(bounds.min).valueOf(), + max: moment(bounds.max).valueOf() + }; } } - ] - }); - }; -}); + } + ] + }); +}; diff --git a/src/ui/public/agg_types/buckets/date_range.js b/src/ui/public/agg_types/buckets/date_range.js index 932443986a206c..91bf59b85a2c30 100644 --- a/src/ui/public/agg_types/buckets/date_range.js +++ b/src/ui/public/agg_types/buckets/date_range.js @@ -4,42 +4,40 @@ import 'ui/directives/validate_date_math'; import AggTypesBucketsBucketAggTypeProvider from 'ui/agg_types/buckets/_bucket_agg_type'; import AggTypesBucketsCreateFilterDateRangeProvider from 'ui/agg_types/buckets/create_filter/date_range'; import RegistryFieldFormatsProvider from 'ui/registry/field_formats'; -define(function (require) { - return function DateRangeAggDefinition(Private, config) { - var BucketAggType = Private(AggTypesBucketsBucketAggTypeProvider); - var createFilter = Private(AggTypesBucketsCreateFilterDateRangeProvider); - var fieldFormats = Private(RegistryFieldFormatsProvider); +export default function DateRangeAggDefinition(Private, config) { + var BucketAggType = Private(AggTypesBucketsBucketAggTypeProvider); + var createFilter = Private(AggTypesBucketsCreateFilterDateRangeProvider); + var fieldFormats = Private(RegistryFieldFormatsProvider); - return new BucketAggType({ - name: 'date_range', - title: 'Date Range', - createFilter: createFilter, - getKey: function (bucket, key, agg) { - var formatter = agg.fieldOwnFormatter('text', fieldFormats.getDefaultInstance('date')); - return dateRange.toString(bucket, formatter); - }, - getFormat: function () { - return fieldFormats.getDefaultInstance('string'); - }, - makeLabel: function (aggConfig) { - return aggConfig.params.field.displayName + ' date ranges'; - }, - params: [{ - name: 'field', - filterFieldTypes: 'date', - default: function (agg) { - return agg.vis.indexPattern.timeFieldName; - } - }, { - name: 'ranges', - default: [{ - from: 'now-1w/w', - to: 'now' - }], - editor: require('ui/agg_types/controls/date_ranges.html') - }] - }); - }; -}); + return new BucketAggType({ + name: 'date_range', + title: 'Date Range', + createFilter: createFilter, + getKey: function (bucket, key, agg) { + var formatter = agg.fieldOwnFormatter('text', fieldFormats.getDefaultInstance('date')); + return dateRange.toString(bucket, formatter); + }, + getFormat: function () { + return fieldFormats.getDefaultInstance('string'); + }, + makeLabel: function (aggConfig) { + return aggConfig.params.field.displayName + ' date ranges'; + }, + params: [{ + name: 'field', + filterFieldTypes: 'date', + default: function (agg) { + return agg.vis.indexPattern.timeFieldName; + } + }, { + name: 'ranges', + default: [{ + from: 'now-1w/w', + to: 'now' + }], + editor: require('ui/agg_types/controls/date_ranges.html') + }] + }); +}; diff --git a/src/ui/public/agg_types/buckets/filters.js b/src/ui/public/agg_types/buckets/filters.js index 19683f4bfbb5f4..b682d355ff6fba 100644 --- a/src/ui/public/agg_types/buckets/filters.js +++ b/src/ui/public/agg_types/buckets/filters.js @@ -3,47 +3,45 @@ import angular from 'angular'; import AggTypesBucketsBucketAggTypeProvider from 'ui/agg_types/buckets/_bucket_agg_type'; import AggTypesBucketsCreateFilterFiltersProvider from 'ui/agg_types/buckets/create_filter/filters'; import CourierDataSourceDecorateQueryProvider from 'ui/courier/data_source/_decorate_query'; -define(function (require) { - return function FiltersAggDefinition(Private, Notifier) { - var BucketAggType = Private(AggTypesBucketsBucketAggTypeProvider); - var createFilter = Private(AggTypesBucketsCreateFilterFiltersProvider); - var decorateQuery = Private(CourierDataSourceDecorateQueryProvider); - var notif = new Notifier({ location: 'Filters Agg' }); +export default function FiltersAggDefinition(Private, Notifier) { + var BucketAggType = Private(AggTypesBucketsBucketAggTypeProvider); + var createFilter = Private(AggTypesBucketsCreateFilterFiltersProvider); + var decorateQuery = Private(CourierDataSourceDecorateQueryProvider); + var notif = new Notifier({ location: 'Filters Agg' }); - return new BucketAggType({ - name: 'filters', - title: 'Filters', - createFilter: createFilter, - customLabels: false, - params: [ - { - name: 'filters', - editor: require('ui/agg_types/controls/filters.html'), - default: [ {input: {}, label: ''} ], - write: function (aggConfig, output) { - var inFilters = aggConfig.params.filters; - if (!_.size(inFilters)) return; + return new BucketAggType({ + name: 'filters', + title: 'Filters', + createFilter: createFilter, + customLabels: false, + params: [ + { + name: 'filters', + editor: require('ui/agg_types/controls/filters.html'), + default: [ {input: {}, label: ''} ], + write: function (aggConfig, output) { + var inFilters = aggConfig.params.filters; + if (!_.size(inFilters)) return; - var outFilters = _.transform(inFilters, function (filters, filter) { - var input = filter.input; - if (!input) return notif.log('malformed filter agg params, missing "input" query'); + var outFilters = _.transform(inFilters, function (filters, filter) { + var input = filter.input; + if (!input) return notif.log('malformed filter agg params, missing "input" query'); - var query = input.query; - if (!query) return notif.log('malformed filter agg params, missing "query" on input'); + var query = input.query; + if (!query) return notif.log('malformed filter agg params, missing "query" on input'); - decorateQuery(query); + decorateQuery(query); - var label = filter.label || _.get(query, 'query_string.query') || angular.toJson(query); - filters[label] = input; - }, {}); + var label = filter.label || _.get(query, 'query_string.query') || angular.toJson(query); + filters[label] = input; + }, {}); - if (!_.size(outFilters)) return; + if (!_.size(outFilters)) return; - var params = output.params || (output.params = {}); - params.filters = outFilters; - } + var params = output.params || (output.params = {}); + params.filters = outFilters; } - ] - }); - }; -}); + } + ] + }); +}; diff --git a/src/ui/public/agg_types/buckets/geo_hash.js b/src/ui/public/agg_types/buckets/geo_hash.js index d4f4b6d4051f62..1f2dca3afff2be 100644 --- a/src/ui/public/agg_types/buckets/geo_hash.js +++ b/src/ui/public/agg_types/buckets/geo_hash.js @@ -1,66 +1,64 @@ import _ from 'lodash'; import moment from 'moment'; import AggTypesBucketsBucketAggTypeProvider from 'ui/agg_types/buckets/_bucket_agg_type'; -define(function (require) { - return function GeoHashAggDefinition(Private, config) { - var BucketAggType = Private(AggTypesBucketsBucketAggTypeProvider); - var defaultPrecision = 2; +export default function GeoHashAggDefinition(Private, config) { + var BucketAggType = Private(AggTypesBucketsBucketAggTypeProvider); + var defaultPrecision = 2; - function getPrecision(precision) { - var maxPrecision = _.parseInt(config.get('visualization:tileMap:maxPrecision')); + function getPrecision(precision) { + var maxPrecision = _.parseInt(config.get('visualization:tileMap:maxPrecision')); - precision = parseInt(precision, 10); + precision = parseInt(precision, 10); - if (isNaN(precision)) { - precision = defaultPrecision; - } - - if (precision > maxPrecision) { - return maxPrecision; - } + if (isNaN(precision)) { + precision = defaultPrecision; + } - return precision; + if (precision > maxPrecision) { + return maxPrecision; } - return new BucketAggType({ - name: 'geohash_grid', - title: 'Geohash', - params: [ - { - name: 'field', - filterFieldTypes: 'geo_point' - }, - { - name: 'autoPrecision', - default: true, - write: _.noop - }, - { - name: 'mapZoom', - write: _.noop - }, - { - name: 'mapCenter', - write: _.noop + return precision; + } + + return new BucketAggType({ + name: 'geohash_grid', + title: 'Geohash', + params: [ + { + name: 'field', + filterFieldTypes: 'geo_point' + }, + { + name: 'autoPrecision', + default: true, + write: _.noop + }, + { + name: 'mapZoom', + write: _.noop + }, + { + name: 'mapCenter', + write: _.noop + }, + { + name: 'precision', + default: defaultPrecision, + editor: require('ui/agg_types/controls/precision.html'), + controller: function ($scope) { + $scope.$watchMulti([ + 'agg.params.autoPrecision', + 'outputAgg.params.precision' + ], function (cur, prev) { + if (cur[1]) $scope.agg.params.precision = cur[1]; + }); }, - { - name: 'precision', - default: defaultPrecision, - editor: require('ui/agg_types/controls/precision.html'), - controller: function ($scope) { - $scope.$watchMulti([ - 'agg.params.autoPrecision', - 'outputAgg.params.precision' - ], function (cur, prev) { - if (cur[1]) $scope.agg.params.precision = cur[1]; - }); - }, - deserialize: getPrecision, - write: function (aggConfig, output) { - output.params.precision = getPrecision(aggConfig.params.precision); - } + deserialize: getPrecision, + write: function (aggConfig, output) { + output.params.precision = getPrecision(aggConfig.params.precision); } - ] - }); - }; -}); + } + ] + }); +}; diff --git a/src/ui/public/agg_types/buckets/histogram.js b/src/ui/public/agg_types/buckets/histogram.js index 7c680a4466be0a..0c9b2e4154b7dd 100644 --- a/src/ui/public/agg_types/buckets/histogram.js +++ b/src/ui/public/agg_types/buckets/histogram.js @@ -3,72 +3,70 @@ import moment from 'moment'; import 'ui/validateDateInterval'; import AggTypesBucketsBucketAggTypeProvider from 'ui/agg_types/buckets/_bucket_agg_type'; import AggTypesBucketsCreateFilterHistogramProvider from 'ui/agg_types/buckets/create_filter/histogram'; -define(function (require) { - return function HistogramAggDefinition(Private) { - var BucketAggType = Private(AggTypesBucketsBucketAggTypeProvider); - var createFilter = Private(AggTypesBucketsCreateFilterHistogramProvider); +export default function HistogramAggDefinition(Private) { + var BucketAggType = Private(AggTypesBucketsBucketAggTypeProvider); + var createFilter = Private(AggTypesBucketsCreateFilterHistogramProvider); - return new BucketAggType({ - name: 'histogram', - title: 'Histogram', - ordered: {}, - makeLabel: function (aggConfig) { - return aggConfig.params.field.displayName; + return new BucketAggType({ + name: 'histogram', + title: 'Histogram', + ordered: {}, + makeLabel: function (aggConfig) { + return aggConfig.params.field.displayName; + }, + createFilter: createFilter, + params: [ + { + name: 'field', + filterFieldTypes: 'number' }, - createFilter: createFilter, - params: [ - { - name: 'field', - filterFieldTypes: 'number' - }, - { - name: 'interval', - editor: require('ui/agg_types/controls/interval.html'), - write: function (aggConfig, output) { - output.params.interval = parseInt(aggConfig.params.interval, 10); - } - }, + { + name: 'interval', + editor: require('ui/agg_types/controls/interval.html'), + write: function (aggConfig, output) { + output.params.interval = parseInt(aggConfig.params.interval, 10); + } + }, - { - name: 'min_doc_count', - default: null, - editor: require('ui/agg_types/controls/min_doc_count.html'), - write: function (aggConfig, output) { - if (aggConfig.params.min_doc_count) { - output.params.min_doc_count = 0; - } + { + name: 'min_doc_count', + default: null, + editor: require('ui/agg_types/controls/min_doc_count.html'), + write: function (aggConfig, output) { + if (aggConfig.params.min_doc_count) { + output.params.min_doc_count = 0; } - }, + } + }, - { - name: 'extended_bounds', - default: {}, - editor: require('ui/agg_types/controls/extended_bounds.html'), - write: function (aggConfig, output) { - var val = aggConfig.params.extended_bounds; + { + name: 'extended_bounds', + default: {}, + editor: require('ui/agg_types/controls/extended_bounds.html'), + write: function (aggConfig, output) { + var val = aggConfig.params.extended_bounds; - if (val.min != null || val.max != null) { - output.params.extended_bounds = { - min: val.min, - max: val.max - }; - } - }, + if (val.min != null || val.max != null) { + output.params.extended_bounds = { + min: val.min, + max: val.max + }; + } + }, - // called from the editor - shouldShow: function (aggConfig) { - var field = aggConfig.params.field; - if ( - field - && (field.type === 'number' || field.type === 'date') - ) { - return aggConfig.params.min_doc_count; - } + // called from the editor + shouldShow: function (aggConfig) { + var field = aggConfig.params.field; + if ( + field + && (field.type === 'number' || field.type === 'date') + ) { + return aggConfig.params.min_doc_count; } } - ] - }); - }; -}); + } + ] + }); +}; diff --git a/src/ui/public/agg_types/buckets/ip_range.js b/src/ui/public/agg_types/buckets/ip_range.js index 346f6e9a8f2efd..2d81e089a4c709 100644 --- a/src/ui/public/agg_types/buckets/ip_range.js +++ b/src/ui/public/agg_types/buckets/ip_range.js @@ -3,46 +3,44 @@ import 'ui/directives/validate_ip'; import 'ui/directives/validate_cidr_mask'; import AggTypesBucketsBucketAggTypeProvider from 'ui/agg_types/buckets/_bucket_agg_type'; import AggTypesBucketsCreateFilterIpRangeProvider from 'ui/agg_types/buckets/create_filter/ip_range'; -define(function (require) { - return function RangeAggDefinition(Private) { - var BucketAggType = Private(AggTypesBucketsBucketAggTypeProvider); - var createFilter = Private(AggTypesBucketsCreateFilterIpRangeProvider); +export default function RangeAggDefinition(Private) { + var BucketAggType = Private(AggTypesBucketsBucketAggTypeProvider); + var createFilter = Private(AggTypesBucketsCreateFilterIpRangeProvider); - return new BucketAggType({ - name: 'ip_range', - title: 'IPv4 Range', - createFilter: createFilter, - makeLabel: function (aggConfig) { - return aggConfig.params.field.displayName + ' IP ranges'; - }, - params: [ - { - name: 'field', - filterFieldTypes: 'ip' - }, { - name: 'ipRangeType', - default: 'fromTo', - write: _.noop - }, { - name: 'ranges', - default: { - fromTo: [ - {from: '0.0.0.0', to: '127.255.255.255'}, - {from: '128.0.0.0', to: '191.255.255.255'} - ], - mask: [ - {mask: '0.0.0.0/1'}, - {mask: '128.0.0.0/2'} - ] - }, - editor: require('ui/agg_types/controls/ip_ranges.html'), - write: function (aggConfig, output) { - var ipRangeType = aggConfig.params.ipRangeType; - output.params.ranges = aggConfig.params.ranges[ipRangeType]; - } + return new BucketAggType({ + name: 'ip_range', + title: 'IPv4 Range', + createFilter: createFilter, + makeLabel: function (aggConfig) { + return aggConfig.params.field.displayName + ' IP ranges'; + }, + params: [ + { + name: 'field', + filterFieldTypes: 'ip' + }, { + name: 'ipRangeType', + default: 'fromTo', + write: _.noop + }, { + name: 'ranges', + default: { + fromTo: [ + {from: '0.0.0.0', to: '127.255.255.255'}, + {from: '128.0.0.0', to: '191.255.255.255'} + ], + mask: [ + {mask: '0.0.0.0/1'}, + {mask: '128.0.0.0/2'} + ] + }, + editor: require('ui/agg_types/controls/ip_ranges.html'), + write: function (aggConfig, output) { + var ipRangeType = aggConfig.params.ipRangeType; + output.params.ranges = aggConfig.params.ranges[ipRangeType]; } - ] - }); - }; -}); + } + ] + }); +}; diff --git a/src/ui/public/agg_types/buckets/range.js b/src/ui/public/agg_types/buckets/range.js index e348fa3ab29968..d6e85b260ad289 100644 --- a/src/ui/public/agg_types/buckets/range.js +++ b/src/ui/public/agg_types/buckets/range.js @@ -3,73 +3,71 @@ import AggTypesBucketsBucketAggTypeProvider from 'ui/agg_types/buckets/_bucket_a import AggTypesBucketsCreateFilterRangeProvider from 'ui/agg_types/buckets/create_filter/range'; import IndexPatternsFieldFormatFieldFormatProvider from 'ui/index_patterns/_field_format/FieldFormat'; import RangeKeyProvider from './RangeKey'; -define(function (require) { - return function RangeAggDefinition(Private) { - var BucketAggType = Private(AggTypesBucketsBucketAggTypeProvider); - var createFilter = Private(AggTypesBucketsCreateFilterRangeProvider); - var FieldFormat = Private(IndexPatternsFieldFormatFieldFormatProvider); - var RangeKey = Private(RangeKeyProvider); +export default function RangeAggDefinition(Private) { + var BucketAggType = Private(AggTypesBucketsBucketAggTypeProvider); + var createFilter = Private(AggTypesBucketsCreateFilterRangeProvider); + var FieldFormat = Private(IndexPatternsFieldFormatFieldFormatProvider); + var RangeKey = Private(RangeKeyProvider); - var keyCaches = new WeakMap(); - var formats = new WeakMap(); + var keyCaches = new WeakMap(); + var formats = new WeakMap(); - return new BucketAggType({ - name: 'range', - title: 'Range', - createFilter: createFilter, - makeLabel: function (aggConfig) { - return aggConfig.params.field.displayName + ' ranges'; - }, - getKey: function (bucket, key, agg) { - var keys = keyCaches.get(agg); + return new BucketAggType({ + name: 'range', + title: 'Range', + createFilter: createFilter, + makeLabel: function (aggConfig) { + return aggConfig.params.field.displayName + ' ranges'; + }, + getKey: function (bucket, key, agg) { + var keys = keyCaches.get(agg); - if (!keys) { - keys = new Map(); - keyCaches.set(agg, keys); - } + if (!keys) { + keys = new Map(); + keyCaches.set(agg, keys); + } - var id = RangeKey.idBucket(bucket); + var id = RangeKey.idBucket(bucket); - var key = keys.get(id); - if (!key) { - key = new RangeKey(bucket); - keys.set(id, key); - } + var key = keys.get(id); + if (!key) { + key = new RangeKey(bucket); + keys.set(id, key); + } - return key; - }, - getFormat: function (agg) { - let format = formats.get(agg); - if (format) return format; + return key; + }, + getFormat: function (agg) { + let format = formats.get(agg); + if (format) return format; - let RangeFormat = FieldFormat.from(function (range) { - let format = agg.fieldOwnFormatter(); - return `${format(range.gte)} to ${format(range.lt)}`; - }); + let RangeFormat = FieldFormat.from(function (range) { + let format = agg.fieldOwnFormatter(); + return `${format(range.gte)} to ${format(range.lt)}`; + }); - format = new RangeFormat(); + format = new RangeFormat(); - formats.set(agg, format); - return format; + formats.set(agg, format); + return format; + }, + params: [ + { + name: 'field', + filterFieldTypes: ['number'] }, - params: [ - { - name: 'field', - filterFieldTypes: ['number'] - }, - { - name: 'ranges', - default: [ - { from: 0, to: 1000 }, - { from: 1000, to: 2000 } - ], - editor: require('ui/agg_types/controls/ranges.html'), - write: function (aggConfig, output) { - output.params.ranges = aggConfig.params.ranges; - output.params.keyed = true; - } + { + name: 'ranges', + default: [ + { from: 0, to: 1000 }, + { from: 1000, to: 2000 } + ], + editor: require('ui/agg_types/controls/ranges.html'), + write: function (aggConfig, output) { + output.params.ranges = aggConfig.params.ranges; + output.params.keyed = true; } - ] - }); - }; -}); + } + ] + }); +}; diff --git a/src/ui/public/agg_types/buckets/significant_terms.js b/src/ui/public/agg_types/buckets/significant_terms.js index e746f76700a925..589d34fbc5ee2d 100644 --- a/src/ui/public/agg_types/buckets/significant_terms.js +++ b/src/ui/public/agg_types/buckets/significant_terms.js @@ -1,38 +1,36 @@ import _ from 'lodash'; import AggTypesBucketsBucketAggTypeProvider from 'ui/agg_types/buckets/_bucket_agg_type'; import AggTypesBucketsCreateFilterTermsProvider from 'ui/agg_types/buckets/create_filter/terms'; -define(function (require) { - return function SignificantTermsAggDefinition(Private) { - var BucketAggType = Private(AggTypesBucketsBucketAggTypeProvider); - var createFilter = Private(AggTypesBucketsCreateFilterTermsProvider); +export default function SignificantTermsAggDefinition(Private) { + var BucketAggType = Private(AggTypesBucketsBucketAggTypeProvider); + var createFilter = Private(AggTypesBucketsCreateFilterTermsProvider); - return new BucketAggType({ - name: 'significant_terms', - title: 'Significant Terms', - makeLabel: function (aggConfig) { - return 'Top ' + aggConfig.params.size + ' unusual terms in ' + aggConfig.params.field.displayName; + return new BucketAggType({ + name: 'significant_terms', + title: 'Significant Terms', + makeLabel: function (aggConfig) { + return 'Top ' + aggConfig.params.size + ' unusual terms in ' + aggConfig.params.field.displayName; + }, + createFilter: createFilter, + params: [ + { + name: 'field', + filterFieldTypes: 'string' }, - createFilter: createFilter, - params: [ - { - name: 'field', - filterFieldTypes: 'string' - }, - { - name: 'size', - editor: require('ui/agg_types/controls/order_and_size.html'), - }, - { - name: 'exclude', - type: 'regex', - advanced: true - }, - { - name: 'include', - type: 'regex', - advanced: true - } - ] - }); - }; -}); + { + name: 'size', + editor: require('ui/agg_types/controls/order_and_size.html'), + }, + { + name: 'exclude', + type: 'regex', + advanced: true + }, + { + name: 'include', + type: 'regex', + advanced: true + } + ] + }); +}; diff --git a/src/ui/public/agg_types/buckets/terms.js b/src/ui/public/agg_types/buckets/terms.js index 86302eb6bbd08a..4c779dfd14b5dc 100644 --- a/src/ui/public/agg_types/buckets/terms.js +++ b/src/ui/public/agg_types/buckets/terms.js @@ -4,179 +4,177 @@ import AggTypesBucketsBucketCountBetweenProvider from 'ui/agg_types/buckets/_buc import VisAggConfigProvider from 'ui/Vis/AggConfig'; import VisSchemasProvider from 'ui/Vis/Schemas'; import AggTypesBucketsCreateFilterTermsProvider from 'ui/agg_types/buckets/create_filter/terms'; -define(function (require) { - return function TermsAggDefinition(Private) { - var BucketAggType = Private(AggTypesBucketsBucketAggTypeProvider); - var bucketCountBetween = Private(AggTypesBucketsBucketCountBetweenProvider); - var AggConfig = Private(VisAggConfigProvider); - var Schemas = Private(VisSchemasProvider); - var createFilter = Private(AggTypesBucketsCreateFilterTermsProvider); - - var orderAggSchema = (new Schemas([ - { - group: 'none', - name: 'orderAgg', - title: 'Order Agg', - aggFilter: ['!percentiles', '!median', '!std_dev'] - } - ])).all[0]; - - function isNotType(type) { - return function (agg) { - var field = agg.params.field; - return !field || field.type !== type; - }; +export default function TermsAggDefinition(Private) { + var BucketAggType = Private(AggTypesBucketsBucketAggTypeProvider); + var bucketCountBetween = Private(AggTypesBucketsBucketCountBetweenProvider); + var AggConfig = Private(VisAggConfigProvider); + var Schemas = Private(VisSchemasProvider); + var createFilter = Private(AggTypesBucketsCreateFilterTermsProvider); + + var orderAggSchema = (new Schemas([ + { + group: 'none', + name: 'orderAgg', + title: 'Order Agg', + aggFilter: ['!percentiles', '!median', '!std_dev'] } - - return new BucketAggType({ - name: 'terms', - title: 'Terms', - makeLabel: function (agg) { - var params = agg.params; - return params.field.displayName + ': ' + params.order.display; + ])).all[0]; + + function isNotType(type) { + return function (agg) { + var field = agg.params.field; + return !field || field.type !== type; + }; + } + + return new BucketAggType({ + name: 'terms', + title: 'Terms', + makeLabel: function (agg) { + var params = agg.params; + return params.field.displayName + ': ' + params.order.display; + }, + createFilter: createFilter, + params: [ + { + name: 'field', + scriptable: true, + filterFieldTypes: ['number', 'boolean', 'date', 'ip', 'string'] }, - createFilter: createFilter, - params: [ - { - name: 'field', - scriptable: true, - filterFieldTypes: ['number', 'boolean', 'date', 'ip', 'string'] - }, - { - name: 'exclude', - type: 'regex', - advanced: true, - disabled: isNotType('string') + { + name: 'exclude', + type: 'regex', + advanced: true, + disabled: isNotType('string') + }, + { + name: 'include', + type: 'regex', + advanced: true, + disabled: isNotType('string') + }, + { + name: 'size', + default: 5 + }, + { + name: 'orderAgg', + type: AggConfig, + default: null, + editor: require('ui/agg_types/controls/order_agg.html'), + serialize: function (orderAgg) { + return orderAgg.toJSON(); }, - { - name: 'include', - type: 'regex', - advanced: true, - disabled: isNotType('string') + deserialize: function (state, agg) { + return this.makeOrderAgg(agg, state); }, - { - name: 'size', - default: 5 + makeOrderAgg: function (termsAgg, state) { + state = state || {}; + state.schema = orderAggSchema; + var orderAgg = new AggConfig(termsAgg.vis, state); + orderAgg.id = termsAgg.id + '-orderAgg'; + return orderAgg; }, - { - name: 'orderAgg', - type: AggConfig, - default: null, - editor: require('ui/agg_types/controls/order_agg.html'), - serialize: function (orderAgg) { - return orderAgg.toJSON(); - }, - deserialize: function (state, agg) { - return this.makeOrderAgg(agg, state); - }, - makeOrderAgg: function (termsAgg, state) { - state = state || {}; - state.schema = orderAggSchema; - var orderAgg = new AggConfig(termsAgg.vis, state); - orderAgg.id = termsAgg.id + '-orderAgg'; - return orderAgg; - }, - controller: function ($scope) { - $scope.safeMakeLabel = function (agg) { - try { - return agg.makeLabel(); - } catch (e) { - return '- agg not valid -'; - } - }; - - var INIT = {}; // flag to know when prevOrderBy has changed - var prevOrderBy = INIT; - - $scope.$watch('responseValueAggs', updateOrderAgg); - $scope.$watch('agg.params.orderBy', updateOrderAgg); - - function updateOrderAgg() { - var agg = $scope.agg; - var aggs = agg.vis.aggs; - var params = agg.params; - var orderBy = params.orderBy; - var paramDef = agg.type.params.byName.orderAgg; - - // setup the initial value of orderBy - if (!orderBy && prevOrderBy === INIT) { - // abort until we get the responseValueAggs - if (!$scope.responseValueAggs) return; - params.orderBy = (_.first($scope.responseValueAggs) || { id: 'custom' }).id; - return; - } - - // track the previous value - prevOrderBy = orderBy; + controller: function ($scope) { + $scope.safeMakeLabel = function (agg) { + try { + return agg.makeLabel(); + } catch (e) { + return '- agg not valid -'; + } + }; + + var INIT = {}; // flag to know when prevOrderBy has changed + var prevOrderBy = INIT; + + $scope.$watch('responseValueAggs', updateOrderAgg); + $scope.$watch('agg.params.orderBy', updateOrderAgg); + + function updateOrderAgg() { + var agg = $scope.agg; + var aggs = agg.vis.aggs; + var params = agg.params; + var orderBy = params.orderBy; + var paramDef = agg.type.params.byName.orderAgg; + + // setup the initial value of orderBy + if (!orderBy && prevOrderBy === INIT) { + // abort until we get the responseValueAggs + if (!$scope.responseValueAggs) return; + params.orderBy = (_.first($scope.responseValueAggs) || { id: 'custom' }).id; + return; + } - // we aren't creating a custom aggConfig - if (!orderBy || orderBy !== 'custom') { - params.orderAgg = null; + // track the previous value + prevOrderBy = orderBy; - if (orderBy === '_term') { - params.orderBy = '_term'; - return; - } + // we aren't creating a custom aggConfig + if (!orderBy || orderBy !== 'custom') { + params.orderAgg = null; - // ensure that orderBy is set to a valid agg - if (!_.find($scope.responseValueAggs, { id: orderBy })) { - params.orderBy = null; - } + if (orderBy === '_term') { + params.orderBy = '_term'; return; } - params.orderAgg = params.orderAgg || paramDef.makeOrderAgg(agg); - } - }, - write: function (agg, output) { - var vis = agg.vis; - var dir = agg.params.order.val; - var order = output.params.order = {}; - - var orderAgg = agg.params.orderAgg || vis.aggs.getResponseAggById(agg.params.orderBy); - - // TODO: This works around an Elasticsearch bug the always casts terms agg scripts to strings - // thus causing issues with filtering. This probably causes other issues since float might not - // be able to contain the number on the elasticsearch side - if (output.params.script) { - output.params.valueType = agg.field().type === 'number' ? 'float' : agg.field().type; - } - - if (!orderAgg) { - order[agg.params.orderBy || '_count'] = dir; + // ensure that orderBy is set to a valid agg + if (!_.find($scope.responseValueAggs, { id: orderBy })) { + params.orderBy = null; + } return; } - if (orderAgg.type.name === 'count') { - order._count = dir; - return; - } + params.orderAgg = params.orderAgg || paramDef.makeOrderAgg(agg); + } + }, + write: function (agg, output) { + var vis = agg.vis; + var dir = agg.params.order.val; + var order = output.params.order = {}; + + var orderAgg = agg.params.orderAgg || vis.aggs.getResponseAggById(agg.params.orderBy); + + // TODO: This works around an Elasticsearch bug the always casts terms agg scripts to strings + // thus causing issues with filtering. This probably causes other issues since float might not + // be able to contain the number on the elasticsearch side + if (output.params.script) { + output.params.valueType = agg.field().type === 'number' ? 'float' : agg.field().type; + } - var orderAggId = orderAgg.id; - if (orderAgg.parentId) { - orderAgg = vis.aggs.byId[orderAgg.parentId]; - } + if (!orderAgg) { + order[agg.params.orderBy || '_count'] = dir; + return; + } - output.subAggs = (output.subAggs || []).concat(orderAgg); - order[orderAggId] = dir; + if (orderAgg.type.name === 'count') { + order._count = dir; + return; } - }, - { - name: 'order', - type: 'optioned', - default: 'desc', - editor: require('ui/agg_types/controls/order_and_size.html'), - options: [ - { display: 'Descending', val: 'desc' }, - { display: 'Ascending', val: 'asc' } - ], - write: _.noop // prevent default write, it's handled by orderAgg - }, - { - name: 'orderBy', - write: _.noop // prevent default write, it's handled by orderAgg + + var orderAggId = orderAgg.id; + if (orderAgg.parentId) { + orderAgg = vis.aggs.byId[orderAgg.parentId]; + } + + output.subAggs = (output.subAggs || []).concat(orderAgg); + order[orderAggId] = dir; } - ] - }); - }; -}); + }, + { + name: 'order', + type: 'optioned', + default: 'desc', + editor: require('ui/agg_types/controls/order_and_size.html'), + options: [ + { display: 'Descending', val: 'desc' }, + { display: 'Ascending', val: 'asc' } + ], + write: _.noop // prevent default write, it's handled by orderAgg + }, + { + name: 'orderBy', + write: _.noop // prevent default write, it's handled by orderAgg + } + ] + }); +}; diff --git a/src/ui/public/agg_types/index.js b/src/ui/public/agg_types/index.js index fd2efdd2b0d0f9..0706370303098c 100644 --- a/src/ui/public/agg_types/index.js +++ b/src/ui/public/agg_types/index.js @@ -19,65 +19,63 @@ import AggTypesBucketsTermsProvider from 'ui/agg_types/buckets/terms'; import AggTypesBucketsFiltersProvider from 'ui/agg_types/buckets/filters'; import AggTypesBucketsSignificantTermsProvider from 'ui/agg_types/buckets/significant_terms'; import AggTypesBucketsGeoHashProvider from 'ui/agg_types/buckets/geo_hash'; -define(function (require) { - return function AggTypeService(Private) { +export default function AggTypeService(Private) { - var aggs = { - metrics: [ - Private(AggTypesMetricsCountProvider), - Private(AggTypesMetricsAvgProvider), - Private(AggTypesMetricsSumProvider), - Private(AggTypesMetricsMedianProvider), - Private(AggTypesMetricsMinProvider), - Private(AggTypesMetricsMaxProvider), - Private(AggTypesMetricsStdDeviationProvider), - Private(AggTypesMetricsCardinalityProvider), - Private(AggTypesMetricsPercentilesProvider), - Private(AggTypesMetricsPercentileRanksProvider) - ], - buckets: [ - Private(AggTypesBucketsDateHistogramProvider), - Private(AggTypesBucketsHistogramProvider), - Private(AggTypesBucketsRangeProvider), - Private(AggTypesBucketsDateRangeProvider), - Private(AggTypesBucketsIpRangeProvider), - Private(AggTypesBucketsTermsProvider), - Private(AggTypesBucketsFiltersProvider), - Private(AggTypesBucketsSignificantTermsProvider), - Private(AggTypesBucketsGeoHashProvider) - ] - }; + var aggs = { + metrics: [ + Private(AggTypesMetricsCountProvider), + Private(AggTypesMetricsAvgProvider), + Private(AggTypesMetricsSumProvider), + Private(AggTypesMetricsMedianProvider), + Private(AggTypesMetricsMinProvider), + Private(AggTypesMetricsMaxProvider), + Private(AggTypesMetricsStdDeviationProvider), + Private(AggTypesMetricsCardinalityProvider), + Private(AggTypesMetricsPercentilesProvider), + Private(AggTypesMetricsPercentileRanksProvider) + ], + buckets: [ + Private(AggTypesBucketsDateHistogramProvider), + Private(AggTypesBucketsHistogramProvider), + Private(AggTypesBucketsRangeProvider), + Private(AggTypesBucketsDateRangeProvider), + Private(AggTypesBucketsIpRangeProvider), + Private(AggTypesBucketsTermsProvider), + Private(AggTypesBucketsFiltersProvider), + Private(AggTypesBucketsSignificantTermsProvider), + Private(AggTypesBucketsGeoHashProvider) + ] + }; - Object.keys(aggs).forEach(function (type) { - aggs[type].forEach(function (agg) { - agg.type = type; - }); + Object.keys(aggs).forEach(function (type) { + aggs[type].forEach(function (agg) { + agg.type = type; }); + }); + + /** + * IndexedArray of Aggregation Types. + * + * These types form two groups, metric and buckets. + * + * @module agg_types + * @type {IndexedArray} + */ + return new IndexedArray({ /** - * IndexedArray of Aggregation Types. - * - * These types form two groups, metric and buckets. - * - * @module agg_types - * @type {IndexedArray} + * @type {Array} */ - return new IndexedArray({ + index: ['name'], - /** - * @type {Array} - */ - index: ['name'], - - /** - * [group description] - * @type {Array} - */ - group: ['type'], - initialSet: aggs.metrics.concat(aggs.buckets) - }); - }; + /** + * [group description] + * @type {Array} + */ + group: ['type'], + initialSet: aggs.metrics.concat(aggs.buckets) + }); +}; - // preload -}); +// preload diff --git a/src/ui/public/agg_types/metrics/MetricAggType.js b/src/ui/public/agg_types/metrics/MetricAggType.js index 67d442cfc1306f..7e3cfe4b177ca8 100644 --- a/src/ui/public/agg_types/metrics/MetricAggType.js +++ b/src/ui/public/agg_types/metrics/MetricAggType.js @@ -1,52 +1,50 @@ import _ from 'lodash'; import AggTypesAggTypeProvider from 'ui/agg_types/AggType'; import RegistryFieldFormatsProvider from 'ui/registry/field_formats'; -define(function (require) { - return function MetricAggTypeProvider(Private) { - var AggType = Private(AggTypesAggTypeProvider); - var fieldFormats = Private(RegistryFieldFormatsProvider); +export default function MetricAggTypeProvider(Private) { + var AggType = Private(AggTypesAggTypeProvider); + var fieldFormats = Private(RegistryFieldFormatsProvider); - _.class(MetricAggType).inherits(AggType); - function MetricAggType(config) { - MetricAggType.Super.call(this, config); + _.class(MetricAggType).inherits(AggType); + function MetricAggType(config) { + MetricAggType.Super.call(this, config); - // allow overriding any value on the prototype - _.forOwn(config, function (val, key) { - if (_.has(MetricAggType.prototype, key)) { - this[key] = val; - } - }, this); - } + // allow overriding any value on the prototype + _.forOwn(config, function (val, key) { + if (_.has(MetricAggType.prototype, key)) { + this[key] = val; + } + }, this); + } - /** - * Read the values for this metric from the - * @param {[type]} bucket [description] - * @return {*} [description] - */ - MetricAggType.prototype.getValue = function (agg, bucket) { - // Metric types where an empty set equals `zero` - var isSettableToZero = ['cardinality', 'sum'].indexOf(agg.__type.name) !== -1; + /** + * Read the values for this metric from the + * @param {[type]} bucket [description] + * @return {*} [description] + */ + MetricAggType.prototype.getValue = function (agg, bucket) { + // Metric types where an empty set equals `zero` + var isSettableToZero = ['cardinality', 'sum'].indexOf(agg.__type.name) !== -1; - // Return proper values when no buckets are present - // `Count` handles empty sets properly - if (!bucket[agg.id] && isSettableToZero) return 0; + // Return proper values when no buckets are present + // `Count` handles empty sets properly + if (!bucket[agg.id] && isSettableToZero) return 0; - return bucket[agg.id] && bucket[agg.id].value; - }; - - /** - * Pick a format for the values produced by this agg type, - * overriden by several metrics that always output a simple - * number - * - * @param {agg} agg - the agg to pick a format for - * @return {FieldFromat} - */ - MetricAggType.prototype.getFormat = function (agg) { - var field = agg.field(); - return field ? field.format : fieldFormats.getDefaultInstance('number'); - }; + return bucket[agg.id] && bucket[agg.id].value; + }; - return MetricAggType; + /** + * Pick a format for the values produced by this agg type, + * overriden by several metrics that always output a simple + * number + * + * @param {agg} agg - the agg to pick a format for + * @return {FieldFromat} + */ + MetricAggType.prototype.getFormat = function (agg) { + var field = agg.field(); + return field ? field.format : fieldFormats.getDefaultInstance('number'); }; -}); + + return MetricAggType; +}; diff --git a/src/ui/public/agg_types/metrics/avg.js b/src/ui/public/agg_types/metrics/avg.js index 0aaa1818202f4b..970336f3019d2f 100644 --- a/src/ui/public/agg_types/metrics/avg.js +++ b/src/ui/public/agg_types/metrics/avg.js @@ -1,21 +1,19 @@ import AggTypesMetricsMetricAggTypeProvider from 'ui/agg_types/metrics/MetricAggType'; -define(function (require) { - return function AggTypeMetricAvgProvider(Private) { - var MetricAggType = Private(AggTypesMetricsMetricAggTypeProvider); +export default function AggTypeMetricAvgProvider(Private) { + var MetricAggType = Private(AggTypesMetricsMetricAggTypeProvider); - return new MetricAggType({ - name: 'avg', - title: 'Average', - makeLabel: function (aggConfig) { - return 'Average ' + aggConfig.params.field.displayName; - }, - params: [ - { - name: 'field', - filterFieldTypes: 'number' - } - ] - }); - }; -}); + return new MetricAggType({ + name: 'avg', + title: 'Average', + makeLabel: function (aggConfig) { + return 'Average ' + aggConfig.params.field.displayName; + }, + params: [ + { + name: 'field', + filterFieldTypes: 'number' + } + ] + }); +}; diff --git a/src/ui/public/agg_types/metrics/cardinality.js b/src/ui/public/agg_types/metrics/cardinality.js index 2b8c365f7669a7..a50100a4f165ed 100644 --- a/src/ui/public/agg_types/metrics/cardinality.js +++ b/src/ui/public/agg_types/metrics/cardinality.js @@ -1,25 +1,23 @@ import AggTypesMetricsMetricAggTypeProvider from 'ui/agg_types/metrics/MetricAggType'; import RegistryFieldFormatsProvider from 'ui/registry/field_formats'; -define(function (require) { - return function AggTypeMetricCardinalityProvider(Private) { - var MetricAggType = Private(AggTypesMetricsMetricAggTypeProvider); - var fieldFormats = Private(RegistryFieldFormatsProvider); +export default function AggTypeMetricCardinalityProvider(Private) { + var MetricAggType = Private(AggTypesMetricsMetricAggTypeProvider); + var fieldFormats = Private(RegistryFieldFormatsProvider); - return new MetricAggType({ - name: 'cardinality', - title: 'Unique Count', - makeLabel: function (aggConfig) { - return 'Unique count of ' + aggConfig.params.field.displayName; - }, - getFormat: function () { - return fieldFormats.getDefaultInstance('number'); - }, - params: [ - { - name: 'field' - } - ] - }); - }; -}); + return new MetricAggType({ + name: 'cardinality', + title: 'Unique Count', + makeLabel: function (aggConfig) { + return 'Unique count of ' + aggConfig.params.field.displayName; + }, + getFormat: function () { + return fieldFormats.getDefaultInstance('number'); + }, + params: [ + { + name: 'field' + } + ] + }); +}; diff --git a/src/ui/public/agg_types/metrics/count.js b/src/ui/public/agg_types/metrics/count.js index 2552c54672795c..571fe05fada34b 100644 --- a/src/ui/public/agg_types/metrics/count.js +++ b/src/ui/public/agg_types/metrics/count.js @@ -1,24 +1,22 @@ import AggTypesMetricsMetricAggTypeProvider from 'ui/agg_types/metrics/MetricAggType'; import RegistryFieldFormatsProvider from 'ui/registry/field_formats'; -define(function (require) { - return function AggTypeMetricCountProvider(Private) { - var MetricAggType = Private(AggTypesMetricsMetricAggTypeProvider); - var fieldFormats = Private(RegistryFieldFormatsProvider); +export default function AggTypeMetricCountProvider(Private) { + var MetricAggType = Private(AggTypesMetricsMetricAggTypeProvider); + var fieldFormats = Private(RegistryFieldFormatsProvider); - return new MetricAggType({ - name: 'count', - title: 'Count', - hasNoDsl: true, - makeLabel: function () { - return 'Count'; - }, - getFormat: function () { - return fieldFormats.getDefaultInstance('number'); - }, - getValue: function (agg, bucket) { - return bucket.doc_count; - } - }); - }; -}); + return new MetricAggType({ + name: 'count', + title: 'Count', + hasNoDsl: true, + makeLabel: function () { + return 'Count'; + }, + getFormat: function () { + return fieldFormats.getDefaultInstance('number'); + }, + getValue: function (agg, bucket) { + return bucket.doc_count; + } + }); +}; diff --git a/src/ui/public/agg_types/metrics/getResponseAggConfigClass.js b/src/ui/public/agg_types/metrics/getResponseAggConfigClass.js index fd76e7690e660b..b90a308e8686a4 100644 --- a/src/ui/public/agg_types/metrics/getResponseAggConfigClass.js +++ b/src/ui/public/agg_types/metrics/getResponseAggConfigClass.js @@ -1,51 +1,49 @@ import _ from 'lodash'; -define(function (require) { - return function ResponseAggConfigProvider() { +export default function ResponseAggConfigProvider() { + + /** + * Get the ResponseAggConfig class for an aggConfig, + * which might be cached on the aggConfig or created. + * + * @param {AggConfig} agg - the AggConfig the VAC should inherit from + * @param {object} props - properties that the VAC should have + * @return {Constructor} - a constructor for VAC objects that will inherit the aggConfig + */ + return function getResponseConfigClass(agg, props) { + if (agg.$$_ResponseAggConfigClass) { + return agg.$$_ResponseAggConfigClass; + } else { + return (agg.$$_ResponseAggConfigClass = create(agg, props)); + } + }; + + function create(parentAgg, props) { /** - * Get the ResponseAggConfig class for an aggConfig, - * which might be cached on the aggConfig or created. + * AggConfig "wrapper" for multi-value metric aggs which + * need to modify AggConfig behavior for each value produced. * - * @param {AggConfig} agg - the AggConfig the VAC should inherit from - * @param {object} props - properties that the VAC should have - * @return {Constructor} - a constructor for VAC objects that will inherit the aggConfig + * @param {string|number} key - the key or index that identifies + * this part of the multi-value */ - return function getResponseConfigClass(agg, props) { - if (agg.$$_ResponseAggConfigClass) { - return agg.$$_ResponseAggConfigClass; - } else { - return (agg.$$_ResponseAggConfigClass = create(agg, props)); - } - }; + function ResponseAggConfig(key) { + this.key = key; + this.parentId = this.id; - function create(parentAgg, props) { - - /** - * AggConfig "wrapper" for multi-value metric aggs which - * need to modify AggConfig behavior for each value produced. - * - * @param {string|number} key - the key or index that identifies - * this part of the multi-value - */ - function ResponseAggConfig(key) { - this.key = key; - this.parentId = this.id; - - var subId = String(key); - if (subId.indexOf('.') > -1) { - this.id = this.parentId + '[\'' + subId.replace(/'/g, '\\\'') + '\']'; - } else { - this.id = this.parentId + '.' + subId; - } + var subId = String(key); + if (subId.indexOf('.') > -1) { + this.id = this.parentId + '[\'' + subId.replace(/'/g, '\\\'') + '\']'; + } else { + this.id = this.parentId + '.' + subId; } + } - ResponseAggConfig.prototype = Object.create(parentAgg, { - constructor: ResponseAggConfig - }); + ResponseAggConfig.prototype = Object.create(parentAgg, { + constructor: ResponseAggConfig + }); - _.assign(ResponseAggConfig.prototype, props); + _.assign(ResponseAggConfig.prototype, props); - return ResponseAggConfig; - } - }; -}); + return ResponseAggConfig; + } +}; diff --git a/src/ui/public/agg_types/metrics/max.js b/src/ui/public/agg_types/metrics/max.js index 76228f16aa42cb..b40d95dc97355a 100644 --- a/src/ui/public/agg_types/metrics/max.js +++ b/src/ui/public/agg_types/metrics/max.js @@ -1,21 +1,19 @@ import AggTypesMetricsMetricAggTypeProvider from 'ui/agg_types/metrics/MetricAggType'; -define(function (require) { - return function AggTypeMetricMaxProvider(Private) { - var MetricAggType = Private(AggTypesMetricsMetricAggTypeProvider); +export default function AggTypeMetricMaxProvider(Private) { + var MetricAggType = Private(AggTypesMetricsMetricAggTypeProvider); - return new MetricAggType({ - name: 'max', - title: 'Max', - makeLabel: function (aggConfig) { - return 'Max ' + aggConfig.params.field.displayName; - }, - params: [ - { - name: 'field', - filterFieldTypes: 'number,date' - } - ] - }); - }; -}); + return new MetricAggType({ + name: 'max', + title: 'Max', + makeLabel: function (aggConfig) { + return 'Max ' + aggConfig.params.field.displayName; + }, + params: [ + { + name: 'field', + filterFieldTypes: 'number,date' + } + ] + }); +}; diff --git a/src/ui/public/agg_types/metrics/median.js b/src/ui/public/agg_types/metrics/median.js index dade065475d298..c175e300f579d7 100644 --- a/src/ui/public/agg_types/metrics/median.js +++ b/src/ui/public/agg_types/metrics/median.js @@ -2,31 +2,29 @@ import _ from 'lodash'; import AggTypesMetricsMetricAggTypeProvider from 'ui/agg_types/metrics/MetricAggType'; import AggTypesMetricsGetResponseAggConfigClassProvider from 'ui/agg_types/metrics/getResponseAggConfigClass'; import AggTypesMetricsPercentilesProvider from 'ui/agg_types/metrics/percentiles'; -define(function (require) { - return function AggTypeMetricMaxProvider(Private) { - var MetricAggType = Private(AggTypesMetricsMetricAggTypeProvider); - var getResponseAggConfigClass = Private(AggTypesMetricsGetResponseAggConfigClassProvider); - var percentiles = Private(AggTypesMetricsPercentilesProvider); +export default function AggTypeMetricMaxProvider(Private) { + var MetricAggType = Private(AggTypesMetricsMetricAggTypeProvider); + var getResponseAggConfigClass = Private(AggTypesMetricsGetResponseAggConfigClassProvider); + var percentiles = Private(AggTypesMetricsPercentilesProvider); - return new MetricAggType({ - name: 'median', - dslName: 'percentiles', - title: 'Median', - makeLabel: function (aggConfig) { - return 'Median ' + aggConfig.params.field.displayName; + return new MetricAggType({ + name: 'median', + dslName: 'percentiles', + title: 'Median', + makeLabel: function (aggConfig) { + return 'Median ' + aggConfig.params.field.displayName; + }, + params: [ + { + name: 'field', + filterFieldTypes: 'number' }, - params: [ - { - name: 'field', - filterFieldTypes: 'number' - }, - { - name: 'percents', - default: [50] - } - ], - getResponseAggs: percentiles.getResponseAggs, - getValue: percentiles.getValue - }); - }; -}); + { + name: 'percents', + default: [50] + } + ], + getResponseAggs: percentiles.getResponseAggs, + getValue: percentiles.getValue + }); +}; diff --git a/src/ui/public/agg_types/metrics/min.js b/src/ui/public/agg_types/metrics/min.js index 0c34de3768e15c..4ab6242d484962 100644 --- a/src/ui/public/agg_types/metrics/min.js +++ b/src/ui/public/agg_types/metrics/min.js @@ -1,21 +1,19 @@ import AggTypesMetricsMetricAggTypeProvider from 'ui/agg_types/metrics/MetricAggType'; -define(function (require) { - return function AggTypeMetricMinProvider(Private) { - var MetricAggType = Private(AggTypesMetricsMetricAggTypeProvider); +export default function AggTypeMetricMinProvider(Private) { + var MetricAggType = Private(AggTypesMetricsMetricAggTypeProvider); - return new MetricAggType({ - name: 'min', - title: 'Min', - makeLabel: function (aggConfig) { - return 'Min ' + aggConfig.params.field.displayName; - }, - params: [ - { - name: 'field', - filterFieldTypes: 'number,date' - } - ] - }); - }; -}); + return new MetricAggType({ + name: 'min', + title: 'Min', + makeLabel: function (aggConfig) { + return 'Min ' + aggConfig.params.field.displayName; + }, + params: [ + { + name: 'field', + filterFieldTypes: 'number,date' + } + ] + }); +}; diff --git a/src/ui/public/agg_types/metrics/percentile_ranks.js b/src/ui/public/agg_types/metrics/percentile_ranks.js index ce4e8dc5a3ba90..99802b8e71a0fd 100644 --- a/src/ui/public/agg_types/metrics/percentile_ranks.js +++ b/src/ui/public/agg_types/metrics/percentile_ranks.js @@ -4,58 +4,56 @@ import 'ui/number_list'; import AggTypesMetricsMetricAggTypeProvider from 'ui/agg_types/metrics/MetricAggType'; import AggTypesMetricsGetResponseAggConfigClassProvider from 'ui/agg_types/metrics/getResponseAggConfigClass'; import RegistryFieldFormatsProvider from 'ui/registry/field_formats'; -define(function (require) { - return function AggTypeMetricPercentileRanksProvider(Private) { +export default function AggTypeMetricPercentileRanksProvider(Private) { - var MetricAggType = Private(AggTypesMetricsMetricAggTypeProvider); - var getResponseAggConfigClass = Private(AggTypesMetricsGetResponseAggConfigClassProvider); - var fieldFormats = Private(RegistryFieldFormatsProvider); + var MetricAggType = Private(AggTypesMetricsMetricAggTypeProvider); + var getResponseAggConfigClass = Private(AggTypesMetricsGetResponseAggConfigClassProvider); + var fieldFormats = Private(RegistryFieldFormatsProvider); - // required by the values editor + // required by the values editor - var valueProps = { - makeLabel: function () { - var field = this.field(); - var format = (field && field.format) || fieldFormats.getDefaultInstance('number'); + var valueProps = { + makeLabel: function () { + var field = this.field(); + var format = (field && field.format) || fieldFormats.getDefaultInstance('number'); - return 'Percentile rank ' + format.convert(this.key, 'text') + ' of "' + this.fieldDisplayName() + '"'; - } - }; - - return new MetricAggType({ - name: 'percentile_ranks', - title: 'Percentile Ranks', - makeLabel: function (agg) { - return 'Percentile ranks of ' + agg.fieldDisplayName(); - }, - params: [ - { - name: 'field', - filterFieldTypes: 'number' - }, - { - name: 'values', - editor: valuesEditor, - default: [] - } - ], - getResponseAggs: function (agg) { - var ValueAggConfig = getResponseAggConfigClass(agg, valueProps); + return 'Percentile rank ' + format.convert(this.key, 'text') + ' of "' + this.fieldDisplayName() + '"'; + } + }; - return agg.params.values.map(function (value) { - return new ValueAggConfig(value); - }); + return new MetricAggType({ + name: 'percentile_ranks', + title: 'Percentile Ranks', + makeLabel: function (agg) { + return 'Percentile ranks of ' + agg.fieldDisplayName(); + }, + params: [ + { + name: 'field', + filterFieldTypes: 'number' }, - getFormat: function () { - return fieldFormats.getInstance('percent') || fieldFormats.getDefaultInstance('number'); - }, - getValue: function (agg, bucket) { - // values for 1, 5, and 10 will come back as 1.0, 5.0, and 10.0 so we - // parse the keys and respond with the value that matches - return _.find(bucket[agg.parentId] && bucket[agg.parentId].values, function (value, key) { - return agg.key === parseFloat(key); - }) / 100; + { + name: 'values', + editor: valuesEditor, + default: [] } - }); - }; -}); + ], + getResponseAggs: function (agg) { + var ValueAggConfig = getResponseAggConfigClass(agg, valueProps); + + return agg.params.values.map(function (value) { + return new ValueAggConfig(value); + }); + }, + getFormat: function () { + return fieldFormats.getInstance('percent') || fieldFormats.getDefaultInstance('number'); + }, + getValue: function (agg, bucket) { + // values for 1, 5, and 10 will come back as 1.0, 5.0, and 10.0 so we + // parse the keys and respond with the value that matches + return _.find(bucket[agg.parentId] && bucket[agg.parentId].values, function (value, key) { + return agg.key === parseFloat(key); + }) / 100; + } + }); +}; diff --git a/src/ui/public/agg_types/metrics/percentiles.js b/src/ui/public/agg_types/metrics/percentiles.js index a417a438059e37..ecdb2b3629dff5 100644 --- a/src/ui/public/agg_types/metrics/percentiles.js +++ b/src/ui/public/agg_types/metrics/percentiles.js @@ -5,52 +5,50 @@ import 'ui/number_list'; import AggTypesMetricsMetricAggTypeProvider from 'ui/agg_types/metrics/MetricAggType'; import AggTypesMetricsGetResponseAggConfigClassProvider from 'ui/agg_types/metrics/getResponseAggConfigClass'; import RegistryFieldFormatsProvider from 'ui/registry/field_formats'; -define(function (require) { - return function AggTypeMetricPercentilesProvider(Private) { +export default function AggTypeMetricPercentilesProvider(Private) { - var MetricAggType = Private(AggTypesMetricsMetricAggTypeProvider); - var getResponseAggConfigClass = Private(AggTypesMetricsGetResponseAggConfigClassProvider); - var fieldFormats = Private(RegistryFieldFormatsProvider); + var MetricAggType = Private(AggTypesMetricsMetricAggTypeProvider); + var getResponseAggConfigClass = Private(AggTypesMetricsGetResponseAggConfigClassProvider); + var fieldFormats = Private(RegistryFieldFormatsProvider); - // required by the percentiles editor + // required by the percentiles editor - var valueProps = { - makeLabel: function () { - return ordinalSuffix(this.key) + ' percentile of ' + this.fieldDisplayName(); - } - }; - - return new MetricAggType({ - name: 'percentiles', - title: 'Percentiles', - makeLabel: function (agg) { - return 'Percentiles of ' + agg.fieldDisplayName(); - }, - params: [ - { - name: 'field', - filterFieldTypes: 'number' - }, - { - name: 'percents', - editor: percentsEditor, - default: [1, 5, 25, 50, 75, 95, 99] - } - ], - getResponseAggs: function (agg) { - var ValueAggConfig = getResponseAggConfigClass(agg, valueProps); + var valueProps = { + makeLabel: function () { + return ordinalSuffix(this.key) + ' percentile of ' + this.fieldDisplayName(); + } + }; - return agg.params.percents.map(function (percent) { - return new ValueAggConfig(percent); - }); + return new MetricAggType({ + name: 'percentiles', + title: 'Percentiles', + makeLabel: function (agg) { + return 'Percentiles of ' + agg.fieldDisplayName(); + }, + params: [ + { + name: 'field', + filterFieldTypes: 'number' }, - getValue: function (agg, bucket) { - // percentiles for 1, 5, and 10 will come back as 1.0, 5.0, and 10.0 so we - // parse the keys and respond with the value that matches - return _.find(bucket[agg.parentId] && bucket[agg.parentId].values, function (value, key) { - return agg.key === parseFloat(key); - }); + { + name: 'percents', + editor: percentsEditor, + default: [1, 5, 25, 50, 75, 95, 99] } - }); - }; -}); + ], + getResponseAggs: function (agg) { + var ValueAggConfig = getResponseAggConfigClass(agg, valueProps); + + return agg.params.percents.map(function (percent) { + return new ValueAggConfig(percent); + }); + }, + getValue: function (agg, bucket) { + // percentiles for 1, 5, and 10 will come back as 1.0, 5.0, and 10.0 so we + // parse the keys and respond with the value that matches + return _.find(bucket[agg.parentId] && bucket[agg.parentId].values, function (value, key) { + return agg.key === parseFloat(key); + }); + } + }); +}; diff --git a/src/ui/public/agg_types/metrics/stdDeviation.js b/src/ui/public/agg_types/metrics/stdDeviation.js index 4d80e5d3cc4309..1e31bbbf1d8d2d 100644 --- a/src/ui/public/agg_types/metrics/stdDeviation.js +++ b/src/ui/public/agg_types/metrics/stdDeviation.js @@ -1,63 +1,61 @@ import _ from 'lodash'; import AggTypesMetricsMetricAggTypeProvider from 'ui/agg_types/metrics/MetricAggType'; import AggTypesMetricsGetResponseAggConfigClassProvider from 'ui/agg_types/metrics/getResponseAggConfigClass'; -define(function (require) { - return function AggTypeMetricStandardDeviationProvider(Private) { - var MetricAggType = Private(AggTypesMetricsMetricAggTypeProvider); - var getResponseAggConfigClass = Private(AggTypesMetricsGetResponseAggConfigClassProvider); +export default function AggTypeMetricStandardDeviationProvider(Private) { + var MetricAggType = Private(AggTypesMetricsMetricAggTypeProvider); + var getResponseAggConfigClass = Private(AggTypesMetricsGetResponseAggConfigClassProvider); - var responseAggConfigProps = { - valProp: function () { - var details = this.keyedDetails[this.key]; - return details.valProp; + var responseAggConfigProps = { + valProp: function () { + var details = this.keyedDetails[this.key]; + return details.valProp; + }, + makeLabel: function () { + var details = this.keyedDetails[this.key]; + return details.title + ' of ' + this.fieldDisplayName(); + }, + keyedDetails: { + std_lower: { + valProp: ['std_deviation_bounds', 'lower'], + title: 'Lower Standard Deviation' }, - makeLabel: function () { - var details = this.keyedDetails[this.key]; - return details.title + ' of ' + this.fieldDisplayName(); + avg: { + valProp: 'avg', + title: 'Average' }, - keyedDetails: { - std_lower: { - valProp: ['std_deviation_bounds', 'lower'], - title: 'Lower Standard Deviation' - }, - avg: { - valProp: 'avg', - title: 'Average' - }, - std_upper: { - valProp: ['std_deviation_bounds', 'upper'], - title: 'Upper Standard Deviation' - } + std_upper: { + valProp: ['std_deviation_bounds', 'upper'], + title: 'Upper Standard Deviation' } - }; + } + }; - return new MetricAggType({ - name: 'std_dev', - dslName: 'extended_stats', - title: 'Standard Deviation', - makeLabel: function (agg) { - return 'Standard Deviation of ' + agg.fieldDisplayName(); - }, - params: [ - { - name: 'field', - filterFieldTypes: 'number' - } - ], + return new MetricAggType({ + name: 'std_dev', + dslName: 'extended_stats', + title: 'Standard Deviation', + makeLabel: function (agg) { + return 'Standard Deviation of ' + agg.fieldDisplayName(); + }, + params: [ + { + name: 'field', + filterFieldTypes: 'number' + } + ], - getResponseAggs: function (agg) { - var ValueAggConfig = getResponseAggConfigClass(agg, responseAggConfigProps); + getResponseAggs: function (agg) { + var ValueAggConfig = getResponseAggConfigClass(agg, responseAggConfigProps); - return [ - new ValueAggConfig('std_lower'), - new ValueAggConfig('avg'), - new ValueAggConfig('std_upper') - ]; - }, + return [ + new ValueAggConfig('std_lower'), + new ValueAggConfig('avg'), + new ValueAggConfig('std_upper') + ]; + }, - getValue: function (agg, bucket) { - return _.get(bucket[agg.parentId], agg.valProp()); - } - }); - }; -}); + getValue: function (agg, bucket) { + return _.get(bucket[agg.parentId], agg.valProp()); + } + }); +}; diff --git a/src/ui/public/agg_types/metrics/sum.js b/src/ui/public/agg_types/metrics/sum.js index b51e264913b982..8ba2e9407b3e8e 100644 --- a/src/ui/public/agg_types/metrics/sum.js +++ b/src/ui/public/agg_types/metrics/sum.js @@ -1,21 +1,19 @@ import AggTypesMetricsMetricAggTypeProvider from 'ui/agg_types/metrics/MetricAggType'; -define(function (require) { - return function AggTypeMetricSumProvider(Private) { - var MetricAggType = Private(AggTypesMetricsMetricAggTypeProvider); +export default function AggTypeMetricSumProvider(Private) { + var MetricAggType = Private(AggTypesMetricsMetricAggTypeProvider); - return new MetricAggType({ - name: 'sum', - title: 'Sum', - makeLabel: function (aggConfig) { - return 'Sum of ' + aggConfig.params.field.displayName; - }, - params: [ - { - name: 'field', - filterFieldTypes: 'number' - } - ] - }); - }; -}); + return new MetricAggType({ + name: 'sum', + title: 'Sum', + makeLabel: function (aggConfig) { + return 'Sum of ' + aggConfig.params.field.displayName; + }, + params: [ + { + name: 'field', + filterFieldTypes: 'number' + } + ] + }); +}; diff --git a/src/ui/public/agg_types/param_types/base.js b/src/ui/public/agg_types/param_types/base.js index 8a621b8e2db645..997ff7a8e47658 100644 --- a/src/ui/public/agg_types/param_types/base.js +++ b/src/ui/public/agg_types/param_types/base.js @@ -1,11 +1,9 @@ import _ from 'lodash'; -define(function (require) { - return function BaseAggParamFactory() { +export default function BaseAggParamFactory() { - function BaseAggParam(config) { - _.assign(this, config); - } + function BaseAggParam(config) { + _.assign(this, config); + } - return BaseAggParam; - }; -}); + return BaseAggParam; +}; diff --git a/src/ui/public/agg_types/param_types/field.js b/src/ui/public/agg_types/param_types/field.js index 4eeeb38e348e21..fa94e446963ebe 100644 --- a/src/ui/public/agg_types/param_types/field.js +++ b/src/ui/public/agg_types/param_types/field.js @@ -2,68 +2,66 @@ import { SavedObjectNotFound } from 'ui/errors'; import _ from 'lodash'; import editorHtml from 'ui/agg_types/controls/field.html'; import AggTypesParamTypesBaseProvider from 'ui/agg_types/param_types/base'; -define(function (require) { - return function FieldAggParamFactory(Private) { +export default function FieldAggParamFactory(Private) { - var BaseAggParam = Private(AggTypesParamTypesBaseProvider); + var BaseAggParam = Private(AggTypesParamTypesBaseProvider); - _.class(FieldAggParam).inherits(BaseAggParam); - function FieldAggParam(config) { - FieldAggParam.Super.call(this, config); - } - - FieldAggParam.prototype.editor = editorHtml; - FieldAggParam.prototype.scriptable = false; - FieldAggParam.prototype.filterFieldTypes = '*'; + _.class(FieldAggParam).inherits(BaseAggParam); + function FieldAggParam(config) { + FieldAggParam.Super.call(this, config); + } - /** - * Called to serialize values for saving an aggConfig object - * - * @param {field} field - the field that was selected - * @return {string} - */ - FieldAggParam.prototype.serialize = function (field) { - return field.name; - }; + FieldAggParam.prototype.editor = editorHtml; + FieldAggParam.prototype.scriptable = false; + FieldAggParam.prototype.filterFieldTypes = '*'; - /** - * Called to read values from a database record into the - * aggConfig object - * - * @param {string} fieldName - * @return {field} - */ - FieldAggParam.prototype.deserialize = function (fieldName, aggConfig) { - var field = aggConfig.vis.indexPattern.fields.byName[fieldName]; + /** + * Called to serialize values for saving an aggConfig object + * + * @param {field} field - the field that was selected + * @return {string} + */ + FieldAggParam.prototype.serialize = function (field) { + return field.name; + }; - if (!field) { - throw new SavedObjectNotFound('index-pattern-field', fieldName); - } + /** + * Called to read values from a database record into the + * aggConfig object + * + * @param {string} fieldName + * @return {field} + */ + FieldAggParam.prototype.deserialize = function (fieldName, aggConfig) { + var field = aggConfig.vis.indexPattern.fields.byName[fieldName]; - return field; - }; + if (!field) { + throw new SavedObjectNotFound('index-pattern-field', fieldName); + } - /** - * Write the aggregation parameter. - * - * @param {AggConfig} aggConfig - the entire configuration for this agg - * @param {object} output - the result of calling write on all of the aggregations - * parameters. - * @param {object} output.params - the final object that will be included as the params - * for the agg - * @return {undefined} - */ - FieldAggParam.prototype.write = function (aggConfig, output) { - var field = aggConfig.params.field; + return field; + }; - if (field.scripted) { - output.params.script = field.script; - output.params.lang = field.lang; - } else { - output.params.field = field.name; - } - }; + /** + * Write the aggregation parameter. + * + * @param {AggConfig} aggConfig - the entire configuration for this agg + * @param {object} output - the result of calling write on all of the aggregations + * parameters. + * @param {object} output.params - the final object that will be included as the params + * for the agg + * @return {undefined} + */ + FieldAggParam.prototype.write = function (aggConfig, output) { + var field = aggConfig.params.field; - return FieldAggParam; + if (field.scripted) { + output.params.script = field.script; + output.params.lang = field.lang; + } else { + output.params.field = field.name; + } }; -}); + + return FieldAggParam; +}; diff --git a/src/ui/public/agg_types/param_types/optioned.js b/src/ui/public/agg_types/param_types/optioned.js index 6d3d51687691d8..0a4b0297e4a66c 100644 --- a/src/ui/public/agg_types/param_types/optioned.js +++ b/src/ui/public/agg_types/param_types/optioned.js @@ -1,56 +1,54 @@ import _ from 'lodash'; import IndexedArray from 'ui/IndexedArray'; import AggTypesParamTypesBaseProvider from 'ui/agg_types/param_types/base'; -define(function (require) { - return function OptionedAggParamFactory(Private) { +export default function OptionedAggParamFactory(Private) { - var BaseAggParam = Private(AggTypesParamTypesBaseProvider); + var BaseAggParam = Private(AggTypesParamTypesBaseProvider); - _.class(OptionedAggParam).inherits(BaseAggParam); - function OptionedAggParam(config) { - OptionedAggParam.Super.call(this, config); + _.class(OptionedAggParam).inherits(BaseAggParam); + function OptionedAggParam(config) { + OptionedAggParam.Super.call(this, config); - this.options = new IndexedArray({ - index: ['val'], - immutable: true, - initialSet: this.options - }); - } + this.options = new IndexedArray({ + index: ['val'], + immutable: true, + initialSet: this.options + }); + } - /** - * Serialize a selection to be stored in the database - * @param {object} selected - the option that was selected - * @return {any} - */ - OptionedAggParam.prototype.serialize = function (selected) { - return selected.val; - }; - - /** - * Take a value that was serialized to the database and - * return the option that is represents - * - * @param {any} val - the value that was saved - * @return {object} - */ - OptionedAggParam.prototype.deserialize = function (val) { - return this.options.byVal[val]; - }; + /** + * Serialize a selection to be stored in the database + * @param {object} selected - the option that was selected + * @return {any} + */ + OptionedAggParam.prototype.serialize = function (selected) { + return selected.val; + }; - /** - * Write the aggregation parameter. - * - * @param {AggConfig} aggConfig - the entire configuration for this agg - * @param {object} output - the result of calling write on all of the aggregations - * parameters. - * @param {object} output.params - the final object that will be included as the params - * for the agg - * @return {undefined} - */ - OptionedAggParam.prototype.write = function (aggConfig, output) { - output.params[this.name] = aggConfig.params[this.name].val; - }; + /** + * Take a value that was serialized to the database and + * return the option that is represents + * + * @param {any} val - the value that was saved + * @return {object} + */ + OptionedAggParam.prototype.deserialize = function (val) { + return this.options.byVal[val]; + }; - return OptionedAggParam; + /** + * Write the aggregation parameter. + * + * @param {AggConfig} aggConfig - the entire configuration for this agg + * @param {object} output - the result of calling write on all of the aggregations + * parameters. + * @param {object} output.params - the final object that will be included as the params + * for the agg + * @return {undefined} + */ + OptionedAggParam.prototype.write = function (aggConfig, output) { + output.params[this.name] = aggConfig.params[this.name].val; }; -}); + + return OptionedAggParam; +}; diff --git a/src/ui/public/agg_types/param_types/raw_json.js b/src/ui/public/agg_types/param_types/raw_json.js index 5f4c6d81a3159e..7e11b255ee4bd5 100644 --- a/src/ui/public/agg_types/param_types/raw_json.js +++ b/src/ui/public/agg_types/param_types/raw_json.js @@ -1,79 +1,77 @@ import _ from 'lodash'; import editorHtml from 'ui/agg_types/controls/raw_json.html'; import AggTypesParamTypesBaseProvider from 'ui/agg_types/param_types/base'; -define(function (require) { - return function RawJSONAggParamFactory(Private) { +export default function RawJSONAggParamFactory(Private) { - var BaseAggParam = Private(AggTypesParamTypesBaseProvider); + var BaseAggParam = Private(AggTypesParamTypesBaseProvider); - _.class(RawJSONAggParam).inherits(BaseAggParam); - function RawJSONAggParam(config) { - // force name override - config = _.defaults(config, { name: 'json' }); - RawJSONAggParam.Super.call(this, config); - } - - RawJSONAggParam.prototype.editor = editorHtml; + _.class(RawJSONAggParam).inherits(BaseAggParam); + function RawJSONAggParam(config) { + // force name override + config = _.defaults(config, { name: 'json' }); + RawJSONAggParam.Super.call(this, config); + } - /** - * Write the aggregation parameter. - * - * @param {AggConfig} aggConfig - the entire configuration for this agg - * @param {object} output - the result of calling write on all of the aggregations - * parameters. - * @param {object} output.params - the final object that will be included as the params - * for the agg - * @return {undefined} - */ - RawJSONAggParam.prototype.write = function (aggConfig, output) { - var paramJSON; - var param = aggConfig.params[this.name]; + RawJSONAggParam.prototype.editor = editorHtml; - if (!param) { - return; - } + /** + * Write the aggregation parameter. + * + * @param {AggConfig} aggConfig - the entire configuration for this agg + * @param {object} output - the result of calling write on all of the aggregations + * parameters. + * @param {object} output.params - the final object that will be included as the params + * for the agg + * @return {undefined} + */ + RawJSONAggParam.prototype.write = function (aggConfig, output) { + var paramJSON; + var param = aggConfig.params[this.name]; - // handle invalid JSON input - try { - paramJSON = JSON.parse(param); - } catch (err) { - return; - } + if (!param) { + return; + } - function filteredCombine(srcA, srcB) { - function mergeObjs(a, b) { - return _(a) - .keys() - .union(_.keys(b)) - .transform(function (dest, key) { - var val = compare(a[key], b[key]); - if (val !== undefined) dest[key] = val; - }, {}) - .value(); - } + // handle invalid JSON input + try { + paramJSON = JSON.parse(param); + } catch (err) { + return; + } - function mergeArrays(a, b) { - // attempt to merge each value - return _.times(Math.max(a.length, b.length), function (i) { - return compare(a[i], b[i]); - }); - } + function filteredCombine(srcA, srcB) { + function mergeObjs(a, b) { + return _(a) + .keys() + .union(_.keys(b)) + .transform(function (dest, key) { + var val = compare(a[key], b[key]); + if (val !== undefined) dest[key] = val; + }, {}) + .value(); + } - function compare(a, b) { - if (_.isPlainObject(a) && _.isPlainObject(b)) return mergeObjs(a, b); - if (_.isArray(a) && _.isArray(b)) return mergeArrays(a, b); - if (b === null) return undefined; - if (b !== undefined) return b; - return a; - } + function mergeArrays(a, b) { + // attempt to merge each value + return _.times(Math.max(a.length, b.length), function (i) { + return compare(a[i], b[i]); + }); + } - return compare(srcA, srcB); + function compare(a, b) { + if (_.isPlainObject(a) && _.isPlainObject(b)) return mergeObjs(a, b); + if (_.isArray(a) && _.isArray(b)) return mergeArrays(a, b); + if (b === null) return undefined; + if (b !== undefined) return b; + return a; } - output.params = filteredCombine(output.params, paramJSON); - return; - }; + return compare(srcA, srcB); + } - return RawJSONAggParam; + output.params = filteredCombine(output.params, paramJSON); + return; }; -}); + + return RawJSONAggParam; +}; diff --git a/src/ui/public/agg_types/param_types/regex.js b/src/ui/public/agg_types/param_types/regex.js index 46f5e1a6febaa1..876dd9cb89b703 100644 --- a/src/ui/public/agg_types/param_types/regex.js +++ b/src/ui/public/agg_types/param_types/regex.js @@ -1,72 +1,70 @@ import _ from 'lodash'; import editorHtml from 'ui/agg_types/controls/regular_expression.html'; import AggTypesParamTypesBaseProvider from 'ui/agg_types/param_types/base'; -define(function (require) { - return function RegexAggParamFactory(Private) { +export default function RegexAggParamFactory(Private) { - var BaseAggParam = Private(AggTypesParamTypesBaseProvider); + var BaseAggParam = Private(AggTypesParamTypesBaseProvider); - _.class(RegexAggParam).inherits(BaseAggParam); - function RegexAggParam(config) { - // Java RegExp flags - var flags = [ - 'CANON_EQ', - 'CASE_INSENSITIVE', - 'COMMENTS', - 'DOTALL', - 'LITERAL', - 'MULTILINE', - 'UNICODE_CASE', - 'UNICODE_CHARACTER_CLASS', - 'UNIX_LINES' - ]; + _.class(RegexAggParam).inherits(BaseAggParam); + function RegexAggParam(config) { + // Java RegExp flags + var flags = [ + 'CANON_EQ', + 'CASE_INSENSITIVE', + 'COMMENTS', + 'DOTALL', + 'LITERAL', + 'MULTILINE', + 'UNICODE_CASE', + 'UNICODE_CHARACTER_CLASS', + 'UNIX_LINES' + ]; - _.defaults(config, { pattern: '', flags: flags }); - RegexAggParam.Super.call(this, config); - } - - RegexAggParam.prototype.editor = editorHtml; + _.defaults(config, { pattern: '', flags: flags }); + RegexAggParam.Super.call(this, config); + } - /** - * Disabled state of the agg param - * - * @return {bool} - */ - RegexAggParam.prototype.disabled = function (aggConfig) { - return false; - }; + RegexAggParam.prototype.editor = editorHtml; - /** - * Write the aggregation parameter. - * - * @param {AggConfig} aggConfig - the entire configuration for this agg - * @param {object} output - the result of calling write on all of the aggregations - * parameters. - * @param {object} output.params - the final object that will be included as the params - * for the agg - * @return {undefined} - */ - RegexAggParam.prototype.write = function (aggConfig, output) { - var param = aggConfig.params[this.name]; - var paramType = aggConfig.type.params.byName[this.name]; - - // clear aggParam if pattern is not set or is disabled - if (!param || !param.pattern || !param.pattern.length || paramType.disabled(aggConfig)) { - return; - } + /** + * Disabled state of the agg param + * + * @return {bool} + */ + RegexAggParam.prototype.disabled = function (aggConfig) { + return false; + }; - var obj = { - pattern: param.pattern - }; + /** + * Write the aggregation parameter. + * + * @param {AggConfig} aggConfig - the entire configuration for this agg + * @param {object} output - the result of calling write on all of the aggregations + * parameters. + * @param {object} output.params - the final object that will be included as the params + * for the agg + * @return {undefined} + */ + RegexAggParam.prototype.write = function (aggConfig, output) { + var param = aggConfig.params[this.name]; + var paramType = aggConfig.type.params.byName[this.name]; - // include any selected flags - if (_.isArray(param.flags) && param.flags.length) { - obj.flags = param.flags.join('|'); - } + // clear aggParam if pattern is not set or is disabled + if (!param || !param.pattern || !param.pattern.length || paramType.disabled(aggConfig)) { + return; + } - output.params[this.name] = obj; + var obj = { + pattern: param.pattern }; - return RegexAggParam; + // include any selected flags + if (_.isArray(param.flags) && param.flags.length) { + obj.flags = param.flags.join('|'); + } + + output.params[this.name] = obj; }; -}); + + return RegexAggParam; +}; diff --git a/src/ui/public/agg_types/param_types/string.js b/src/ui/public/agg_types/param_types/string.js index 9c14f02ca04ded..8c3a1057d6fa64 100644 --- a/src/ui/public/agg_types/param_types/string.js +++ b/src/ui/public/agg_types/param_types/string.js @@ -1,34 +1,32 @@ import _ from 'lodash'; import editorHtml from 'ui/agg_types/controls/string.html'; import AggTypesParamTypesBaseProvider from 'ui/agg_types/param_types/base'; -define(function (require) { - return function FieldAggParamFactory(Private) { +export default function FieldAggParamFactory(Private) { - var BaseAggParam = Private(AggTypesParamTypesBaseProvider); + var BaseAggParam = Private(AggTypesParamTypesBaseProvider); - _.class(ScriptAggParam).inherits(BaseAggParam); - function ScriptAggParam(config) { - ScriptAggParam.Super.call(this, config); - } - - ScriptAggParam.prototype.editor = editorHtml; + _.class(ScriptAggParam).inherits(BaseAggParam); + function ScriptAggParam(config) { + ScriptAggParam.Super.call(this, config); + } - /** - * Write the aggregation parameter. - * - * @param {AggConfig} aggConfig - the entire configuration for this agg - * @param {object} output - the result of calling write on all of the aggregations - * parameters. - * @param {object} output.params - the final object that will be included as the params - * for the agg - * @return {undefined} - */ - ScriptAggParam.prototype.write = function (aggConfig, output) { - if (aggConfig.params[this.name] && aggConfig.params[this.name].length) { - output.params[this.name] = aggConfig.params[this.name]; - } - }; + ScriptAggParam.prototype.editor = editorHtml; - return ScriptAggParam; + /** + * Write the aggregation parameter. + * + * @param {AggConfig} aggConfig - the entire configuration for this agg + * @param {object} output - the result of calling write on all of the aggregations + * parameters. + * @param {object} output.params - the final object that will be included as the params + * for the agg + * @return {undefined} + */ + ScriptAggParam.prototype.write = function (aggConfig, output) { + if (aggConfig.params[this.name] && aggConfig.params[this.name].length) { + output.params[this.name] = aggConfig.params[this.name]; + } }; -}); + + return ScriptAggParam; +}; diff --git a/src/ui/public/bind/bind.js b/src/ui/public/bind/bind.js index 4baf74fdc34173..71885f563f54e4 100644 --- a/src/ui/public/bind/bind.js +++ b/src/ui/public/bind/bind.js @@ -1,82 +1,80 @@ import _ from 'lodash'; import angular from 'angular'; -define(function (require) { - - require('ui/modules').get('kibana') - .config(function ($provide) { - - function strictEquality(a, b) { - // are the values equal? or, are they both NaN? - return a === b || (a !== a && b !== b); - } - - function errorNotAssignable(source, target) { - throw Error('Unable to accept change to bound $scope property "' + source + '"' + - ' because source expression "' + target + '" is not assignable!'); - } - - $provide.decorator('$rootScope', function ($delegate, $parse) { - /** - * Two-way bind a value from scope to another property on scope. This - * allow values on scope that work like they do in an isolate scope, but - * without requiring one. - * - * @param {expression} to - the location on scope to bind to - * @param {expression} from - the location on scope to bind from - * @param {Scope} $sourceScope - the scope to read "from" expression from - * @return {undefined} - */ - $delegate.constructor.prototype.$bind = function (to, from, $sourceScope) { - var $source = $sourceScope || this.$parent; - var $target = this; - - // parse expressions - var $to = $parse(to); - if (!$to.assign) errorNotAssignable(to, from); - var $from = $parse(from); - - // bind scopes to expressions - var getTarget = function () { return $to($target); }; - var setTarget = function (v) { return $to.assign($target, v); }; - var getSource = function () { return $from($source); }; - var setSource = function (v) { return $from.assignOrFail($source, v); }; - - // to support writing from the child to the parent we need to know - // which source has changed. Track the source value and anytime it - // changes (even if the target value changed too) push from source - // to target. If the source hasn't changed then the change is from - // the target and push accordingly - var lastSourceVal = getSource(); - - $from.assignOrFail = $from.assign || function () { - // revert the change and throw an error, child writes aren't supported - $to($target, lastSourceVal = $from($source)); - errorNotAssignable(from, to); - }; - - // if we are syncing down a literal, then we use loose equality check - var strict = !$from.literal; - var compare = strict ? strictEquality : angular.equals; - - - // push the initial value down, start off in sync - setTarget(lastSourceVal); - - $target.$watch(function () { - var sourceVal = getSource(); - var targetVal = getTarget(); - - var outOfSync = !compare(sourceVal, targetVal); - var sourceChanged = outOfSync && !compare(sourceVal, lastSourceVal); - - if (sourceChanged) setTarget(sourceVal); - else if (outOfSync) setSource(targetVal); - - return lastSourceVal = sourceVal; - }, null, !strict); + +require('ui/modules').get('kibana') +.config(function ($provide) { + + function strictEquality(a, b) { + // are the values equal? or, are they both NaN? + return a === b || (a !== a && b !== b); + } + + function errorNotAssignable(source, target) { + throw Error('Unable to accept change to bound $scope property "' + source + '"' + + ' because source expression "' + target + '" is not assignable!'); + } + + $provide.decorator('$rootScope', function ($delegate, $parse) { + /** + * Two-way bind a value from scope to another property on scope. This + * allow values on scope that work like they do in an isolate scope, but + * without requiring one. + * + * @param {expression} to - the location on scope to bind to + * @param {expression} from - the location on scope to bind from + * @param {Scope} $sourceScope - the scope to read "from" expression from + * @return {undefined} + */ + $delegate.constructor.prototype.$bind = function (to, from, $sourceScope) { + var $source = $sourceScope || this.$parent; + var $target = this; + + // parse expressions + var $to = $parse(to); + if (!$to.assign) errorNotAssignable(to, from); + var $from = $parse(from); + + // bind scopes to expressions + var getTarget = function () { return $to($target); }; + var setTarget = function (v) { return $to.assign($target, v); }; + var getSource = function () { return $from($source); }; + var setSource = function (v) { return $from.assignOrFail($source, v); }; + + // to support writing from the child to the parent we need to know + // which source has changed. Track the source value and anytime it + // changes (even if the target value changed too) push from source + // to target. If the source hasn't changed then the change is from + // the target and push accordingly + var lastSourceVal = getSource(); + + $from.assignOrFail = $from.assign || function () { + // revert the change and throw an error, child writes aren't supported + $to($target, lastSourceVal = $from($source)); + errorNotAssignable(from, to); }; - return $delegate; - }); + // if we are syncing down a literal, then we use loose equality check + var strict = !$from.literal; + var compare = strict ? strictEquality : angular.equals; + + + // push the initial value down, start off in sync + setTarget(lastSourceVal); + + $target.$watch(function () { + var sourceVal = getSource(); + var targetVal = getTarget(); + + var outOfSync = !compare(sourceVal, targetVal); + var sourceChanged = outOfSync && !compare(sourceVal, lastSourceVal); + + if (sourceChanged) setTarget(sourceVal); + else if (outOfSync) setSource(targetVal); + + return lastSourceVal = sourceVal; + }, null, !strict); + }; + + return $delegate; }); }); diff --git a/src/ui/public/bound_to_config_obj.js b/src/ui/public/bound_to_config_obj.js index 088a71ac8330da..b5ea23fe4f9316 100644 --- a/src/ui/public/bound_to_config_obj.js +++ b/src/ui/public/bound_to_config_obj.js @@ -1,43 +1,41 @@ import _ from 'lodash'; -define(function (require) { - return function BoundToConfigObjProvider($rootScope, config) { +export default function BoundToConfigObjProvider($rootScope, config) { - /** - * Create an object with properties that may be bound to config values. - * The input object is basically cloned unless one of it's own properties - * resolved to a string value that starts with an equal sign. When that is - * found, that property is forever bound to the corresponding config key. - * - * example: - * - * // name is cloned, height is bound to the defaultHeight config key - * { name: 'john', height: '=defaultHeight' }; - * - * @param {Object} input - * @return {Object} - */ - function BoundToConfigObj(input) { - var self = this; + /** + * Create an object with properties that may be bound to config values. + * The input object is basically cloned unless one of it's own properties + * resolved to a string value that starts with an equal sign. When that is + * found, that property is forever bound to the corresponding config key. + * + * example: + * + * // name is cloned, height is bound to the defaultHeight config key + * { name: 'john', height: '=defaultHeight' }; + * + * @param {Object} input + * @return {Object} + */ + function BoundToConfigObj(input) { + var self = this; - _.forOwn(input, function (val, prop) { - if (!_.isString(val) || val.charAt(0) !== '=') { - self[prop] = val; - return; - } + _.forOwn(input, function (val, prop) { + if (!_.isString(val) || val.charAt(0) !== '=') { + self[prop] = val; + return; + } - var configKey = val.substr(1); + var configKey = val.substr(1); - update(); - $rootScope.$on('init:config', update); - $rootScope.$on('change:config.' + configKey, update); - function update() { - self[prop] = config.get(configKey); - } + update(); + $rootScope.$on('init:config', update); + $rootScope.$on('change:config.' + configKey, update); + function update() { + self[prop] = config.get(configKey); + } - }); - } + }); + } - return BoundToConfigObj; + return BoundToConfigObj; - }; -}); +}; diff --git a/src/ui/public/chrome/context.js b/src/ui/public/chrome/context.js index 1741c87b27ce11..b7ae16efdc00a9 100644 --- a/src/ui/public/chrome/context.js +++ b/src/ui/public/chrome/context.js @@ -1,36 +1,34 @@ import _ from 'lodash'; import ConfigTemplate from 'ui/ConfigTemplate'; -define(function (require) { - require('ui/modules') - .get('kibana') - // TODO: all of this really belongs in the timepicker - .directive('chromeContext', function (timefilter, globalState) { +require('ui/modules') +.get('kibana') +// TODO: all of this really belongs in the timepicker +.directive('chromeContext', function (timefilter, globalState) { - var listenForUpdates = _.once(function ($scope) { - $scope.$listen(timefilter, 'update', function (newVal, oldVal) { - globalState.time = _.clone(timefilter.time); - globalState.refreshInterval = _.clone(timefilter.refreshInterval); - globalState.save(); - }); + var listenForUpdates = _.once(function ($scope) { + $scope.$listen(timefilter, 'update', function (newVal, oldVal) { + globalState.time = _.clone(timefilter.time); + globalState.refreshInterval = _.clone(timefilter.refreshInterval); + globalState.save(); }); + }); - return { - link: function ($scope) { - listenForUpdates($scope); - - // chrome is responsible for timepicker ui and state transfer... - $scope.timefilter = timefilter; - $scope.pickerTemplate = new ConfigTemplate({ - filter: require('ui/chrome/config/filter.html'), - interval: require('ui/chrome/config/interval.html') - }); + return { + link: function ($scope) { + listenForUpdates($scope); - $scope.toggleRefresh = function () { - timefilter.refreshInterval.pause = !timefilter.refreshInterval.pause; - }; - } - }; - }); + // chrome is responsible for timepicker ui and state transfer... + $scope.timefilter = timefilter; + $scope.pickerTemplate = new ConfigTemplate({ + filter: require('ui/chrome/config/filter.html'), + interval: require('ui/chrome/config/interval.html') + }); + $scope.toggleRefresh = function () { + timefilter.refreshInterval.pause = !timefilter.refreshInterval.pause; + }; + } + }; }); + diff --git a/src/ui/public/collapsible_sidebar/collapsible_sidebar.js b/src/ui/public/collapsible_sidebar/collapsible_sidebar.js index 6334bdc0d17703..7b8bc1c3959636 100644 --- a/src/ui/public/collapsible_sidebar/collapsible_sidebar.js +++ b/src/ui/public/collapsible_sidebar/collapsible_sidebar.js @@ -1,36 +1,34 @@ import 'ui/collapsible_sidebar/collapsible_sidebar.less'; import _ from 'lodash'; import $ from 'jquery'; -define(function (require) { - require('ui/modules') - .get('kibana') - .directive('collapsibleSidebar', function () { - // simply a list of all of all of angulars .col-md-* classes except 12 - var listOfWidthClasses = _.times(11, function (i) { return 'col-md-' + i; }); +require('ui/modules') +.get('kibana') +.directive('collapsibleSidebar', function () { + // simply a list of all of all of angulars .col-md-* classes except 12 + var listOfWidthClasses = _.times(11, function (i) { return 'col-md-' + i; }); - return { - restrict: 'C', - link: function ($scope, $elem) { - var $collapser = $(''); - var $siblings = $elem.siblings(); + return { + restrict: 'C', + link: function ($scope, $elem) { + var $collapser = $(''); + var $siblings = $elem.siblings(); - var siblingsClass = listOfWidthClasses.reduce(function (prev, className) { - if (prev) return prev; - return $siblings.hasClass(className) && className; - }, false); + var siblingsClass = listOfWidthClasses.reduce(function (prev, className) { + if (prev) return prev; + return $siblings.hasClass(className) && className; + }, false); - $collapser.on('click', function () { - $elem.toggleClass('closed'); - // if there is are only two elements we can assume the other one will take 100% of the width - if ($siblings.length === 1 && siblingsClass) { - $siblings.toggleClass(siblingsClass + ' col-md-12'); - } - }) + $collapser.on('click', function () { + $elem.toggleClass('closed'); + // if there is are only two elements we can assume the other one will take 100% of the width + if ($siblings.length === 1 && siblingsClass) { + $siblings.toggleClass(siblingsClass + ' col-md-12'); + } + }) - .appendTo($elem); - } - }; - }); + .appendTo($elem); + } + }; }); diff --git a/src/ui/public/compile_recursive_directive.js b/src/ui/public/compile_recursive_directive.js index 6e18242f99b69e..54f5542dc105b7 100644 --- a/src/ui/public/compile_recursive_directive.js +++ b/src/ui/public/compile_recursive_directive.js @@ -1,54 +1,52 @@ import _ from 'lodash'; -define(function (require) { - /** - * Angular can't render directives that render themselves recursively: - * http://stackoverflow.com/a/18609594/296172 - */ +/** + * Angular can't render directives that render themselves recursively: + * http://stackoverflow.com/a/18609594/296172 + */ - require('ui/modules') - .get('kibana') - .service('compileRecursiveDirective', function ($compile) { - return { - /** - * Manually compiles the element, fixing the recursion loop. - * @param element - * @param [link] A post-link function, or an object with function(s) registered via pre and post properties. - * @returns An object containing the linking functions. - */ - compile: function (element, link) { - // Normalize the link parameter - if (_.isFunction(link)) { - link = { - post: link - }; - } +require('ui/modules') +.get('kibana') +.service('compileRecursiveDirective', function ($compile) { + return { + /** + * Manually compiles the element, fixing the recursion loop. + * @param element + * @param [link] A post-link function, or an object with function(s) registered via pre and post properties. + * @returns An object containing the linking functions. + */ + compile: function (element, link) { + // Normalize the link parameter + if (_.isFunction(link)) { + link = { + post: link + }; + } - // Break the recursion loop by removing the contents - var contents = element.contents().remove(); - var compiledContents; - return { - pre: (link && link.pre) ? link.pre : null, - /** - * Compiles and re-adds the contents - */ - post: function (scope, element) { - // Compile the contents - if (!compiledContents) { - compiledContents = $compile(contents); - } - // Re-add the compiled contents to the element - compiledContents(scope, function (clone) { - element.append(clone); - }); + // Break the recursion loop by removing the contents + var contents = element.contents().remove(); + var compiledContents; + return { + pre: (link && link.pre) ? link.pre : null, + /** + * Compiles and re-adds the contents + */ + post: function (scope, element) { + // Compile the contents + if (!compiledContents) { + compiledContents = $compile(contents); + } + // Re-add the compiled contents to the element + compiledContents(scope, function (clone) { + element.append(clone); + }); - // Call the post-linking function, if any - if (link && link.post) { - link.post.apply(null, arguments); - } + // Call the post-linking function, if any + if (link && link.post) { + link.post.apply(null, arguments); } - }; - } - }; - }); + } + }; + } + }; }); diff --git a/src/ui/public/config/_delayed_updater.js b/src/ui/public/config/_delayed_updater.js index 33a82b1c323f4c..959ca0478cfc13 100644 --- a/src/ui/public/config/_delayed_updater.js +++ b/src/ui/public/config/_delayed_updater.js @@ -1,87 +1,85 @@ import _ from 'lodash'; import angular from 'angular'; import ConfigValsProvider from 'ui/config/_vals'; -define(function (require) { - return function DelayedUpdaterFactory(Private, $rootScope, Promise, Notifier) { - var notify = new Notifier(); +export default function DelayedUpdaterFactory(Private, $rootScope, Promise, Notifier) { + var notify = new Notifier(); - var vals = Private(ConfigValsProvider); + var vals = Private(ConfigValsProvider); - return function DelayedUpdater(doc) { - var updater = this; - var queue = []; - var log = {}; - var timer; + return function DelayedUpdater(doc) { + var updater = this; + var queue = []; + var log = {}; + var timer; - updater.fire = function () { - clearTimeout(timer); + updater.fire = function () { + clearTimeout(timer); - // only fire once - if (updater.fired) return; - updater.fired = true; + // only fire once + if (updater.fired) return; + updater.fired = true; - var method; - var body; - var updated = []; - var deleted = []; + var method; + var body; + var updated = []; + var deleted = []; - // seperate the log into lists - Object.keys(log).forEach(function (key) { - if (log[key] === 'updated') updated.push(key); - else deleted.push(key); - }); + // seperate the log into lists + Object.keys(log).forEach(function (key) { + if (log[key] === 'updated') updated.push(key); + else deleted.push(key); + }); - if (deleted.length) { - method = 'doIndex'; - body = _.clone(vals); - } else { - method = 'doUpdate'; - body = _.pick(vals, updated); - } + if (deleted.length) { + method = 'doIndex'; + body = _.clone(vals); + } else { + method = 'doUpdate'; + body = _.pick(vals, updated); + } - doc[method](vals) - .then( - function (resp) { - queue.forEach(function (q) { q.resolve(resp); }); - }, - function (err) { - queue.forEach(function (q) { q.reject(err); }); - } - ) - .finally(function () { - $rootScope.$broadcast('change:config', updated.concat(deleted)); - }); - }; + doc[method](vals) + .then( + function (resp) { + queue.forEach(function (q) { q.resolve(resp); }); + }, + function (err) { + queue.forEach(function (q) { q.reject(err); }); + } + ) + .finally(function () { + $rootScope.$broadcast('change:config', updated.concat(deleted)); + }); + }; - updater.update = function (key, val, silentAndLocal) { - var newVal = val; - var oldVal = vals[key]; + updater.update = function (key, val, silentAndLocal) { + var newVal = val; + var oldVal = vals[key]; - if (angular.equals(newVal, oldVal)) { - return Promise.resolve(); - } - else if (newVal == null) { - delete vals[key]; - log[key] = 'deleted'; - } - else { - vals[key] = newVal; - log[key] = 'updated'; - } + if (angular.equals(newVal, oldVal)) { + return Promise.resolve(); + } + else if (newVal == null) { + delete vals[key]; + log[key] = 'deleted'; + } + else { + vals[key] = newVal; + log[key] = 'updated'; + } - if (silentAndLocal) return Promise.resolve(); + if (silentAndLocal) return Promise.resolve(); - var defer = Promise.defer(); - queue.push(defer); - notify.log('config change: ' + key + ': ' + oldVal + ' -> ' + newVal); - $rootScope.$broadcast('change:config.' + key, newVal, oldVal); + var defer = Promise.defer(); + queue.push(defer); + notify.log('config change: ' + key + ': ' + oldVal + ' -> ' + newVal); + $rootScope.$broadcast('change:config.' + key, newVal, oldVal); - // reset the fire timer - clearTimeout(timer); - timer = setTimeout(updater.fire, 200); - return defer.promise; - }; + // reset the fire timer + clearTimeout(timer); + timer = setTimeout(updater.fire, 200); + return defer.promise; }; - }; -}); + +}; diff --git a/src/ui/public/config/_vals.js b/src/ui/public/config/_vals.js index cc1719792a029b..0e2f15f670b31f 100644 --- a/src/ui/public/config/_vals.js +++ b/src/ui/public/config/_vals.js @@ -1,5 +1,3 @@ -define(function (require) { - return function ConfigValsService() { - return {}; - }; -}); +export default function ConfigValsService() { + return {}; +}; diff --git a/src/ui/public/config/config.js b/src/ui/public/config/config.js index 63cd51f61982d6..54e5f54748d560 100644 --- a/src/ui/public/config/config.js +++ b/src/ui/public/config/config.js @@ -4,159 +4,157 @@ import ConfigDefaultsProvider from 'ui/config/defaults'; import ConfigDelayedUpdaterProvider from 'ui/config/_delayed_updater'; import ConfigValsProvider from 'ui/config/_vals'; import CourierDataSourceDocSourceProvider from 'ui/courier/data_source/doc_source'; -define(function (require) { - var module = require('ui/modules').get('kibana/config', [ - 'kibana/notify' - ]); +var module = require('ui/modules').get('kibana/config', [ + 'kibana/notify' +]); - require('ui/routes').addSetupWork(function (config) { - return config.init(); +require('ui/routes').addSetupWork(function (config) { + return config.init(); +}); + +// service for delivering config variables to everywhere else +module.service('config', function (Private, Notifier, kbnVersion, kbnIndex, $rootScope, buildNum) { + var config = this; + + var defaults = Private(ConfigDefaultsProvider); + var DelayedUpdater = Private(ConfigDelayedUpdaterProvider); + var vals = Private(ConfigValsProvider); + + var notify = new Notifier({ + location: 'Config' }); - // service for delivering config variables to everywhere else - module.service('config', function (Private, Notifier, kbnVersion, kbnIndex, $rootScope, buildNum) { - var config = this; - - var defaults = Private(ConfigDefaultsProvider); - var DelayedUpdater = Private(ConfigDelayedUpdaterProvider); - var vals = Private(ConfigValsProvider); - - var notify = new Notifier({ - location: 'Config' - }); - - // active or previous instance of DelayedUpdater. This will log and then process an - // update once it is requested by calling #set() or #clear(). - var updater; - - var DocSource = Private(CourierDataSourceDocSourceProvider); - var doc = (new DocSource()) - .index(kbnIndex) - .type('config') - .id(kbnVersion); - - /****** - * PUBLIC API - ******/ - - /** - * Executes once and returns a promise that is resolved once the - * config has loaded for the first time. - * - * @return {Promise} - Resolved when the config loads initially - */ - config.init = _.once(function () { - var complete = notify.lifecycle('config init'); - - return (function getDoc() { - - // used to apply an entire es response to the vals, silentAndLocal will prevent - // event/notifications/writes from occuring. - var applyMassUpdate = function (resp, silentAndLocal) { - _.union(_.keys(resp._source), _.keys(vals)).forEach(function (key) { - change(key, resp._source[key], silentAndLocal); - }); - }; - - return doc.fetch().then(function initDoc(resp) { - if (!resp.found) { - return doc.doIndex({ - buildNum: buildNum - }).then(getDoc); - } else { - // apply update, and keep it quiet the first time - applyMassUpdate(resp, true); - - // don't keep it quiet other times - doc.onUpdate(function (resp) { - applyMassUpdate(resp, false); - }); - } + // active or previous instance of DelayedUpdater. This will log and then process an + // update once it is requested by calling #set() or #clear(). + var updater; + + var DocSource = Private(CourierDataSourceDocSourceProvider); + var doc = (new DocSource()) + .index(kbnIndex) + .type('config') + .id(kbnVersion); + + /****** + * PUBLIC API + ******/ + + /** + * Executes once and returns a promise that is resolved once the + * config has loaded for the first time. + * + * @return {Promise} - Resolved when the config loads initially + */ + config.init = _.once(function () { + var complete = notify.lifecycle('config init'); + + return (function getDoc() { + + // used to apply an entire es response to the vals, silentAndLocal will prevent + // event/notifications/writes from occuring. + var applyMassUpdate = function (resp, silentAndLocal) { + _.union(_.keys(resp._source), _.keys(vals)).forEach(function (key) { + change(key, resp._source[key], silentAndLocal); }); - }()) - .then(function () { - $rootScope.$broadcast('init:config'); - }) - .then(complete, complete.failure); - }); - - config.get = function (key, defaultVal) { - var keyVal; - - if (vals[key] == null) { - if (defaultVal == null) { - keyVal = defaults[key].value; + }; + + return doc.fetch().then(function initDoc(resp) { + if (!resp.found) { + return doc.doIndex({ + buildNum: buildNum + }).then(getDoc); } else { - keyVal = _.cloneDeep(defaultVal); + // apply update, and keep it quiet the first time + applyMassUpdate(resp, true); + + // don't keep it quiet other times + doc.onUpdate(function (resp) { + applyMassUpdate(resp, false); + }); } - } else { - keyVal = vals[key]; - } + }); + }()) + .then(function () { + $rootScope.$broadcast('init:config'); + }) + .then(complete, complete.failure); + }); - if (defaults[key] && defaults[key].type === 'json') { - return JSON.parse(keyVal); - } - return keyVal; - }; + config.get = function (key, defaultVal) { + var keyVal; - // sets a value in the config - config.set = function (key, val) { - if (_.isPlainObject(val)) { - return change(key, angular.toJson(val)); + if (vals[key] == null) { + if (defaultVal == null) { + keyVal = defaults[key].value; } else { - return change(key, val); + keyVal = _.cloneDeep(defaultVal); } - }; - - // clears a value from the config - config.clear = function (key) { - return change(key); - }; - // alias for clear - config.delete = config.clear; - - config.close = function () { - if (updater) updater.fire(); - }; - - /** - * A little helper for binding config variables to $scopes - * - * @param {Scope} $scope - an angular $scope object - * @param {string} key - the config key to bind to - * @param {string} [property] - optional property name where the value should - * be stored. Defaults to the config key - * @return {function} - an unbind function - */ - config.$bind = function ($scope, key, property) { - if (!property) property = key; - - var update = function () { - $scope[property] = config.get(key); - }; - - update(); - return _.partial(_.invoke, [ - $scope.$on('change:config.' + key, update), - $scope.$on('init:config', update) - ], 'call'); - }; - - /***** - * PRIVATE API - *****/ - function change(key, val, silentAndLocal) { - // if the previous updater has already fired, then start over with null - if (updater && updater.fired) updater = null; - // create a new updater - if (!updater) updater = new DelayedUpdater(doc); - // return a promise that will be resolved once the action is eventually done - return updater.update(key, val, silentAndLocal); + } else { + keyVal = vals[key]; } - config._vals = function () { - return _.cloneDeep(vals); + if (defaults[key] && defaults[key].type === 'json') { + return JSON.parse(keyVal); + } + return keyVal; + }; + + // sets a value in the config + config.set = function (key, val) { + if (_.isPlainObject(val)) { + return change(key, angular.toJson(val)); + } else { + return change(key, val); + } + }; + + // clears a value from the config + config.clear = function (key) { + return change(key); + }; + // alias for clear + config.delete = config.clear; + + config.close = function () { + if (updater) updater.fire(); + }; + + /** + * A little helper for binding config variables to $scopes + * + * @param {Scope} $scope - an angular $scope object + * @param {string} key - the config key to bind to + * @param {string} [property] - optional property name where the value should + * be stored. Defaults to the config key + * @return {function} - an unbind function + */ + config.$bind = function ($scope, key, property) { + if (!property) property = key; + + var update = function () { + $scope[property] = config.get(key); }; - }); + update(); + return _.partial(_.invoke, [ + $scope.$on('change:config.' + key, update), + $scope.$on('init:config', update) + ], 'call'); + }; + + /***** + * PRIVATE API + *****/ + function change(key, val, silentAndLocal) { + // if the previous updater has already fired, then start over with null + if (updater && updater.fired) updater = null; + // create a new updater + if (!updater) updater = new DelayedUpdater(doc); + // return a promise that will be resolved once the action is eventually done + return updater.update(key, val, silentAndLocal); + } + + config._vals = function () { + return _.cloneDeep(vals); + }; + }); diff --git a/src/ui/public/config/defaults.js b/src/ui/public/config/defaults.js index 5e29f32a29cf0b..5e0c6ab653d153 100644 --- a/src/ui/public/config/defaults.js +++ b/src/ui/public/config/defaults.js @@ -1,211 +1,209 @@ import moment from 'moment-timezone'; import _ from 'lodash'; -define(function (require) { - return function configDefaultsProvider() { - // wraped in provider so that a new instance is given to each app/test +export default function configDefaultsProvider() { + // wraped in provider so that a new instance is given to each app/test - return { - 'buildNum': { - readonly: true - }, - 'query:queryString:options': { - value: '{ "analyze_wildcard": true }', - description: 'Options for the lucene query string parser', - type: 'json' - }, - 'sort:options': { - value: '{ "unmapped_type": "boolean" }', - description: 'Options the Elasticsearch sort parameter', - type: 'json' - }, - 'dateFormat': { - value: 'MMMM Do YYYY, HH:mm:ss.SSS', - description: 'When displaying a pretty formatted date, use this format', - }, - 'dateFormat:tz': { - value: 'Browser', - description: 'Which timezone should be used. "Browser" will use the timezone detected by your browser.', - type: 'select', - options: _.union(['Browser'], moment.tz.names()) - }, - 'dateFormat:scaled': { - type: 'json', - value: - '[\n' + - ' ["", "hh:mm:ss.SSS"],\n' + - ' ["PT1S", "HH:mm:ss"],\n' + - ' ["PT1M", "HH:mm"],\n' + - ' ["PT1H",\n' + - ' "YYYY-MM-DD HH:mm"],\n' + - ' ["P1DT", "YYYY-MM-DD"],\n' + - ' ["P1YT", "YYYY"]\n' + - ']', - description: 'Values that define the format used in situations where timebased' + - ' data is rendered in order, and formatted timestamps should adapt to the' + - ' interval between measurements. Keys are' + - ' ' + - 'ISO8601 intervals.' - }, - 'defaultIndex': { - value: null, - description: 'The index to access if no index is set', - }, - 'metaFields': { - value: ['_source', '_id', '_type', '_index', '_score'], - description: 'Fields that exist outside of _source to merge into our document when displaying it', - }, - 'discover:sampleSize': { - value: 500, - description: 'The number of rows to show in the table', - }, - 'doc_table:highlight': { - value: true, - description: 'Highlight results in Discover and Saved Searches Dashboard.' + - 'Highlighing makes request slow when working on big documents.', - }, - 'courier:maxSegmentCount': { - value: 30, - description: 'Requests in discover are split into segments to prevent massive requests from being sent to ' + - 'elasticsearch. This setting attempts to prevent the list of segments from getting too long, which might ' + - 'cause requests to take much longer to process' - }, - 'fields:popularLimit': { - value: 10, - description: 'The top N most popular fields to show', - }, - 'histogram:barTarget': { - value: 50, - description: 'Attempt to generate around this many bar when using "auto" interval in date histograms', - }, - 'histogram:maxBars': { - value: 100, - description: 'Never show more than this many bar in date histograms, scale values if needed', - }, - 'visualization:tileMap:maxPrecision': { - value: 7, - description: 'The maximum geoHash precision displayed on tile maps: 7 is high, 10 is very high, ' + - '12 is the max. ' + - '' + - 'Explanation of cell dimensions', - }, - 'visualization:tileMap:WMSdefaults': { - value: JSON.stringify({ - enabled: false, - url: 'https://basemap.nationalmap.gov/arcgis/services/USGSTopo/MapServer/WMSServer', - options: { - version: '1.3.0', - layers: '0', - format: 'image/png', - transparent: true, - attribution: 'Maps provided by USGS', - styles: '', - } - }, null, ' '), - type: 'json', - description: 'Default properties for the WMS map server support in the tile map' - }, - 'visualization:colorMapping': { - type: 'json', - value: JSON.stringify({ - 'Count': '#57c17b' - }), - description: 'Maps values to specified colors within visualizations' - }, - 'visualization:loadingDelay': { - value: '2s', - description: 'Time to wait before dimming visualizations during query' - }, - 'csv:separator': { - value: ',', - description: 'Separate exported values with this string', - }, - 'csv:quoteValues': { - value: true, - description: 'Should values be quoted in csv exports?', - }, - 'history:limit': { - value: 10, - description: 'In fields that have history (e.g. query inputs), show this many recent values', - }, - 'shortDots:enable': { - value: false, - description: 'Shorten long fields, for example, instead of foo.bar.baz, show f.b.baz', - }, - 'truncate:maxHeight': { - value: 115, - description: 'The maximum height that a cell in a table should occupy. Set to 0 to disable truncation' - }, - 'indexPattern:fieldMapping:lookBack': { - value: 5, - description: 'For index patterns containing timestamps in their names, look for this many recent matching ' + - 'patterns from which to query the field mapping' - }, - 'format:defaultTypeMap': { - type: 'json', - value: [ - '{', - ' "ip": { "id": "ip", "params": {} },', - ' "date": { "id": "date", "params": {} },', - ' "number": { "id": "number", "params": {} },', - ' "_source": { "id": "_source", "params": {} },', - ' "_default_": { "id": "string", "params": {} }', - '}', - ].join('\n'), - description: 'Map of the format name to use by default for each field type. ' + - '"_default_" is used if the field type is not mentioned explicitly' - }, - 'format:number:defaultPattern': { - type: 'string', - value: '0,0.[000]', - description: 'Default numeral format for the "number" format' - }, - 'format:bytes:defaultPattern': { - type: 'string', - value: '0,0.[000]b', - description: 'Default numeral format for the "bytes" format' - }, - 'format:percent:defaultPattern': { - type: 'string', - value: '0,0.[000]%', - description: 'Default numeral format for the "percent" format' - }, - 'format:currency:defaultPattern': { - type: 'string', - value: '($0,0.[00])', - description: 'Default numeral format for the "currency" format' - }, - 'timepicker:timeDefaults': { - type: 'json', - value: [ - '{', - ' "from": "now-15m",', - ' "to": "now",', - ' "mode": "quick"', - '}' - ].join('\n'), - description: 'The timefilter selection to use when Kibana is started without one' - }, - 'timepicker:refreshIntervalDefaults': { - type: 'json', - value: [ - '{', - ' "display": "Off",', - ' "pause": false,', - ' "value": 0', - '}' - ].join('\n'), - description: 'The timefilter\'s default refresh interval' - }, - 'dashboard:defaultDarkTheme': { - value: false, - description: 'New dashboards use dark theme by default' - }, - 'filters:pinnedByDefault': { - value: false, - description: 'Whether the filters should have a global state (be pinned) by default' - } - }; + return { + 'buildNum': { + readonly: true + }, + 'query:queryString:options': { + value: '{ "analyze_wildcard": true }', + description: 'Options for the lucene query string parser', + type: 'json' + }, + 'sort:options': { + value: '{ "unmapped_type": "boolean" }', + description: 'Options the Elasticsearch sort parameter', + type: 'json' + }, + 'dateFormat': { + value: 'MMMM Do YYYY, HH:mm:ss.SSS', + description: 'When displaying a pretty formatted date, use this format', + }, + 'dateFormat:tz': { + value: 'Browser', + description: 'Which timezone should be used. "Browser" will use the timezone detected by your browser.', + type: 'select', + options: _.union(['Browser'], moment.tz.names()) + }, + 'dateFormat:scaled': { + type: 'json', + value: + '[\n' + + ' ["", "hh:mm:ss.SSS"],\n' + + ' ["PT1S", "HH:mm:ss"],\n' + + ' ["PT1M", "HH:mm"],\n' + + ' ["PT1H",\n' + + ' "YYYY-MM-DD HH:mm"],\n' + + ' ["P1DT", "YYYY-MM-DD"],\n' + + ' ["P1YT", "YYYY"]\n' + + ']', + description: 'Values that define the format used in situations where timebased' + + ' data is rendered in order, and formatted timestamps should adapt to the' + + ' interval between measurements. Keys are' + + ' ' + + 'ISO8601 intervals.' + }, + 'defaultIndex': { + value: null, + description: 'The index to access if no index is set', + }, + 'metaFields': { + value: ['_source', '_id', '_type', '_index', '_score'], + description: 'Fields that exist outside of _source to merge into our document when displaying it', + }, + 'discover:sampleSize': { + value: 500, + description: 'The number of rows to show in the table', + }, + 'doc_table:highlight': { + value: true, + description: 'Highlight results in Discover and Saved Searches Dashboard.' + + 'Highlighing makes request slow when working on big documents.', + }, + 'courier:maxSegmentCount': { + value: 30, + description: 'Requests in discover are split into segments to prevent massive requests from being sent to ' + + 'elasticsearch. This setting attempts to prevent the list of segments from getting too long, which might ' + + 'cause requests to take much longer to process' + }, + 'fields:popularLimit': { + value: 10, + description: 'The top N most popular fields to show', + }, + 'histogram:barTarget': { + value: 50, + description: 'Attempt to generate around this many bar when using "auto" interval in date histograms', + }, + 'histogram:maxBars': { + value: 100, + description: 'Never show more than this many bar in date histograms, scale values if needed', + }, + 'visualization:tileMap:maxPrecision': { + value: 7, + description: 'The maximum geoHash precision displayed on tile maps: 7 is high, 10 is very high, ' + + '12 is the max. ' + + '' + + 'Explanation of cell dimensions', + }, + 'visualization:tileMap:WMSdefaults': { + value: JSON.stringify({ + enabled: false, + url: 'https://basemap.nationalmap.gov/arcgis/services/USGSTopo/MapServer/WMSServer', + options: { + version: '1.3.0', + layers: '0', + format: 'image/png', + transparent: true, + attribution: 'Maps provided by USGS', + styles: '', + } + }, null, ' '), + type: 'json', + description: 'Default properties for the WMS map server support in the tile map' + }, + 'visualization:colorMapping': { + type: 'json', + value: JSON.stringify({ + 'Count': '#57c17b' + }), + description: 'Maps values to specified colors within visualizations' + }, + 'visualization:loadingDelay': { + value: '2s', + description: 'Time to wait before dimming visualizations during query' + }, + 'csv:separator': { + value: ',', + description: 'Separate exported values with this string', + }, + 'csv:quoteValues': { + value: true, + description: 'Should values be quoted in csv exports?', + }, + 'history:limit': { + value: 10, + description: 'In fields that have history (e.g. query inputs), show this many recent values', + }, + 'shortDots:enable': { + value: false, + description: 'Shorten long fields, for example, instead of foo.bar.baz, show f.b.baz', + }, + 'truncate:maxHeight': { + value: 115, + description: 'The maximum height that a cell in a table should occupy. Set to 0 to disable truncation' + }, + 'indexPattern:fieldMapping:lookBack': { + value: 5, + description: 'For index patterns containing timestamps in their names, look for this many recent matching ' + + 'patterns from which to query the field mapping' + }, + 'format:defaultTypeMap': { + type: 'json', + value: [ + '{', + ' "ip": { "id": "ip", "params": {} },', + ' "date": { "id": "date", "params": {} },', + ' "number": { "id": "number", "params": {} },', + ' "_source": { "id": "_source", "params": {} },', + ' "_default_": { "id": "string", "params": {} }', + '}', + ].join('\n'), + description: 'Map of the format name to use by default for each field type. ' + + '"_default_" is used if the field type is not mentioned explicitly' + }, + 'format:number:defaultPattern': { + type: 'string', + value: '0,0.[000]', + description: 'Default numeral format for the "number" format' + }, + 'format:bytes:defaultPattern': { + type: 'string', + value: '0,0.[000]b', + description: 'Default numeral format for the "bytes" format' + }, + 'format:percent:defaultPattern': { + type: 'string', + value: '0,0.[000]%', + description: 'Default numeral format for the "percent" format' + }, + 'format:currency:defaultPattern': { + type: 'string', + value: '($0,0.[00])', + description: 'Default numeral format for the "currency" format' + }, + 'timepicker:timeDefaults': { + type: 'json', + value: [ + '{', + ' "from": "now-15m",', + ' "to": "now",', + ' "mode": "quick"', + '}' + ].join('\n'), + description: 'The timefilter selection to use when Kibana is started without one' + }, + 'timepicker:refreshIntervalDefaults': { + type: 'json', + value: [ + '{', + ' "display": "Off",', + ' "pause": false,', + ' "value": 0', + '}' + ].join('\n'), + description: 'The timefilter\'s default refresh interval' + }, + 'dashboard:defaultDarkTheme': { + value: false, + description: 'New dashboards use dark theme by default' + }, + 'filters:pinnedByDefault': { + value: false, + description: 'Whether the filters should have a global state (be pinned) by default' + } }; -}); +}; diff --git a/src/ui/public/courier/_error_handlers.js b/src/ui/public/courier/_error_handlers.js index 35d5c6cbb948dc..6b8193f616045d 100644 --- a/src/ui/public/courier/_error_handlers.js +++ b/src/ui/public/courier/_error_handlers.js @@ -1,10 +1,8 @@ -define(function (require) { - return function ErrorHandlerList() { - /** - * Queue of pending error handlers, they are removed as - * they are resolved. - * @type {Array} - */ - return []; - }; -}); +export default function ErrorHandlerList() { + /** + * Queue of pending error handlers, they are removed as + * they are resolved. + * @type {Array} + */ + return []; +}; diff --git a/src/ui/public/courier/_redirect_when_missing.js b/src/ui/public/courier/_redirect_when_missing.js index 176b6a03319680..b6a17ac90d2d2c 100644 --- a/src/ui/public/courier/_redirect_when_missing.js +++ b/src/ui/public/courier/_redirect_when_missing.js @@ -1,37 +1,35 @@ import errors from 'ui/errors'; -define(function (require) { - return function RedirectWhenMissingFn($location, kbnUrl, Notifier, Promise) { - var SavedObjectNotFound = errors.SavedObjectNotFound; +export default function RedirectWhenMissingFn($location, kbnUrl, Notifier, Promise) { + var SavedObjectNotFound = errors.SavedObjectNotFound; - var notify = new Notifier(); + var notify = new Notifier(); - /** - * Creates an error handler that will redirect to a url when a SavedObjectNotFound - * error is thrown - * - * @param {string|object} mapping - a mapping of url's to redirect to based on the saved object that - * couldn't be found, or just a string that will be used for all types - * @return {function} - the handler to pass to .catch() - */ - return function (mapping) { - if (typeof mapping === 'string') { - mapping = { '*': mapping }; - } + /** + * Creates an error handler that will redirect to a url when a SavedObjectNotFound + * error is thrown + * + * @param {string|object} mapping - a mapping of url's to redirect to based on the saved object that + * couldn't be found, or just a string that will be used for all types + * @return {function} - the handler to pass to .catch() + */ + return function (mapping) { + if (typeof mapping === 'string') { + mapping = { '*': mapping }; + } - return function (err) { - // if this error is not "404", rethrow - if (!(err instanceof SavedObjectNotFound)) throw err; + return function (err) { + // if this error is not "404", rethrow + if (!(err instanceof SavedObjectNotFound)) throw err; - var url = mapping[err.savedObjectType] || mapping['*']; - if (!url) url = '/'; + var url = mapping[err.savedObjectType] || mapping['*']; + if (!url) url = '/'; - url += (url.indexOf('?') >= 0 ? '&' : '?') + `notFound=${err.savedObjectType}`; + url += (url.indexOf('?') >= 0 ? '&' : '?') + `notFound=${err.savedObjectType}`; - notify.error(err); - kbnUrl.redirect(url); - return Promise.halt(); - }; + notify.error(err); + kbnUrl.redirect(url); + return Promise.halt(); }; }; -}); +}; diff --git a/src/ui/public/courier/_request_queue.js b/src/ui/public/courier/_request_queue.js index fbeff5bf962957..a5b940ec7c2b6f 100644 --- a/src/ui/public/courier/_request_queue.js +++ b/src/ui/public/courier/_request_queue.js @@ -1,38 +1,36 @@ import _ from 'lodash'; -define(function (require) { - return function PendingRequestList() { +export default function PendingRequestList() { - /** - * Queue of pending requests, requests are removed as - * they are processed by fetch.[sourceType](). - * @type {Array} - */ - var queue = []; + /** + * Queue of pending requests, requests are removed as + * they are processed by fetch.[sourceType](). + * @type {Array} + */ + var queue = []; - queue.getInactive = function (/* strategies */) { - return queue.get.apply(queue, arguments) - .filter(function (req) { - return !req.started; - }); - }; - - queue.getStartable = function (...strategies) { - return queue.get(...strategies).filter(req => req.canStart()); - }; + queue.getInactive = function (/* strategies */) { + return queue.get.apply(queue, arguments) + .filter(function (req) { + return !req.started; + }); + }; - queue.get = function (...strategies) { - return queue.filter(function (req) { - var strategyMatch = !strategies.length; - if (!strategyMatch) { - strategyMatch = strategies.some(function (strategy) { - return req.strategy === strategy; - }); - } + queue.getStartable = function (...strategies) { + return queue.get(...strategies).filter(req => req.canStart()); + }; - return strategyMatch; - }); - }; + queue.get = function (...strategies) { + return queue.filter(function (req) { + var strategyMatch = !strategies.length; + if (!strategyMatch) { + strategyMatch = strategies.some(function (strategy) { + return req.strategy === strategy; + }); + } - return queue; + return strategyMatch; + }); }; -}); + + return queue; +}; diff --git a/src/ui/public/courier/courier.js b/src/ui/public/courier/courier.js index 17185c3d9fbd96..ea18f7bc702b8b 100644 --- a/src/ui/public/courier/courier.js +++ b/src/ui/public/courier/courier.js @@ -15,137 +15,135 @@ import CourierLooperSearchProvider from 'ui/courier/looper/search'; import CourierDataSourceRootSearchSourceProvider from 'ui/courier/data_source/_root_search_source'; import CourierSavedObjectSavedObjectProvider from 'ui/courier/saved_object/saved_object'; import CourierRedirectWhenMissingProvider from 'ui/courier/_redirect_when_missing'; -define(function (require) { - - - require('ui/modules').get('kibana/courier') - .service('courier', function ($rootScope, Private, Promise, indexPatterns, Notifier) { - function Courier() { - var self = this; - - var DocSource = Private(CourierDataSourceDocSourceProvider); - var SearchSource = Private(CourierDataSourceSearchSourceProvider); - var searchStrategy = Private(CourierFetchStrategySearchProvider); - - var requestQueue = Private(CourierRequestQueueProvider); - var errorHandlers = Private(CourierErrorHandlersProvider); - - var fetch = Private(CourierFetchFetchProvider); - var docLooper = self.docLooper = Private(CourierLooperDocProvider); - var searchLooper = self.searchLooper = Private(CourierLooperSearchProvider); - - // expose some internal modules - self.setRootSearchSource = Private(CourierDataSourceRootSearchSourceProvider).set; - - self.SavedObject = Private(CourierSavedObjectSavedObjectProvider); - self.indexPatterns = indexPatterns; - self.redirectWhenMissing = Private(CourierRedirectWhenMissingProvider); - - self.DocSource = DocSource; - self.SearchSource = SearchSource; - - var HastyRefresh = errors.HastyRefresh; - - /** - * update the time between automatic search requests - * - * @chainable - */ - self.fetchInterval = function (ms) { - searchLooper.ms(ms); - return this; - }; - - /** - * Start fetching search requests on an interval - * @chainable - */ - self.start = function () { - searchLooper.start(); - docLooper.start(); - return this; - }; - - /** - * Process the pending request queue right now, returns - * a promise that resembles the success of the fetch completing, - * individual errors are routed to their respective requests. - */ - self.fetch = function () { - fetch.fetchQueued(searchStrategy).then(function () { - searchLooper.restart(); - }); - }; - - - /** - * is the currior currently fetching search - * results automatically? - * - * @return {boolean} - */ - self.started = function () { - return searchLooper.started(); - }; - - - /** - * stop the courier from fetching more search - * results, does not stop vaidating docs. - * - * @chainable - */ - self.stop = function () { - searchLooper.stop(); - return this; - }; - - - /** - * create a source object that is a child of this courier - * - * @param {string} type - the type of Source to create - */ - self.createSource = function (type) { - switch (type) { - case 'doc': - return new DocSource(); - case 'search': - return new SearchSource(); - } - }; - - /** - * Abort all pending requests - * @return {[type]} [description] - */ - self.close = function () { - searchLooper.stop(); - docLooper.stop(); - - _.invoke(requestQueue, 'abort'); - - if (requestQueue.length) { - throw new Error('Aborting all pending requests failed.'); - } - }; - - // Listen for refreshInterval changes - $rootScope.$watchCollection('timefilter.refreshInterval', function () { - var refreshValue = _.get($rootScope, 'timefilter.refreshInterval.value'); - var refreshPause = _.get($rootScope, 'timefilter.refreshInterval.pause'); - if (_.isNumber(refreshValue) && !refreshPause) { - self.fetchInterval(refreshValue); - } else { - self.fetchInterval(0); - } - }); - var onFatalDefer = Promise.defer(); - onFatalDefer.promise.then(self.close); - Notifier.fatalCallbacks.push(onFatalDefer.resolve); - } - return new Courier(); - }); +require('ui/modules').get('kibana/courier') +.service('courier', function ($rootScope, Private, Promise, indexPatterns, Notifier) { + function Courier() { + var self = this; + + var DocSource = Private(CourierDataSourceDocSourceProvider); + var SearchSource = Private(CourierDataSourceSearchSourceProvider); + var searchStrategy = Private(CourierFetchStrategySearchProvider); + + var requestQueue = Private(CourierRequestQueueProvider); + var errorHandlers = Private(CourierErrorHandlersProvider); + + var fetch = Private(CourierFetchFetchProvider); + var docLooper = self.docLooper = Private(CourierLooperDocProvider); + var searchLooper = self.searchLooper = Private(CourierLooperSearchProvider); + + // expose some internal modules + self.setRootSearchSource = Private(CourierDataSourceRootSearchSourceProvider).set; + + self.SavedObject = Private(CourierSavedObjectSavedObjectProvider); + self.indexPatterns = indexPatterns; + self.redirectWhenMissing = Private(CourierRedirectWhenMissingProvider); + + self.DocSource = DocSource; + self.SearchSource = SearchSource; + + var HastyRefresh = errors.HastyRefresh; + + /** + * update the time between automatic search requests + * + * @chainable + */ + self.fetchInterval = function (ms) { + searchLooper.ms(ms); + return this; + }; + + /** + * Start fetching search requests on an interval + * @chainable + */ + self.start = function () { + searchLooper.start(); + docLooper.start(); + return this; + }; + + /** + * Process the pending request queue right now, returns + * a promise that resembles the success of the fetch completing, + * individual errors are routed to their respective requests. + */ + self.fetch = function () { + fetch.fetchQueued(searchStrategy).then(function () { + searchLooper.restart(); + }); + }; + + + /** + * is the currior currently fetching search + * results automatically? + * + * @return {boolean} + */ + self.started = function () { + return searchLooper.started(); + }; + + + /** + * stop the courier from fetching more search + * results, does not stop vaidating docs. + * + * @chainable + */ + self.stop = function () { + searchLooper.stop(); + return this; + }; + + + /** + * create a source object that is a child of this courier + * + * @param {string} type - the type of Source to create + */ + self.createSource = function (type) { + switch (type) { + case 'doc': + return new DocSource(); + case 'search': + return new SearchSource(); + } + }; + + /** + * Abort all pending requests + * @return {[type]} [description] + */ + self.close = function () { + searchLooper.stop(); + docLooper.stop(); + + _.invoke(requestQueue, 'abort'); + + if (requestQueue.length) { + throw new Error('Aborting all pending requests failed.'); + } + }; + + // Listen for refreshInterval changes + $rootScope.$watchCollection('timefilter.refreshInterval', function () { + var refreshValue = _.get($rootScope, 'timefilter.refreshInterval.value'); + var refreshPause = _.get($rootScope, 'timefilter.refreshInterval.pause'); + if (_.isNumber(refreshValue) && !refreshPause) { + self.fetchInterval(refreshValue); + } else { + self.fetchInterval(0); + } + }); + + var onFatalDefer = Promise.defer(); + onFatalDefer.promise.then(self.close); + Notifier.fatalCallbacks.push(onFatalDefer.resolve); + } + + return new Courier(); }); diff --git a/src/ui/public/courier/data_source/_abstract.js b/src/ui/public/courier/data_source/_abstract.js index ad4410bfb517d7..9bd47b1eb4fb5c 100644 --- a/src/ui/public/courier/data_source/_abstract.js +++ b/src/ui/public/courier/data_source/_abstract.js @@ -4,348 +4,346 @@ import CourierRequestQueueProvider from 'ui/courier/_request_queue'; import CourierErrorHandlersProvider from 'ui/courier/_error_handlers'; import CourierFetchFetchProvider from 'ui/courier/fetch/fetch'; import CourierDataSourceDecorateQueryProvider from 'ui/courier/data_source/_decorate_query'; -define(function (require) { - - return function SourceAbstractFactory(Private, Promise, PromiseEmitter) { - var requestQueue = Private(CourierRequestQueueProvider); - var errorHandlers = Private(CourierErrorHandlersProvider); - var courierFetch = Private(CourierFetchFetchProvider); - - function SourceAbstract(initialState, strategy) { - var self = this; - self._instanceid = _.uniqueId('data_source'); - - self._state = (function () { - // state can be serialized as JSON, and passed back in to restore - if (initialState) { - if (typeof initialState === 'string') { - return JSON.parse(initialState); - } else { - return _.cloneDeep(initialState); - } - } else { - return {}; - } - }()); - - // set internal state values - self._methods.forEach(function (name) { - self[name] = function (val) { - if (val == null) { - delete self._state[name]; - } else { - self._state[name] = val; - } - return self; - }; - }); +export default function SourceAbstractFactory(Private, Promise, PromiseEmitter) { + var requestQueue = Private(CourierRequestQueueProvider); + var errorHandlers = Private(CourierErrorHandlersProvider); + var courierFetch = Private(CourierFetchFetchProvider); - self.history = []; - self._fetchStrategy = strategy; - } + function SourceAbstract(initialState, strategy) { + var self = this; + self._instanceid = _.uniqueId('data_source'); - /***** - * PUBLIC API - *****/ - - /** - * Get values from the state - * @param {string} name - The name of the property desired - * @return {any} - the value found - */ - SourceAbstract.prototype.get = function (name) { - var self = this; - while (self) { - if (self._state[name] !== void 0) return self._state[name]; - self = self.getParent(); - } - }; - - /** - * Get the value from our own state, don't traverse up the chain - * @param {string} name - The name of the property desired - * @return {any} - the value found - */ - SourceAbstract.prototype.getOwn = function (name) { - if (this._state[name] !== void 0) return this._state[name]; - }; - - /** - * Change the entire state of a SourceAbstract - * @param {object|string} state - The SourceAbstract's new state, or a - * string of the state value to set - */ - SourceAbstract.prototype.set = function (state, val) { - var self = this; - - if (typeof state === 'string') { - // the getter and setter methods check for undefined explicitly - // to identify getters and null to identify deletion - if (val === undefined) { - val = null; + self._state = (function () { + // state can be serialized as JSON, and passed back in to restore + if (initialState) { + if (typeof initialState === 'string') { + return JSON.parse(initialState); + } else { + return _.cloneDeep(initialState); } - self[state](val); } else { - self._state = state; + return {}; } - return self; - }; - - /** - * Create a new dataSource object of the same type - * as this, which inherits this dataSource's properties - * @return {SourceAbstract} - */ - SourceAbstract.prototype.extend = function () { - return (new this.Class()).inherits(this); - }; - - /** - * return a simple, encodable object representing the state of the SourceAbstract - * @return {[type]} [description] - */ - SourceAbstract.prototype.toJSON = function () { - return _.clone(this._state); - }; - - /** - * Create a string representation of the object - * @return {[type]} [description] - */ - SourceAbstract.prototype.toString = function () { - return angular.toJson(this.toJSON()); - }; - - /** - * Put a request in to the courier that this Source should - * be fetched on the next run of the courier - * @return {Promise} - */ - SourceAbstract.prototype.onResults = function (handler) { - var self = this; - - return new PromiseEmitter(function (resolve, reject) { - const defer = Promise.defer(); - defer.promise.then(resolve, reject); - - self._createRequest(defer); - }, handler); - }; - - /** - * Noop - */ - SourceAbstract.prototype.getParent = function () { - return this._parent; - }; - - /** - * similar to onResults, but allows a seperate loopy code path - * for error handling. - * - * @return {Promise} - */ - SourceAbstract.prototype.onError = function (handler) { - var self = this; - - return new PromiseEmitter(function (resolve, reject) { - const defer = Promise.defer(); - defer.promise.then(resolve, reject); - - errorHandlers.push({ - source: self, - defer: defer - }); - }, handler); - }; - - /** - * Fetch just this source ASAP - * - * ONLY USE IF YOU WILL BE USING THE RESULTS - * provided by the returned promise, otherwise - * call #fetchQueued() - * - * @async - */ - SourceAbstract.prototype.fetch = function () { - var self = this; - var req = _.first(self._myStartableQueued()); - - if (!req) { - req = self._createRequest(); + }()); + + // set internal state values + self._methods.forEach(function (name) { + self[name] = function (val) { + if (val == null) { + delete self._state[name]; + } else { + self._state[name] = val; + } + + return self; + }; + }); + + self.history = []; + self._fetchStrategy = strategy; + } + + /***** + * PUBLIC API + *****/ + + /** + * Get values from the state + * @param {string} name - The name of the property desired + * @return {any} - the value found + */ + SourceAbstract.prototype.get = function (name) { + var self = this; + while (self) { + if (self._state[name] !== void 0) return self._state[name]; + self = self.getParent(); + } + }; + + /** + * Get the value from our own state, don't traverse up the chain + * @param {string} name - The name of the property desired + * @return {any} - the value found + */ + SourceAbstract.prototype.getOwn = function (name) { + if (this._state[name] !== void 0) return this._state[name]; + }; + + /** + * Change the entire state of a SourceAbstract + * @param {object|string} state - The SourceAbstract's new state, or a + * string of the state value to set + */ + SourceAbstract.prototype.set = function (state, val) { + var self = this; + + if (typeof state === 'string') { + // the getter and setter methods check for undefined explicitly + // to identify getters and null to identify deletion + if (val === undefined) { + val = null; } + self[state](val); + } else { + self._state = state; + } + return self; + }; - courierFetch.these([req]); - - return req.defer.promise; - }; - - /** - * Fetch all pending requests for this source ASAP - * @async - */ - SourceAbstract.prototype.fetchQueued = function () { - return courierFetch.these(this._myStartableQueued()); - }; - - /** - * Cancel all pending requests for this dataSource - * @return {undefined} - */ - SourceAbstract.prototype.cancelQueued = function () { - requestQueue - .get(this._fetchStrategy) - .filter(req => req.source === this) - .forEach(req => req.abort()); - }; - - /** - * Completely destroy the SearchSource. - * @return {undefined} - */ - SourceAbstract.prototype.destroy = function () { - this.cancelQueued(); - }; - - /***** - * PRIVATE API - *****/ - - SourceAbstract.prototype._myStartableQueued = function () { - return requestQueue - .getStartable(this._fetchStrategy) - .filter(req => req.source === this); - }; - - SourceAbstract.prototype._createRequest = function () { - throw new Error('_createRequest must be implemented by subclass'); - }; - - /** - * Walk the inheritance chain of a source and return it's - * flat representaion (taking into account merging rules) - * @returns {Promise} - * @resolved {Object|null} - the flat state of the SourceAbstract - */ - SourceAbstract.prototype._flatten = function () { - var type = this._getType(); - - // the merged state of this dataSource and it's ancestors - var flatState = {}; - - // function used to write each property from each state object in the chain to flat state - var root = this; - - // start the chain at this source - var current = this; - - // call the ittr and return it's promise - return (function ittr() { - // itterate the _state object (not array) and - // pass each key:value pair to source._mergeProp. if _mergeProp - // returns a promise, then wait for it to complete and call _mergeProp again - return Promise.all(_.map(current._state, function ittr(value, key) { - if (Promise.is(value)) { - return value.then(function (value) { - return ittr(value, key); - }); - } + /** + * Create a new dataSource object of the same type + * as this, which inherits this dataSource's properties + * @return {SourceAbstract} + */ + SourceAbstract.prototype.extend = function () { + return (new this.Class()).inherits(this); + }; - var prom = root._mergeProp(flatState, value, key); - return Promise.is(prom) ? prom : null; - })) - .then(function () { - // move to this sources parent - var parent = current.getParent(); - // keep calling until we reach the top parent - if (parent) { - current = parent; - return ittr(); - } - }); - }()) - .then(function () { - if (type === 'search') { - // This is down here to prevent the circular dependency - var decorateQuery = Private(CourierDataSourceDecorateQueryProvider); + /** + * return a simple, encodable object representing the state of the SourceAbstract + * @return {[type]} [description] + */ + SourceAbstract.prototype.toJSON = function () { + return _.clone(this._state); + }; - flatState.body = flatState.body || {}; + /** + * Create a string representation of the object + * @return {[type]} [description] + */ + SourceAbstract.prototype.toString = function () { + return angular.toJson(this.toJSON()); + }; - // defaults for the query - if (!flatState.body.query) { - flatState.body.query = { - 'match_all': {} - }; - } + /** + * Put a request in to the courier that this Source should + * be fetched on the next run of the courier + * @return {Promise} + */ + SourceAbstract.prototype.onResults = function (handler) { + var self = this; - if (flatState.body.size === 0) { - flatState.search_type = 'count'; - } else { - var computedFields = flatState.index.getComputedFields(); - flatState.body.fields = computedFields.fields; - flatState.body.script_fields = flatState.body.script_fields || {}; - flatState.body.fielddata_fields = flatState.body.fielddata_fields || []; + return new PromiseEmitter(function (resolve, reject) { + const defer = Promise.defer(); + defer.promise.then(resolve, reject); - _.extend(flatState.body.script_fields, computedFields.scriptFields); - flatState.body.fielddata_fields = _.union(flatState.body.fielddata_fields, computedFields.fielddataFields); - } + self._createRequest(defer); + }, handler); + }; - decorateQuery(flatState.body.query); - - /** - * Create a filter that can be reversed for filters with negate set - * @param {boolean} reverse This will reverse the filter. If true then - * anything where negate is set will come - * through otherwise it will filter out - * @returns {function} - */ - var filterNegate = function (reverse) { - return function (filter) { - if (_.isUndefined(filter.meta) || _.isUndefined(filter.meta.negate)) return !reverse; - return filter.meta && filter.meta.negate === reverse; - }; + /** + * Noop + */ + SourceAbstract.prototype.getParent = function () { + return this._parent; + }; + + /** + * similar to onResults, but allows a seperate loopy code path + * for error handling. + * + * @return {Promise} + */ + SourceAbstract.prototype.onError = function (handler) { + var self = this; + + return new PromiseEmitter(function (resolve, reject) { + const defer = Promise.defer(); + defer.promise.then(resolve, reject); + + errorHandlers.push({ + source: self, + defer: defer + }); + }, handler); + }; + + /** + * Fetch just this source ASAP + * + * ONLY USE IF YOU WILL BE USING THE RESULTS + * provided by the returned promise, otherwise + * call #fetchQueued() + * + * @async + */ + SourceAbstract.prototype.fetch = function () { + var self = this; + var req = _.first(self._myStartableQueued()); + + if (!req) { + req = self._createRequest(); + } + + courierFetch.these([req]); + + return req.defer.promise; + }; + + /** + * Fetch all pending requests for this source ASAP + * @async + */ + SourceAbstract.prototype.fetchQueued = function () { + return courierFetch.these(this._myStartableQueued()); + }; + + /** + * Cancel all pending requests for this dataSource + * @return {undefined} + */ + SourceAbstract.prototype.cancelQueued = function () { + requestQueue + .get(this._fetchStrategy) + .filter(req => req.source === this) + .forEach(req => req.abort()); + }; + + /** + * Completely destroy the SearchSource. + * @return {undefined} + */ + SourceAbstract.prototype.destroy = function () { + this.cancelQueued(); + }; + + /***** + * PRIVATE API + *****/ + + SourceAbstract.prototype._myStartableQueued = function () { + return requestQueue + .getStartable(this._fetchStrategy) + .filter(req => req.source === this); + }; + + SourceAbstract.prototype._createRequest = function () { + throw new Error('_createRequest must be implemented by subclass'); + }; + + /** + * Walk the inheritance chain of a source and return it's + * flat representaion (taking into account merging rules) + * @returns {Promise} + * @resolved {Object|null} - the flat state of the SourceAbstract + */ + SourceAbstract.prototype._flatten = function () { + var type = this._getType(); + + // the merged state of this dataSource and it's ancestors + var flatState = {}; + + // function used to write each property from each state object in the chain to flat state + var root = this; + + // start the chain at this source + var current = this; + + // call the ittr and return it's promise + return (function ittr() { + // itterate the _state object (not array) and + // pass each key:value pair to source._mergeProp. if _mergeProp + // returns a promise, then wait for it to complete and call _mergeProp again + return Promise.all(_.map(current._state, function ittr(value, key) { + if (Promise.is(value)) { + return value.then(function (value) { + return ittr(value, key); + }); + } + + var prom = root._mergeProp(flatState, value, key); + return Promise.is(prom) ? prom : null; + })) + .then(function () { + // move to this sources parent + var parent = current.getParent(); + // keep calling until we reach the top parent + if (parent) { + current = parent; + return ittr(); + } + }); + }()) + .then(function () { + if (type === 'search') { + // This is down here to prevent the circular dependency + var decorateQuery = Private(CourierDataSourceDecorateQueryProvider); + + flatState.body = flatState.body || {}; + + // defaults for the query + if (!flatState.body.query) { + flatState.body.query = { + 'match_all': {} }; + } + + if (flatState.body.size === 0) { + flatState.search_type = 'count'; + } else { + var computedFields = flatState.index.getComputedFields(); + flatState.body.fields = computedFields.fields; + flatState.body.script_fields = flatState.body.script_fields || {}; + flatState.body.fielddata_fields = flatState.body.fielddata_fields || []; - /** - * Clean out any invalid attributes from the filters - * @param {object} filter The filter to clean - * @returns {object} - */ - var cleanFilter = function (filter) { - return _.omit(filter, ['meta']); + _.extend(flatState.body.script_fields, computedFields.scriptFields); + flatState.body.fielddata_fields = _.union(flatState.body.fielddata_fields, computedFields.fielddataFields); + } + + decorateQuery(flatState.body.query); + + /** + * Create a filter that can be reversed for filters with negate set + * @param {boolean} reverse This will reverse the filter. If true then + * anything where negate is set will come + * through otherwise it will filter out + * @returns {function} + */ + var filterNegate = function (reverse) { + return function (filter) { + if (_.isUndefined(filter.meta) || _.isUndefined(filter.meta.negate)) return !reverse; + return filter.meta && filter.meta.negate === reverse; }; + }; - // switch to filtered query if there are filters - if (flatState.filters) { - if (flatState.filters.length) { - _.each(flatState.filters, function (filter) { - if (filter.query) { - decorateQuery(filter.query); - } - }); - - flatState.body.query = { - filtered: { - query: flatState.body.query, - filter: { - bool: { - must: _(flatState.filters).filter(filterNegate(false)).map(cleanFilter).value(), - must_not: _(flatState.filters).filter(filterNegate(true)).map(cleanFilter).value() - } + /** + * Clean out any invalid attributes from the filters + * @param {object} filter The filter to clean + * @returns {object} + */ + var cleanFilter = function (filter) { + return _.omit(filter, ['meta']); + }; + + // switch to filtered query if there are filters + if (flatState.filters) { + if (flatState.filters.length) { + _.each(flatState.filters, function (filter) { + if (filter.query) { + decorateQuery(filter.query); + } + }); + + flatState.body.query = { + filtered: { + query: flatState.body.query, + filter: { + bool: { + must: _(flatState.filters).filter(filterNegate(false)).map(cleanFilter).value(), + must_not: _(flatState.filters).filter(filterNegate(true)).map(cleanFilter).value() } } - }; - } - delete flatState.filters; + } + }; } + delete flatState.filters; } + } - return flatState; - }); - }; - - return SourceAbstract; + return flatState; + }); }; -}); + + return SourceAbstract; +}; diff --git a/src/ui/public/courier/data_source/_decorate_query.js b/src/ui/public/courier/data_source/_decorate_query.js index 0cc7374a5e74fa..eac8b31fab4b9f 100644 --- a/src/ui/public/courier/data_source/_decorate_query.js +++ b/src/ui/public/courier/data_source/_decorate_query.js @@ -1,20 +1,18 @@ import _ from 'lodash'; -define(function (require) { - return function DecorateQuery(config) { - /** - * Decorate queries with default parameters - * @param {query} query object - * @returns {object} - */ - return function (query) { - var queryOptions = config.get('query:queryString:options'); +export default function DecorateQuery(config) { + /** + * Decorate queries with default parameters + * @param {query} query object + * @returns {object} + */ + return function (query) { + var queryOptions = config.get('query:queryString:options'); - if (_.has(query, 'query_string.query')) { - _.extend(query.query_string, queryOptions); - } + if (_.has(query, 'query_string.query')) { + _.extend(query.query_string, queryOptions); + } - return query; - }; + return query; }; -}); +}; diff --git a/src/ui/public/courier/data_source/_doc_send_to_es.js b/src/ui/public/courier/data_source/_doc_send_to_es.js index 9fc20bf6234dd4..2b1652e8bcc8a9 100644 --- a/src/ui/public/courier/data_source/_doc_send_to_es.js +++ b/src/ui/public/courier/data_source/_doc_send_to_es.js @@ -2,83 +2,81 @@ import _ from 'lodash'; import errors from 'ui/errors'; import CourierRequestQueueProvider from 'ui/courier/_request_queue'; import CourierFetchFetchProvider from 'ui/courier/fetch/fetch'; -define(function (require) { - return function (Promise, Private, es) { - var requestQueue = Private(CourierRequestQueueProvider); - var courierFetch = Private(CourierFetchFetchProvider); +export default function (Promise, Private, es) { + var requestQueue = Private(CourierRequestQueueProvider); + var courierFetch = Private(CourierFetchFetchProvider); - /** - * Backend for doUpdate and doIndex - * @param {String} method - the client method to call - * @param {Boolean} validateVersion - should our knowledge - * of the the docs current version be sent to es? - * @param {String} body - HTTP request body - */ - return function (method, validateVersion, body, ignore) { - var doc = this; - // straight assignment will causes undefined values - var params = _.pick(this._state, ['id', 'type', 'index']); - params.body = body; - params.ignore = ignore || [409]; + /** + * Backend for doUpdate and doIndex + * @param {String} method - the client method to call + * @param {Boolean} validateVersion - should our knowledge + * of the the docs current version be sent to es? + * @param {String} body - HTTP request body + */ + return function (method, validateVersion, body, ignore) { + var doc = this; + // straight assignment will causes undefined values + var params = _.pick(this._state, ['id', 'type', 'index']); + params.body = body; + params.ignore = ignore || [409]; - if (validateVersion && params.id) { - params.version = doc._getVersion(); - } - - return es[method](params) - .then(function (resp) { - if (resp.status === 409) throw new errors.VersionConflict(resp); + if (validateVersion && params.id) { + params.version = doc._getVersion(); + } - doc._storeVersion(resp._version); - doc.id(resp._id); + return es[method](params) + .then(function (resp) { + if (resp.status === 409) throw new errors.VersionConflict(resp); - var docFetchProm; - if (method !== 'index') { - docFetchProm = doc.fetch(); - } else { - // we already know what the response will be - docFetchProm = Promise.resolve({ - _id: resp._id, - _index: params.index, - _source: body, - _type: params.type, - _version: doc._getVersion(), - found: true - }); - } + doc._storeVersion(resp._version); + doc.id(resp._id); - // notify pending request for this same document that we have updates - docFetchProm.then(function (fetchResp) { - // use the key to compair sources - var key = doc._versionKey(); + var docFetchProm; + if (method !== 'index') { + docFetchProm = doc.fetch(); + } else { + // we already know what the response will be + docFetchProm = Promise.resolve({ + _id: resp._id, + _index: params.index, + _source: body, + _type: params.type, + _version: doc._getVersion(), + found: true + }); + } - // clear the queue and filter out the removed items, pushing the - // unmatched ones back in. - var respondTo = requestQueue.splice(0).filter(function (req) { - var isDoc = req.source._getType() === 'doc'; - var keyMatches = isDoc && req.source._versionKey() === key; + // notify pending request for this same document that we have updates + docFetchProm.then(function (fetchResp) { + // use the key to compair sources + var key = doc._versionKey(); - // put some request back into the queue - if (!keyMatches) { - requestQueue.push(req); - return false; - } + // clear the queue and filter out the removed items, pushing the + // unmatched ones back in. + var respondTo = requestQueue.splice(0).filter(function (req) { + var isDoc = req.source._getType() === 'doc'; + var keyMatches = isDoc && req.source._versionKey() === key; - return true; - }); + // put some request back into the queue + if (!keyMatches) { + requestQueue.push(req); + return false; + } - return courierFetch.fakeFetchThese(respondTo, respondTo.map(function () { - return _.cloneDeep(fetchResp); - })); + return true; }); - return resp._id; - }) - .catch(function (err) { - // cast the error - throw new errors.RequestFailure(err); + return courierFetch.fakeFetchThese(respondTo, respondTo.map(function () { + return _.cloneDeep(fetchResp); + })); }); - }; + + return resp._id; + }) + .catch(function (err) { + // cast the error + throw new errors.RequestFailure(err); + }); }; -}); +}; diff --git a/src/ui/public/courier/data_source/_normalize_sort_request.js b/src/ui/public/courier/data_source/_normalize_sort_request.js index a6d7f2066b1812..220ca70c6fa30c 100644 --- a/src/ui/public/courier/data_source/_normalize_sort_request.js +++ b/src/ui/public/courier/data_source/_normalize_sort_request.js @@ -1,53 +1,51 @@ import _ from 'lodash'; -define(function (require) { - return function normalizeSortRequest(config) { - var defaultSortOptions = config.get('sort:options'); +export default function normalizeSortRequest(config) { + var defaultSortOptions = config.get('sort:options'); - /** - * Decorate queries with default parameters - * @param {query} query object - * @returns {object} - */ - return function (sortObject, indexPattern) { - var normalizedSort = []; + /** + * Decorate queries with default parameters + * @param {query} query object + * @returns {object} + */ + return function (sortObject, indexPattern) { + var normalizedSort = []; - // [].concat({}) -> [{}], [].concat([{}]) -> [{}] - return [].concat(sortObject).map(function (sortable) { - return normalize(sortable, indexPattern); - }); - }; + // [].concat({}) -> [{}], [].concat([{}]) -> [{}] + return [].concat(sortObject).map(function (sortable) { + return normalize(sortable, indexPattern); + }); + }; - /* - Normalize the sort description to the more verbose format: - { someField: "desc" } into { someField: { "order": "desc"}} - */ - function normalize(sortable, indexPattern) { - var normalized = {}; - var sortField = _.keys(sortable)[0]; - var sortValue = sortable[sortField]; - var indexField = indexPattern.fields.byName[sortField]; + /* + Normalize the sort description to the more verbose format: + { someField: "desc" } into { someField: { "order": "desc"}} + */ + function normalize(sortable, indexPattern) { + var normalized = {}; + var sortField = _.keys(sortable)[0]; + var sortValue = sortable[sortField]; + var indexField = indexPattern.fields.byName[sortField]; - if (indexField && indexField.scripted && indexField.sortable) { - var direction; - if (_.isString(sortValue)) direction = sortValue; - if (_.isObject(sortValue) && sortValue.order) direction = sortValue.order; + if (indexField && indexField.scripted && indexField.sortable) { + var direction; + if (_.isString(sortValue)) direction = sortValue; + if (_.isObject(sortValue) && sortValue.order) direction = sortValue.order; - sortField = '_script'; - sortValue = { - script: indexField.script, - type: indexField.type, - order: direction - }; - } else { - if (_.isString(sortValue)) { - sortValue = { order: sortValue }; - } - sortValue = _.defaults({}, sortValue, defaultSortOptions); + sortField = '_script'; + sortValue = { + script: indexField.script, + type: indexField.type, + order: direction + }; + } else { + if (_.isString(sortValue)) { + sortValue = { order: sortValue }; } - - normalized[sortField] = sortValue; - return normalized; + sortValue = _.defaults({}, sortValue, defaultSortOptions); } - }; -}); + + normalized[sortField] = sortValue; + return normalized; + } +}; diff --git a/src/ui/public/courier/data_source/_root_search_source.js b/src/ui/public/courier/data_source/_root_search_source.js index 70d01d3caf1b52..385cdea4784728 100644 --- a/src/ui/public/courier/data_source/_root_search_source.js +++ b/src/ui/public/courier/data_source/_root_search_source.js @@ -1,66 +1,64 @@ import CourierDataSourceSearchSourceProvider from 'ui/courier/data_source/search_source'; -define(function (require) { - return function RootSearchSource(Private, $rootScope, timefilter, Notifier) { - var SearchSource = Private(CourierDataSourceSearchSourceProvider); +export default function RootSearchSource(Private, $rootScope, timefilter, Notifier) { + var SearchSource = Private(CourierDataSourceSearchSourceProvider); - var notify = new Notifier({ location: 'Root Search Source' }); + var notify = new Notifier({ location: 'Root Search Source' }); - var globalSource = new SearchSource(); - globalSource.inherits(false); // this is the final source, it has no parents - globalSource.filter(function (globalSource) { - // dynamic time filter will be called in the _flatten phase of things - return timefilter.get(globalSource.get('index')); - }); + var globalSource = new SearchSource(); + globalSource.inherits(false); // this is the final source, it has no parents + globalSource.filter(function (globalSource) { + // dynamic time filter will be called in the _flatten phase of things + return timefilter.get(globalSource.get('index')); + }); - var appSource; // set in setAppSource() - resetAppSource(); + var appSource; // set in setAppSource() + resetAppSource(); - // when the route changes, clear the appSource - $rootScope.$on('$routeChangeStart', resetAppSource); + // when the route changes, clear the appSource + $rootScope.$on('$routeChangeStart', resetAppSource); - /** - * Get the current AppSource - * @return {Promise} - resolved with the current AppSource - */ - function getAppSource() { - return appSource; - } - - /** - * Set the current AppSource - * @param {SearchSource} source - The Source that represents the applications "root" search source object - */ - function setAppSource(source) { - appSource = source; + /** + * Get the current AppSource + * @return {Promise} - resolved with the current AppSource + */ + function getAppSource() { + return appSource; + } - // walk the parent chain until we get to the global source or nothing - // that's where we will attach to the globalSource - var literalRoot = source; - while (literalRoot._parent && literalRoot._parent !== globalSource) { - literalRoot = literalRoot._parent; - } + /** + * Set the current AppSource + * @param {SearchSource} source - The Source that represents the applications "root" search source object + */ + function setAppSource(source) { + appSource = source; - literalRoot.inherits(globalSource); + // walk the parent chain until we get to the global source or nothing + // that's where we will attach to the globalSource + var literalRoot = source; + while (literalRoot._parent && literalRoot._parent !== globalSource) { + literalRoot = literalRoot._parent; } + literalRoot.inherits(globalSource); + } - /** - * Sets the appSource to be a new, empty, SearchSource - * @return {undefined} - */ - function resetAppSource() { - setAppSource(new SearchSource()); - } - return { - get: getAppSource, - set: setAppSource, + /** + * Sets the appSource to be a new, empty, SearchSource + * @return {undefined} + */ + function resetAppSource() { + setAppSource(new SearchSource()); + } - getGlobalSource: function () { - return globalSource; - } - }; + return { + get: getAppSource, + set: setAppSource, + + getGlobalSource: function () { + return globalSource; + } }; -}); +}; diff --git a/src/ui/public/courier/data_source/doc_source.js b/src/ui/public/courier/data_source/doc_source.js index 01815baaf939dc..db9ce8fd340284 100644 --- a/src/ui/public/courier/data_source/doc_source.js +++ b/src/ui/public/courier/data_source/doc_source.js @@ -3,156 +3,154 @@ import CourierDataSourceDocSendToEsProvider from 'ui/courier/data_source/_doc_se import CourierDataSourceAbstractProvider from 'ui/courier/data_source/_abstract'; import CourierFetchRequestDocProvider from 'ui/courier/fetch/request/doc'; import CourierFetchStrategyDocProvider from 'ui/courier/fetch/strategy/doc'; -define(function (require) { - return function DocSourceFactory(Private, Promise, es, sessionStorage) { - var sendToEs = Private(CourierDataSourceDocSendToEsProvider); - var SourceAbstract = Private(CourierDataSourceAbstractProvider); - var DocRequest = Private(CourierFetchRequestDocProvider); - var docStrategy = Private(CourierFetchStrategyDocProvider); +export default function DocSourceFactory(Private, Promise, es, sessionStorage) { + var sendToEs = Private(CourierDataSourceDocSendToEsProvider); + var SourceAbstract = Private(CourierDataSourceAbstractProvider); + var DocRequest = Private(CourierFetchRequestDocProvider); + var docStrategy = Private(CourierFetchStrategyDocProvider); - _.class(DocSource).inherits(SourceAbstract); - function DocSource(initialState) { - DocSource.Super.call(this, initialState, docStrategy); + _.class(DocSource).inherits(SourceAbstract); + function DocSource(initialState) { + DocSource.Super.call(this, initialState, docStrategy); + } + + DocSource.prototype.onUpdate = SourceAbstract.prototype.onResults; + DocSource.prototype.onResults = void 0; + + /***** + * PUBLIC API + *****/ + + DocSource.prototype._createRequest = function (defer) { + return new DocRequest(this, defer); + }; + + /** + * List of methods that is turned into a chainable API in the constructor + * @type {Array} + */ + DocSource.prototype._methods = [ + 'index', + 'type', + 'id', + 'sourceInclude', + 'sourceExclude' + ]; + + /** + * Applies a partial update to the document + * @param {object} fields - The fields to change and their new values (es doc field) + * @return {undefined} + */ + DocSource.prototype.doUpdate = function (fields) { + if (!this._state.id) return this.doIndex(fields); + return sendToEs.call(this, 'update', false, { doc: fields }); + }; + + /** + * Update the document stored + * @param {[type]} body [description] + * @return {[type]} [description] + */ + DocSource.prototype.doIndex = function (body) { + return sendToEs.call(this, 'index', false, body); + }; + + DocSource.prototype.doCreate = function (body) { + return sendToEs.call(this, 'create', false, body, []); + }; + + /***** + * PRIVATE API + *****/ + + /** + * Get the type of this SourceAbstract + * @return {string} - 'doc' + */ + DocSource.prototype._getType = function () { + return 'doc'; + }; + + /** + * Used to merge properties into the state within ._flatten(). + * The state is passed in and modified by the function + * + * @param {object} state - the current merged state + * @param {*} val - the value at `key` + * @param {*} key - The key of `val` + * @return {undefined} + */ + DocSource.prototype._mergeProp = function (state, val, key) { + key = '_' + key; + + if (val != null && state[key] == null) { + state[key] = val; } + }; + + /** + * Creates a key based on the doc's index/type/id + * @return {string} + */ + DocSource.prototype._versionKey = function () { + var state = this._state; + + if (!state.index || !state.type || !state.id) return; + return 'DocVersion:' + ( + [ state.index, state.type, state.id ] + .map(encodeURIComponent) + .join('/') + ); + }; + + /** + * Get the cached version number, not the version that is + * stored/shared with other tabs + * + * @return {number} - the version number, or undefined + */ + DocSource.prototype._getVersion = function () { + if (this._version) return this._version; + else return this._getStoredVersion(); + }; + + /** + * Fetches the stored version from storage + * @return {[type]} [description] + */ + DocSource.prototype._getStoredVersion = function () { + var key = this._versionKey(); + if (!key) return; + + var v = sessionStorage.get(key); + this._version = v ? _.parseInt(v) : void 0; + return this._version; + }; - DocSource.prototype.onUpdate = SourceAbstract.prototype.onResults; - DocSource.prototype.onResults = void 0; - - /***** - * PUBLIC API - *****/ - - DocSource.prototype._createRequest = function (defer) { - return new DocRequest(this, defer); - }; - - /** - * List of methods that is turned into a chainable API in the constructor - * @type {Array} - */ - DocSource.prototype._methods = [ - 'index', - 'type', - 'id', - 'sourceInclude', - 'sourceExclude' - ]; - - /** - * Applies a partial update to the document - * @param {object} fields - The fields to change and their new values (es doc field) - * @return {undefined} - */ - DocSource.prototype.doUpdate = function (fields) { - if (!this._state.id) return this.doIndex(fields); - return sendToEs.call(this, 'update', false, { doc: fields }); - }; - - /** - * Update the document stored - * @param {[type]} body [description] - * @return {[type]} [description] - */ - DocSource.prototype.doIndex = function (body) { - return sendToEs.call(this, 'index', false, body); - }; - - DocSource.prototype.doCreate = function (body) { - return sendToEs.call(this, 'create', false, body, []); - }; - - /***** - * PRIVATE API - *****/ - - /** - * Get the type of this SourceAbstract - * @return {string} - 'doc' - */ - DocSource.prototype._getType = function () { - return 'doc'; - }; - - /** - * Used to merge properties into the state within ._flatten(). - * The state is passed in and modified by the function - * - * @param {object} state - the current merged state - * @param {*} val - the value at `key` - * @param {*} key - The key of `val` - * @return {undefined} - */ - DocSource.prototype._mergeProp = function (state, val, key) { - key = '_' + key; - - if (val != null && state[key] == null) { - state[key] = val; - } - }; - - /** - * Creates a key based on the doc's index/type/id - * @return {string} - */ - DocSource.prototype._versionKey = function () { - var state = this._state; - - if (!state.index || !state.type || !state.id) return; - return 'DocVersion:' + ( - [ state.index, state.type, state.id ] - .map(encodeURIComponent) - .join('/') - ); - }; - - /** - * Get the cached version number, not the version that is - * stored/shared with other tabs - * - * @return {number} - the version number, or undefined - */ - DocSource.prototype._getVersion = function () { - if (this._version) return this._version; - else return this._getStoredVersion(); - }; - - /** - * Fetches the stored version from storage - * @return {[type]} [description] - */ - DocSource.prototype._getStoredVersion = function () { - var key = this._versionKey(); - if (!key) return; - - var v = sessionStorage.get(key); - this._version = v ? _.parseInt(v) : void 0; - return this._version; - }; - - /** - * Stores the version into storage - * @param {number, NaN} version - the current version number, NaN works well forcing a refresh - * @return {undefined} - */ - DocSource.prototype._storeVersion = function (version) { - if (!version) return this._clearVersion(); - - var key = this._versionKey(); - if (!key) return; - this._version = version; - sessionStorage.set(key, version); - }; - - /** - * Clears the stored version for a DocSource - */ - DocSource.prototype._clearVersion = function () { - var key = this._versionKey(); - if (!key) return; - sessionStorage.remove(key); - }; - - return DocSource; + /** + * Stores the version into storage + * @param {number, NaN} version - the current version number, NaN works well forcing a refresh + * @return {undefined} + */ + DocSource.prototype._storeVersion = function (version) { + if (!version) return this._clearVersion(); + + var key = this._versionKey(); + if (!key) return; + this._version = version; + sessionStorage.set(key, version); }; -}); + + /** + * Clears the stored version for a DocSource + */ + DocSource.prototype._clearVersion = function () { + var key = this._versionKey(); + if (!key) return; + sessionStorage.remove(key); + }; + + return DocSource; +}; diff --git a/src/ui/public/courier/data_source/search_source.js b/src/ui/public/courier/data_source/search_source.js index 40f81ad78d101f..c01f606376c044 100644 --- a/src/ui/public/courier/data_source/search_source.js +++ b/src/ui/public/courier/data_source/search_source.js @@ -5,194 +5,192 @@ import CourierFetchRequestSearchProvider from 'ui/courier/fetch/request/search'; import CourierFetchRequestSegmentedProvider from 'ui/courier/fetch/request/segmented'; import CourierFetchStrategySearchProvider from 'ui/courier/fetch/strategy/search'; import CourierDataSourceNormalizeSortRequestProvider from 'ui/courier/data_source/_normalize_sort_request'; -define(function (require) { - return function SearchSourceFactory(Promise, Private) { - var SourceAbstract = Private(CourierDataSourceAbstractProvider); - var SearchRequest = Private(CourierFetchRequestSearchProvider); - var SegmentedRequest = Private(CourierFetchRequestSegmentedProvider); - var searchStrategy = Private(CourierFetchStrategySearchProvider); - var normalizeSortRequest = Private(CourierDataSourceNormalizeSortRequestProvider); - - _.class(SearchSource).inherits(SourceAbstract); - function SearchSource(initialState) { - SearchSource.Super.call(this, initialState, searchStrategy); +export default function SearchSourceFactory(Promise, Private) { + var SourceAbstract = Private(CourierDataSourceAbstractProvider); + var SearchRequest = Private(CourierFetchRequestSearchProvider); + var SegmentedRequest = Private(CourierFetchRequestSegmentedProvider); + var searchStrategy = Private(CourierFetchStrategySearchProvider); + var normalizeSortRequest = Private(CourierDataSourceNormalizeSortRequestProvider); + + _.class(SearchSource).inherits(SourceAbstract); + function SearchSource(initialState) { + SearchSource.Super.call(this, initialState, searchStrategy); + } + + /***** + * PUBLIC API + *****/ + + /** + * List of the editable state properties that turn into a + * chainable API + * + * @type {Array} + */ + SearchSource.prototype._methods = [ + 'type', + 'query', + 'filter', + 'sort', + 'highlight', + 'aggs', + 'from', + 'size', + 'source' + ]; + + SearchSource.prototype.index = function (indexPattern) { + if (indexPattern === undefined) return this._state.index; + if (indexPattern === null) return delete this._state.index; + if (!indexPattern || typeof indexPattern.toIndexList !== 'function') { + throw new TypeError('expected indexPattern to be an IndexPattern duck.'); } - /***** - * PUBLIC API - *****/ + this._state.index = indexPattern; + return this; + }; - /** - * List of the editable state properties that turn into a - * chainable API - * - * @type {Array} - */ - SearchSource.prototype._methods = [ - 'type', - 'query', - 'filter', - 'sort', - 'highlight', - 'aggs', - 'from', - 'size', - 'source' - ]; - - SearchSource.prototype.index = function (indexPattern) { - if (indexPattern === undefined) return this._state.index; - if (indexPattern === null) return delete this._state.index; - if (!indexPattern || typeof indexPattern.toIndexList !== 'function') { - throw new TypeError('expected indexPattern to be an IndexPattern duck.'); - } + SearchSource.prototype.extend = function () { + return (new SearchSource()).inherits(this); + }; - this._state.index = indexPattern; - return this; - }; + /** + * Set a searchSource that this source should inherit from + * @param {SearchSource} searchSource - the parent searchSource + * @return {this} - chainable + */ + SearchSource.prototype.inherits = function (parent) { + this._parent = parent; + return this; + }; - SearchSource.prototype.extend = function () { - return (new SearchSource()).inherits(this); - }; + /** + * Get the parent of this SearchSource + * @return {undefined|searchSource} + */ + SearchSource.prototype.getParent = function (onlyHardLinked) { + var self = this; + if (self._parent === false) return; + if (self._parent) return self._parent; + return onlyHardLinked ? undefined : Private(rootSearchSource).get(); + }; - /** - * Set a searchSource that this source should inherit from - * @param {SearchSource} searchSource - the parent searchSource - * @return {this} - chainable - */ - SearchSource.prototype.inherits = function (parent) { - this._parent = parent; - return this; - }; + /** + * Temporarily prevent this Search from being fetched... not a fan but it's easy + */ + SearchSource.prototype.disable = function () { + this._fetchDisabled = true; + }; - /** - * Get the parent of this SearchSource - * @return {undefined|searchSource} - */ - SearchSource.prototype.getParent = function (onlyHardLinked) { - var self = this; - if (self._parent === false) return; - if (self._parent) return self._parent; - return onlyHardLinked ? undefined : Private(rootSearchSource).get(); - }; + /** + * Reverse of SourceAbstract#disable(), only need to call this if source was previously disabled + */ + SearchSource.prototype.enable = function () { + this._fetchDisabled = false; + }; - /** - * Temporarily prevent this Search from being fetched... not a fan but it's easy - */ - SearchSource.prototype.disable = function () { - this._fetchDisabled = true; - }; + SearchSource.prototype.onBeginSegmentedFetch = function (initFunction) { + var self = this; + return Promise.try(function addRequest() { + var req = new SegmentedRequest(self, Promise.defer(), initFunction); - /** - * Reverse of SourceAbstract#disable(), only need to call this if source was previously disabled - */ - SearchSource.prototype.enable = function () { - this._fetchDisabled = false; - }; - - SearchSource.prototype.onBeginSegmentedFetch = function (initFunction) { - var self = this; - return Promise.try(function addRequest() { - var req = new SegmentedRequest(self, Promise.defer(), initFunction); - - // return promises created by the completion handler so that - // errors will bubble properly - return req.defer.promise.then(addRequest); - }); - }; + // return promises created by the completion handler so that + // errors will bubble properly + return req.defer.promise.then(addRequest); + }); + }; - /****** - * PRIVATE APIS - ******/ + /****** + * PRIVATE APIS + ******/ - /** - * Gets the type of the DataSource - * @return {string} - */ - SearchSource.prototype._getType = function () { - return 'search'; - }; + /** + * Gets the type of the DataSource + * @return {string} + */ + SearchSource.prototype._getType = function () { + return 'search'; + }; - /** - * Create a common search request object, which should - * be put into the pending request queye, for this search - * source - * - * @param {Deferred} defer - the deferred object that should be resolved - * when the request is complete - * @return {SearchRequest} - */ - SearchSource.prototype._createRequest = function (defer) { - return new SearchRequest(this, defer); - }; + /** + * Create a common search request object, which should + * be put into the pending request queye, for this search + * source + * + * @param {Deferred} defer - the deferred object that should be resolved + * when the request is complete + * @return {SearchRequest} + */ + SearchSource.prototype._createRequest = function (defer) { + return new SearchRequest(this, defer); + }; - /** - * Used to merge properties into the state within ._flatten(). - * The state is passed in and modified by the function - * - * @param {object} state - the current merged state - * @param {*} val - the value at `key` - * @param {*} key - The key of `val` - * @return {undefined} - */ - SearchSource.prototype._mergeProp = function (state, val, key) { - if (typeof val === 'function') { - var source = this; - return Promise.cast(val(this)) - .then(function (newVal) { - return source._mergeProp(state, newVal, key); - }); - } + /** + * Used to merge properties into the state within ._flatten(). + * The state is passed in and modified by the function + * + * @param {object} state - the current merged state + * @param {*} val - the value at `key` + * @param {*} key - The key of `val` + * @return {undefined} + */ + SearchSource.prototype._mergeProp = function (state, val, key) { + if (typeof val === 'function') { + var source = this; + return Promise.cast(val(this)) + .then(function (newVal) { + return source._mergeProp(state, newVal, key); + }); + } - if (val == null || !key || !_.isString(key)) return; - - switch (key) { - case 'filter': - // user a shallow flatten to detect if val is an array, and pull the values out if it is - state.filters = _([ state.filters || [], val ]) - .flatten() - // Yo Dawg! I heard you needed to filter out your filters - .reject(function (filter) { - return !filter || _.get(filter, 'meta.disabled'); - }) - .value(); - return; - case 'index': - case 'type': - case 'id': - if (key && state[key] == null) { - state[key] = val; - } - return; - case 'source': - key = '_source'; - addToBody(); - break; - case 'sort': - val = normalizeSortRequest(val, this.get('index')); - addToBody(); - break; - default: - addToBody(); - } + if (val == null || !key || !_.isString(key)) return; + + switch (key) { + case 'filter': + // user a shallow flatten to detect if val is an array, and pull the values out if it is + state.filters = _([ state.filters || [], val ]) + .flatten() + // Yo Dawg! I heard you needed to filter out your filters + .reject(function (filter) { + return !filter || _.get(filter, 'meta.disabled'); + }) + .value(); + return; + case 'index': + case 'type': + case 'id': + if (key && state[key] == null) { + state[key] = val; + } + return; + case 'source': + key = '_source'; + addToBody(); + break; + case 'sort': + val = normalizeSortRequest(val, this.get('index')); + addToBody(); + break; + default: + addToBody(); + } - /** - * Add the key and val to the body of the resuest - */ - function addToBody() { - state.body = state.body || {}; - // ignore if we already have a value - if (state.body[key] == null) { - if (key === 'query' && _.isString(val)) { - val = { query_string: { query: val }}; - } - - state.body[key] = val; + /** + * Add the key and val to the body of the resuest + */ + function addToBody() { + state.body = state.body || {}; + // ignore if we already have a value + if (state.body[key] == null) { + if (key === 'query' && _.isString(val)) { + val = { query_string: { query: val }}; } - } - }; - return SearchSource; + state.body[key] = val; + } + } }; -}); + + return SearchSource; +}; diff --git a/src/ui/public/courier/fetch/_call_client.js b/src/ui/public/courier/fetch/_call_client.js index 0a00df82e379d6..db21eaba6cb7b7 100644 --- a/src/ui/public/courier/fetch/_call_client.js +++ b/src/ui/public/courier/fetch/_call_client.js @@ -2,124 +2,122 @@ import _ from 'lodash'; import CourierFetchIsRequestProvider from 'ui/courier/fetch/_is_request'; import CourierFetchMergeDuplicateRequestsProvider from 'ui/courier/fetch/_merge_duplicate_requests'; import CourierFetchReqStatusProvider from 'ui/courier/fetch/_req_status'; -define(function (require) { - return function CourierFetchCallClient(Private, Promise, es, esShardTimeout, sessionId) { - - var isRequest = Private(CourierFetchIsRequestProvider); - var mergeDuplicateRequests = Private(CourierFetchMergeDuplicateRequestsProvider); - - var ABORTED = Private(CourierFetchReqStatusProvider).ABORTED; - var DUPLICATE = Private(CourierFetchReqStatusProvider).DUPLICATE; - - function callClient(strategy, requests) { - // merging docs can change status to DUPLICATE, capture new statuses - var statuses = mergeDuplicateRequests(requests); - - // get the actual list of requests that we will be fetching - var executable = statuses.filter(isRequest); - var execCount = executable.length; - - // resolved by respond() - var esPromise; - var defer = Promise.defer(); - - // for each respond with either the response or ABORTED - var respond = function (responses) { - responses = responses || []; - return Promise.map(requests, function (req, i) { - switch (statuses[i]) { - case ABORTED: - return ABORTED; - case DUPLICATE: - return req._uniq.resp; - default: - return responses[_.findIndex(executable, req)]; - } - }) - .then( - (res) => defer.resolve(res), - (err) => defer.reject(err) - ); - }; - - - // handle a request being aborted while being fetched - var requestWasAborted = Promise.method(function (req, i) { - if (statuses[i] === ABORTED) { - defer.reject(new Error('Request was aborted twice?')); +export default function CourierFetchCallClient(Private, Promise, es, esShardTimeout, sessionId) { + + var isRequest = Private(CourierFetchIsRequestProvider); + var mergeDuplicateRequests = Private(CourierFetchMergeDuplicateRequestsProvider); + + var ABORTED = Private(CourierFetchReqStatusProvider).ABORTED; + var DUPLICATE = Private(CourierFetchReqStatusProvider).DUPLICATE; + + function callClient(strategy, requests) { + // merging docs can change status to DUPLICATE, capture new statuses + var statuses = mergeDuplicateRequests(requests); + + // get the actual list of requests that we will be fetching + var executable = statuses.filter(isRequest); + var execCount = executable.length; + + // resolved by respond() + var esPromise; + var defer = Promise.defer(); + + // for each respond with either the response or ABORTED + var respond = function (responses) { + responses = responses || []; + return Promise.map(requests, function (req, i) { + switch (statuses[i]) { + case ABORTED: + return ABORTED; + case DUPLICATE: + return req._uniq.resp; + default: + return responses[_.findIndex(executable, req)]; } + }) + .then( + (res) => defer.resolve(res), + (err) => defer.reject(err) + ); + }; - execCount -= 1; - if (execCount > 0) { - // the multi-request still contains other requests - return; - } - if (esPromise && _.isFunction(esPromise.abort)) { - esPromise.abort(); - } + // handle a request being aborted while being fetched + var requestWasAborted = Promise.method(function (req, i) { + if (statuses[i] === ABORTED) { + defer.reject(new Error('Request was aborted twice?')); + } - esPromise = ABORTED; + execCount -= 1; + if (execCount > 0) { + // the multi-request still contains other requests + return; + } - return respond(); - }); + if (esPromise && _.isFunction(esPromise.abort)) { + esPromise.abort(); + } + esPromise = ABORTED; - // attach abort handlers, close over request index - statuses.forEach(function (req, i) { - if (!isRequest(req)) return; - req.whenAborted(function () { - requestWasAborted(req, i).catch(defer.reject); - }); - }); - + return respond(); + }); - // Now that all of THAT^^^ is out of the way, lets actually - // call out to elasticsearch - Promise.map(executable, function (req) { - return Promise.try(req.getFetchParams, void 0, req) - .then(function (fetchParams) { - return (req.fetchParams = fetchParams); - }); - }) - .then(function (reqsFetchParams) { - return strategy.reqsFetchParamsToBody(reqsFetchParams); - }) - .then(function (body) { - // while the strategy was converting, our request was aborted - if (esPromise === ABORTED) { - throw ABORTED; - } - return (esPromise = es[strategy.clientMethod]({ - timeout: esShardTimeout, - ignore_unavailable: true, - preference: sessionId, - body: body - })); - }) - .then(function (clientResp) { - return strategy.getResponses(clientResp); - }) - .then(respond) - .catch(function (err) { - if (err === ABORTED) respond(); - else defer.reject(err); + // attach abort handlers, close over request index + statuses.forEach(function (req, i) { + if (!isRequest(req)) return; + req.whenAborted(function () { + requestWasAborted(req, i).catch(defer.reject); }); + }); - // return our promise, but catch any errors we create and - // send them to the requests - return defer.promise - .catch(function (err) { - requests.forEach(function (req, i) { - if (statuses[i] !== ABORTED) { - req.handleFailure(err); - } - }); + + // Now that all of THAT^^^ is out of the way, lets actually + // call out to elasticsearch + Promise.map(executable, function (req) { + return Promise.try(req.getFetchParams, void 0, req) + .then(function (fetchParams) { + return (req.fetchParams = fetchParams); + }); + }) + .then(function (reqsFetchParams) { + return strategy.reqsFetchParamsToBody(reqsFetchParams); + }) + .then(function (body) { + // while the strategy was converting, our request was aborted + if (esPromise === ABORTED) { + throw ABORTED; + } + + return (esPromise = es[strategy.clientMethod]({ + timeout: esShardTimeout, + ignore_unavailable: true, + preference: sessionId, + body: body + })); + }) + .then(function (clientResp) { + return strategy.getResponses(clientResp); + }) + .then(respond) + .catch(function (err) { + if (err === ABORTED) respond(); + else defer.reject(err); + }); + + // return our promise, but catch any errors we create and + // send them to the requests + return defer.promise + .catch(function (err) { + requests.forEach(function (req, i) { + if (statuses[i] !== ABORTED) { + req.handleFailure(err); + } }); + }); - } + } - return callClient; - }; -}); + return callClient; +}; diff --git a/src/ui/public/courier/fetch/_call_response_handlers.js b/src/ui/public/courier/fetch/_call_response_handlers.js index 88317cd07d06fa..3dfcd337937294 100644 --- a/src/ui/public/courier/fetch/_call_response_handlers.js +++ b/src/ui/public/courier/fetch/_call_response_handlers.js @@ -3,57 +3,55 @@ import { RequestFailure } from 'ui/errors'; import { ShardFailure } from 'ui/errors'; import CourierFetchReqStatusProvider from 'ui/courier/fetch/_req_status'; import CourierFetchNotifierProvider from 'ui/courier/fetch/_notifier'; -define(function (require) { - return function CourierFetchCallResponseHandlers(Private, Promise) { - var ABORTED = Private(CourierFetchReqStatusProvider).ABORTED; - var INCOMPLETE = Private(CourierFetchReqStatusProvider).INCOMPLETE; - var notify = Private(CourierFetchNotifierProvider); +export default function CourierFetchCallResponseHandlers(Private, Promise) { + var ABORTED = Private(CourierFetchReqStatusProvider).ABORTED; + var INCOMPLETE = Private(CourierFetchReqStatusProvider).INCOMPLETE; + var notify = Private(CourierFetchNotifierProvider); - function callResponseHandlers(requests, responses) { - return Promise.map(requests, function (req, i) { - if (req === ABORTED || req.aborted) { - return ABORTED; - } - - var resp = responses[i]; + function callResponseHandlers(requests, responses) { + return Promise.map(requests, function (req, i) { + if (req === ABORTED || req.aborted) { + return ABORTED; + } - if (resp.timed_out) { - notify.warning(new SearchTimeout()); - } + var resp = responses[i]; - if (resp._shards && resp._shards.failed) { - notify.warning(new ShardFailure(resp)); - } + if (resp.timed_out) { + notify.warning(new SearchTimeout()); + } - function progress() { - if (req.isIncomplete()) { - return INCOMPLETE; - } + if (resp._shards && resp._shards.failed) { + notify.warning(new ShardFailure(resp)); + } - req.complete(); - return resp; + function progress() { + if (req.isIncomplete()) { + return INCOMPLETE; } - if (resp.error) { - if (req.filterError(resp)) { - return progress(); - } else { - return req.handleFailure(new RequestFailure(null, resp)); - } - } + req.complete(); + return resp; + } - return Promise.try(function () { - return req.transformResponse(resp); - }) - .then(function () { - resp = arguments[0]; - return req.handleResponse(resp); - }) - .then(progress); - }); - } - - return callResponseHandlers; - }; -}); + if (resp.error) { + if (req.filterError(resp)) { + return progress(); + } else { + return req.handleFailure(new RequestFailure(null, resp)); + } + } + + return Promise.try(function () { + return req.transformResponse(resp); + }) + .then(function () { + resp = arguments[0]; + return req.handleResponse(resp); + }) + .then(progress); + }); + } + + return callResponseHandlers; +}; diff --git a/src/ui/public/courier/fetch/_continue_incomplete.js b/src/ui/public/courier/fetch/_continue_incomplete.js index 7b5cc3937db9f2..bff84e5ef4a9b0 100644 --- a/src/ui/public/courier/fetch/_continue_incomplete.js +++ b/src/ui/public/courier/fetch/_continue_incomplete.js @@ -1,29 +1,27 @@ import CourierFetchReqStatusProvider from 'ui/courier/fetch/_req_status'; -define(function (require) { - return function CourierFetchContinueIncompleteRequests(Private) { - var INCOMPLETE = Private(CourierFetchReqStatusProvider).INCOMPLETE; +export default function CourierFetchContinueIncompleteRequests(Private) { + var INCOMPLETE = Private(CourierFetchReqStatusProvider).INCOMPLETE; - function continueIncompleteRequests(strategy, requests, responses, fetchWithStrategy) { - var incomplete = []; + function continueIncompleteRequests(strategy, requests, responses, fetchWithStrategy) { + var incomplete = []; - responses.forEach(function (resp, i) { - if (resp === INCOMPLETE) { - incomplete.push(requests[i]); - } - }); + responses.forEach(function (resp, i) { + if (resp === INCOMPLETE) { + incomplete.push(requests[i]); + } + }); - if (!incomplete.length) return responses; + if (!incomplete.length) return responses; - return fetchWithStrategy(strategy, incomplete) - .then(function (completedResponses) { - return responses.map(function (prevResponse) { - if (prevResponse !== INCOMPLETE) return prevResponse; - return completedResponses.shift(); - }); + return fetchWithStrategy(strategy, incomplete) + .then(function (completedResponses) { + return responses.map(function (prevResponse) { + if (prevResponse !== INCOMPLETE) return prevResponse; + return completedResponses.shift(); }); - } + }); + } - return continueIncompleteRequests; - }; -}); + return continueIncompleteRequests; +}; diff --git a/src/ui/public/courier/fetch/_fetch_these.js b/src/ui/public/courier/fetch/_fetch_these.js index 7dd05ae3baa2a0..006f273f7880e3 100644 --- a/src/ui/public/courier/fetch/_fetch_these.js +++ b/src/ui/public/courier/fetch/_fetch_these.js @@ -5,75 +5,73 @@ import CourierFetchCallResponseHandlersProvider from 'ui/courier/fetch/_call_res import CourierFetchContinueIncompleteProvider from 'ui/courier/fetch/_continue_incomplete'; import CourierFetchReqStatusProvider from 'ui/courier/fetch/_req_status'; -define(function (require) { - return function FetchTheseProvider(Private, Promise) { - var notify = Private(CourierFetchNotifierProvider); - var forEachStrategy = Private(CourierFetchForEachStrategyProvider); +export default function FetchTheseProvider(Private, Promise) { + var notify = Private(CourierFetchNotifierProvider); + var forEachStrategy = Private(CourierFetchForEachStrategyProvider); - // core tasks - var callClient = Private(CourierFetchCallClientProvider); - var callResponseHandlers = Private(CourierFetchCallResponseHandlersProvider); - var continueIncomplete = Private(CourierFetchContinueIncompleteProvider); + // core tasks + var callClient = Private(CourierFetchCallClientProvider); + var callResponseHandlers = Private(CourierFetchCallResponseHandlersProvider); + var continueIncomplete = Private(CourierFetchContinueIncompleteProvider); - var ABORTED = Private(CourierFetchReqStatusProvider).ABORTED; - var DUPLICATE = Private(CourierFetchReqStatusProvider).DUPLICATE; - var INCOMPLETE = Private(CourierFetchReqStatusProvider).INCOMPLETE; + var ABORTED = Private(CourierFetchReqStatusProvider).ABORTED; + var DUPLICATE = Private(CourierFetchReqStatusProvider).DUPLICATE; + var INCOMPLETE = Private(CourierFetchReqStatusProvider).INCOMPLETE; - function fetchThese(requests) { - return forEachStrategy(requests, function (strategy, reqsForStrategy) { - return fetchWithStrategy(strategy, reqsForStrategy.map(function (req) { - if (!req.started) return req; - return req.retry(); - })); - }) - .catch(notify.fatal); - } + function fetchThese(requests) { + return forEachStrategy(requests, function (strategy, reqsForStrategy) { + return fetchWithStrategy(strategy, reqsForStrategy.map(function (req) { + if (!req.started) return req; + return req.retry(); + })); + }) + .catch(notify.fatal); + } - function fetchWithStrategy(strategy, requests) { + function fetchWithStrategy(strategy, requests) { - requests = requests.map(function (req) { - return req.aborted ? ABORTED : req; - }); + requests = requests.map(function (req) { + return req.aborted ? ABORTED : req; + }); - return startRequests(requests) - .then(function () { - return callClient(strategy, requests); - }) - .then(function (responses) { - return callResponseHandlers(requests, responses); - }) - .then(function (responses) { - return continueIncomplete(strategy, requests, responses, fetchWithStrategy); - }) - .then(function (responses) { - return responses.map(function (resp) { - switch (resp) { - case ABORTED: - return null; - case DUPLICATE: - case INCOMPLETE: - throw new Error('Failed to clear incomplete or duplicate request from responses.'); - default: - return resp; - } - }); + return startRequests(requests) + .then(function () { + return callClient(strategy, requests); + }) + .then(function (responses) { + return callResponseHandlers(requests, responses); + }) + .then(function (responses) { + return continueIncomplete(strategy, requests, responses, fetchWithStrategy); + }) + .then(function (responses) { + return responses.map(function (resp) { + switch (resp) { + case ABORTED: + return null; + case DUPLICATE: + case INCOMPLETE: + throw new Error('Failed to clear incomplete or duplicate request from responses.'); + default: + return resp; + } }); - } + }); + } - function startRequests(requests) { - return Promise.map(requests, function (req) { - if (req === ABORTED) { - return req; - } + function startRequests(requests) { + return Promise.map(requests, function (req) { + if (req === ABORTED) { + return req; + } - return new Promise(function (resolve) { - var action = req.started ? req.continue : req.start; - resolve(action.call(req)); - }) - .catch(err => req.handleFailure(err)); - }); - } + return new Promise(function (resolve) { + var action = req.started ? req.continue : req.start; + resolve(action.call(req)); + }) + .catch(err => req.handleFailure(err)); + }); + } - return fetchThese; - }; -}); + return fetchThese; +}; diff --git a/src/ui/public/courier/fetch/_for_each_strategy.js b/src/ui/public/courier/fetch/_for_each_strategy.js index 6ee755f1c1ae33..0bebb1a262b51f 100644 --- a/src/ui/public/courier/fetch/_for_each_strategy.js +++ b/src/ui/public/courier/fetch/_for_each_strategy.js @@ -1,23 +1,21 @@ import _ from 'lodash'; -define(function (require) { - return function FetchForEachRequestStrategy(Private, Promise) { +export default function FetchForEachRequestStrategy(Private, Promise) { - function forEachStrategy(requests, block) { - block = Promise.method(block); - var sets = []; + function forEachStrategy(requests, block) { + block = Promise.method(block); + var sets = []; - requests.forEach(function (req) { - var strategy = req.strategy; - var set = _.find(sets, { 0: strategy }); - if (set) set[1].push(req); - else sets.push([strategy, [req]]); - }); + requests.forEach(function (req) { + var strategy = req.strategy; + var set = _.find(sets, { 0: strategy }); + if (set) set[1].push(req); + else sets.push([strategy, [req]]); + }); - return Promise.all(sets.map(function (set) { - return block(set[0], set[1]); - })); - } + return Promise.all(sets.map(function (set) { + return block(set[0], set[1]); + })); + } - return forEachStrategy; - }; -}); + return forEachStrategy; +}; diff --git a/src/ui/public/courier/fetch/_is_request.js b/src/ui/public/courier/fetch/_is_request.js index 00d0c0c0cdd7f4..5f85fede434563 100644 --- a/src/ui/public/courier/fetch/_is_request.js +++ b/src/ui/public/courier/fetch/_is_request.js @@ -1,11 +1,9 @@ import CourierFetchRequestRequestProvider from 'ui/courier/fetch/request/request'; -define(function (require) { - return function CourierFetchIsRequestProvider(Private) { - var AbstractRequest = Private(CourierFetchRequestRequestProvider); +export default function CourierFetchIsRequestProvider(Private) { + var AbstractRequest = Private(CourierFetchRequestRequestProvider); - return function isRequest(obj) { - return obj instanceof AbstractRequest; - }; + return function isRequest(obj) { + return obj instanceof AbstractRequest; }; -}); +}; diff --git a/src/ui/public/courier/fetch/_merge_duplicate_requests.js b/src/ui/public/courier/fetch/_merge_duplicate_requests.js index e31473022b3b3a..2f1d0c2daffb69 100644 --- a/src/ui/public/courier/fetch/_merge_duplicate_requests.js +++ b/src/ui/public/courier/fetch/_merge_duplicate_requests.js @@ -1,31 +1,29 @@ import CourierFetchIsRequestProvider from 'ui/courier/fetch/_is_request'; import CourierFetchReqStatusProvider from 'ui/courier/fetch/_req_status'; -define(function (require) { - return function FetchMergeDuplicateRequests(Private) { - var isRequest = Private(CourierFetchIsRequestProvider); - var DUPLICATE = Private(CourierFetchReqStatusProvider).DUPLICATE; +export default function FetchMergeDuplicateRequests(Private) { + var isRequest = Private(CourierFetchIsRequestProvider); + var DUPLICATE = Private(CourierFetchReqStatusProvider).DUPLICATE; - function mergeDuplicateRequests(requests) { - // dedupe requests - var index = {}; - return requests.map(function (req) { - if (!isRequest(req)) return req; + function mergeDuplicateRequests(requests) { + // dedupe requests + var index = {}; + return requests.map(function (req) { + if (!isRequest(req)) return req; - var iid = req.source._instanceid; - if (!index[iid]) { - // this request is unique so far - index[iid] = req; - // keep the request - return req; - } + var iid = req.source._instanceid; + if (!index[iid]) { + // this request is unique so far + index[iid] = req; + // keep the request + return req; + } - // the source was requested at least twice - req._uniq = index[iid]; - return DUPLICATE; - }); - } + // the source was requested at least twice + req._uniq = index[iid]; + return DUPLICATE; + }); + } - return mergeDuplicateRequests; - }; -}); + return mergeDuplicateRequests; +}; diff --git a/src/ui/public/courier/fetch/_notifier.js b/src/ui/public/courier/fetch/_notifier.js index ab777c4de0905f..1c587080c7fa9f 100644 --- a/src/ui/public/courier/fetch/_notifier.js +++ b/src/ui/public/courier/fetch/_notifier.js @@ -1,7 +1,5 @@ -define(function (require) { - return function CourierFetchNotifier(Notifier) { - return new Notifier({ - location: 'Courier Fetch' - }); - }; -}); +export default function CourierFetchNotifier(Notifier) { + return new Notifier({ + location: 'Courier Fetch' + }); +}; diff --git a/src/ui/public/courier/fetch/_req_status.js b/src/ui/public/courier/fetch/_req_status.js index 3f79b52d27cb57..06417449730e0e 100644 --- a/src/ui/public/courier/fetch/_req_status.js +++ b/src/ui/public/courier/fetch/_req_status.js @@ -1,9 +1,7 @@ -define(function (require) { - return function CourierFetchRequestStatus() { - return { - ABORTED: { CourierFetchRequestStatus: 'aborted' }, - DUPLICATE: { CourierFetchRequestStatus: 'duplicate' }, - INCOMPLETE: { CourierFetchRequestStatus: 'incomplete' } - }; +export default function CourierFetchRequestStatus() { + return { + ABORTED: { CourierFetchRequestStatus: 'aborted' }, + DUPLICATE: { CourierFetchRequestStatus: 'duplicate' }, + INCOMPLETE: { CourierFetchRequestStatus: 'incomplete' } }; -}); +}; diff --git a/src/ui/public/courier/fetch/fetch.js b/src/ui/public/courier/fetch/fetch.js index b8791e342c1e78..4f34135820d42b 100644 --- a/src/ui/public/courier/fetch/fetch.js +++ b/src/ui/public/courier/fetch/fetch.js @@ -3,77 +3,75 @@ import CourierRequestQueueProvider from 'ui/courier/_request_queue'; import CourierFetchFetchTheseProvider from 'ui/courier/fetch/_fetch_these'; import CourierFetchCallResponseHandlersProvider from 'ui/courier/fetch/_call_response_handlers'; import CourierFetchReqStatusProvider from 'ui/courier/fetch/_req_status'; -define(function (require) { - return function fetchService(Private, Promise) { +export default function fetchService(Private, Promise) { - var requestQueue = Private(CourierRequestQueueProvider); - var fetchThese = Private(CourierFetchFetchTheseProvider); + var requestQueue = Private(CourierRequestQueueProvider); + var fetchThese = Private(CourierFetchFetchTheseProvider); - var callResponseHandlers = Private(CourierFetchCallResponseHandlersProvider); - var INCOMPLETE = Private(CourierFetchReqStatusProvider).INCOMPLETE; + var callResponseHandlers = Private(CourierFetchCallResponseHandlersProvider); + var INCOMPLETE = Private(CourierFetchReqStatusProvider).INCOMPLETE; - function fetchQueued(strategy) { - var requests = requestQueue.getStartable(strategy); - if (!requests.length) return Promise.resolve(); - else return fetchThese(requests); - } + function fetchQueued(strategy) { + var requests = requestQueue.getStartable(strategy); + if (!requests.length) return Promise.resolve(); + else return fetchThese(requests); + } - this.fetchQueued = fetchQueued; + this.fetchQueued = fetchQueued; - function fetchASource(source, strategy) { - var defer = Promise.defer(); + function fetchASource(source, strategy) { + var defer = Promise.defer(); - fetchThese([ - source._createRequest(defer) - ]); + fetchThese([ + source._createRequest(defer) + ]); - return defer.promise; - } + return defer.promise; + } - /** - * Fetch a single doc source - * @param {DocSource} source - The DocSource to request - * @async - */ - this.doc = fetchASource; + /** + * Fetch a single doc source + * @param {DocSource} source - The DocSource to request + * @async + */ + this.doc = fetchASource; - /** - * Fetch a single search source - * @param {SearchSource} source - The SearchSource to request - * @async - */ - this.search = fetchASource; + /** + * Fetch a single search source + * @param {SearchSource} source - The SearchSource to request + * @async + */ + this.search = fetchASource; - /** - * Fetch a list of requests - * @param {array} reqs - the requests to fetch - * @async - */ - this.these = fetchThese; + /** + * Fetch a list of requests + * @param {array} reqs - the requests to fetch + * @async + */ + this.these = fetchThese; - /** - * Send responses to a list of requests, used when requests - * should be skipped (like when a doc is updated with an index). - * - * This logic is a simplified version of what fetch_these does, and - * could have been added elsewhere, but I would rather the logic be - * here than outside the courier/fetch module. - * - * @param {array[Request]} requests - the list of requests to respond to - * @param {array[any]} responses - the list of responses for each request - */ - this.fakeFetchThese = function (requests, responses) { - return Promise.map(requests, function (req) { - return req.start(); - }) - .then(function () { - return callResponseHandlers(requests, responses); - }) - .then(function (requestStates) { - if (_.contains(requestStates, INCOMPLETE)) { - throw new Error('responding to requests did not complete!'); - } - }); - }; + /** + * Send responses to a list of requests, used when requests + * should be skipped (like when a doc is updated with an index). + * + * This logic is a simplified version of what fetch_these does, and + * could have been added elsewhere, but I would rather the logic be + * here than outside the courier/fetch module. + * + * @param {array[Request]} requests - the list of requests to respond to + * @param {array[any]} responses - the list of responses for each request + */ + this.fakeFetchThese = function (requests, responses) { + return Promise.map(requests, function (req) { + return req.start(); + }) + .then(function () { + return callResponseHandlers(requests, responses); + }) + .then(function (requestStates) { + if (_.contains(requestStates, INCOMPLETE)) { + throw new Error('responding to requests did not complete!'); + } + }); }; -}); +}; diff --git a/src/ui/public/courier/fetch/request/_error_handler.js b/src/ui/public/courier/fetch/request/_error_handler.js index d3f024509db793..95fff4d3b51bf9 100644 --- a/src/ui/public/courier/fetch/request/_error_handler.js +++ b/src/ui/public/courier/fetch/request/_error_handler.js @@ -1,29 +1,27 @@ import CourierErrorHandlersProvider from 'ui/courier/_error_handlers'; -define(function (require) { - return function RequestErrorHandlerFactory(Private, Notifier) { - var errHandlers = Private(CourierErrorHandlersProvider); +export default function RequestErrorHandlerFactory(Private, Notifier) { + var errHandlers = Private(CourierErrorHandlersProvider); - var notify = new Notifier({ - location: 'Courier Fetch Error' - }); + var notify = new Notifier({ + location: 'Courier Fetch Error' + }); - function handleError(req, error) { - var myHandlers = []; + function handleError(req, error) { + var myHandlers = []; - errHandlers.splice(0).forEach(function (handler) { - (handler.source === req.source ? myHandlers : errHandlers).push(handler); - }); + errHandlers.splice(0).forEach(function (handler) { + (handler.source === req.source ? myHandlers : errHandlers).push(handler); + }); - if (!myHandlers.length) { - notify.fatal(new Error(`unhandled courier request error: ${ notify.describeError(error) }`)); - } else { - myHandlers.forEach(function (handler) { - handler.defer.resolve(error); - }); - } + if (!myHandlers.length) { + notify.fatal(new Error(`unhandled courier request error: ${ notify.describeError(error) }`)); + } else { + myHandlers.forEach(function (handler) { + handler.defer.resolve(error); + }); } + } - return handleError; - }; -}); + return handleError; +}; diff --git a/src/ui/public/courier/fetch/request/_segmented_handle.js b/src/ui/public/courier/fetch/request/_segmented_handle.js index 041eecbca0c8dd..64739964f782b9 100644 --- a/src/ui/public/courier/fetch/request/_segmented_handle.js +++ b/src/ui/public/courier/fetch/request/_segmented_handle.js @@ -1,31 +1,29 @@ import _ from 'lodash'; import EventsProvider from 'ui/events'; -define(function (require) { - return function CourierSegmentedReqHandle(Private) { - var Events = Private(EventsProvider); +export default function CourierSegmentedReqHandle(Private) { + var Events = Private(EventsProvider); - /** - * Simple class for creating an object to send to the - * requester of a SegmentedRequest. Since the SegmentedRequest - * extends AbstractRequest, it wasn't able to be the event - * emitter it was born to be. This provides a channel for - * setting values on the segmented request, and an event - * emitter for the request to speak outwardly - * - * @param {SegmentedRequest} - req - the requst this handle relates to - */ - _.class(SegmentedHandle).inherits(Events); - function SegmentedHandle(req) { - SegmentedHandle.Super.call(this); + /** + * Simple class for creating an object to send to the + * requester of a SegmentedRequest. Since the SegmentedRequest + * extends AbstractRequest, it wasn't able to be the event + * emitter it was born to be. This provides a channel for + * setting values on the segmented request, and an event + * emitter for the request to speak outwardly + * + * @param {SegmentedRequest} - req - the requst this handle relates to + */ + _.class(SegmentedHandle).inherits(Events); + function SegmentedHandle(req) { + SegmentedHandle.Super.call(this); - // export a couple methods from the request - this.setDirection = _.bindKey(req, 'setDirection'); - this.setSize = _.bindKey(req, 'setSize'); - this.setMaxSegments = _.bindKey(req, 'setMaxSegments'); - this.setSortFn = _.bindKey(req, 'setSortFn'); - } + // export a couple methods from the request + this.setDirection = _.bindKey(req, 'setDirection'); + this.setSize = _.bindKey(req, 'setSize'); + this.setMaxSegments = _.bindKey(req, 'setMaxSegments'); + this.setSortFn = _.bindKey(req, 'setSortFn'); + } - return SegmentedHandle; - }; -}); + return SegmentedHandle; +}; diff --git a/src/ui/public/courier/fetch/request/doc.js b/src/ui/public/courier/fetch/request/doc.js index d16a093cef726a..0b822e1fc0c61e 100644 --- a/src/ui/public/courier/fetch/request/doc.js +++ b/src/ui/public/courier/fetch/request/doc.js @@ -1,44 +1,42 @@ import _ from 'lodash'; import CourierFetchStrategyDocProvider from 'ui/courier/fetch/strategy/doc'; import CourierFetchRequestRequestProvider from 'ui/courier/fetch/request/request'; -define(function (require) { - return function DocRequestProvider(Private) { +export default function DocRequestProvider(Private) { - var docStrategy = Private(CourierFetchStrategyDocProvider); - var AbstractRequest = Private(CourierFetchRequestRequestProvider); + var docStrategy = Private(CourierFetchStrategyDocProvider); + var AbstractRequest = Private(CourierFetchRequestRequestProvider); - _.class(DocRequest).inherits(AbstractRequest); - function DocRequest(source, defer) { - DocRequest.Super.call(this, source, defer); + _.class(DocRequest).inherits(AbstractRequest); + function DocRequest(source, defer) { + DocRequest.Super.call(this, source, defer); - this.type = 'doc'; - this.strategy = docStrategy; - } - - DocRequest.prototype.canStart = function () { - var parent = DocRequest.Super.prototype.canStart.call(this); - if (!parent) return false; + this.type = 'doc'; + this.strategy = docStrategy; + } - var version = this.source._version; - var storedVersion = this.source._getStoredVersion(); + DocRequest.prototype.canStart = function () { + var parent = DocRequest.Super.prototype.canStart.call(this); + if (!parent) return false; - // conditions that equal "fetch This DOC!" - var unknown = !version && !storedVersion; - var mismatch = version !== storedVersion; + var version = this.source._version; + var storedVersion = this.source._getStoredVersion(); - return Boolean(mismatch || (unknown && !this.started)); - }; + // conditions that equal "fetch This DOC!" + var unknown = !version && !storedVersion; + var mismatch = version !== storedVersion; - DocRequest.prototype.handleResponse = function (resp) { - if (resp.found) { - this.source._storeVersion(resp._version); - } else { - this.source._clearVersion(); - } + return Boolean(mismatch || (unknown && !this.started)); + }; - return DocRequest.Super.prototype.handleResponse.call(this, resp); - }; + DocRequest.prototype.handleResponse = function (resp) { + if (resp.found) { + this.source._storeVersion(resp._version); + } else { + this.source._clearVersion(); + } - return DocRequest; + return DocRequest.Super.prototype.handleResponse.call(this, resp); }; -}); + + return DocRequest; +}; diff --git a/src/ui/public/courier/fetch/request/request.js b/src/ui/public/courier/fetch/request/request.js index 7385daba4e4778..7d828e583adfd7 100644 --- a/src/ui/public/courier/fetch/request/request.js +++ b/src/ui/public/courier/fetch/request/request.js @@ -3,115 +3,113 @@ import moment from 'moment'; import errors from 'ui/errors'; import CourierRequestQueueProvider from 'ui/courier/_request_queue'; import CourierFetchRequestErrorHandlerProvider from 'ui/courier/fetch/request/_error_handler'; -define(function (require) { - return function AbstractReqProvider(Private, Promise) { - var requestQueue = Private(CourierRequestQueueProvider); - var requestErrorHandler = Private(CourierFetchRequestErrorHandlerProvider); +export default function AbstractReqProvider(Private, Promise) { + var requestQueue = Private(CourierRequestQueueProvider); + var requestErrorHandler = Private(CourierFetchRequestErrorHandlerProvider); - function AbstractReq(source, defer) { - if (!(this instanceof AbstractReq) || !this.constructor || this.constructor === AbstractReq) { - throw new Error('The AbstractReq class should not be called directly'); - } - - this.source = source; - this.defer = defer || Promise.defer(); - - requestQueue.push(this); + function AbstractReq(source, defer) { + if (!(this instanceof AbstractReq) || !this.constructor || this.constructor === AbstractReq) { + throw new Error('The AbstractReq class should not be called directly'); } - AbstractReq.prototype.canStart = function () { - return Boolean(!this.stopped && !this.source._fetchDisabled); - }; + this.source = source; + this.defer = defer || Promise.defer(); - AbstractReq.prototype.start = function () { - if (this.started) { - throw new TypeError('Unable to start request because it has already started'); - } + requestQueue.push(this); + } - this.started = true; - this.moment = moment(); + AbstractReq.prototype.canStart = function () { + return Boolean(!this.stopped && !this.source._fetchDisabled); + }; - var source = this.source; - if (source.activeFetchCount) { - source.activeFetchCount += 1; - } else { - source.activeFetchCount = 1; - } + AbstractReq.prototype.start = function () { + if (this.started) { + throw new TypeError('Unable to start request because it has already started'); + } - source.history = [this]; - }; + this.started = true; + this.moment = moment(); - AbstractReq.prototype.getFetchParams = function () { - return this.source._flatten(); - }; + var source = this.source; + if (source.activeFetchCount) { + source.activeFetchCount += 1; + } else { + source.activeFetchCount = 1; + } - AbstractReq.prototype.transformResponse = function (resp) { - return resp; - }; + source.history = [this]; + }; - AbstractReq.prototype.filterError = function (resp) { - return false; - }; + AbstractReq.prototype.getFetchParams = function () { + return this.source._flatten(); + }; - AbstractReq.prototype.handleResponse = function (resp) { - this.success = true; - this.resp = resp; - }; + AbstractReq.prototype.transformResponse = function (resp) { + return resp; + }; - AbstractReq.prototype.handleFailure = function (error) { - this.success = false; - this.resp = error && error.resp; - this.retry(); - return requestErrorHandler(this, error); - }; + AbstractReq.prototype.filterError = function (resp) { + return false; + }; - AbstractReq.prototype.isIncomplete = function () { - return false; - }; + AbstractReq.prototype.handleResponse = function (resp) { + this.success = true; + this.resp = resp; + }; - AbstractReq.prototype.continue = function () { - throw new Error('Unable to continue ' + this.type + ' request'); - }; + AbstractReq.prototype.handleFailure = function (error) { + this.success = false; + this.resp = error && error.resp; + this.retry(); + return requestErrorHandler(this, error); + }; - AbstractReq.prototype.retry = function () { - var clone = this.clone(); - this.abort(); - return clone; - }; + AbstractReq.prototype.isIncomplete = function () { + return false; + }; - // don't want people overriding this, so it becomes a natural - // part of .abort() and .complete() - function stop(then) { - return function () { - if (this.stopped) return; - - this.stopped = true; - this.source.activeFetchCount -= 1; - _.pull(requestQueue, this); - then.call(this); - }; - } + AbstractReq.prototype.continue = function () { + throw new Error('Unable to continue ' + this.type + ' request'); + }; + + AbstractReq.prototype.retry = function () { + var clone = this.clone(); + this.abort(); + return clone; + }; - AbstractReq.prototype.abort = stop(function () { - this.defer = null; - this.aborted = true; - if (this._whenAborted) _.callEach(this._whenAborted); - }); + // don't want people overriding this, so it becomes a natural + // part of .abort() and .complete() + function stop(then) { + return function () { + if (this.stopped) return; - AbstractReq.prototype.whenAborted = function (cb) { - this._whenAborted = (this._whenAborted || []); - this._whenAborted.push(cb); + this.stopped = true; + this.source.activeFetchCount -= 1; + _.pull(requestQueue, this); + then.call(this); }; + } - AbstractReq.prototype.complete = stop(function () { - this.ms = this.moment.diff() * -1; - this.defer.resolve(this.resp); - }); + AbstractReq.prototype.abort = stop(function () { + this.defer = null; + this.aborted = true; + if (this._whenAborted) _.callEach(this._whenAborted); + }); - AbstractReq.prototype.clone = function () { - return new this.constructor(this.source, this.defer); - }; + AbstractReq.prototype.whenAborted = function (cb) { + this._whenAborted = (this._whenAborted || []); + this._whenAborted.push(cb); + }; + + AbstractReq.prototype.complete = stop(function () { + this.ms = this.moment.diff() * -1; + this.defer.resolve(this.resp); + }); - return AbstractReq; + AbstractReq.prototype.clone = function () { + return new this.constructor(this.source, this.defer); }; -}); + + return AbstractReq; +}; diff --git a/src/ui/public/courier/fetch/request/search.js b/src/ui/public/courier/fetch/request/search.js index 959d7c01bc05d5..9718124ef0c957 100644 --- a/src/ui/public/courier/fetch/request/search.js +++ b/src/ui/public/courier/fetch/request/search.js @@ -1,21 +1,19 @@ import _ from 'lodash'; import CourierFetchStrategySearchProvider from 'ui/courier/fetch/strategy/search'; import CourierFetchRequestRequestProvider from 'ui/courier/fetch/request/request'; -define(function (require) { - return function SearchReqProvider(Private) { +export default function SearchReqProvider(Private) { - var searchStrategy = Private(CourierFetchStrategySearchProvider); - var AbstractRequest = Private(CourierFetchRequestRequestProvider); + var searchStrategy = Private(CourierFetchStrategySearchProvider); + var AbstractRequest = Private(CourierFetchRequestRequestProvider); - _.class(SearchReq).inherits(AbstractRequest); - var Super = SearchReq.Super; - function SearchReq(source, defer) { - Super.call(this, source, defer); + _.class(SearchReq).inherits(AbstractRequest); + var Super = SearchReq.Super; + function SearchReq(source, defer) { + Super.call(this, source, defer); - this.type = 'search'; - this.strategy = searchStrategy; - } + this.type = 'search'; + this.strategy = searchStrategy; + } - return SearchReq; - }; -}); + return SearchReq; +}; diff --git a/src/ui/public/courier/fetch/request/segmented.js b/src/ui/public/courier/fetch/request/segmented.js index 0b3430b7faad9b..47d8d11434be91 100644 --- a/src/ui/public/courier/fetch/request/segmented.js +++ b/src/ui/public/courier/fetch/request/segmented.js @@ -2,338 +2,336 @@ import { isNumber } from 'lodash'; import _ from 'lodash'; import CourierFetchRequestSearchProvider from 'ui/courier/fetch/request/search'; import CourierFetchRequestSegmentedHandleProvider from 'ui/courier/fetch/request/_segmented_handle'; -define(function (require) { - return function CourierSegmentedReqProvider(es, Private, Promise, Notifier, timefilter, config) { - var SearchReq = Private(CourierFetchRequestSearchProvider); - var SegmentedHandle = Private(CourierFetchRequestSegmentedHandleProvider); +export default function CourierSegmentedReqProvider(es, Private, Promise, Notifier, timefilter, config) { + var SearchReq = Private(CourierFetchRequestSearchProvider); + var SegmentedHandle = Private(CourierFetchRequestSegmentedHandleProvider); + + var notify = new Notifier({ + location: 'Segmented Fetch' + }); + + _.class(SegmentedReq).inherits(SearchReq); + function SegmentedReq(source, defer, initFn) { + SearchReq.call(this, source, defer); + + this.type = 'segmented'; + + // segmented request specific state + this._initFn = initFn; + + this._desiredSize = null; + this._maxSegments = config.get('courier:maxSegmentCount'); + this._direction = 'desc'; + this._sortFn = null; + this._queueCreated = false; + this._handle = new SegmentedHandle(this); + + this._hitWindow = null; + + // prevent the source from changing between requests, + // all calls will return the same promise + this._getFlattenedSource = _.once(this._getFlattenedSource); + } + + /********* + ** SearchReq overrides + *********/ + + SegmentedReq.prototype.start = function () { + var self = this; + + this._complete = []; + this._active = null; + this._segments = []; + this._all = []; + this._queue = []; + + this._mergedResp = { + took: 0, + hits: { + hits: [], + total: 0, + max_score: 0 + } + }; - var notify = new Notifier({ - location: 'Segmented Fetch' - }); + // give the request consumer a chance to receive each segment and set + // parameters via the handle + if (_.isFunction(this._initFn)) this._initFn(this._handle); + return this._createQueue().then(function (queue) { + self._all = queue.slice(0); - _.class(SegmentedReq).inherits(SearchReq); - function SegmentedReq(source, defer, initFn) { - SearchReq.call(this, source, defer); + // Send the initial fetch status + self._reportStatus(); - this.type = 'segmented'; + return SearchReq.prototype.start.call(self); + }); + }; - // segmented request specific state - this._initFn = initFn; + SegmentedReq.prototype.continue = function () { + return this._reportStatus(); + }; - this._desiredSize = null; - this._maxSegments = config.get('courier:maxSegmentCount'); - this._direction = 'desc'; - this._sortFn = null; - this._queueCreated = false; - this._handle = new SegmentedHandle(this); + SegmentedReq.prototype.getFetchParams = function () { + var self = this; - this._hitWindow = null; + return self._getFlattenedSource().then(function (flatSource) { + var params = _.cloneDeep(flatSource); - // prevent the source from changing between requests, - // all calls will return the same promise - this._getFlattenedSource = _.once(this._getFlattenedSource); - } + // calculate the number of indices to fetch in this request in order to prevent + // more than self._maxSegments requests. We use Math.max(1, n) to ensure that each request + // has at least one index pattern, and Math.floor() to make sure that if the + // number of indices does not round out evenly the extra index is tacked onto the last + // request, making sure the first request returns faster. + var remainingSegments = self._maxSegments - self._segments.length; + var indexCount = Math.max(1, Math.floor(self._queue.length / remainingSegments)); - /********* - ** SearchReq overrides - *********/ - - SegmentedReq.prototype.start = function () { - var self = this; - - this._complete = []; - this._active = null; - this._segments = []; - this._all = []; - this._queue = []; - - this._mergedResp = { - took: 0, - hits: { - hits: [], - total: 0, - max_score: 0 - } - }; + var indices = self._active = self._queue.splice(0, indexCount); + params.index = _.pluck(indices, 'index'); - // give the request consumer a chance to receive each segment and set - // parameters via the handle - if (_.isFunction(this._initFn)) this._initFn(this._handle); - return this._createQueue().then(function (queue) { - self._all = queue.slice(0); + if (isNumber(self._desiredSize)) { + params.body.size = self._pickSizeForIndices(indices); + } - // Send the initial fetch status - self._reportStatus(); + if (params.body.size === 0) params.search_type = 'count'; - return SearchReq.prototype.start.call(self); - }); - }; + return params; + }); + }; - SegmentedReq.prototype.continue = function () { - return this._reportStatus(); - }; + SegmentedReq.prototype.handleResponse = function (resp) { + return this._consumeSegment(resp); + }; - SegmentedReq.prototype.getFetchParams = function () { - var self = this; + SegmentedReq.prototype.filterError = function (resp) { + if (/ClusterBlockException.*index\sclosed/.test(resp.error)) { + this._consumeSegment(false); + return true; + } + }; - return self._getFlattenedSource().then(function (flatSource) { - var params = _.cloneDeep(flatSource); + SegmentedReq.prototype.isIncomplete = function () { + var queueNotCreated = !this._queueCreated; + var queueNotEmpty = this._queue.length > 0; + return queueNotCreated || queueNotEmpty; + }; - // calculate the number of indices to fetch in this request in order to prevent - // more than self._maxSegments requests. We use Math.max(1, n) to ensure that each request - // has at least one index pattern, and Math.floor() to make sure that if the - // number of indices does not round out evenly the extra index is tacked onto the last - // request, making sure the first request returns faster. - var remainingSegments = self._maxSegments - self._segments.length; - var indexCount = Math.max(1, Math.floor(self._queue.length / remainingSegments)); + SegmentedReq.prototype.clone = function () { + return new SegmentedReq(this.source, this.defer, this._initFn); + }; - var indices = self._active = self._queue.splice(0, indexCount); - params.index = _.pluck(indices, 'index'); + SegmentedReq.prototype.complete = function () { + this._reportStatus(); + this._handle.emit('complete'); + return SearchReq.prototype.complete.call(this); + }; - if (isNumber(self._desiredSize)) { - params.body.size = self._pickSizeForIndices(indices); - } - if (params.body.size === 0) params.search_type = 'count'; + /********* + ** SegmentedReq specific methods + *********/ - return params; - }); - }; + /** + * Set the sort total number of segments to emit + * + * @param {number} + */ + SegmentedReq.prototype.setMaxSegments = function (maxSegments) { + this._maxSegments = Math.max(_.parseInt(maxSegments), 1); + }; - SegmentedReq.prototype.handleResponse = function (resp) { - return this._consumeSegment(resp); - }; + /** + * Set the sort direction for the request. + * + * @param {string} dir - one of 'asc' or 'desc' + */ + SegmentedReq.prototype.setDirection = function (dir) { + switch (dir) { + case 'asc': + case 'desc': + return (this._direction = dir); + default: + throw new TypeError('unknown sort direction "' + dir + '"'); + } + }; - SegmentedReq.prototype.filterError = function (resp) { - if (/ClusterBlockException.*index\sclosed/.test(resp.error)) { - this._consumeSegment(false); - return true; - } - }; + /** + * Set the function that will be used to sort the rows + * + * @param {fn} + */ + SegmentedReq.prototype.setSortFn = function (sortFn) { + this._sortFn = sortFn; + }; - SegmentedReq.prototype.isIncomplete = function () { - var queueNotCreated = !this._queueCreated; - var queueNotEmpty = this._queue.length > 0; - return queueNotCreated || queueNotEmpty; - }; + /** + * Set the sort total number of documents to + * emit + * + * Setting to false will not limit the documents, + * if a number is set the size of the request to es + * will be updated on each new request + * + * @param {number|false} + */ + SegmentedReq.prototype.setSize = function (totalSize) { + this._desiredSize = _.parseInt(totalSize); + if (isNaN(this._desiredSize)) this._desiredSize = null; + }; - SegmentedReq.prototype.clone = function () { - return new SegmentedReq(this.source, this.defer, this._initFn); - }; + SegmentedReq.prototype._createQueue = function () { + var self = this; + var timeBounds = timefilter.getBounds(); + var indexPattern = self.source.get('index'); + self._queueCreated = false; - SegmentedReq.prototype.complete = function () { - this._reportStatus(); - this._handle.emit('complete'); - return SearchReq.prototype.complete.call(this); - }; + return indexPattern.toDetailedIndexList(timeBounds.min, timeBounds.max, self._direction) + .then(function (queue) { + if (!_.isArray(queue)) queue = [queue]; + self._queue = queue; + self._queueCreated = true; - /********* - ** SegmentedReq specific methods - *********/ + return queue; + }); + }; - /** - * Set the sort total number of segments to emit - * - * @param {number} - */ - SegmentedReq.prototype.setMaxSegments = function (maxSegments) { - this._maxSegments = Math.max(_.parseInt(maxSegments), 1); - }; + SegmentedReq.prototype._reportStatus = function () { + return this._handle.emit('status', { + total: this._queueCreated ? this._all.length : NaN, + complete: this._queueCreated ? this._complete.length : NaN, + remaining: this._queueCreated ? this._queue.length : NaN, + hitCount: this._queueCreated ? this._mergedResp.hits.hits.length : NaN + }); + }; - /** - * Set the sort direction for the request. - * - * @param {string} dir - one of 'asc' or 'desc' - */ - SegmentedReq.prototype.setDirection = function (dir) { - switch (dir) { - case 'asc': - case 'desc': - return (this._direction = dir); - default: - throw new TypeError('unknown sort direction "' + dir + '"'); - } - }; + SegmentedReq.prototype._getFlattenedSource = function () { + return this.source._flatten(); + }; - /** - * Set the function that will be used to sort the rows - * - * @param {fn} - */ - SegmentedReq.prototype.setSortFn = function (sortFn) { - this._sortFn = sortFn; - }; + SegmentedReq.prototype._consumeSegment = function (seg) { + var index = this._active; + this._complete.push(index); + if (!seg) return; // segment was ignored/filtered, don't store it - /** - * Set the sort total number of documents to - * emit - * - * Setting to false will not limit the documents, - * if a number is set the size of the request to es - * will be updated on each new request - * - * @param {number|false} - */ - SegmentedReq.prototype.setSize = function (totalSize) { - this._desiredSize = _.parseInt(totalSize); - if (isNaN(this._desiredSize)) this._desiredSize = null; - }; + var hadHits = _.get(this._mergedResp, 'hits.hits.length') > 0; + var gotHits = _.get(seg, 'hits.hits.length') > 0; + var firstHits = !hadHits && gotHits; + var haveHits = hadHits || gotHits; - SegmentedReq.prototype._createQueue = function () { - var self = this; - var timeBounds = timefilter.getBounds(); - var indexPattern = self.source.get('index'); - self._queueCreated = false; + this._mergeSegment(seg); + this.resp = _.omit(this._mergedResp, '_bucketIndex'); - return indexPattern.toDetailedIndexList(timeBounds.min, timeBounds.max, self._direction) - .then(function (queue) { - if (!_.isArray(queue)) queue = [queue]; + if (firstHits) this._handle.emit('first', seg); + if (gotHits) this._handle.emit('segment', seg); + if (haveHits) this._handle.emit('mergedSegment', this.resp); + }; - self._queue = queue; - self._queueCreated = true; + SegmentedReq.prototype._mergeHits = function (hits) { + var mergedHits = this._mergedResp.hits.hits; + var desiredSize = this._desiredSize; + var sortFn = this._sortFn; - return queue; - }); - }; + _.pushAll(hits, mergedHits); - SegmentedReq.prototype._reportStatus = function () { - return this._handle.emit('status', { - total: this._queueCreated ? this._all.length : NaN, - complete: this._queueCreated ? this._complete.length : NaN, - remaining: this._queueCreated ? this._queue.length : NaN, - hitCount: this._queueCreated ? this._mergedResp.hits.hits.length : NaN + if (sortFn) { + notify.event('resort rows', function () { + mergedHits.sort(sortFn); }); - }; - - SegmentedReq.prototype._getFlattenedSource = function () { - return this.source._flatten(); - }; + } - SegmentedReq.prototype._consumeSegment = function (seg) { - var index = this._active; - this._complete.push(index); - if (!seg) return; // segment was ignored/filtered, don't store it + if (isNumber(desiredSize)) { + mergedHits = this._mergedResp.hits.hits = mergedHits.slice(0, desiredSize); + } + }; - var hadHits = _.get(this._mergedResp, 'hits.hits.length') > 0; - var gotHits = _.get(seg, 'hits.hits.length') > 0; - var firstHits = !hadHits && gotHits; - var haveHits = hadHits || gotHits; + SegmentedReq.prototype._mergeSegment = notify.timed('merge response segment', function (seg) { + var merged = this._mergedResp; - this._mergeSegment(seg); - this.resp = _.omit(this._mergedResp, '_bucketIndex'); + this._segments.push(seg); - if (firstHits) this._handle.emit('first', seg); - if (gotHits) this._handle.emit('segment', seg); - if (haveHits) this._handle.emit('mergedSegment', this.resp); - }; + merged.took += seg.took; + merged.hits.total += seg.hits.total; + merged.hits.max_score = Math.max(merged.hits.max_score, seg.hits.max_score); - SegmentedReq.prototype._mergeHits = function (hits) { - var mergedHits = this._mergedResp.hits.hits; - var desiredSize = this._desiredSize; - var sortFn = this._sortFn; + if (_.size(seg.hits.hits)) { + this._mergeHits(seg.hits.hits); + this._detectHitsWindow(merged.hits.hits); + } - _.pushAll(hits, mergedHits); + if (!seg.aggregations) return; - if (sortFn) { - notify.event('resort rows', function () { - mergedHits.sort(sortFn); - }); - } + Object.keys(seg.aggregations).forEach(function (aggKey) { - if (isNumber(desiredSize)) { - mergedHits = this._mergedResp.hits.hits = mergedHits.slice(0, desiredSize); + if (!merged.aggregations) { + // start merging aggregations + merged.aggregations = {}; + merged._bucketIndex = {}; } - }; - - SegmentedReq.prototype._mergeSegment = notify.timed('merge response segment', function (seg) { - var merged = this._mergedResp; - - this._segments.push(seg); - - merged.took += seg.took; - merged.hits.total += seg.hits.total; - merged.hits.max_score = Math.max(merged.hits.max_score, seg.hits.max_score); - if (_.size(seg.hits.hits)) { - this._mergeHits(seg.hits.hits); - this._detectHitsWindow(merged.hits.hits); + if (!merged.aggregations[aggKey]) { + merged.aggregations[aggKey] = { + buckets: [] + }; } - if (!seg.aggregations) return; - - Object.keys(seg.aggregations).forEach(function (aggKey) { - - if (!merged.aggregations) { - // start merging aggregations - merged.aggregations = {}; - merged._bucketIndex = {}; - } - - if (!merged.aggregations[aggKey]) { - merged.aggregations[aggKey] = { - buckets: [] - }; + seg.aggregations[aggKey].buckets.forEach(function (bucket) { + var mbucket = merged._bucketIndex[bucket.key]; + if (mbucket) { + mbucket.doc_count += bucket.doc_count; + return; } - seg.aggregations[aggKey].buckets.forEach(function (bucket) { - var mbucket = merged._bucketIndex[bucket.key]; - if (mbucket) { - mbucket.doc_count += bucket.doc_count; - return; - } - - mbucket = merged._bucketIndex[bucket.key] = bucket; - merged.aggregations[aggKey].buckets.push(mbucket); - }); + mbucket = merged._bucketIndex[bucket.key] = bucket; + merged.aggregations[aggKey].buckets.push(mbucket); }); }); + }); + + SegmentedReq.prototype._detectHitsWindow = function (hits) { + hits = hits || []; + var indexPattern = this.source.get('index'); + var desiredSize = this._desiredSize; + + var size = _.size(hits); + if (!isNumber(desiredSize) || size < desiredSize) { + this._hitWindow = { + size: size, + min: -Infinity, + max: Infinity + }; + return; + } - SegmentedReq.prototype._detectHitsWindow = function (hits) { - hits = hits || []; - var indexPattern = this.source.get('index'); - var desiredSize = this._desiredSize; - - var size = _.size(hits); - if (!isNumber(desiredSize) || size < desiredSize) { - this._hitWindow = { - size: size, - min: -Infinity, - max: Infinity - }; - return; - } - - let min; - let max; - - hits.forEach(function (deepHit) { - var hit = indexPattern.flattenHit(deepHit); - var time = hit[indexPattern.timeFieldName]; - if (min == null || time < min) min = time; - if (max == null || time > max) max = time; - }); + let min; + let max; - this._hitWindow = { size, min, max }; - }; + hits.forEach(function (deepHit) { + var hit = indexPattern.flattenHit(deepHit); + var time = hit[indexPattern.timeFieldName]; + if (min == null || time < min) min = time; + if (max == null || time > max) max = time; + }); - SegmentedReq.prototype._pickSizeForIndices = function (indices) { - var hitWindow = this._hitWindow; - var desiredSize = this._desiredSize; - - if (!isNumber(desiredSize)) return null; - // we don't have any hits yet, get us more info! - if (!hitWindow) return desiredSize; - // the order of documents isn't important, just get us more - if (!this._sortFn) return Math.max(desiredSize - hitWindow.size, 0); - // if all of the documents in every index fall outside of our current doc set, we can ignore them. - var someOverlap = indices.some(function (index) { - return index.min <= hitWindow.max && hitWindow.min <= index.max; - }); + this._hitWindow = { size, min, max }; + }; - return someOverlap ? desiredSize : 0; - }; + SegmentedReq.prototype._pickSizeForIndices = function (indices) { + var hitWindow = this._hitWindow; + var desiredSize = this._desiredSize; + + if (!isNumber(desiredSize)) return null; + // we don't have any hits yet, get us more info! + if (!hitWindow) return desiredSize; + // the order of documents isn't important, just get us more + if (!this._sortFn) return Math.max(desiredSize - hitWindow.size, 0); + // if all of the documents in every index fall outside of our current doc set, we can ignore them. + var someOverlap = indices.some(function (index) { + return index.min <= hitWindow.max && hitWindow.min <= index.max; + }); - return SegmentedReq; + return someOverlap ? desiredSize : 0; }; -}); + + return SegmentedReq; +}; diff --git a/src/ui/public/courier/fetch/strategy/doc.js b/src/ui/public/courier/fetch/strategy/doc.js index de274020639edb..86a46af90ca8a8 100644 --- a/src/ui/public/courier/fetch/strategy/doc.js +++ b/src/ui/public/courier/fetch/strategy/doc.js @@ -1,27 +1,25 @@ -define(function (require) { - return function FetchStrategyForDoc(Promise) { - return { - clientMethod: 'mget', +export default function FetchStrategyForDoc(Promise) { + return { + clientMethod: 'mget', - /** - * Flatten a series of requests into as ES request body - * @param {array} requests - an array of flattened requests - * @return {Promise} - a promise that is fulfilled by the request body - */ - reqsFetchParamsToBody: function (reqsFetchParams) { - return Promise.resolve({ - docs: reqsFetchParams - }); - }, + /** + * Flatten a series of requests into as ES request body + * @param {array} requests - an array of flattened requests + * @return {Promise} - a promise that is fulfilled by the request body + */ + reqsFetchParamsToBody: function (reqsFetchParams) { + return Promise.resolve({ + docs: reqsFetchParams + }); + }, - /** - * Fetch the multiple responses from the ES Response - * @param {object} resp - The response sent from Elasticsearch - * @return {array} - the list of responses - */ - getResponses: function (resp) { - return resp.docs; - } - }; + /** + * Fetch the multiple responses from the ES Response + * @param {object} resp - The response sent from Elasticsearch + * @return {array} - the list of responses + */ + getResponses: function (resp) { + return resp.docs; + } }; -}); +}; diff --git a/src/ui/public/courier/fetch/strategy/search.js b/src/ui/public/courier/fetch/strategy/search.js index bf1d7febeb77eb..3c2972e4ec359d 100644 --- a/src/ui/public/courier/fetch/strategy/search.js +++ b/src/ui/public/courier/fetch/strategy/search.js @@ -1,64 +1,62 @@ import { toJson } from 'ui/utils/aggressive_parse'; import _ from 'lodash'; import angular from 'angular'; -define(function (require) { - return function FetchStrategyForSearch(Private, Promise, timefilter) { +export default function FetchStrategyForSearch(Private, Promise, timefilter) { - return { - clientMethod: 'msearch', + return { + clientMethod: 'msearch', - /** - * Flatten a series of requests into as ES request body - * - * @param {array} requests - the requests to serialize - * @return {Promise} - a promise that is fulfilled by the request body - */ - reqsFetchParamsToBody: function (reqsFetchParams) { - return Promise.map(reqsFetchParams, function (fetchParams) { - return Promise.resolve(fetchParams.index) - .then(function (indexList) { - if (!_.isFunction(_.get(indexList, 'toIndexList'))) { - return indexList; - } + /** + * Flatten a series of requests into as ES request body + * + * @param {array} requests - the requests to serialize + * @return {Promise} - a promise that is fulfilled by the request body + */ + reqsFetchParamsToBody: function (reqsFetchParams) { + return Promise.map(reqsFetchParams, function (fetchParams) { + return Promise.resolve(fetchParams.index) + .then(function (indexList) { + if (!_.isFunction(_.get(indexList, 'toIndexList'))) { + return indexList; + } - var timeBounds = timefilter.getBounds(); - return indexList.toIndexList(timeBounds.min, timeBounds.max); - }) - .then(function (indexList) { - // If we've reached this point and there are no indexes in the - // index list at all, it means that we shouldn't expect any indexes - // to contain the documents we're looking for, so we instead - // perform a request for an index pattern that we know will always - // return an empty result (ie. -*). If instead we had gone ahead - // with an msearch without any index patterns, elasticsearch would - // handle that request by querying *all* indexes, which is the - // opposite of what we want in this case. - if (_.isArray(indexList) && indexList.length === 0) { - indexList.push('.kibana-devnull'); - } - return angular.toJson({ - index: indexList, - type: fetchParams.type, - search_type: fetchParams.search_type, - ignore_unavailable: true - }) - + '\n' - + toJson(fetchParams.body || {}, angular.toJson); - }); + var timeBounds = timefilter.getBounds(); + return indexList.toIndexList(timeBounds.min, timeBounds.max); }) - .then(function (requests) { - return requests.join('\n') + '\n'; + .then(function (indexList) { + // If we've reached this point and there are no indexes in the + // index list at all, it means that we shouldn't expect any indexes + // to contain the documents we're looking for, so we instead + // perform a request for an index pattern that we know will always + // return an empty result (ie. -*). If instead we had gone ahead + // with an msearch without any index patterns, elasticsearch would + // handle that request by querying *all* indexes, which is the + // opposite of what we want in this case. + if (_.isArray(indexList) && indexList.length === 0) { + indexList.push('.kibana-devnull'); + } + return angular.toJson({ + index: indexList, + type: fetchParams.type, + search_type: fetchParams.search_type, + ignore_unavailable: true + }) + + '\n' + + toJson(fetchParams.body || {}, angular.toJson); }); - }, + }) + .then(function (requests) { + return requests.join('\n') + '\n'; + }); + }, - /** - * Fetch the multiple responses from the ES Response - * @param {object} resp - The response sent from Elasticsearch - * @return {array} - the list of responses - */ - getResponses: function (resp) { - return resp.responses; - } - }; + /** + * Fetch the multiple responses from the ES Response + * @param {object} resp - The response sent from Elasticsearch + * @return {array} - the list of responses + */ + getResponses: function (resp) { + return resp.responses; + } }; -}); +}; diff --git a/src/ui/public/courier/looper/_looper.js b/src/ui/public/courier/looper/_looper.js index ae980c7b2e88b2..1f76b872407d20 100644 --- a/src/ui/public/courier/looper/_looper.js +++ b/src/ui/public/courier/looper/_looper.js @@ -1,185 +1,183 @@ import _ from 'lodash'; -define(function (require) { - return function LooperFactory($timeout, Notifier, Promise) { - var notify = new Notifier(); +export default function LooperFactory($timeout, Notifier, Promise) { + var notify = new Notifier(); + + function Looper(ms, fn) { + this._fn = fn; + this._ms = ms === void 0 ? 1500 : ms; + this._timer = null; + this._started = false; + + this._loopTheLoop = _.bind(this._loopTheLoop, this); + } + + /** + * Set the number of milliseconds between + * each loop + * + * @param {integer} ms + * @chainable + */ + Looper.prototype.ms = function (ms) { + this._ms = _.parseInt(ms) || 0; + + if (!this._started) return; + + if (this._ms) { + this.start(false); + } else { + this._unScheduleLoop(); + } - function Looper(ms, fn) { - this._fn = fn; - this._ms = ms === void 0 ? 1500 : ms; - this._timer = null; - this._started = false; + return this; + }; - this._loopTheLoop = _.bind(this._loopTheLoop, this); - } + /** + * Cancels the current looper while keeping internal + * state as started + * + * @chainable + */ + Looper.prototype.pause = function () { + this._unScheduleLoop(); + return this; + }; - /** - * Set the number of milliseconds between - * each loop - * - * @param {integer} ms - * @chainable - */ - Looper.prototype.ms = function (ms) { - this._ms = _.parseInt(ms) || 0; - - if (!this._started) return; - - if (this._ms) { - this.start(false); - } else { - this._unScheduleLoop(); - } - - return this; - }; - - /** - * Cancels the current looper while keeping internal - * state as started - * - * @chainable - */ - Looper.prototype.pause = function () { - this._unScheduleLoop(); - return this; - }; - - /** - * Start the looping madness - * - * @chainable - */ - Looper.prototype.start = function (loopOver) { - if (loopOver == null) loopOver = true; - - if (!this._started) { - this._started = true; - } else { - this._unScheduleLoop(); - } - - if (loopOver) { - this._loopTheLoop(); - } else { - this._scheduleLoop(); - } - - return this; - }; - - /** - * ... - * - * @chainable - */ - Looper.prototype.stop = function () { - this._unScheduleLoop(); - this._started = false; - return this; - }; - - /** - * Restart the looper only if it is already started. - * Called automatically when ms is changed - * - * @chainable - */ - Looper.prototype.restart = function () { - this.start(false); - return this; - }; - - /** - * Is the looper currently started/running/scheduled/going to execute - * - * @return {boolean} - */ - Looper.prototype.started = function () { - return !!this._started; - }; - - /** - * Returns the current loop interval - * - * @return {number} - */ - Looper.prototype.loopInterval = function () { - return this._ms; - }; - - /** - * Called when the loop is executed before the previous - * run has completed. - * - * @override - * @return {undefined} - */ - Looper.prototype.onHastyLoop = function () { - // override this in subclasses - }; - - /** - * Wraps this._fn so that this._fn can be changed - * without rescheduling and schedules - * the next itteration - * - * @private - * @return {undefined} - */ - Looper.prototype._loopTheLoop = function () { - var self = this; - - if (self.active) { - self.onHastyLoop(); - return; - } - - self.active = Promise - .try(this._fn) - .then(function () { - self._scheduleLoop(); - }) - .catch(function (err) { - self.stop(); - notify.fatal(err); - }) - .finally(function () { - self.active = null; - }); - }; - - /** - * Schedule the next itteration of the loop - * - * @private - * @return {number} - the timer promise - */ - Looper.prototype._scheduleLoop = function () { + /** + * Start the looping madness + * + * @chainable + */ + Looper.prototype.start = function (loopOver) { + if (loopOver == null) loopOver = true; + + if (!this._started) { + this._started = true; + } else { this._unScheduleLoop(); - this._timer = this._ms ? $timeout(this._loopTheLoop, this._ms) : null; - return this._timer; - }; - - /** - * Cancel the next itteration of the loop - * - * @private - * @return {number} - the timer promise - */ - Looper.prototype._unScheduleLoop = function () { - if (this._timer) { - $timeout.cancel(this._timer); - this._timer = null; - } - }; - - /** - * execute the this._fn, and restart the timer - */ - Looper.prototype.run = function () { - this.start(); - }; - - return Looper; + } + + if (loopOver) { + this._loopTheLoop(); + } else { + this._scheduleLoop(); + } + + return this; }; -}); + + /** + * ... + * + * @chainable + */ + Looper.prototype.stop = function () { + this._unScheduleLoop(); + this._started = false; + return this; + }; + + /** + * Restart the looper only if it is already started. + * Called automatically when ms is changed + * + * @chainable + */ + Looper.prototype.restart = function () { + this.start(false); + return this; + }; + + /** + * Is the looper currently started/running/scheduled/going to execute + * + * @return {boolean} + */ + Looper.prototype.started = function () { + return !!this._started; + }; + + /** + * Returns the current loop interval + * + * @return {number} + */ + Looper.prototype.loopInterval = function () { + return this._ms; + }; + + /** + * Called when the loop is executed before the previous + * run has completed. + * + * @override + * @return {undefined} + */ + Looper.prototype.onHastyLoop = function () { + // override this in subclasses + }; + + /** + * Wraps this._fn so that this._fn can be changed + * without rescheduling and schedules + * the next itteration + * + * @private + * @return {undefined} + */ + Looper.prototype._loopTheLoop = function () { + var self = this; + + if (self.active) { + self.onHastyLoop(); + return; + } + + self.active = Promise + .try(this._fn) + .then(function () { + self._scheduleLoop(); + }) + .catch(function (err) { + self.stop(); + notify.fatal(err); + }) + .finally(function () { + self.active = null; + }); + }; + + /** + * Schedule the next itteration of the loop + * + * @private + * @return {number} - the timer promise + */ + Looper.prototype._scheduleLoop = function () { + this._unScheduleLoop(); + this._timer = this._ms ? $timeout(this._loopTheLoop, this._ms) : null; + return this._timer; + }; + + /** + * Cancel the next itteration of the loop + * + * @private + * @return {number} - the timer promise + */ + Looper.prototype._unScheduleLoop = function () { + if (this._timer) { + $timeout.cancel(this._timer); + this._timer = null; + } + }; + + /** + * execute the this._fn, and restart the timer + */ + Looper.prototype.run = function () { + this.start(); + }; + + return Looper; +}; diff --git a/src/ui/public/courier/looper/doc.js b/src/ui/public/courier/looper/doc.js index 5f3aa3c8faf737..0a37f334fca7e3 100644 --- a/src/ui/public/courier/looper/doc.js +++ b/src/ui/public/courier/looper/doc.js @@ -2,20 +2,18 @@ import CourierFetchFetchProvider from 'ui/courier/fetch/fetch'; import CourierLooperLooperProvider from 'ui/courier/looper/_looper'; import CourierFetchStrategyDocProvider from 'ui/courier/fetch/strategy/doc'; -define(function (require) { - return function DocLooperService(Private) { - var fetch = Private(CourierFetchFetchProvider); - var Looper = Private(CourierLooperLooperProvider); - var docStrategy = Private(CourierFetchStrategyDocProvider); +export default function DocLooperService(Private) { + var fetch = Private(CourierFetchFetchProvider); + var Looper = Private(CourierLooperLooperProvider); + var docStrategy = Private(CourierFetchStrategyDocProvider); - /** - * The Looper which will manage the doc fetch interval - * @type {Looper} - */ - var docLooper = new Looper(1500, function () { - fetch.fetchQueued(docStrategy); - }); + /** + * The Looper which will manage the doc fetch interval + * @type {Looper} + */ + var docLooper = new Looper(1500, function () { + fetch.fetchQueued(docStrategy); + }); - return docLooper; - }; -}); + return docLooper; +}; diff --git a/src/ui/public/courier/looper/search.js b/src/ui/public/courier/looper/search.js index 6d93e7ccc31dec..a3f5dfd57e3b90 100644 --- a/src/ui/public/courier/looper/search.js +++ b/src/ui/public/courier/looper/search.js @@ -3,38 +3,36 @@ import CourierFetchStrategySearchProvider from 'ui/courier/fetch/strategy/search import CourierRequestQueueProvider from 'ui/courier/_request_queue'; import CourierLooperLooperProvider from 'ui/courier/looper/_looper'; -define(function (require) { - return function SearchLooperService(Private, Promise, Notifier, $rootScope) { - var fetch = Private(CourierFetchFetchProvider); - var searchStrategy = Private(CourierFetchStrategySearchProvider); - var requestQueue = Private(CourierRequestQueueProvider); +export default function SearchLooperService(Private, Promise, Notifier, $rootScope) { + var fetch = Private(CourierFetchFetchProvider); + var searchStrategy = Private(CourierFetchStrategySearchProvider); + var requestQueue = Private(CourierRequestQueueProvider); - var Looper = Private(CourierLooperLooperProvider); - var notif = new Notifier({ location: 'Search Looper' }); + var Looper = Private(CourierLooperLooperProvider); + var notif = new Notifier({ location: 'Search Looper' }); - /** - * The Looper which will manage the doc fetch interval - * @type {Looper} - */ - var searchLooper = new Looper(null, function () { - $rootScope.$broadcast('courier:searchRefresh'); - return fetch.these( - requestQueue.getInactive(searchStrategy) - ); - }); - - searchLooper.onHastyLoop = function () { - if (searchLooper.afterHastyQueued) return; + /** + * The Looper which will manage the doc fetch interval + * @type {Looper} + */ + var searchLooper = new Looper(null, function () { + $rootScope.$broadcast('courier:searchRefresh'); + return fetch.these( + requestQueue.getInactive(searchStrategy) + ); + }); - searchLooper.afterHastyQueued = Promise.resolve(searchLooper.active) - .then(function () { - return searchLooper._loopTheLoop(); - }) - .finally(function () { - searchLooper.afterHastyQueued = null; - }); - }; + searchLooper.onHastyLoop = function () { + if (searchLooper.afterHastyQueued) return; - return searchLooper; + searchLooper.afterHastyQueued = Promise.resolve(searchLooper.active) + .then(function () { + return searchLooper._loopTheLoop(); + }) + .finally(function () { + searchLooper.afterHastyQueued = null; + }); }; -}); + + return searchLooper; +}; diff --git a/src/ui/public/courier/saved_object/saved_object.js b/src/ui/public/courier/saved_object/saved_object.js index 361e089d836234..ea568383410c17 100644 --- a/src/ui/public/courier/saved_object/saved_object.js +++ b/src/ui/public/courier/saved_object/saved_object.js @@ -5,296 +5,294 @@ import slugifyId from 'ui/utils/slugify_id'; import CourierDataSourceDocSourceProvider from 'ui/courier/data_source/doc_source'; import CourierDataSourceSearchSourceProvider from 'ui/courier/data_source/search_source'; import UtilsMappingSetupProvider from 'ui/utils/mapping_setup'; -define(function (require) { - return function SavedObjectFactory(es, kbnIndex, Promise, Private, Notifier, safeConfirm, indexPatterns) { - - var DocSource = Private(CourierDataSourceDocSourceProvider); - var SearchSource = Private(CourierDataSourceSearchSourceProvider); - var mappingSetup = Private(UtilsMappingSetupProvider); - - function SavedObject(config) { - if (!_.isObject(config)) config = {}; - - // save an easy reference to this - var self = this; - - /************ - * Initialize config vars - ************/ - // the doc which is used to store this object - var docSource = new DocSource(); - - // type name for this object, used as the ES-type - var type = config.type; - - // Create a notifier for sending alerts - var notify = new Notifier({ - location: 'Saved ' + type - }); - - // mapping definition for the fields that this object will expose - var mapping = mappingSetup.expandShorthand(config.mapping); - - // default field values, assigned when the source is loaded - var defaults = config.defaults || {}; - - var afterESResp = config.afterESResp || _.noop; - var customInit = config.init || _.noop; - - // optional search source which this object configures - self.searchSource = config.searchSource && new SearchSource(); - - // the id of the document - self.id = config.id || void 0; - self.defaults = config.defaults; - - /** - * Asynchronously initialize this object - will only run - * once even if called multiple times. - * - * @return {Promise} - * @resolved {SavedObject} - */ - self.init = _.once(function () { - // ensure that the type is defined - if (!type) throw new Error('You must define a type name to use SavedObject objects.'); - - // tell the docSource where to find the doc - docSource - .index(kbnIndex) - .type(type) - .id(self.id); - - // check that the mapping for this type is defined - return mappingSetup.isDefined(type) - .then(function (defined) { - // if it is already defined skip this step - if (defined) return true; - - mapping.kibanaSavedObjectMeta = { - properties: { - // setup the searchSource mapping, even if it is not used but this type yet - searchSourceJSON: { - type: 'string' - } +export default function SavedObjectFactory(es, kbnIndex, Promise, Private, Notifier, safeConfirm, indexPatterns) { + + var DocSource = Private(CourierDataSourceDocSourceProvider); + var SearchSource = Private(CourierDataSourceSearchSourceProvider); + var mappingSetup = Private(UtilsMappingSetupProvider); + + function SavedObject(config) { + if (!_.isObject(config)) config = {}; + + // save an easy reference to this + var self = this; + + /************ + * Initialize config vars + ************/ + // the doc which is used to store this object + var docSource = new DocSource(); + + // type name for this object, used as the ES-type + var type = config.type; + + // Create a notifier for sending alerts + var notify = new Notifier({ + location: 'Saved ' + type + }); + + // mapping definition for the fields that this object will expose + var mapping = mappingSetup.expandShorthand(config.mapping); + + // default field values, assigned when the source is loaded + var defaults = config.defaults || {}; + + var afterESResp = config.afterESResp || _.noop; + var customInit = config.init || _.noop; + + // optional search source which this object configures + self.searchSource = config.searchSource && new SearchSource(); + + // the id of the document + self.id = config.id || void 0; + self.defaults = config.defaults; + + /** + * Asynchronously initialize this object - will only run + * once even if called multiple times. + * + * @return {Promise} + * @resolved {SavedObject} + */ + self.init = _.once(function () { + // ensure that the type is defined + if (!type) throw new Error('You must define a type name to use SavedObject objects.'); + + // tell the docSource where to find the doc + docSource + .index(kbnIndex) + .type(type) + .id(self.id); + + // check that the mapping for this type is defined + return mappingSetup.isDefined(type) + .then(function (defined) { + // if it is already defined skip this step + if (defined) return true; + + mapping.kibanaSavedObjectMeta = { + properties: { + // setup the searchSource mapping, even if it is not used but this type yet + searchSourceJSON: { + type: 'string' } - }; - - // tell mappingSetup to set type - return mappingSetup.setup(type, mapping); - }) - .then(function () { - // If there is not id, then there is no document to fetch from elasticsearch - if (!self.id) { - // just assign the defaults and be done - _.assign(self, defaults); - return hydrateIndexPattern().then(function () { - return afterESResp.call(self); - }); } + }; - // fetch the object from ES - return docSource.fetch() - .then(self.applyESResp); - }) - .then(function () { - return customInit.call(self); - }) - .then(function () { - // return our obj as the result of init() - return self; - }); - }); - - self.applyESResp = function (resp) { - self._source = _.cloneDeep(resp._source); - - if (resp.found != null && !resp.found) throw new errors.SavedObjectNotFound(type, self.id); - - var meta = resp._source.kibanaSavedObjectMeta || {}; - delete resp._source.kibanaSavedObjectMeta; - - if (!config.indexPattern && self._source.indexPattern) { - config.indexPattern = self._source.indexPattern; - delete self._source.indexPattern; + // tell mappingSetup to set type + return mappingSetup.setup(type, mapping); + }) + .then(function () { + // If there is not id, then there is no document to fetch from elasticsearch + if (!self.id) { + // just assign the defaults and be done + _.assign(self, defaults); + return hydrateIndexPattern().then(function () { + return afterESResp.call(self); + }); } - // assign the defaults to the response - _.defaults(self._source, defaults); + // fetch the object from ES + return docSource.fetch() + .then(self.applyESResp); + }) + .then(function () { + return customInit.call(self); + }) + .then(function () { + // return our obj as the result of init() + return self; + }); + }); - // transform the source using _deserializers - _.forOwn(mapping, function ittr(fieldMapping, fieldName) { - if (fieldMapping._deserialize) { - self._source[fieldName] = fieldMapping._deserialize(self._source[fieldName], resp, fieldName, fieldMapping); - } - }); + self.applyESResp = function (resp) { + self._source = _.cloneDeep(resp._source); - // Give obj all of the values in _source.fields - _.assign(self, self._source); + if (resp.found != null && !resp.found) throw new errors.SavedObjectNotFound(type, self.id); - return Promise.try(function () { - parseSearchSource(meta.searchSourceJSON); - }) - .then(hydrateIndexPattern) - .then(function () { - return Promise.cast(afterESResp.call(self, resp)); - }) - .then(function () { - // Any time obj is updated, re-call applyESResp - docSource.onUpdate().then(self.applyESResp, notify.fatal); - }); - }; + var meta = resp._source.kibanaSavedObjectMeta || {}; + delete resp._source.kibanaSavedObjectMeta; + + if (!config.indexPattern && self._source.indexPattern) { + config.indexPattern = self._source.indexPattern; + delete self._source.indexPattern; + } - function parseSearchSource(searchSourceJson) { - if (!self.searchSource) return; + // assign the defaults to the response + _.defaults(self._source, defaults); - // if we have a searchSource, set its state based on the searchSourceJSON field - var state; - try { - state = JSON.parse(searchSourceJson); - } catch (e) { - state = {}; + // transform the source using _deserializers + _.forOwn(mapping, function ittr(fieldMapping, fieldName) { + if (fieldMapping._deserialize) { + self._source[fieldName] = fieldMapping._deserialize(self._source[fieldName], resp, fieldName, fieldMapping); } + }); - var oldState = self.searchSource.toJSON(); - var fnProps = _.transform(oldState, function (dynamic, val, name) { - if (_.isFunction(val)) dynamic[name] = val; - }, {}); + // Give obj all of the values in _source.fields + _.assign(self, self._source); + + return Promise.try(function () { + parseSearchSource(meta.searchSourceJSON); + }) + .then(hydrateIndexPattern) + .then(function () { + return Promise.cast(afterESResp.call(self, resp)); + }) + .then(function () { + // Any time obj is updated, re-call applyESResp + docSource.onUpdate().then(self.applyESResp, notify.fatal); + }); + }; + + function parseSearchSource(searchSourceJson) { + if (!self.searchSource) return; - self.searchSource.set(_.defaults(state, fnProps)); + // if we have a searchSource, set its state based on the searchSourceJSON field + var state; + try { + state = JSON.parse(searchSourceJson); + } catch (e) { + state = {}; } - /** - * After creation or fetching from ES, ensure that the searchSources index indexPattern - * is an bonafide IndexPattern object. - * - * @return {[type]} [description] - */ - function hydrateIndexPattern() { - return Promise.try(function () { - if (self.searchSource) { - - var index = config.indexPattern || self.searchSource.getOwn('index'); - if (!index) return; - if (config.clearSavedIndexPattern) { - self.searchSource.set('index', undefined); - return; - } + var oldState = self.searchSource.toJSON(); + var fnProps = _.transform(oldState, function (dynamic, val, name) { + if (_.isFunction(val)) dynamic[name] = val; + }, {}); - if (!(index instanceof indexPatterns.IndexPattern)) { - index = indexPatterns.get(index); - } + self.searchSource.set(_.defaults(state, fnProps)); + } - return Promise.resolve(index).then(function (indexPattern) { - self.searchSource.set('index', indexPattern); - }); + /** + * After creation or fetching from ES, ensure that the searchSources index indexPattern + * is an bonafide IndexPattern object. + * + * @return {[type]} [description] + */ + function hydrateIndexPattern() { + return Promise.try(function () { + if (self.searchSource) { + + var index = config.indexPattern || self.searchSource.getOwn('index'); + if (!index) return; + if (config.clearSavedIndexPattern) { + self.searchSource.set('index', undefined); + return; } - }); - } - /** - * Serialize this object - * - * @return {Object} - */ - self.serialize = function () { - var body = {}; - - _.forOwn(mapping, function (fieldMapping, fieldName) { - if (self[fieldName] != null) { - body[fieldName] = (fieldMapping._serialize) - ? fieldMapping._serialize(self[fieldName]) - : self[fieldName]; + if (!(index instanceof indexPatterns.IndexPattern)) { + index = indexPatterns.get(index); } - }); - if (self.searchSource) { - body.kibanaSavedObjectMeta = { - searchSourceJSON: angular.toJson(_.omit(self.searchSource.toJSON(), ['sort', 'size'])) - }; + return Promise.resolve(index).then(function (indexPattern) { + self.searchSource.set('index', indexPattern); + }); } + }); + } - return body; - }; + /** + * Serialize this object + * + * @return {Object} + */ + self.serialize = function () { + var body = {}; + + _.forOwn(mapping, function (fieldMapping, fieldName) { + if (self[fieldName] != null) { + body[fieldName] = (fieldMapping._serialize) + ? fieldMapping._serialize(self[fieldName]) + : self[fieldName]; + } + }); - /** - * Save this object - * - * @return {Promise} - * @resolved {String} - The id of the doc - */ - self.save = function () { + if (self.searchSource) { + body.kibanaSavedObjectMeta = { + searchSourceJSON: angular.toJson(_.omit(self.searchSource.toJSON(), ['sort', 'size'])) + }; + } - var body = self.serialize(); + return body; + }; - // Slugify the object id - self.id = slugifyId(self.id); + /** + * Save this object + * + * @return {Promise} + * @resolved {String} - The id of the doc + */ + self.save = function () { - // ensure that the docSource has the current self.id - docSource.id(self.id); + var body = self.serialize(); - // index the document - return self.saveSource(body); - }; + // Slugify the object id + self.id = slugifyId(self.id); - self.saveSource = function (source) { - var finish = function (id) { - self.id = id; - return es.indices.refresh({ - index: kbnIndex - }) - .then(function () { - return self.id; - }); - }; + // ensure that the docSource has the current self.id + docSource.id(self.id); - return docSource.doCreate(source) - .then(finish) - .catch(function (err) { - // record exists, confirm overwriting - if (_.get(err, 'origError.status') === 409) { - var confirmMessage = 'Are you sure you want to overwrite ' + self.title + '?'; - - return safeConfirm(confirmMessage).then( - function () { - return docSource.doIndex(source).then(finish); - }, - _.noop // if the user doesn't overwrite record, just swallow the error - ); - } - return Promise.reject(err); + // index the document + return self.saveSource(body); + }; + + self.saveSource = function (source) { + var finish = function (id) { + self.id = id; + return es.indices.refresh({ + index: kbnIndex + }) + .then(function () { + return self.id; }); }; - /** - * Destroy this object - * - * @return {undefined} - */ - self.destroy = function () { - docSource.cancelQueued(); - if (self.searchSource) { - self.searchSource.cancelQueued(); + return docSource.doCreate(source) + .then(finish) + .catch(function (err) { + // record exists, confirm overwriting + if (_.get(err, 'origError.status') === 409) { + var confirmMessage = 'Are you sure you want to overwrite ' + self.title + '?'; + + return safeConfirm(confirmMessage).then( + function () { + return docSource.doIndex(source).then(finish); + }, + _.noop // if the user doesn't overwrite record, just swallow the error + ); } - }; - - /** - * Delete this object from Elasticsearch - * @return {promise} - */ - self.delete = function () { - return es.delete({ - index: kbnIndex, - type: type, - id: this.id - }).then(function () { - return es.indices.refresh({ - index: kbnIndex - }); + return Promise.reject(err); + }); + }; + + /** + * Destroy this object + * + * @return {undefined} + */ + self.destroy = function () { + docSource.cancelQueued(); + if (self.searchSource) { + self.searchSource.cancelQueued(); + } + }; + + /** + * Delete this object from Elasticsearch + * @return {promise} + */ + self.delete = function () { + return es.delete({ + index: kbnIndex, + type: type, + id: this.id + }).then(function () { + return es.indices.refresh({ + index: kbnIndex }); - }; - } + }); + }; + } - return SavedObject; - }; -}); + return SavedObject; +}; diff --git a/src/ui/public/debounce/debounce.js b/src/ui/public/debounce/debounce.js index 731223ebf05f34..811cebeff9f484 100644 --- a/src/ui/public/debounce/debounce.js +++ b/src/ui/public/debounce/debounce.js @@ -2,51 +2,49 @@ import _ from 'lodash'; // Debounce service, angularized version of lodash debounce // borrowed heavily from https://github.com/shahata/angular-debounce -define(function (require) { - var module = require('ui/modules').get('kibana'); - - module.service('debounce', ['$timeout', function ($timeout) { - return function (func, wait, options) { - var timeout; - var args; - var self; - var result; - options = _.defaults(options || {}, { - leading: false, - trailing: true - }); - - function debounce() { - self = this; - args = arguments; - - var later = function () { - timeout = null; - if (!options.leading || options.trailing) { - result = func.apply(self, args); - } - }; - - var callNow = options.leading && !timeout; - - if (timeout) { - $timeout.cancel(timeout); - } - timeout = $timeout(later, wait); - - if (callNow) { +var module = require('ui/modules').get('kibana'); + +module.service('debounce', ['$timeout', function ($timeout) { + return function (func, wait, options) { + var timeout; + var args; + var self; + var result; + options = _.defaults(options || {}, { + leading: false, + trailing: true + }); + + function debounce() { + self = this; + args = arguments; + + var later = function () { + timeout = null; + if (!options.leading || options.trailing) { result = func.apply(self, args); } + }; - return result; - } + var callNow = options.leading && !timeout; - debounce.cancel = function () { + if (timeout) { $timeout.cancel(timeout); - timeout = null; - }; + } + timeout = $timeout(later, wait); + + if (callNow) { + result = func.apply(self, args); + } + + return result; + } - return debounce; + debounce.cancel = function () { + $timeout.cancel(timeout); + timeout = null; }; - }]); -}); + + return debounce; + }; +}]); diff --git a/src/ui/public/directives/auto_select_if_only_one.js b/src/ui/public/directives/auto_select_if_only_one.js index f0b62d32c96fff..5fd8b97afb03ee 100644 --- a/src/ui/public/directives/auto_select_if_only_one.js +++ b/src/ui/public/directives/auto_select_if_only_one.js @@ -1,19 +1,17 @@ -define(function (require) { - var module = require('ui/modules').get('kibana'); +var module = require('ui/modules').get('kibana'); - module.directive('autoSelectIfOnlyOne', function ($parse) { - return { - restrict: 'A', - require: 'ngModel', - link: function (scope, element, attributes, ngModelCtrl) { - attributes.$observe('autoSelectIfOnlyOne', function (result) { - var options = $parse(result)(scope); - if (options && options.length === 1) { - ngModelCtrl.$setViewValue(options[0]); - ngModelCtrl.$render(); - } - }); - } - }; - }); +module.directive('autoSelectIfOnlyOne', function ($parse) { + return { + restrict: 'A', + require: 'ngModel', + link: function (scope, element, attributes, ngModelCtrl) { + attributes.$observe('autoSelectIfOnlyOne', function (result) { + var options = $parse(result)(scope); + if (options && options.length === 1) { + ngModelCtrl.$setViewValue(options[0]); + ngModelCtrl.$render(); + } + }); + } + }; }); diff --git a/src/ui/public/directives/click_focus.js b/src/ui/public/directives/click_focus.js index af29a47e241982..25ee133f8a44f8 100644 --- a/src/ui/public/directives/click_focus.js +++ b/src/ui/public/directives/click_focus.js @@ -1,23 +1,21 @@ import _ from 'lodash'; import $ from 'jquery'; -define(function (require) { - var module = require('ui/modules').get('kibana'); +var module = require('ui/modules').get('kibana'); - module.directive('clickFocus', function () { - return { - scope: { - clickFocus: '=' - }, - restrict: 'A', - link: function ($scope, $elem) { - function handler() { - var focusElem = $.find('input[name=' + $scope.clickFocus + ']'); - if (focusElem[0]) focusElem[0].focus(); - } - - $elem.bind('click', handler); - $scope.$on('$destroy', _.bindKey($elem, 'unbind', 'click', handler)); +module.directive('clickFocus', function () { + return { + scope: { + clickFocus: '=' + }, + restrict: 'A', + link: function ($scope, $elem) { + function handler() { + var focusElem = $.find('input[name=' + $scope.clickFocus + ']'); + if (focusElem[0]) focusElem[0].focus(); } - }; - }); + + $elem.bind('click', handler); + $scope.$on('$destroy', _.bindKey($elem, 'unbind', 'click', handler)); + } + }; }); diff --git a/src/ui/public/directives/config.js b/src/ui/public/directives/config.js index 6e3a6cc5895c16..5e9bdc0d6d379d 100644 --- a/src/ui/public/directives/config.js +++ b/src/ui/public/directives/config.js @@ -3,81 +3,79 @@ import 'ui/watch_multi'; import ConfigTemplate from 'ui/ConfigTemplate'; import angular from 'angular'; import 'ui/directives/input_focus'; -define(function (require) { - var module = require('ui/modules').get('kibana'); +var module = require('ui/modules').get('kibana'); - /** - * config directive - * - * Creates a full width horizonal config section, usually under a nav/subnav. - * ``` - * - * ``` - */ +/** + * config directive + * + * Creates a full width horizonal config section, usually under a nav/subnav. + * ``` + * + * ``` + */ - module.directive('config', function ($compile) { - return { - restrict: 'E', - scope: { - configTemplate: '=', - configClose: '=', - configSubmit: '=', - configObject: '=' - }, - link: function ($scope, element, attr) { - var tmpScope = $scope.$new(); +module.directive('config', function ($compile) { + return { + restrict: 'E', + scope: { + configTemplate: '=', + configClose: '=', + configSubmit: '=', + configObject: '=' + }, + link: function ($scope, element, attr) { + var tmpScope = $scope.$new(); - $scope.$watch('configObject', function (newVal) { - $scope[attr.configObject] = $scope.configObject; - }); + $scope.$watch('configObject', function (newVal) { + $scope[attr.configObject] = $scope.configObject; + }); - var wrapTmpl = function (tmpl) { - if ($scope.configSubmit) { - return '
      ' + tmpl + '
      '; - } else { - return '
      ' + tmpl + '
      '; - } - }; + var wrapTmpl = function (tmpl) { + if ($scope.configSubmit) { + return '
      ' + tmpl + '
      '; + } else { + return '
      ' + tmpl + '
      '; + } + }; - $scope.$watchMulti([ - 'configSubmit', - 'configTemplate.current || configTemplate' - ], function () { - var tmpl = $scope.configTemplate; - if (tmpl instanceof ConfigTemplate) { - tmpl = tmpl.toString(); - } + $scope.$watchMulti([ + 'configSubmit', + 'configTemplate.current || configTemplate' + ], function () { + var tmpl = $scope.configTemplate; + if (tmpl instanceof ConfigTemplate) { + tmpl = tmpl.toString(); + } - tmpScope.$destroy(); - tmpScope = $scope.$new(); + tmpScope.$destroy(); + tmpScope = $scope.$new(); - var html = ''; - if (tmpl) { - html = $compile('' + - '
      ' + - wrapTmpl(tmpl) + - '
      ' + - ' ' + - '
      ' + - '
      ' + - '' - )(tmpScope); - } + var html = ''; + if (tmpl) { + html = $compile('' + + '
      ' + + wrapTmpl(tmpl) + + '
      ' + + ' ' + + '
      ' + + '
      ' + + '' + )(tmpScope); + } - element.html(html); - }); + element.html(html); + }); - $scope.close = function () { - if (_.isFunction($scope.configClose)) $scope.configClose(); - if ($scope.configTemplate instanceof ConfigTemplate) { - $scope.configTemplate.current = null; - } else { - $scope.configTemplate = null; - } - }; - } - }; - }); + $scope.close = function () { + if (_.isFunction($scope.configClose)) $scope.configClose(); + if ($scope.configTemplate instanceof ConfigTemplate) { + $scope.configTemplate.current = null; + } else { + $scope.configTemplate = null; + } + }; + } + }; }); diff --git a/src/ui/public/directives/confirm_click.js b/src/ui/public/directives/confirm_click.js index c4f10462948dec..748af348f28819 100644 --- a/src/ui/public/directives/confirm_click.js +++ b/src/ui/public/directives/confirm_click.js @@ -1,24 +1,22 @@ -define(function (require) { - require('ui/modules') - .get('kibana') - .directive('confirmClick', function () { - return { - restrict: 'A', - link: function ($scope, $elem, attrs) { - $elem.bind('click', function () { - var message = attrs.confirmation || 'Are you sure?'; - if (window.confirm(message)) { // eslint-disable-line no-alert - var action = attrs.confirmClick; - if (action) { - $scope.$apply($scope.$eval(action)); - } +require('ui/modules') +.get('kibana') +.directive('confirmClick', function () { + return { + restrict: 'A', + link: function ($scope, $elem, attrs) { + $elem.bind('click', function () { + var message = attrs.confirmation || 'Are you sure?'; + if (window.confirm(message)) { // eslint-disable-line no-alert + var action = attrs.confirmClick; + if (action) { + $scope.$apply($scope.$eval(action)); } - }); + } + }); - $scope.$on('$destroy', function () { - $elem.unbind('click'); - }); - }, - }; - }); + $scope.$on('$destroy', function () { + $elem.unbind('click'); + }); + }, + }; }); diff --git a/src/ui/public/directives/css_truncate.js b/src/ui/public/directives/css_truncate.js index 4bae7242d42e7f..e6700a568cccec 100644 --- a/src/ui/public/directives/css_truncate.js +++ b/src/ui/public/directives/css_truncate.js @@ -1,48 +1,46 @@ import $ from 'jquery'; import _ from 'lodash'; -define(function (require) { - var module = require('ui/modules').get('kibana'); +var module = require('ui/modules').get('kibana'); - module.directive('cssTruncate', function ($timeout) { - return { - restrict: 'A', - scope: {}, - link: function ($scope, $elem, attrs) { +module.directive('cssTruncate', function ($timeout) { + return { + restrict: 'A', + scope: {}, + link: function ($scope, $elem, attrs) { - $elem.css({ - overflow: 'hidden', - 'white-space': 'nowrap', - 'text-overflow': 'ellipsis', - 'word-break': 'break-all', - }); + $elem.css({ + overflow: 'hidden', + 'white-space': 'nowrap', + 'text-overflow': 'ellipsis', + 'word-break': 'break-all', + }); - if (attrs.cssTruncateExpandable != null) { - $scope.$watch( - function () { return $elem.html(); }, - function () { - if ($elem[0].offsetWidth < $elem[0].scrollWidth) { - $elem.css({'cursor': 'pointer'}); - $elem.bind('click', function () { - $scope.toggle(); - }); - } + if (attrs.cssTruncateExpandable != null) { + $scope.$watch( + function () { return $elem.html(); }, + function () { + if ($elem[0].offsetWidth < $elem[0].scrollWidth) { + $elem.css({'cursor': 'pointer'}); + $elem.bind('click', function () { + $scope.toggle(); + }); } - ); - } - - $scope.toggle = function () { - if ($elem.css('white-space') !== 'normal') { - $elem.css({'white-space': 'normal'}); - } else { - $elem.css({'white-space': 'nowrap'}); } - }; - - $scope.$on('$destroy', function () { - $elem.unbind('click'); - $elem.unbind('mouseenter'); - }); + ); } - }; - }); + + $scope.toggle = function () { + if ($elem.css('white-space') !== 'normal') { + $elem.css({'white-space': 'normal'}); + } else { + $elem.css({'white-space': 'nowrap'}); + } + }; + + $scope.$on('$destroy', function () { + $elem.unbind('click'); + $elem.unbind('mouseenter'); + }); + } + }; }); diff --git a/src/ui/public/directives/field_name.js b/src/ui/public/directives/field_name.js index c692bd71fba3f0..2636d55f3be005 100644 --- a/src/ui/public/directives/field_name.js +++ b/src/ui/public/directives/field_name.js @@ -1,64 +1,62 @@ import 'ui/filters/short_dots'; -define(function (require) { - var module = require('ui/modules').get('kibana'); +var module = require('ui/modules').get('kibana'); - module.directive('fieldName', function ($compile, $rootScope, $filter) { - return { - restrict: 'AE', - scope: { - 'field': '=', - 'fieldName': '=', - 'fieldType': '=' - }, - link: function ($scope, $el) { +module.directive('fieldName', function ($compile, $rootScope, $filter) { + return { + restrict: 'AE', + scope: { + 'field': '=', + 'fieldName': '=', + 'fieldType': '=' + }, + link: function ($scope, $el) { - var typeIcon = function (fieldType) { - switch (fieldType) { - case 'source': - return ''; - case 'string': - return 't'; - case 'murmur3': - return 'h'; - case 'number': - return '#'; - case 'date': - return ''; - case 'ip': - return ''; - case 'geo_point': - return ''; - case 'boolean': - return ''; - case 'conflict': - return ''; - default: - return '?'; - } - }; + var typeIcon = function (fieldType) { + switch (fieldType) { + case 'source': + return ''; + case 'string': + return 't'; + case 'murmur3': + return 'h'; + case 'number': + return '#'; + case 'date': + return ''; + case 'ip': + return ''; + case 'geo_point': + return ''; + case 'boolean': + return ''; + case 'conflict': + return ''; + default: + return '?'; + } + }; - $rootScope.$watchMulti.call($scope, [ - 'field', - 'fieldName', - 'fieldType', - 'field.rowCount' - ], function () { + $rootScope.$watchMulti.call($scope, [ + 'field', + 'fieldName', + 'fieldType', + 'field.rowCount' + ], function () { - var type = $scope.field ? $scope.field.type : $scope.fieldType; - var name = $scope.field ? $scope.field.name : $scope.fieldName; - var results = $scope.field ? !$scope.field.rowCount && !$scope.field.scripted : false; - var scripted = $scope.field ? $scope.field.scripted : false; + var type = $scope.field ? $scope.field.type : $scope.fieldType; + var name = $scope.field ? $scope.field.name : $scope.fieldName; + var results = $scope.field ? !$scope.field.rowCount && !$scope.field.scripted : false; + var scripted = $scope.field ? $scope.field.scripted : false; - var displayName = $filter('shortDots')(name); + var displayName = $filter('shortDots')(name); - $el - .text(displayName) - .attr('title', name) - .toggleClass('no-results', results) - .toggleClass('scripted', scripted) - .prepend(typeIcon(type)); - }); - } - }; - }); + $el + .text(displayName) + .attr('title', name) + .toggleClass('no-results', results) + .toggleClass('scripted', scripted) + .prepend(typeIcon(type)); + }); + } + }; }); diff --git a/src/ui/public/directives/file_upload.js b/src/ui/public/directives/file_upload.js index 6a76f82d37bfeb..4db41189009dbd 100644 --- a/src/ui/public/directives/file_upload.js +++ b/src/ui/public/directives/file_upload.js @@ -1,33 +1,31 @@ import $ from 'jquery'; -define(function (require) { - var module = require('ui/modules').get('kibana'); +var module = require('ui/modules').get('kibana'); - module.directive('fileUpload', function ($parse) { - return { - restrict: 'A', - link: function ($scope, $elem, attrs) { - var onUpload = $parse(attrs.fileUpload); +module.directive('fileUpload', function ($parse) { + return { + restrict: 'A', + link: function ($scope, $elem, attrs) { + var onUpload = $parse(attrs.fileUpload); - var $fileInput = $(''); - $elem.after($fileInput); + var $fileInput = $(''); + $elem.after($fileInput); - $fileInput.on('change', function (e) { - var reader = new FileReader(); - reader.onload = function (e) { - $scope.$apply(function () { - onUpload($scope, {fileContents: e.target.result}); - }); - }; + $fileInput.on('change', function (e) { + var reader = new FileReader(); + reader.onload = function (e) { + $scope.$apply(function () { + onUpload($scope, {fileContents: e.target.result}); + }); + }; - var target = e.srcElement || e.target; - if (target && target.files && target.files.length) reader.readAsText(target.files[0]); - }); + var target = e.srcElement || e.target; + if (target && target.files && target.files.length) reader.readAsText(target.files[0]); + }); - $elem.on('click', function (e) { - $fileInput.val(null); - $fileInput.trigger('click'); - }); - } - }; - }); + $elem.on('click', function (e) { + $fileInput.val(null); + $fileInput.trigger('click'); + }); + } + }; }); diff --git a/src/ui/public/directives/inequality.js b/src/ui/public/directives/inequality.js index 68e83ed378d058..23e93cf02899dc 100644 --- a/src/ui/public/directives/inequality.js +++ b/src/ui/public/directives/inequality.js @@ -1,40 +1,38 @@ -define(function (require) { - function makeDirectiveDef(id, compare) { - return function ($parse) { - return { - require: 'ngModel', - link: function ($scope, $el, $attr, ngModel) { - var getBound = function () { return $parse($attr[id])(); }; - var defaultVal = { - 'greaterThan': -Infinity, - 'lessThan': Infinity - }[id]; +function makeDirectiveDef(id, compare) { + return function ($parse) { + return { + require: 'ngModel', + link: function ($scope, $el, $attr, ngModel) { + var getBound = function () { return $parse($attr[id])(); }; + var defaultVal = { + 'greaterThan': -Infinity, + 'lessThan': Infinity + }[id]; - ngModel.$parsers.push(validate); - ngModel.$formatters.push(validate); + ngModel.$parsers.push(validate); + ngModel.$formatters.push(validate); - $scope.$watch(getBound, function () { - validate(ngModel.$viewValue); - }); + $scope.$watch(getBound, function () { + validate(ngModel.$viewValue); + }); - function validate(val) { - var bound = !isNaN(getBound()) ? +getBound() : defaultVal; - var valid = !isNaN(bound) && !isNaN(val) && compare(val, bound); - ngModel.$setValidity(id, valid); - return val; - } + function validate(val) { + var bound = !isNaN(getBound()) ? +getBound() : defaultVal; + var valid = !isNaN(bound) && !isNaN(val) && compare(val, bound); + ngModel.$setValidity(id, valid); + return val; } - }; + } }; - } + }; +} - require('ui/modules') - .get('kibana') - .directive('greaterThan', makeDirectiveDef('greaterThan', function (a, b) { - return a > b; - })) - .directive('lessThan', makeDirectiveDef('lessThan', function (a, b) { - return a < b; - })); -}); +require('ui/modules') + .get('kibana') + .directive('greaterThan', makeDirectiveDef('greaterThan', function (a, b) { + return a > b; + })) + .directive('lessThan', makeDirectiveDef('lessThan', function (a, b) { + return a < b; + })); diff --git a/src/ui/public/directives/infinite_scroll.js b/src/ui/public/directives/infinite_scroll.js index eac4c9d2541a8f..32f09882b85416 100644 --- a/src/ui/public/directives/infinite_scroll.js +++ b/src/ui/public/directives/infinite_scroll.js @@ -1,47 +1,45 @@ import $ from 'jquery'; -define(function (require) { - var module = require('ui/modules').get('kibana'); +var module = require('ui/modules').get('kibana'); - module.directive('kbnInfiniteScroll', function () { - return { - restrict: 'E', - scope: { - more: '=' - }, - link: function ($scope, $element, attrs) { - var $window = $(window); - var checkTimer; +module.directive('kbnInfiniteScroll', function () { + return { + restrict: 'E', + scope: { + more: '=' + }, + link: function ($scope, $element, attrs) { + var $window = $(window); + var checkTimer; - function onScroll() { - if (!$scope.more) return; + function onScroll() { + if (!$scope.more) return; - var winHeight = $window.height(); - var winBottom = winHeight + $window.scrollTop(); - var elTop = $element.offset().top; - var remaining = elTop - winBottom; + var winHeight = $window.height(); + var winBottom = winHeight + $window.scrollTop(); + var elTop = $element.offset().top; + var remaining = elTop - winBottom; - if (remaining <= winHeight * 0.50) { - $scope[$scope.$$phase ? '$eval' : '$apply'](function () { - var more = $scope.more(); - }); - } - } - - function scheduleCheck() { - if (checkTimer) return; - checkTimer = setTimeout(function () { - checkTimer = null; - onScroll(); - }, 50); + if (remaining <= winHeight * 0.50) { + $scope[$scope.$$phase ? '$eval' : '$apply'](function () { + var more = $scope.more(); + }); } + } - $window.on('scroll', scheduleCheck); - $scope.$on('$destroy', function () { - clearTimeout(checkTimer); - $window.off('scroll', scheduleCheck); - }); - scheduleCheck(); + function scheduleCheck() { + if (checkTimer) return; + checkTimer = setTimeout(function () { + checkTimer = null; + onScroll(); + }, 50); } - }; - }); + + $window.on('scroll', scheduleCheck); + $scope.$on('$destroy', function () { + clearTimeout(checkTimer); + $window.off('scroll', scheduleCheck); + }); + scheduleCheck(); + } + }; }); diff --git a/src/ui/public/directives/info.js b/src/ui/public/directives/info.js index 0df7e7dbb9a801..e2a1ae9a32164b 100644 --- a/src/ui/public/directives/info.js +++ b/src/ui/public/directives/info.js @@ -1,19 +1,17 @@ import html from 'ui/partials/info.html'; -define(function (require) { - require('ui/modules') - .get('kibana') - .directive('kbnInfo', function () { - return { - restrict: 'E', - scope: { - info: '@', - placement: '@' - }, - template: html, - link: function ($scope) { - $scope.placement = $scope.placement || 'top'; - } - }; - }); -}); +require('ui/modules') + .get('kibana') + .directive('kbnInfo', function () { + return { + restrict: 'E', + scope: { + info: '@', + placement: '@' + }, + template: html, + link: function ($scope) { + $scope.placement = $scope.placement || 'top'; + } + }; + }); diff --git a/src/ui/public/directives/input_datetime.js b/src/ui/public/directives/input_datetime.js index 137da08d9988c7..8bca616c26166a 100644 --- a/src/ui/public/directives/input_datetime.js +++ b/src/ui/public/directives/input_datetime.js @@ -1,34 +1,32 @@ import $ from 'jquery'; import _ from 'lodash'; import moment from 'moment'; -define(function (require) { - var module = require('ui/modules').get('kibana'); +var module = require('ui/modules').get('kibana'); - module.directive('inputDatetime', function () { - return { - restrict: 'A', - require: 'ngModel', - link: function ($scope, $elem, attrs, ngModel) { +module.directive('inputDatetime', function () { + return { + restrict: 'A', + require: 'ngModel', + link: function ($scope, $elem, attrs, ngModel) { - var format = 'YYYY-MM-DD HH:mm:ss.SSS'; + var format = 'YYYY-MM-DD HH:mm:ss.SSS'; - $elem.after('
      ' + format + '
      '); + $elem.after('
      ' + format + '
      '); - // What should I make with the input from the user? - var fromUser = function (text) { - var parsed = moment(text, format); - return parsed.isValid() ? parsed : undefined; - }; + // What should I make with the input from the user? + var fromUser = function (text) { + var parsed = moment(text, format); + return parsed.isValid() ? parsed : undefined; + }; - // How should I present the data back to the user in the input field? - var toUser = function (datetime) { - return moment(datetime).format(format); - }; + // How should I present the data back to the user in the input field? + var toUser = function (datetime) { + return moment(datetime).format(format); + }; - ngModel.$parsers.push(fromUser); - ngModel.$formatters.push(toUser); + ngModel.$parsers.push(fromUser); + ngModel.$formatters.push(toUser); - } - }; - }); + } + }; }); diff --git a/src/ui/public/directives/input_focus.js b/src/ui/public/directives/input_focus.js index 99cf9dd5d08543..43f825c87b0659 100644 --- a/src/ui/public/directives/input_focus.js +++ b/src/ui/public/directives/input_focus.js @@ -1,15 +1,13 @@ -define(function (require) { - var module = require('ui/modules').get('kibana'); +var module = require('ui/modules').get('kibana'); - module.directive('inputFocus', function ($timeout) { - return { - restrict: 'A', - link: function ($scope, $elem, attrs) { - $timeout(function () { - $elem.focus(); - if (attrs.inputFocus === 'select') $elem.select(); - }); - } - }; - }); +module.directive('inputFocus', function ($timeout) { + return { + restrict: 'A', + link: function ($scope, $elem, attrs) { + $timeout(function () { + $elem.focus(); + if (attrs.inputFocus === 'select') $elem.select(); + }); + } + }; }); diff --git a/src/ui/public/directives/input_whole_number.js b/src/ui/public/directives/input_whole_number.js index 1b77b66772ab7b..cd35678b4c20d5 100644 --- a/src/ui/public/directives/input_whole_number.js +++ b/src/ui/public/directives/input_whole_number.js @@ -1,19 +1,17 @@ -define(function (require) { - var module = require('ui/modules').get('kibana'); +var module = require('ui/modules').get('kibana'); - module.directive('inputWholeNumber', function () { - return { - restrict: 'A', - require: 'ngModel', - link: function ($scope, $elem, attrs, ngModel) { - ngModel.$parsers.push(checkWholeNumber); - ngModel.$formatters.push(checkWholeNumber); +module.directive('inputWholeNumber', function () { + return { + restrict: 'A', + require: 'ngModel', + link: function ($scope, $elem, attrs, ngModel) { + ngModel.$parsers.push(checkWholeNumber); + ngModel.$formatters.push(checkWholeNumber); - function checkWholeNumber(value) { - ngModel.$setValidity('whole', value % 1 === 0); - return value; - } + function checkWholeNumber(value) { + ngModel.$setValidity('whole', value % 1 === 0); + return value; } - }; - }); + } + }; }); diff --git a/src/ui/public/directives/json_input.js b/src/ui/public/directives/json_input.js index 7828bd38b1f155..d11e750edfa426 100644 --- a/src/ui/public/directives/json_input.js +++ b/src/ui/public/directives/json_input.js @@ -1,33 +1,31 @@ import _ from 'lodash'; import angular from 'angular'; -define(function (require) { - require('ui/modules') - .get('kibana') - .directive('jsonInput', function () { - return { - restrict: 'A', - require: 'ngModel', - link: function (scope, $el, attrs, ngModelCntrl) { - ngModelCntrl.$formatters.push(toJSON); - ngModelCntrl.$parsers.push(fromJSON); +require('ui/modules') +.get('kibana') +.directive('jsonInput', function () { + return { + restrict: 'A', + require: 'ngModel', + link: function (scope, $el, attrs, ngModelCntrl) { + ngModelCntrl.$formatters.push(toJSON); + ngModelCntrl.$parsers.push(fromJSON); - function fromJSON(value) { - try { - value = JSON.parse(value); - var validity = !scope.$eval(attrs.requireKeys) ? true : _.keys(value).length > 0; - ngModelCntrl.$setValidity('json', validity); - } catch (e) { - ngModelCntrl.$setValidity('json', false); - } - return value; - } - - function toJSON(value) { - return angular.toJson(value, 2); + function fromJSON(value) { + try { + value = JSON.parse(value); + var validity = !scope.$eval(attrs.requireKeys) ? true : _.keys(value).length > 0; + ngModelCntrl.$setValidity('json', validity); + } catch (e) { + ngModelCntrl.$setValidity('json', false); } + return value; } - }; - }); + function toJSON(value) { + return angular.toJson(value, 2); + } + } + }; }); + diff --git a/src/ui/public/directives/paginate.js b/src/ui/public/directives/paginate.js index 13e16769cb251d..e4b6c90267e224 100644 --- a/src/ui/public/directives/paginate.js +++ b/src/ui/public/directives/paginate.js @@ -1,198 +1,196 @@ import _ from 'lodash'; -define(function (require) { - - var PER_PAGE_DEFAULT = 10; - - require('ui/modules').get('kibana') - .directive('paginate', function ($parse, $compile) { - return { - restrict: 'E', - scope: true, - link: { - pre: function ($scope, $el, attrs) { - if (_.isUndefined(attrs.bottomControls)) attrs.bottomControls = true; - if ($el.find('paginate-controls.paginate-bottom').size() === 0 && attrs.bottomControls) { - $el.append($compile('')($scope)); - } - }, - post: function ($scope, $el, attrs) { - if (_.isUndefined(attrs.topControls)) attrs.topControls = false; - if ($el.find('paginate-controls.paginate-top').size() === 0 && attrs.topControls) { - $el.prepend($compile('')($scope)); - } - - var paginate = $scope.paginate; - // add some getters to the controller powered by attributes - paginate.getList = $parse(attrs.list); - paginate.perPageProp = attrs.perPageProp; - - if (attrs.perPage) { - paginate.perPage = attrs.perPage; - $scope.showSelector = false; - } else { - $scope.showSelector = true; - } - - paginate.otherWidthGetter = $parse(attrs.otherWidth); - - paginate.init(); +var PER_PAGE_DEFAULT = 10; + +require('ui/modules').get('kibana') +.directive('paginate', function ($parse, $compile) { + return { + restrict: 'E', + scope: true, + link: { + pre: function ($scope, $el, attrs) { + if (_.isUndefined(attrs.bottomControls)) attrs.bottomControls = true; + if ($el.find('paginate-controls.paginate-bottom').size() === 0 && attrs.bottomControls) { + $el.append($compile('')($scope)); } }, - controllerAs: 'paginate', - controller: function ($scope) { - var self = this; - var ALL = 0; + post: function ($scope, $el, attrs) { + if (_.isUndefined(attrs.topControls)) attrs.topControls = false; + if ($el.find('paginate-controls.paginate-top').size() === 0 && attrs.topControls) { + $el.prepend($compile('')($scope)); + } - self.sizeOptions = [ - { title: '10', value: 10 }, - { title: '25', value: 25 }, - { title: '100', value: 100 }, - { title: 'All', value: ALL } - ]; + var paginate = $scope.paginate; - // setup the watchers, called in the post-link function - self.init = function () { + // add some getters to the controller powered by attributes + paginate.getList = $parse(attrs.list); + paginate.perPageProp = attrs.perPageProp; - self.perPage = _.parseInt(self.perPage) || $scope[self.perPageProp]; + if (attrs.perPage) { + paginate.perPage = attrs.perPage; + $scope.showSelector = false; + } else { + $scope.showSelector = true; + } - $scope.$watchMulti([ - 'paginate.perPage', - self.perPageProp, - self.otherWidthGetter - ], function (vals, oldVals) { - var intChanges = vals[0] !== oldVals[0]; - var extChanges = vals[1] !== oldVals[1]; - - if (intChanges) { - if (!setPerPage(self.perPage)) { - // if we are not able to set the external value, - // render now, otherwise wait for the external value - // to trigger the watcher again - self.renderList(); - } - return; - } + paginate.otherWidthGetter = $parse(attrs.otherWidth); - self.perPage = _.parseInt(self.perPage) || $scope[self.perPageProp]; - if (self.perPage == null) { - self.perPage = ALL; - return; + paginate.init(); + } + }, + controllerAs: 'paginate', + controller: function ($scope) { + var self = this; + var ALL = 0; + + self.sizeOptions = [ + { title: '10', value: 10 }, + { title: '25', value: 25 }, + { title: '100', value: 100 }, + { title: 'All', value: ALL } + ]; + + // setup the watchers, called in the post-link function + self.init = function () { + + self.perPage = _.parseInt(self.perPage) || $scope[self.perPageProp]; + + $scope.$watchMulti([ + 'paginate.perPage', + self.perPageProp, + self.otherWidthGetter + ], function (vals, oldVals) { + var intChanges = vals[0] !== oldVals[0]; + var extChanges = vals[1] !== oldVals[1]; + + if (intChanges) { + if (!setPerPage(self.perPage)) { + // if we are not able to set the external value, + // render now, otherwise wait for the external value + // to trigger the watcher again + self.renderList(); } + return; + } - self.renderList(); - }); + self.perPage = _.parseInt(self.perPage) || $scope[self.perPageProp]; + if (self.perPage == null) { + self.perPage = ALL; + return; + } - $scope.$watch('page', self.changePage); - $scope.$watchCollection(self.getList, function (list) { - $scope.list = list; - self.renderList(); - }); - }; + self.renderList(); + }); - self.goToPage = function (number) { - if (number) { - if (number.hasOwnProperty('number')) number = number.number; - $scope.page = $scope.pages[number - 1] || $scope.pages[0]; - } - }; + $scope.$watch('page', self.changePage); + $scope.$watchCollection(self.getList, function (list) { + $scope.list = list; + self.renderList(); + }); + }; - self.renderList = function () { - $scope.pages = []; - if (!$scope.list) return; + self.goToPage = function (number) { + if (number) { + if (number.hasOwnProperty('number')) number = number.number; + $scope.page = $scope.pages[number - 1] || $scope.pages[0]; + } + }; - var perPage = _.parseInt(self.perPage); - var count = perPage ? Math.ceil($scope.list.length / perPage) : 1; + self.renderList = function () { + $scope.pages = []; + if (!$scope.list) return; - _.times(count, function (i) { - var page; + var perPage = _.parseInt(self.perPage); + var count = perPage ? Math.ceil($scope.list.length / perPage) : 1; - if (perPage) { - var start = perPage * i; - page = $scope.list.slice(start, start + perPage); - } else { - page = $scope.list.slice(0); - } + _.times(count, function (i) { + var page; - page.number = i + 1; - page.i = i; + if (perPage) { + var start = perPage * i; + page = $scope.list.slice(start, start + perPage); + } else { + page = $scope.list.slice(0); + } - page.count = count; - page.first = page.number === 1; - page.last = page.number === count; + page.number = i + 1; + page.i = i; - page.prev = $scope.pages[i - 1]; - if (page.prev) page.prev.next = page; + page.count = count; + page.first = page.number === 1; + page.last = page.number === count; - $scope.pages.push(page); - }); + page.prev = $scope.pages[i - 1]; + if (page.prev) page.prev.next = page; - // set the new page, or restore the previous page number - if ($scope.page && $scope.page.i < $scope.pages.length) { - $scope.page = $scope.pages[$scope.page.i]; - } else { - $scope.page = $scope.pages[0]; - } - }; + $scope.pages.push(page); + }); - self.changePage = function (page) { - if (!page) { - $scope.otherPages = null; - return; - } + // set the new page, or restore the previous page number + if ($scope.page && $scope.page.i < $scope.pages.length) { + $scope.page = $scope.pages[$scope.page.i]; + } else { + $scope.page = $scope.pages[0]; + } + }; - // setup the list of the other pages to link to - $scope.otherPages = []; - var width = +self.otherWidthGetter($scope) || 5; - var left = page.i - Math.round((width - 1) / 2); - var right = left + width - 1; + self.changePage = function (page) { + if (!page) { + $scope.otherPages = null; + return; + } - // shift neg count from left to right - if (left < 0) { - right += 0 - left; - left = 0; - } + // setup the list of the other pages to link to + $scope.otherPages = []; + var width = +self.otherWidthGetter($scope) || 5; + var left = page.i - Math.round((width - 1) / 2); + var right = left + width - 1; - // shift extra right nums to left - var lastI = page.count - 1; - if (right > lastI) { - right = lastI; - left = right - width + 1; - } + // shift neg count from left to right + if (left < 0) { + right += 0 - left; + left = 0; + } - for (var i = left; i <= right; i++) { - var other = $scope.pages[i]; + // shift extra right nums to left + var lastI = page.count - 1; + if (right > lastI) { + right = lastI; + left = right - width + 1; + } - if (!other) continue; + for (var i = left; i <= right; i++) { + var other = $scope.pages[i]; - $scope.otherPages.push(other); - if (other.last) $scope.otherPages.containsLast = true; - if (other.first) $scope.otherPages.containsFirst = true; - } - }; + if (!other) continue; - function setPerPage(val) { - var $ppParent = $scope; + $scope.otherPages.push(other); + if (other.last) $scope.otherPages.containsLast = true; + if (other.first) $scope.otherPages.containsFirst = true; + } + }; - while ($ppParent && !_.has($ppParent, self.perPageProp)) { - $ppParent = $ppParent.$parent; - } + function setPerPage(val) { + var $ppParent = $scope; - if ($ppParent) { - $ppParent[self.perPageProp] = val; - return true; - } + while ($ppParent && !_.has($ppParent, self.perPageProp)) { + $ppParent = $ppParent.$parent; + } + + if ($ppParent) { + $ppParent[self.perPageProp] = val; + return true; } } - }; - }) - .directive('paginateControls', function () { - // this directive is automatically added by paginate if not found within it's $el - return { - restrict: 'E', - template: require('ui/partials/paginate_controls.html') - }; - }); + } + }; +}) +.directive('paginateControls', function () { + // this directive is automatically added by paginate if not found within it's $el + return { + restrict: 'E', + template: require('ui/partials/paginate_controls.html') + }; +}); -}); diff --git a/src/ui/public/directives/pretty_duration.js b/src/ui/public/directives/pretty_duration.js index a720c935a85b31..ddb1f3d36bb18d 100644 --- a/src/ui/public/directives/pretty_duration.js +++ b/src/ui/public/directives/pretty_duration.js @@ -3,73 +3,71 @@ import dateMath from 'ui/utils/dateMath'; import moment from 'moment'; import 'ui/timepicker/quick_ranges'; import 'ui/timepicker/time_units'; -define(function (require) { - var module = require('ui/modules').get('kibana'); +var module = require('ui/modules').get('kibana'); - module.directive('prettyDuration', function (config, quickRanges, timeUnits) { - return { - restrict: 'E', - scope: { - from: '=', - to: '=' - }, - link: function ($scope, $elem) { - var dateFormat = config.get('dateFormat'); +module.directive('prettyDuration', function (config, quickRanges, timeUnits) { + return { + restrict: 'E', + scope: { + from: '=', + to: '=' + }, + link: function ($scope, $elem) { + var dateFormat = config.get('dateFormat'); - var lookupByRange = {}; - _.each(quickRanges, function (frame) { - lookupByRange[frame.from + ' to ' + frame.to] = frame; - }); + var lookupByRange = {}; + _.each(quickRanges, function (frame) { + lookupByRange[frame.from + ' to ' + frame.to] = frame; + }); - function stringify() { - var text; - // If both parts are date math, try to look up a reasonable string - if ($scope.from && $scope.to && !moment.isMoment($scope.from) && !moment.isMoment($scope.to)) { - var tryLookup = lookupByRange[$scope.from.toString() + ' to ' + $scope.to.toString()]; - if (tryLookup) { - $elem.text(tryLookup.display); - } else { - var fromParts = $scope.from.toString().split('-'); - if ($scope.to.toString() === 'now' && fromParts[0] === 'now' && fromParts[1]) { - var rounded = fromParts[1].split('/'); - text = 'Last ' + rounded[0]; - if (rounded[1]) { - text = text + ' rounded to the ' + timeUnits[rounded[1]]; - } - $elem.text(text); - } else { - cantLookup(); + function stringify() { + var text; + // If both parts are date math, try to look up a reasonable string + if ($scope.from && $scope.to && !moment.isMoment($scope.from) && !moment.isMoment($scope.to)) { + var tryLookup = lookupByRange[$scope.from.toString() + ' to ' + $scope.to.toString()]; + if (tryLookup) { + $elem.text(tryLookup.display); + } else { + var fromParts = $scope.from.toString().split('-'); + if ($scope.to.toString() === 'now' && fromParts[0] === 'now' && fromParts[1]) { + var rounded = fromParts[1].split('/'); + text = 'Last ' + rounded[0]; + if (rounded[1]) { + text = text + ' rounded to the ' + timeUnits[rounded[1]]; } + $elem.text(text); + } else { + cantLookup(); } - // If at least one part is a moment, try to make pretty strings by parsing date math - } else { - cantLookup(); } - }; + // If at least one part is a moment, try to make pretty strings by parsing date math + } else { + cantLookup(); + } + }; - function cantLookup() { - var display = {}; - _.each(['from', 'to'], function (time) { - if (moment.isMoment($scope[time])) { - display[time] = $scope[time].format(dateFormat); + function cantLookup() { + var display = {}; + _.each(['from', 'to'], function (time) { + if (moment.isMoment($scope[time])) { + display[time] = $scope[time].format(dateFormat); + } else { + if ($scope[time] === 'now') { + display[time] = 'now'; } else { - if ($scope[time] === 'now') { - display[time] = 'now'; - } else { - var tryParse = dateMath.parse($scope[time], time === 'to' ? true : false); - display[time] = moment.isMoment(tryParse) ? '~ ' + tryParse.fromNow() : $scope[time]; - } + var tryParse = dateMath.parse($scope[time], time === 'to' ? true : false); + display[time] = moment.isMoment(tryParse) ? '~ ' + tryParse.fromNow() : $scope[time]; } - }); - $elem.text(display.from + ' to ' + display.to); - }; - - $scope.$watch('from', stringify); - $scope.$watch('to', stringify); + } + }); + $elem.text(display.from + ' to ' + display.to); + }; - } - }; - }); + $scope.$watch('from', stringify); + $scope.$watch('to', stringify); + } + }; }); + diff --git a/src/ui/public/directives/rows.js b/src/ui/public/directives/rows.js index ce48cae84af0c9..7962a13761fd63 100644 --- a/src/ui/public/directives/rows.js +++ b/src/ui/public/directives/rows.js @@ -2,102 +2,100 @@ import $ from 'jquery'; import _ from 'lodash'; import AggConfigResult from 'ui/Vis/AggConfigResult'; import FilterBarFilterBarClickHandlerProvider from 'ui/filter_bar/filter_bar_click_handler'; -define(function (require) { - var module = require('ui/modules').get('kibana'); +var module = require('ui/modules').get('kibana'); - module.directive('kbnRows', function ($compile, $rootScope, getAppState, Private) { - var filterBarClickHandler = Private(FilterBarFilterBarClickHandlerProvider); - return { - restrict: 'A', - link: function ($scope, $el, attr) { - function addCell($tr, contents) { - var $cell = $(document.createElement('td')); +module.directive('kbnRows', function ($compile, $rootScope, getAppState, Private) { + var filterBarClickHandler = Private(FilterBarFilterBarClickHandlerProvider); + return { + restrict: 'A', + link: function ($scope, $el, attr) { + function addCell($tr, contents) { + var $cell = $(document.createElement('td')); - // TODO: It would be better to actually check the type of the field, but we don't have - // access to it here. This may become a problem with the switch to BigNumber - if (_.isNumeric(contents)) $cell.addClass('numeric-value'); + // TODO: It would be better to actually check the type of the field, but we don't have + // access to it here. This may become a problem with the switch to BigNumber + if (_.isNumeric(contents)) $cell.addClass('numeric-value'); - var createAggConfigResultCell = function (aggConfigResult) { - var $cell = $(document.createElement('td')); - var $state = getAppState(); - var clickHandler = filterBarClickHandler($state); - $cell.scope = $scope.$new(); - $cell.addClass('cell-hover'); - $cell.attr('ng-click', 'clickHandler($event)'); - $cell.scope.clickHandler = function (event) { - if ($(event.target).is('a')) return; // Don't add filter if a link was clicked - clickHandler({ point: { aggConfigResult: aggConfigResult } }); - }; - return $compile($cell)($cell.scope); + var createAggConfigResultCell = function (aggConfigResult) { + var $cell = $(document.createElement('td')); + var $state = getAppState(); + var clickHandler = filterBarClickHandler($state); + $cell.scope = $scope.$new(); + $cell.addClass('cell-hover'); + $cell.attr('ng-click', 'clickHandler($event)'); + $cell.scope.clickHandler = function (event) { + if ($(event.target).is('a')) return; // Don't add filter if a link was clicked + clickHandler({ point: { aggConfigResult: aggConfigResult } }); }; + return $compile($cell)($cell.scope); + }; - if (contents instanceof AggConfigResult) { - if (contents.type === 'bucket' && contents.aggConfig.field() && contents.aggConfig.field().filterable) { - $cell = createAggConfigResultCell(contents); - } - contents = contents.toString('html'); + if (contents instanceof AggConfigResult) { + if (contents.type === 'bucket' && contents.aggConfig.field() && contents.aggConfig.field().filterable) { + $cell = createAggConfigResultCell(contents); } + contents = contents.toString('html'); + } - if (_.isObject(contents)) { - if (contents.attr) { - $cell.attr(contents.attr); - } + if (_.isObject(contents)) { + if (contents.attr) { + $cell.attr(contents.attr); + } - if (contents.class) { - $cell.addClass(contents.class); - } + if (contents.class) { + $cell.addClass(contents.class); + } - if (contents.scope) { - $cell = $compile($cell.html(contents.markup))(contents.scope); - } else { - $cell.html(contents.markup); - } + if (contents.scope) { + $cell = $compile($cell.html(contents.markup))(contents.scope); } else { - if (contents === '') { - $cell.html(' '); - } else { - $cell.html(contents); - } + $cell.html(contents.markup); + } + } else { + if (contents === '') { + $cell.html(' '); + } else { + $cell.html(contents); } - - $tr.append($cell); } - function maxRowSize(max, row) { - return Math.max(max, row.length); - } + $tr.append($cell); + } - $scope.$watchMulti([ - attr.kbnRows, - attr.kbnRowsMin - ], function (vals) { - var rows = vals[0]; - var min = vals[1]; + function maxRowSize(max, row) { + return Math.max(max, row.length); + } - $el.empty(); + $scope.$watchMulti([ + attr.kbnRows, + attr.kbnRowsMin + ], function (vals) { + var rows = vals[0]; + var min = vals[1]; - if (!_.isArray(rows)) rows = []; - var width = rows.reduce(maxRowSize, 0); + $el.empty(); - if (isFinite(min) && rows.length < min) { - // clone the rows so that we can add elements to it without upsetting the original - rows = _.clone(rows); - // crate the empty row which will be pushed into the row list over and over - var emptyRow = new Array(width); - // fill the empty row with values - _.times(width, function (i) { emptyRow[i] = ''; }); - // push as many empty rows into the row array as needed - _.times(min - rows.length, function () { rows.push(emptyRow); }); - } + if (!_.isArray(rows)) rows = []; + var width = rows.reduce(maxRowSize, 0); - rows.forEach(function (row) { - var $tr = $(document.createElement('tr')).appendTo($el); - row.forEach(function (cell) { - addCell($tr, cell); - }); + if (isFinite(min) && rows.length < min) { + // clone the rows so that we can add elements to it without upsetting the original + rows = _.clone(rows); + // crate the empty row which will be pushed into the row list over and over + var emptyRow = new Array(width); + // fill the empty row with values + _.times(width, function (i) { emptyRow[i] = ''; }); + // push as many empty rows into the row array as needed + _.times(min - rows.length, function () { rows.push(emptyRow); }); + } + + rows.forEach(function (row) { + var $tr = $(document.createElement('tr')).appendTo($el); + row.forEach(function (cell) { + addCell($tr, cell); }); }); - } - }; - }); + }); + } + }; }); diff --git a/src/ui/public/directives/saved_object_finder.js b/src/ui/public/directives/saved_object_finder.js index 020fb9d87c1e7a..aabcbfc2732d63 100644 --- a/src/ui/public/directives/saved_object_finder.js +++ b/src/ui/public/directives/saved_object_finder.js @@ -2,259 +2,257 @@ import _ from 'lodash'; import rison from 'ui/utils/rison'; import keymap from 'ui/utils/key_map'; import SavedObjectsSavedObjectRegistryProvider from 'ui/saved_objects/saved_object_registry'; -define(function (require) { - var module = require('ui/modules').get('kibana'); +var module = require('ui/modules').get('kibana'); + +module.directive('savedObjectFinder', function ($location, $injector, kbnUrl, Private) { + + var services = Private(SavedObjectsSavedObjectRegistryProvider).byLoaderPropertiesName; + + return { + restrict: 'E', + scope: { + type: '@', + title: '@?', + // optional make-url attr, sets the userMakeUrl in our scope + userMakeUrl: '=?makeUrl', + // optional on-choose attr, sets the userOnChoose in our scope + userOnChoose: '=?onChoose' + }, + template: require('ui/partials/saved_object_finder.html'), + controllerAs: 'finder', + controller: function ($scope, $element, $timeout) { + var self = this; + + // the text input element + var $input = $element.find('input[ng-model=filter]'); + + // the list that will hold the suggestions + var $list = $element.find('ul'); + + // the current filter string, used to check that returned results are still useful + var currentFilter = $scope.filter; + + // the most recently entered search/filter + var prevSearch; + + // the list of hits, used to render display + self.hits = []; + + self.service = services[$scope.type]; + self.properties = self.service.loaderProperties; + + filterResults(); + + /** + * Passed the hit objects and will determine if the + * hit should have a url in the UI, returns it if so + * @return {string|null} - the url or nothing + */ + self.makeUrl = function (hit) { + if ($scope.userMakeUrl) { + return $scope.userMakeUrl(hit); + } - module.directive('savedObjectFinder', function ($location, $injector, kbnUrl, Private) { + if (!$scope.userOnChoose) { + return hit.url; + } - var services = Private(SavedObjectsSavedObjectRegistryProvider).byLoaderPropertiesName; + return '#'; + }; - return { - restrict: 'E', - scope: { - type: '@', - title: '@?', - // optional make-url attr, sets the userMakeUrl in our scope - userMakeUrl: '=?makeUrl', - // optional on-choose attr, sets the userOnChoose in our scope - userOnChoose: '=?onChoose' - }, - template: require('ui/partials/saved_object_finder.html'), - controllerAs: 'finder', - controller: function ($scope, $element, $timeout) { - var self = this; + self.preventClick = function ($event) { + $event.preventDefault(); + }; - // the text input element - var $input = $element.find('input[ng-model=filter]'); + /** + * Called when a hit object is clicked, can override the + * url behavior if necessary. + */ + self.onChoose = function (hit, $event) { + if ($scope.userOnChoose) { + $scope.userOnChoose(hit, $event); + } - // the list that will hold the suggestions - var $list = $element.find('ul'); + var url = self.makeUrl(hit); + if (!url || url === '#' || url.charAt(0) !== '#') return; - // the current filter string, used to check that returned results are still useful - var currentFilter = $scope.filter; + $event.preventDefault(); - // the most recently entered search/filter - var prevSearch; + // we want the '/path', not '#/path' + kbnUrl.change(url.substr(1)); + }; - // the list of hits, used to render display - self.hits = []; + $scope.$watch('filter', function (newFilter) { + // ensure that the currentFilter changes from undefined to '' + // which triggers + currentFilter = newFilter || ''; + filterResults(); + }); - self.service = services[$scope.type]; - self.properties = self.service.loaderProperties; + //manages the state of the keyboard selector + self.selector = { + enabled: false, + index: -1 + }; - filterResults(); + //key handler for the filter text box + self.filterKeyDown = function ($event) { + switch (keymap[$event.keyCode]) { + case 'tab': + if (self.hitCount === 0) return; - /** - * Passed the hit objects and will determine if the - * hit should have a url in the UI, returns it if so - * @return {string|null} - the url or nothing - */ - self.makeUrl = function (hit) { - if ($scope.userMakeUrl) { - return $scope.userMakeUrl(hit); - } + self.selector.index = 0; + self.selector.enabled = true; - if (!$scope.userOnChoose) { - return hit.url; - } + selectTopHit(); - return '#'; - }; + $event.preventDefault(); + break; + case 'enter': + if (self.hitCount !== 1) return; - self.preventClick = function ($event) { - $event.preventDefault(); - }; + var hit = self.hits[0]; + if (!hit) return; - /** - * Called when a hit object is clicked, can override the - * url behavior if necessary. - */ - self.onChoose = function (hit, $event) { - if ($scope.userOnChoose) { - $scope.userOnChoose(hit, $event); - } + self.onChoose(hit, $event); + $event.preventDefault(); + break; + } + }; - var url = self.makeUrl(hit); - if (!url || url === '#' || url.charAt(0) !== '#') return; + //key handler for the list items + self.hitKeyDown = function ($event, page, paginate) { + switch (keymap[$event.keyCode]) { + case 'tab': + if (!self.selector.enabled) break; - $event.preventDefault(); + self.selector.index = -1; + self.selector.enabled = false; - // we want the '/path', not '#/path' - kbnUrl.change(url.substr(1)); - }; + //if the user types shift-tab return to the textbox + //if the user types tab, set the focus to the currently selected hit. + if ($event.shiftKey) { + $input.focus(); + } else { + $list.find('li.active a').focus(); + } - $scope.$watch('filter', function (newFilter) { - // ensure that the currentFilter changes from undefined to '' - // which triggers - currentFilter = newFilter || ''; - filterResults(); - }); + $event.preventDefault(); + break; + case 'down': + if (!self.selector.enabled) break; - //manages the state of the keyboard selector - self.selector = { - enabled: false, - index: -1 - }; + if (self.selector.index + 1 < page.length) { + self.selector.index += 1; + } + $event.preventDefault(); + break; + case 'up': + if (!self.selector.enabled) break; - //key handler for the filter text box - self.filterKeyDown = function ($event) { - switch (keymap[$event.keyCode]) { - case 'tab': - if (self.hitCount === 0) return; + if (self.selector.index > 0) { + self.selector.index -= 1; + } + $event.preventDefault(); + break; + case 'right': + if (!self.selector.enabled) break; + if (page.number < page.count) { + paginate.goToPage(page.number + 1); self.selector.index = 0; - self.selector.enabled = true; - selectTopHit(); + } + $event.preventDefault(); + break; + case 'left': + if (!self.selector.enabled) break; - $event.preventDefault(); - break; - case 'enter': - if (self.hitCount !== 1) return; - - var hit = self.hits[0]; - if (!hit) return; - - self.onChoose(hit, $event); - $event.preventDefault(); - break; - } - }; - - //key handler for the list items - self.hitKeyDown = function ($event, page, paginate) { - switch (keymap[$event.keyCode]) { - case 'tab': - if (!self.selector.enabled) break; - - self.selector.index = -1; - self.selector.enabled = false; - - //if the user types shift-tab return to the textbox - //if the user types tab, set the focus to the currently selected hit. - if ($event.shiftKey) { - $input.focus(); - } else { - $list.find('li.active a').focus(); - } - - $event.preventDefault(); - break; - case 'down': - if (!self.selector.enabled) break; - - if (self.selector.index + 1 < page.length) { - self.selector.index += 1; - } - $event.preventDefault(); - break; - case 'up': - if (!self.selector.enabled) break; - - if (self.selector.index > 0) { - self.selector.index -= 1; - } - $event.preventDefault(); - break; - case 'right': - if (!self.selector.enabled) break; - - if (page.number < page.count) { - paginate.goToPage(page.number + 1); - self.selector.index = 0; - selectTopHit(); - } - $event.preventDefault(); - break; - case 'left': - if (!self.selector.enabled) break; - - if (page.number > 1) { - paginate.goToPage(page.number - 1); - self.selector.index = 0; - selectTopHit(); - } - $event.preventDefault(); - break; - case 'escape': - if (!self.selector.enabled) break; - - $input.focus(); - $event.preventDefault(); - break; - case 'enter': - if (!self.selector.enabled) break; - - var hitIndex = ((page.number - 1) * paginate.perPage) + self.selector.index; - var hit = self.hits[hitIndex]; - if (!hit) break; - - self.onChoose(hit, $event); - $event.preventDefault(); - break; - case 'shift': - break; - default: - $input.focus(); - break; - } - }; - - self.hitBlur = function ($event) { - self.selector.index = -1; - self.selector.enabled = false; - }; - - self.manageObjects = function (type) { - $location.url('/settings/objects?_a=' + rison.encode({tab: type})); - }; - - self.hitCountNoun = function () { - return ((self.hitCount === 1) ? self.properties.noun : self.properties.nouns).toLowerCase(); - }; - - function selectTopHit() { - setTimeout(function () { - //triggering a focus event kicks off a new angular digest cycle. - $list.find('a:first').focus(); - }, 0); - } - - function filterResults() { - if (!self.service) return; - if (!self.properties) return; - - // track the filter that we use for this search, - // but ensure that we don't search for the same - // thing twice. This is called from multiple places - // and needs to be smart about when it actually searches - var filter = currentFilter; - if (prevSearch === filter) return; - - prevSearch = filter; - self.service.find(filter) - .then(function (hits) { - // ensure that we don't display old results - // as we can't really cancel requests - if (currentFilter === filter) { - self.hitCount = hits.total; - self.hits = _.sortBy(hits.hits, 'title'); + if (page.number > 1) { + paginate.goToPage(page.number - 1); + self.selector.index = 0; + selectTopHit(); } - }); + $event.preventDefault(); + break; + case 'escape': + if (!self.selector.enabled) break; + + $input.focus(); + $event.preventDefault(); + break; + case 'enter': + if (!self.selector.enabled) break; + + var hitIndex = ((page.number - 1) * paginate.perPage) + self.selector.index; + var hit = self.hits[hitIndex]; + if (!hit) break; + + self.onChoose(hit, $event); + $event.preventDefault(); + break; + case 'shift': + break; + default: + $input.focus(); + break; } + }; + + self.hitBlur = function ($event) { + self.selector.index = -1; + self.selector.enabled = false; + }; + + self.manageObjects = function (type) { + $location.url('/settings/objects?_a=' + rison.encode({tab: type})); + }; + + self.hitCountNoun = function () { + return ((self.hitCount === 1) ? self.properties.noun : self.properties.nouns).toLowerCase(); + }; + + function selectTopHit() { + setTimeout(function () { + //triggering a focus event kicks off a new angular digest cycle. + $list.find('a:first').focus(); + }, 0); + } + + function filterResults() { + if (!self.service) return; + if (!self.properties) return; + + // track the filter that we use for this search, + // but ensure that we don't search for the same + // thing twice. This is called from multiple places + // and needs to be smart about when it actually searches + var filter = currentFilter; + if (prevSearch === filter) return; + + prevSearch = filter; + self.service.find(filter) + .then(function (hits) { + // ensure that we don't display old results + // as we can't really cancel requests + if (currentFilter === filter) { + self.hitCount = hits.total; + self.hits = _.sortBy(hits.hits, 'title'); + } + }); + } - function scrollIntoView($element, snapTop) { - var el = $element[0]; + function scrollIntoView($element, snapTop) { + var el = $element[0]; - if (!el) return; + if (!el) return; - if ('scrollIntoViewIfNeeded' in el) { - el.scrollIntoViewIfNeeded(snapTop); - } else if ('scrollIntoView' in el) { - el.scrollIntoView(snapTop); - } + if ('scrollIntoViewIfNeeded' in el) { + el.scrollIntoViewIfNeeded(snapTop); + } else if ('scrollIntoView' in el) { + el.scrollIntoView(snapTop); } } - }; - }); + } + }; }); diff --git a/src/ui/public/directives/spinner.js b/src/ui/public/directives/spinner.js index 504cd89de8b4a4..c9e2dd06ae2440 100644 --- a/src/ui/public/directives/spinner.js +++ b/src/ui/public/directives/spinner.js @@ -1,12 +1,10 @@ -define(function (require) { - var html = '
      '; - var module = require('ui/modules').get('kibana'); - - module.directive('spinner', function () { - return { - restrict: 'C', - template: html - }; - }); +var html = '
      '; +var module = require('ui/modules').get('kibana'); +module.directive('spinner', function () { + return { + restrict: 'C', + template: html + }; }); + diff --git a/src/ui/public/directives/truncated.js b/src/ui/public/directives/truncated.js index 16c639bcb16c37..20ae4a82f74d56 100644 --- a/src/ui/public/directives/truncated.js +++ b/src/ui/public/directives/truncated.js @@ -1,41 +1,39 @@ import $ from 'jquery'; -define(function (require) { - var module = require('ui/modules').get('kibana'); +var module = require('ui/modules').get('kibana'); - module.directive('kbnTruncated', function ($compile) { - return { - restrict: 'E', - scope: { - orig: '@', - length: '@' - }, - template: function ($element, attrs) { - var template = '{{text}}'; - template += ' {{action}}'; - return template; - }, - link: function ($scope, $element, attrs) { +module.directive('kbnTruncated', function ($compile) { + return { + restrict: 'E', + scope: { + orig: '@', + length: '@' + }, + template: function ($element, attrs) { + var template = '{{text}}'; + template += ' {{action}}'; + return template; + }, + link: function ($scope, $element, attrs) { - var fullText = $scope.orig; - var truncated = fullText.substring(0, $scope.length); + var fullText = $scope.orig; + var truncated = fullText.substring(0, $scope.length); - if (fullText === truncated) { - $scope.text = fullText; - return; - } + if (fullText === truncated) { + $scope.text = fullText; + return; + } - truncated += '...'; + truncated += '...'; - $scope.expanded = false; - $scope.text = truncated; - $scope.action = 'more'; + $scope.expanded = false; + $scope.text = truncated; + $scope.action = 'more'; - $scope.toggle = function () { - $scope.expanded = !$scope.expanded; - $scope.text = $scope.expanded ? fullText : truncated; - $scope.action = $scope.expanded ? 'less' : 'more'; - }; - } - }; - }); + $scope.toggle = function () { + $scope.expanded = !$scope.expanded; + $scope.text = $scope.expanded ? fullText : truncated; + $scope.action = $scope.expanded ? 'less' : 'more'; + }; + } + }; }); diff --git a/src/ui/public/directives/validate_cidr_mask.js b/src/ui/public/directives/validate_cidr_mask.js index 79367f809ad5bb..bbb91052b67151 100644 --- a/src/ui/public/directives/validate_cidr_mask.js +++ b/src/ui/public/directives/validate_cidr_mask.js @@ -1,33 +1,31 @@ import _ from 'lodash'; import CidrMask from 'ui/utils/CidrMask'; -define(function (require) { - require('ui/modules').get('kibana').directive('validateCidrMask', function () { - return { - restrict: 'A', - require: 'ngModel', - scope: { - 'ngModel': '=' - }, - link: function ($scope, elem, attr, ngModel) { - ngModel.$parsers.unshift(validateCidrMask); - ngModel.$formatters.unshift(validateCidrMask); +require('ui/modules').get('kibana').directive('validateCidrMask', function () { + return { + restrict: 'A', + require: 'ngModel', + scope: { + 'ngModel': '=' + }, + link: function ($scope, elem, attr, ngModel) { + ngModel.$parsers.unshift(validateCidrMask); + ngModel.$formatters.unshift(validateCidrMask); - function validateCidrMask(mask) { - if (mask == null || mask === '') { - ngModel.$setValidity('cidrMaskInput', true); - return null; - } + function validateCidrMask(mask) { + if (mask == null || mask === '') { + ngModel.$setValidity('cidrMaskInput', true); + return null; + } - try { - mask = new CidrMask(mask); - ngModel.$setValidity('cidrMaskInput', true); - return mask.toString(); - } catch (e) { - ngModel.$setValidity('cidrMaskInput', false); - } + try { + mask = new CidrMask(mask); + ngModel.$setValidity('cidrMaskInput', true); + return mask.toString(); + } catch (e) { + ngModel.$setValidity('cidrMaskInput', false); } } - }; - }); + } + }; }); diff --git a/src/ui/public/directives/validate_date_math.js b/src/ui/public/directives/validate_date_math.js index 03baeaa8620572..a2890a826c62ed 100644 --- a/src/ui/public/directives/validate_date_math.js +++ b/src/ui/public/directives/validate_date_math.js @@ -1,29 +1,27 @@ import _ from 'lodash'; import dateMath from 'ui/utils/dateMath'; -define(function (require) { - require('ui/modules').get('kibana').directive('validateDateMath', function () { - return { - restrict: 'A', - require: 'ngModel', - scope: { - 'ngModel': '=' - }, - link: function ($scope, elem, attr, ngModel) { - ngModel.$parsers.unshift(validateDateMath); - ngModel.$formatters.unshift(validateDateMath); +require('ui/modules').get('kibana').directive('validateDateMath', function () { + return { + restrict: 'A', + require: 'ngModel', + scope: { + 'ngModel': '=' + }, + link: function ($scope, elem, attr, ngModel) { + ngModel.$parsers.unshift(validateDateMath); + ngModel.$formatters.unshift(validateDateMath); - function validateDateMath(input) { - if (input == null || input === '') { - ngModel.$setValidity('validDateMath', true); - return null; - } - - var moment = dateMath.parse(input); - ngModel.$setValidity('validDateMath', moment != null && moment.isValid()); - return input; + function validateDateMath(input) { + if (input == null || input === '') { + ngModel.$setValidity('validDateMath', true); + return null; } + + var moment = dateMath.parse(input); + ngModel.$setValidity('validDateMath', moment != null && moment.isValid()); + return input; } - }; - }); + } + }; }); diff --git a/src/ui/public/directives/validate_index_name.js b/src/ui/public/directives/validate_index_name.js index 7291bee6846fb3..46c3b8655577ec 100644 --- a/src/ui/public/directives/validate_index_name.js +++ b/src/ui/public/directives/validate_index_name.js @@ -1,41 +1,39 @@ import _ from 'lodash'; // See https://github.com/elastic/elasticsearch/issues/6736 -define(function (require) { - require('ui/modules') - .get('kibana') - .directive('validateIndexName', function () { - return { - restrict: 'A', - require: 'ngModel', - scope: { - 'ngModel': '=' - }, - link: function ($scope, elem, attr, ngModel) { - var illegalCharacters = ['\\', '/', '?', '"', '<', '>', '|', ' ', ',']; - var isValid = function (input) { - if (input == null || input === '' || input === '.' || input === '..') return false; +require('ui/modules') + .get('kibana') + .directive('validateIndexName', function () { + return { + restrict: 'A', + require: 'ngModel', + scope: { + 'ngModel': '=' + }, + link: function ($scope, elem, attr, ngModel) { + var illegalCharacters = ['\\', '/', '?', '"', '<', '>', '|', ' ', ',']; + var isValid = function (input) { + if (input == null || input === '' || input === '.' || input === '..') return false; - var match = _.find(illegalCharacters, function (character) { - return input.indexOf(character) >= 0; - }); - return !match; - }; - - // From User - ngModel.$parsers.unshift(function (value) { - var valid = isValid(value); - ngModel.$setValidity('indexNameInput', valid); - return valid ? value : undefined; + var match = _.find(illegalCharacters, function (character) { + return input.indexOf(character) >= 0; }); + return !match; + }; - // To user - ngModel.$formatters.unshift(function (value) { - ngModel.$setValidity('indexNameInput', isValid(value)); - return value; - }); + // From User + ngModel.$parsers.unshift(function (value) { + var valid = isValid(value); + ngModel.$setValidity('indexNameInput', valid); + return valid ? value : undefined; + }); + + // To user + ngModel.$formatters.unshift(function (value) { + ngModel.$setValidity('indexNameInput', isValid(value)); + return value; + }); - } - }; - }); -}); + } + }; + }); diff --git a/src/ui/public/directives/validate_ip.js b/src/ui/public/directives/validate_ip.js index 04c2eaa39eab9d..58611ddf965d15 100644 --- a/src/ui/public/directives/validate_ip.js +++ b/src/ui/public/directives/validate_ip.js @@ -1,38 +1,36 @@ import _ from 'lodash'; import Ipv4Address from 'ui/utils/Ipv4Address'; -define(function (require) { - require('ui/modules') - .get('kibana') - .directive('validateIp', function () { - return { - restrict: 'A', - require: 'ngModel', - scope: { - 'ngModel': '=', - }, - link: function ($scope, elem, attr, ngModel) { - function validateIp(ipAddress) { - if (ipAddress == null || ipAddress === '') { - ngModel.$setValidity('ipInput', true); - return null; - } +require('ui/modules') + .get('kibana') + .directive('validateIp', function () { + return { + restrict: 'A', + require: 'ngModel', + scope: { + 'ngModel': '=', + }, + link: function ($scope, elem, attr, ngModel) { + function validateIp(ipAddress) { + if (ipAddress == null || ipAddress === '') { + ngModel.$setValidity('ipInput', true); + return null; + } - try { - ipAddress = new Ipv4Address(ipAddress); - ngModel.$setValidity('ipInput', true); - return ipAddress.toString(); - } catch (e) { - ngModel.$setValidity('ipInput', false); - } + try { + ipAddress = new Ipv4Address(ipAddress); + ngModel.$setValidity('ipInput', true); + return ipAddress.toString(); + } catch (e) { + ngModel.$setValidity('ipInput', false); } + } - // From User - ngModel.$parsers.unshift(validateIp); + // From User + ngModel.$parsers.unshift(validateIp); - // To user - ngModel.$formatters.unshift(validateIp); - } - }; - }); -}); + // To user + ngModel.$formatters.unshift(validateIp); + } + }; + }); diff --git a/src/ui/public/directives/validate_json.js b/src/ui/public/directives/validate_json.js index ff9eacd431f283..74e74d5f32c371 100644 --- a/src/ui/public/directives/validate_json.js +++ b/src/ui/public/directives/validate_json.js @@ -1,48 +1,46 @@ import _ from 'lodash'; import $ from 'jquery'; -define(function (require) { - var module = require('ui/modules').get('kibana'); +var module = require('ui/modules').get('kibana'); - module.directive('validateJson', function ($compile) { - return { - restrict: 'A', - require: 'ngModel', - scope: { - 'ngModel': '=', - 'queryInput': '=?', - }, - link: function ($scope, $elem, attr, ngModel) { - $scope.$watch('ngModel', validator); +module.directive('validateJson', function ($compile) { + return { + restrict: 'A', + require: 'ngModel', + scope: { + 'ngModel': '=', + 'queryInput': '=?', + }, + link: function ($scope, $elem, attr, ngModel) { + $scope.$watch('ngModel', validator); - function validator(newValue, oldValue) { - if (!newValue || newValue.length === 0) { - setValid(); - return; - } + function validator(newValue, oldValue) { + if (!newValue || newValue.length === 0) { + setValid(); + return; + } - // We actually need a proper object in all JSON inputs - newValue = (newValue || '').trim(); - if (newValue[0] === '{' || '[') { - try { - JSON.parse(newValue); - setValid(); - } catch (e) { - setInvalid(); - } - } else { + // We actually need a proper object in all JSON inputs + newValue = (newValue || '').trim(); + if (newValue[0] === '{' || '[') { + try { + JSON.parse(newValue); + setValid(); + } catch (e) { setInvalid(); } + } else { + setInvalid(); } + } - function setValid() { - ngModel.$setValidity('jsonInput', true); - } + function setValid() { + ngModel.$setValidity('jsonInput', true); + } - function setInvalid() { - ngModel.$setValidity('jsonInput', false); - } + function setInvalid() { + ngModel.$setValidity('jsonInput', false); } - }; - }); + } + }; }); diff --git a/src/ui/public/doc_table/components/table_header.js b/src/ui/public/doc_table/components/table_header.js index 32908bdc25a187..c4f48fd26d40a2 100644 --- a/src/ui/public/doc_table/components/table_header.js +++ b/src/ui/public/doc_table/components/table_header.js @@ -1,80 +1,78 @@ import _ from 'lodash'; import 'ui/filters/short_dots'; import headerHtml from 'ui/doc_table/components/table_header.html'; -define(function (require) { - var module = require('ui/modules').get('app/discover'); - - - module.directive('kbnTableHeader', function (shortDotsFilter) { - return { - restrict: 'A', - scope: { - columns: '=', - sorting: '=', - indexPattern: '=', - }, - template: headerHtml, - controller: function ($scope) { - - var sortableField = function (field) { - if (!$scope.indexPattern) return; - var sortable = _.get($scope.indexPattern.fields.byName[field], 'sortable'); - return sortable; - }; - - $scope.tooltip = function (column) { - if (!sortableField(column)) return ''; - return 'Sort by ' + shortDotsFilter(column); - }; - - $scope.canRemove = function (name) { - return (name !== '_source' || $scope.columns.length !== 1); - }; - - $scope.headerClass = function (column) { - if (!sortableField(column)) return; - - var sorting = $scope.sorting; - var defaultClass = ['fa', 'fa-sort-up', 'table-header-sortchange']; - - if (!sorting || column !== sorting[0]) return defaultClass; - return ['fa', sorting[1] === 'asc' ? 'fa-sort-up' : 'fa-sort-down']; - }; - - $scope.moveLeft = function (column) { - var index = _.indexOf($scope.columns, column); - if (index === 0) return; - - _.move($scope.columns, index, --index); - }; - - $scope.moveRight = function (column) { - var index = _.indexOf($scope.columns, column); - if (index === $scope.columns.length - 1) return; - - _.move($scope.columns, index, ++index); - }; - - $scope.toggleColumn = function (fieldName) { - _.toggleInOut($scope.columns, fieldName); - }; - - $scope.sort = function (column) { - if (!column || !sortableField(column)) return; - - var sorting = $scope.sorting = $scope.sorting || []; - - var direction = sorting[1] || 'asc'; - if (sorting[0] !== column) { - direction = 'asc'; - } else { - direction = sorting[1] === 'asc' ? 'desc' : 'asc'; - } - - $scope.sorting[0] = column; - $scope.sorting[1] = direction; - }; - } - }; - }); +var module = require('ui/modules').get('app/discover'); + + +module.directive('kbnTableHeader', function (shortDotsFilter) { + return { + restrict: 'A', + scope: { + columns: '=', + sorting: '=', + indexPattern: '=', + }, + template: headerHtml, + controller: function ($scope) { + + var sortableField = function (field) { + if (!$scope.indexPattern) return; + var sortable = _.get($scope.indexPattern.fields.byName[field], 'sortable'); + return sortable; + }; + + $scope.tooltip = function (column) { + if (!sortableField(column)) return ''; + return 'Sort by ' + shortDotsFilter(column); + }; + + $scope.canRemove = function (name) { + return (name !== '_source' || $scope.columns.length !== 1); + }; + + $scope.headerClass = function (column) { + if (!sortableField(column)) return; + + var sorting = $scope.sorting; + var defaultClass = ['fa', 'fa-sort-up', 'table-header-sortchange']; + + if (!sorting || column !== sorting[0]) return defaultClass; + return ['fa', sorting[1] === 'asc' ? 'fa-sort-up' : 'fa-sort-down']; + }; + + $scope.moveLeft = function (column) { + var index = _.indexOf($scope.columns, column); + if (index === 0) return; + + _.move($scope.columns, index, --index); + }; + + $scope.moveRight = function (column) { + var index = _.indexOf($scope.columns, column); + if (index === $scope.columns.length - 1) return; + + _.move($scope.columns, index, ++index); + }; + + $scope.toggleColumn = function (fieldName) { + _.toggleInOut($scope.columns, fieldName); + }; + + $scope.sort = function (column) { + if (!column || !sortableField(column)) return; + + var sorting = $scope.sorting = $scope.sorting || []; + + var direction = sorting[1] || 'asc'; + if (sorting[0] !== column) { + direction = 'asc'; + } else { + direction = sorting[1] === 'asc' ? 'desc' : 'asc'; + } + + $scope.sorting[0] = column; + $scope.sorting[1] = direction; + }; + } + }; }); diff --git a/src/ui/public/doc_table/components/table_row.js b/src/ui/public/doc_table/components/table_row.js index 3e0fb32ce68e55..b9fb012e55f12a 100644 --- a/src/ui/public/doc_table/components/table_row.js +++ b/src/ui/public/doc_table/components/table_row.js @@ -9,166 +9,164 @@ import 'ui/filters/short_dots'; import noWhiteSpace from 'ui/utils/no_white_space'; import openRowHtml from 'ui/doc_table/components/table_row/open.html'; import detailsHtml from 'ui/doc_table/components/table_row/details.html'; -define(function (require) { - var module = require('ui/modules').get('app/discover'); - - - - // guesstimate at the minimum number of chars wide cells in the table should be - var MIN_LINE_LENGTH = 20; - - /** - * kbnTableRow directive - * - * Display a row in the table - * ``` - * - * ``` - */ - module.directive('kbnTableRow', function ($compile) { - var cellTemplate = _.template(noWhiteSpace(require('ui/doc_table/components/table_row/cell.html'))); - var truncateByHeightTemplate = _.template(noWhiteSpace(require('ui/partials/truncate_by_height.html'))); - - return { - restrict: 'A', - scope: { - columns: '=', - filter: '=', - indexPattern: '=', - row: '=kbnTableRow' - }, - link: function ($scope, $el) { - $el.after(''); - $el.empty(); - - var init = function () { - createSummaryRow($scope.row, $scope.row._id); - }; - - // when we compile the details, we use this $scope - var $detailsScope; - - // when we compile the toggle button in the summary, we use this $scope - var $toggleScope; - - // toggle display of the rows details, a full list of the fields from each row - $scope.toggleRow = function () { - var $detailsTr = $el.next(); - - $scope.open = !$scope.open; - - /// - // add/remove $details children - /// - - $detailsTr.toggle($scope.open); - - if (!$scope.open) { - // close the child scope if it exists - $detailsScope.$destroy(); - // no need to go any further - return; - } else { - $detailsScope = $scope.$new(); - } - - // empty the details and rebuild it - $detailsTr.html(detailsHtml); +var module = require('ui/modules').get('app/discover'); + + + +// guesstimate at the minimum number of chars wide cells in the table should be +var MIN_LINE_LENGTH = 20; + +/** + * kbnTableRow directive + * + * Display a row in the table + * ``` + * + * ``` + */ +module.directive('kbnTableRow', function ($compile) { + var cellTemplate = _.template(noWhiteSpace(require('ui/doc_table/components/table_row/cell.html'))); + var truncateByHeightTemplate = _.template(noWhiteSpace(require('ui/partials/truncate_by_height.html'))); + + return { + restrict: 'A', + scope: { + columns: '=', + filter: '=', + indexPattern: '=', + row: '=kbnTableRow' + }, + link: function ($scope, $el) { + $el.after(''); + $el.empty(); + + var init = function () { + createSummaryRow($scope.row, $scope.row._id); + }; + + // when we compile the details, we use this $scope + var $detailsScope; + + // when we compile the toggle button in the summary, we use this $scope + var $toggleScope; + + // toggle display of the rows details, a full list of the fields from each row + $scope.toggleRow = function () { + var $detailsTr = $el.next(); + + $scope.open = !$scope.open; + + /// + // add/remove $details children + /// + + $detailsTr.toggle($scope.open); + + if (!$scope.open) { + // close the child scope if it exists + $detailsScope.$destroy(); + // no need to go any further + return; + } else { + $detailsScope = $scope.$new(); + } - $detailsScope.row = $scope.row; + // empty the details and rebuild it + $detailsTr.html(detailsHtml); - $compile($detailsTr)($detailsScope); - }; + $detailsScope.row = $scope.row; - $scope.$watchCollection('columns', function () { - createSummaryRow($scope.row, $scope.row._id); - }); + $compile($detailsTr)($detailsScope); + }; - $scope.$watchMulti(['indexPattern.timeFieldName', 'row.highlight'], function () { - createSummaryRow($scope.row, $scope.row._id); - }); + $scope.$watchCollection('columns', function () { + createSummaryRow($scope.row, $scope.row._id); + }); - // create a tr element that lists the value for each *column* - function createSummaryRow(row) { - var indexPattern = $scope.indexPattern; + $scope.$watchMulti(['indexPattern.timeFieldName', 'row.highlight'], function () { + createSummaryRow($scope.row, $scope.row._id); + }); - // We just create a string here because its faster. - var newHtmls = [ - openRowHtml - ]; + // create a tr element that lists the value for each *column* + function createSummaryRow(row) { + var indexPattern = $scope.indexPattern; - if (indexPattern.timeFieldName) { - newHtmls.push(cellTemplate({ - timefield: true, - formatted: _displayField(row, indexPattern.timeFieldName) - })); - } + // We just create a string here because its faster. + var newHtmls = [ + openRowHtml + ]; - $scope.columns.forEach(function (column) { - newHtmls.push(cellTemplate({ - timefield: false, - sourcefield: (column === '_source'), - formatted: _displayField(row, column, true) - })); - }); + if (indexPattern.timeFieldName) { + newHtmls.push(cellTemplate({ + timefield: true, + formatted: _displayField(row, indexPattern.timeFieldName) + })); + } - var $cells = $el.children(); - newHtmls.forEach(function (html, i) { - var $cell = $cells.eq(i); - if ($cell.data('discover:html') === html) return; + $scope.columns.forEach(function (column) { + newHtmls.push(cellTemplate({ + timefield: false, + sourcefield: (column === '_source'), + formatted: _displayField(row, column, true) + })); + }); - var reuse = _.find($cells.slice(i + 1), function (cell) { - return $.data(cell, 'discover:html') === html; - }); + var $cells = $el.children(); + newHtmls.forEach(function (html, i) { + var $cell = $cells.eq(i); + if ($cell.data('discover:html') === html) return; - var $target = reuse ? $(reuse).detach() : $(html); - $target.data('discover:html', html); - var $before = $cells.eq(i - 1); - if ($before.size()) { - $before.after($target); - } else { - $el.append($target); - } - - // rebuild cells since we modified the children - $cells = $el.children(); - - if (i === 0 && !reuse) { - $toggleScope = $scope.$new(); - $compile($target)($toggleScope); - } + var reuse = _.find($cells.slice(i + 1), function (cell) { + return $.data(cell, 'discover:html') === html; }); - if ($scope.open) { - $detailsScope.row = row; + var $target = reuse ? $(reuse).detach() : $(html); + $target.data('discover:html', html); + var $before = $cells.eq(i - 1); + if ($before.size()) { + $before.after($target); + } else { + $el.append($target); } - // trim off cells that were not used rest of the cells - $cells.filter(':gt(' + (newHtmls.length - 1) + ')').remove(); - } + // rebuild cells since we modified the children + $cells = $el.children(); - /** - * Fill an element with the value of a field - */ - function _displayField(row, fieldName, breakWords) { - var indexPattern = $scope.indexPattern; - var text = indexPattern.formatField(row, fieldName); - - if (breakWords) { - text = addWordBreaks(text, MIN_LINE_LENGTH); - - if (text.length > MIN_LINE_LENGTH) { - return truncateByHeightTemplate({ - body: text - }); - } + if (i === 0 && !reuse) { + $toggleScope = $scope.$new(); + $compile($target)($toggleScope); } + }); - return text; + if ($scope.open) { + $detailsScope.row = row; } - init(); + // trim off cells that were not used rest of the cells + $cells.filter(':gt(' + (newHtmls.length - 1) + ')').remove(); } - }; - }); + + /** + * Fill an element with the value of a field + */ + function _displayField(row, fieldName, breakWords) { + var indexPattern = $scope.indexPattern; + var text = indexPattern.formatField(row, fieldName); + + if (breakWords) { + text = addWordBreaks(text, MIN_LINE_LENGTH); + + if (text.length > MIN_LINE_LENGTH) { + return truncateByHeightTemplate({ + body: text + }); + } + } + + return text; + } + + init(); + } + }; }); diff --git a/src/ui/public/doc_table/doc_table.js b/src/ui/public/doc_table/doc_table.js index 2990ec9f3347c7..c51565640cdde5 100644 --- a/src/ui/public/doc_table/doc_table.js +++ b/src/ui/public/doc_table/doc_table.js @@ -6,110 +6,108 @@ import 'ui/directives/truncated'; import 'ui/directives/infinite_scroll'; import 'ui/doc_table/components/table_header'; import 'ui/doc_table/components/table_row'; -define(function (require) { - - - - require('ui/modules').get('kibana') - .directive('docTable', function (config, Notifier, getAppState) { - return { - restrict: 'E', - template: html, - scope: { - sorting: '=', - columns: '=', - hits: '=?', // You really want either hits & indexPattern, OR searchSource - indexPattern: '=?', - searchSource: '=?', - infiniteScroll: '=?', - filter: '=?', - }, - link: function ($scope) { - var notify = new Notifier(); - $scope.limit = 50; - $scope.persist = { - sorting: $scope.sorting, - columns: $scope.columns - }; - - var prereq = (function () { - var fns = []; - return function register(fn) { - fns.push(fn); - return function () { - fn.apply(this, arguments); - if (fns.length) { - _.pull(fns, fn); - if (!fns.length) { - $scope.$root.$broadcast('ready:vis'); - } +require('ui/modules').get('kibana') +.directive('docTable', function (config, Notifier, getAppState) { + return { + restrict: 'E', + template: html, + scope: { + sorting: '=', + columns: '=', + hits: '=?', // You really want either hits & indexPattern, OR searchSource + indexPattern: '=?', + searchSource: '=?', + infiniteScroll: '=?', + filter: '=?', + }, + link: function ($scope) { + var notify = new Notifier(); + $scope.limit = 50; + $scope.persist = { + sorting: $scope.sorting, + columns: $scope.columns + }; + + var prereq = (function () { + var fns = []; + + return function register(fn) { + fns.push(fn); + + return function () { + fn.apply(this, arguments); + + if (fns.length) { + _.pull(fns, fn); + if (!fns.length) { + $scope.$root.$broadcast('ready:vis'); } - }; + } }; - }()); - - $scope.addRows = function () { - $scope.limit += 50; }; + }()); - // This exists to fix the problem of an empty initial column list not playing nice with watchCollection. - $scope.$watch('columns', function (columns) { - if (columns.length !== 0) return; + $scope.addRows = function () { + $scope.limit += 50; + }; - var $state = getAppState(); - $scope.columns.push('_source'); - if ($state) $state.replace(); - }); + // This exists to fix the problem of an empty initial column list not playing nice with watchCollection. + $scope.$watch('columns', function (columns) { + if (columns.length !== 0) return; - $scope.$watchCollection('columns', function (columns, oldColumns) { - if (oldColumns.length === 1 && oldColumns[0] === '_source' && $scope.columns.length > 1) { - _.pull($scope.columns, '_source'); - } + var $state = getAppState(); + $scope.columns.push('_source'); + if ($state) $state.replace(); + }); - if ($scope.columns.length === 0) $scope.columns.push('_source'); - }); + $scope.$watchCollection('columns', function (columns, oldColumns) { + if (oldColumns.length === 1 && oldColumns[0] === '_source' && $scope.columns.length > 1) { + _.pull($scope.columns, '_source'); + } + + if ($scope.columns.length === 0) $scope.columns.push('_source'); + }); - $scope.$watch('searchSource', prereq(function (searchSource) { - if (!$scope.searchSource) return; + $scope.$watch('searchSource', prereq(function (searchSource) { + if (!$scope.searchSource) return; - $scope.indexPattern = $scope.searchSource.get('index'); + $scope.indexPattern = $scope.searchSource.get('index'); - $scope.searchSource.size(config.get('discover:sampleSize')); - $scope.searchSource.sort(getSort($scope.sorting, $scope.indexPattern)); + $scope.searchSource.size(config.get('discover:sampleSize')); + $scope.searchSource.sort(getSort($scope.sorting, $scope.indexPattern)); - // Set the watcher after initialization - $scope.$watchCollection('sorting', function (newSort, oldSort) { - // Don't react if sort values didn't really change - if (newSort === oldSort) return; - $scope.searchSource.sort(getSort(newSort, $scope.indexPattern)); - $scope.searchSource.fetchQueued(); - }); + // Set the watcher after initialization + $scope.$watchCollection('sorting', function (newSort, oldSort) { + // Don't react if sort values didn't really change + if (newSort === oldSort) return; + $scope.searchSource.sort(getSort(newSort, $scope.indexPattern)); + $scope.searchSource.fetchQueued(); + }); - $scope.$on('$destroy', function () { - if ($scope.searchSource) $scope.searchSource.destroy(); - }); + $scope.$on('$destroy', function () { + if ($scope.searchSource) $scope.searchSource.destroy(); + }); - // TODO: we need to have some way to clean up result requests - $scope.searchSource.onResults().then(function onResults(resp) { - // Reset infinite scroll limit - $scope.limit = 50; + // TODO: we need to have some way to clean up result requests + $scope.searchSource.onResults().then(function onResults(resp) { + // Reset infinite scroll limit + $scope.limit = 50; - // Abort if something changed - if ($scope.searchSource !== $scope.searchSource) return; + // Abort if something changed + if ($scope.searchSource !== $scope.searchSource) return; - $scope.hits = resp.hits.hits; + $scope.hits = resp.hits.hits; - return $scope.searchSource.onResults().then(onResults); - }).catch(notify.fatal); + return $scope.searchSource.onResults().then(onResults); + }).catch(notify.fatal); - $scope.searchSource.onError(notify.error).catch(notify.fatal); - })); + $scope.searchSource.onError(notify.error).catch(notify.fatal); + })); - } - }; - }); + } + }; }); diff --git a/src/ui/public/doc_table/lib/get_sort.js b/src/ui/public/doc_table/lib/get_sort.js index 9a3c7795dc1aa9..0e97f87d74bafd 100644 --- a/src/ui/public/doc_table/lib/get_sort.js +++ b/src/ui/public/doc_table/lib/get_sort.js @@ -1,44 +1,42 @@ import _ from 'lodash'; -define(function (require) { - - /** - * Take a sorting array and make it into an object - * @param {array} 2 item array [fieldToSort, directionToSort] - * @param {object} indexPattern used for determining default sort - * @returns {object} a sort object suitable for returning to elasticsearch - */ - function getSort(sort, indexPattern) { - var sortObj = {}; - var field; - var direction; - - function isSortable(field) { - return (indexPattern.fields.byName[field] && indexPattern.fields.byName[field].sortable); - } - - if (_.isArray(sort) && sort.length === 2 && isSortable(sort[0])) { - // At some point we need to refact the sorting logic, this array sucks. - field = sort[0]; - direction = sort[1]; - } else if (indexPattern.timeFieldName && isSortable(indexPattern.timeFieldName)) { - field = indexPattern.timeFieldName; - direction = 'desc'; - } - - if (field) { - sortObj[field] = direction; - } else { - sortObj._score = 'desc'; - } - - - - return sortObj; + +/** + * Take a sorting array and make it into an object + * @param {array} 2 item array [fieldToSort, directionToSort] + * @param {object} indexPattern used for determining default sort + * @returns {object} a sort object suitable for returning to elasticsearch + */ +function getSort(sort, indexPattern) { + var sortObj = {}; + var field; + var direction; + + function isSortable(field) { + return (indexPattern.fields.byName[field] && indexPattern.fields.byName[field].sortable); + } + + if (_.isArray(sort) && sort.length === 2 && isSortable(sort[0])) { + // At some point we need to refact the sorting logic, this array sucks. + field = sort[0]; + direction = sort[1]; + } else if (indexPattern.timeFieldName && isSortable(indexPattern.timeFieldName)) { + field = indexPattern.timeFieldName; + direction = 'desc'; + } + + if (field) { + sortObj[field] = direction; + } else { + sortObj._score = 'desc'; } - getSort.array = function (sort, indexPattern) { - return _(getSort(sort, indexPattern)).pairs().pop(); - }; - return getSort; -}); + + return sortObj; +} + +getSort.array = function (sort, indexPattern) { + return _(getSort(sort, indexPattern)).pairs().pop(); +}; + +export default getSort; diff --git a/src/ui/public/doc_title/doc_title.js b/src/ui/public/doc_title/doc_title.js index 1ac41bedbe08a7..aeb84c7eedf7a6 100644 --- a/src/ui/public/doc_title/doc_title.js +++ b/src/ui/public/doc_title/doc_title.js @@ -1,50 +1,48 @@ import _ from 'lodash'; import chrome from 'ui/chrome'; -define(function (require) { - require('ui/modules').get('kibana') - .run(function ($rootScope, docTitle) { - // always bind to the route events - $rootScope.$on('$routeChangeStart', docTitle.reset); - $rootScope.$on('$routeChangeError', docTitle.update); - $rootScope.$on('$routeChangeSuccess', docTitle.update); - $rootScope.$watch(_.bindKey(chrome, 'getActiveTabTitle'), docTitle.update); - }) - .service('docTitle', function ($rootScope) { - var baseTitle = document.title; - var self = this; +require('ui/modules').get('kibana') +.run(function ($rootScope, docTitle) { + // always bind to the route events + $rootScope.$on('$routeChangeStart', docTitle.reset); + $rootScope.$on('$routeChangeError', docTitle.update); + $rootScope.$on('$routeChangeSuccess', docTitle.update); + $rootScope.$watch(_.bindKey(chrome, 'getActiveTabTitle'), docTitle.update); +}) +.service('docTitle', function ($rootScope) { + var baseTitle = document.title; + var self = this; - var lastChange; + var lastChange; - function render() { - lastChange = lastChange || []; + function render() { + lastChange = lastChange || []; - var parts = [lastChange[0]]; - var activeTabTitle = chrome.getActiveTabTitle(); + var parts = [lastChange[0]]; + var activeTabTitle = chrome.getActiveTabTitle(); - if (activeTabTitle) parts.push(activeTabTitle); + if (activeTabTitle) parts.push(activeTabTitle); - if (!lastChange[1]) parts.push(baseTitle); + if (!lastChange[1]) parts.push(baseTitle); - return _(parts).flattenDeep().compact().join(' - '); - } + return _(parts).flattenDeep().compact().join(' - '); + } - self.change = function (title, complete) { - lastChange = [title, complete]; - self.update(); - }; - - self.reset = function () { - lastChange = null; - }; + self.change = function (title, complete) { + lastChange = [title, complete]; + self.update(); + }; - self.update = function () { - document.title = render(); - }; - }); + self.reset = function () { + lastChange = null; + }; - // return a "private module" so that it can be used both ways - return function DoctitleProvider(docTitle) { - return docTitle; + self.update = function () { + document.title = render(); }; }); + +// return a "private module" so that it can be used both ways +export default function DoctitleProvider(docTitle) { + return docTitle; +}; diff --git a/src/ui/public/doc_viewer/doc_viewer.js b/src/ui/public/doc_viewer/doc_viewer.js index 13e7634e5b6e35..78a6fba13f0056 100644 --- a/src/ui/public/doc_viewer/doc_viewer.js +++ b/src/ui/public/doc_viewer/doc_viewer.js @@ -3,46 +3,44 @@ import angular from 'angular'; import 'ace'; import html from 'ui/doc_viewer/doc_viewer.html'; import 'ui/doc_viewer/doc_viewer.less'; -define(function (require) { - require('ui/modules').get('kibana') - .directive('docViewer', function (config, Private) { - return { - restrict: 'E', - template: html, - scope: { - hit: '=', - indexPattern: '=', - filter: '=?', - columns: '=?' +require('ui/modules').get('kibana') +.directive('docViewer', function (config, Private) { + return { + restrict: 'E', + template: html, + scope: { + hit: '=', + indexPattern: '=', + filter: '=?', + columns: '=?' + }, + link: { + pre($scope) { + $scope.aceLoaded = (editor) => { + editor.$blockScrolling = Infinity; + }; }, - link: { - pre($scope) { - $scope.aceLoaded = (editor) => { - editor.$blockScrolling = Infinity; - }; - }, - post($scope, $el, attr) { - // If a field isn't in the mapping, use this - $scope.mode = 'table'; - $scope.mapping = $scope.indexPattern.fields.byName; - $scope.flattened = $scope.indexPattern.flattenHit($scope.hit); - $scope.hitJson = angular.toJson($scope.hit, true); - $scope.formatted = $scope.indexPattern.formatHit($scope.hit); - $scope.fields = _.keys($scope.flattened).sort(); + post($scope, $el, attr) { + // If a field isn't in the mapping, use this + $scope.mode = 'table'; + $scope.mapping = $scope.indexPattern.fields.byName; + $scope.flattened = $scope.indexPattern.flattenHit($scope.hit); + $scope.hitJson = angular.toJson($scope.hit, true); + $scope.formatted = $scope.indexPattern.formatHit($scope.hit); + $scope.fields = _.keys($scope.flattened).sort(); - $scope.toggleColumn = function (fieldName) { - _.toggleInOut($scope.columns, fieldName); - }; + $scope.toggleColumn = function (fieldName) { + _.toggleInOut($scope.columns, fieldName); + }; - $scope.showArrayInObjectsWarning = function (row, field) { - var value = $scope.flattened[field]; - return _.isArray(value) && typeof value[0] === 'object'; - }; - } + $scope.showArrayInObjectsWarning = function (row, field) { + var value = $scope.flattened[field]; + return _.isArray(value) && typeof value[0] === 'object'; + }; } - }; - }); + } + }; }); diff --git a/src/ui/public/elastic_textarea.js b/src/ui/public/elastic_textarea.js index d258023fb5236e..8489fdace25199 100644 --- a/src/ui/public/elastic_textarea.js +++ b/src/ui/public/elastic_textarea.js @@ -1,26 +1,24 @@ import _ from 'lodash'; -define(function (require) { - var NL_RE = /\n/g; - var events = 'keydown keypress keyup change'; +var NL_RE = /\n/g; +var events = 'keydown keypress keyup change'; - require('ui/modules').get('kibana') - .directive('elasticTextarea', function () { - return { - restrict: 'A', - link: function ($scope, $el) { +require('ui/modules').get('kibana') +.directive('elasticTextarea', function () { + return { + restrict: 'A', + link: function ($scope, $el) { - function resize() { - $el.attr('rows', _.size($el.val().match(NL_RE)) + 1); - } + function resize() { + $el.attr('rows', _.size($el.val().match(NL_RE)) + 1); + } - $el.on(events, resize); - $scope.$evalAsync(resize); - $scope.$on('$destroy', function () { - $el.off(events, resize); - }); + $el.on(events, resize); + $scope.$evalAsync(resize); + $scope.$on('$destroy', function () { + $el.off(events, resize); + }); - } - }; + } + }; - }); }); diff --git a/src/ui/public/errors.js b/src/ui/public/errors.js index e102adf0e90c9f..296a84dba56bdf 100644 --- a/src/ui/public/errors.js +++ b/src/ui/public/errors.js @@ -1,276 +1,274 @@ import _ from 'lodash'; import angular from 'angular'; -define(function (require) { - - var canStack = (function () { - var err = new Error(); - return !!err.stack; - }()); - - var errors = {}; - - // abstract error class - function KbnError(msg, constructor) { - this.message = msg; - - Error.call(this, this.message); - if (Error.captureStackTrace) { - Error.captureStackTrace(this, constructor || KbnError); - } else if (canStack) { - this.stack = (new Error()).stack; - } else { - this.stack = ''; - } + +var canStack = (function () { + var err = new Error(); + return !!err.stack; +}()); + +var errors = {}; + +// abstract error class +function KbnError(msg, constructor) { + this.message = msg; + + Error.call(this, this.message); + if (Error.captureStackTrace) { + Error.captureStackTrace(this, constructor || KbnError); + } else if (canStack) { + this.stack = (new Error()).stack; + } else { + this.stack = ''; } - errors.KbnError = KbnError; - _.class(KbnError).inherits(Error); - - /** - * HastyRefresh error class - * @param {String} [msg] - An error message that will probably end up in a log. - */ - errors.HastyRefresh = function HastyRefresh() { - KbnError.call(this, - 'Courier attempted to start a query before the previous had finished.', - errors.HastyRefresh); - }; - _.class(errors.HastyRefresh).inherits(KbnError); - - /** - * SearchTimeout error class - */ - errors.SearchTimeout = function SearchTimeout() { - KbnError.call(this, - 'All or part of your request has timed out. The data shown may be incomplete.', - errors.SearchTimeout); - }; - _.class(errors.SearchTimeout).inherits(KbnError); - - /** - * Request Failure - When an entire mutli request fails - * @param {Error} err - the Error that came back - * @param {Object} resp - optional HTTP response - */ - errors.RequestFailure = function RequestFailure(err, resp) { - err = err || false; - - KbnError.call(this, - 'Request to Elasticsearch failed: ' + angular.toJson(resp || err.message), - errors.RequestFailure); - - this.origError = err; - this.resp = resp; - }; - _.class(errors.RequestFailure).inherits(KbnError); - - /** - * FetchFailure Error - when there is an error getting a doc or search within - * a multi-response response body - * @param {String} [msg] - An error message that will probably end up in a log. - */ - errors.FetchFailure = function FetchFailure(resp) { - KbnError.call(this, - 'Failed to get the doc: ' + angular.toJson(resp), - errors.FetchFailure); - - this.resp = resp; - }; - _.class(errors.FetchFailure).inherits(KbnError); - - /** - * ShardFailure Error - when one or more shards fail - * @param {String} [msg] - An error message that will probably end up in a log. - */ - errors.ShardFailure = function ShardFailure(resp) { - KbnError.call(this, resp._shards.failed + ' of ' + resp._shards.total + ' shards failed.', - errors.ShardFailure); - - this.resp = resp; - }; - _.class(errors.ShardFailure).inherits(KbnError); - - - /** - * A doc was re-indexed but it was out of date. - * @param {Object} resp - The response from es (one of the multi-response responses). - */ - errors.VersionConflict = function VersionConflict(resp) { - KbnError.call(this, - 'Failed to store document changes do to a version conflict.', - errors.VersionConflict); - - this.resp = resp; - }; - _.class(errors.VersionConflict).inherits(KbnError); - - - /** - * there was a conflict storing a doc - * @param {String} field - the fields which contains the conflict - */ - errors.MappingConflict = function MappingConflict(field) { - KbnError.call(this, - 'Field "' + field + '" is defined with at least two different types in indices matching the pattern', - errors.MappingConflict); - }; - _.class(errors.MappingConflict).inherits(KbnError); - - /** - * a field mapping was using a restricted fields name - * @param {String} field - the fields which contains the conflict - */ - errors.RestrictedMapping = function RestrictedMapping(field, index) { - var msg = field + ' is a restricted field name'; - if (index) msg += ', found it while attempting to fetch mapping for index pattern: ' + index; - - KbnError.call(this, msg, errors.RestrictedMapping); - }; - _.class(errors.RestrictedMapping).inherits(KbnError); - - /** - * a non-critical cache write to elasticseach failed - */ - errors.CacheWriteFailure = function CacheWriteFailure() { - KbnError.call(this, - 'A Elasticsearch cache write has failed.', - errors.CacheWriteFailure); - }; - _.class(errors.CacheWriteFailure).inherits(KbnError); - - /** - * when a field mapping is requested for an unknown field - * @param {String} name - the field name - */ - errors.FieldNotFoundInCache = function FieldNotFoundInCache(name) { - KbnError.call(this, - 'The ' + name + ' field was not found in the cached mappings', - errors.FieldNotFoundInCache); - }; - _.class(errors.FieldNotFoundInCache).inherits(KbnError); - - /** - * when a mapping already exists for a field the user is attempting to add - * @param {String} name - the field name - */ - errors.DuplicateField = function DuplicateField(name) { - KbnError.call(this, - 'The "' + name + '" field already exists in this mapping', - errors.DuplicateField); - }; - _.class(errors.DuplicateField).inherits(KbnError); - - /** - * A saved object was not found - * @param {String} field - the fields which contains the conflict - */ - errors.SavedObjectNotFound = function SavedObjectNotFound(type, id) { - this.savedObjectType = type; - this.savedObjectId = id; - var idMsg = id ? ' (id: ' + id + ')' : ''; - KbnError.call(this, - 'Could not locate that ' + type + idMsg, - errors.SavedObjectNotFound); - }; - _.class(errors.SavedObjectNotFound).inherits(KbnError); - - /** - * Tried to call a method that relies on SearchSource having an indexPattern assigned - */ - errors.IndexPatternMissingIndices = function IndexPatternMissingIndices(type) { - KbnError.call(this, - 'IndexPattern\'s configured pattern does not match any indices', - errors.IndexPatternMissingIndices); - }; - _.class(errors.IndexPatternMissingIndices).inherits(KbnError); - - /** - * Tried to call a method that relies on SearchSource having an indexPattern assigned - */ - errors.NoDefinedIndexPatterns = function NoDefinedIndexPatterns(type) { - KbnError.call(this, - 'Define at least one index pattern to continue', - errors.NoDefinedIndexPatterns); - }; - _.class(errors.NoDefinedIndexPatterns).inherits(KbnError); - - - /** - * Tried to load a route besides settings/indices but you don't have a default index pattern! - */ - errors.NoDefaultIndexPattern = function NoDefaultIndexPattern(type) { - KbnError.call(this, - 'Please specify a default index pattern', - errors.NoDefaultIndexPattern); - }; - _.class(errors.NoDefaultIndexPattern).inherits(KbnError); - - - /** - * used by the vislib, when the container is too small - * @param {String} message - the message to provide with the error - */ - errors.ContainerTooSmall = function ContainerTooSmall() { - KbnError.call(this, - 'This container is too small to render the visualization', - errors.ContainerTooSmall); - }; - _.class(errors.ContainerTooSmall).inherits(KbnError); - - /** - * error thrown when user tries to render an chart with less - * than the required number of data points - * @param {String} message - the message to provide with the error - */ - errors.NotEnoughData = function NotEnoughData(message) { - KbnError.call(this, message, errors.NotEnoughData); - }; - _.class(errors.NotEnoughData).inherits(KbnError); - - /** - * error thrown when no results are returned from an elasticsearch query - */ - errors.NoResults = function NoResults() { - KbnError.call(this, - 'No results found', - errors.NoResults); - }; - _.class(errors.NoResults).inherits(KbnError); - - /** - * error thrown when no results are returned from an elasticsearch query - */ - errors.PieContainsAllZeros = function PieContainsAllZeros() { - KbnError.call(this, - 'No results displayed because all values equal 0', - errors.PieContainsAllZeros); - }; - _.class(errors.PieContainsAllZeros).inherits(KbnError); - - /** - * error thrown when no results are returned from an elasticsearch query - */ - errors.InvalidLogScaleValues = function InvalidLogScaleValues() { - KbnError.call(this, - 'Values less than 1 cannot be displayed on a log scale', - errors.InvalidLogScaleValues); - }; - _.class(errors.InvalidLogScaleValues).inherits(KbnError); - - /** error thrown when wiggle chart is selected for non linear data */ - errors.InvalidWiggleSelection = function InvalidWiggleSelection() { - KbnError.call(this, - 'In wiggle mode the area chart requires ordered values on the x-axis. Try using a Histogram or Date Histogram aggregation.', - errors.InvalidWiggleSelection); - }; - _.class(errors.InvalidWiggleSelection).inherits(KbnError); - - errors.PersistedStateError = function PersistedStateError(msg) { - KbnError.call(this, - msg || 'PersistedState Error', - errors.PersistedStateError); - }; - _.class(errors.PersistedStateError).inherits(KbnError); - - - return errors; -}); +} +errors.KbnError = KbnError; +_.class(KbnError).inherits(Error); + +/** + * HastyRefresh error class + * @param {String} [msg] - An error message that will probably end up in a log. + */ +errors.HastyRefresh = function HastyRefresh() { + KbnError.call(this, + 'Courier attempted to start a query before the previous had finished.', + errors.HastyRefresh); +}; +_.class(errors.HastyRefresh).inherits(KbnError); + +/** + * SearchTimeout error class + */ +errors.SearchTimeout = function SearchTimeout() { + KbnError.call(this, + 'All or part of your request has timed out. The data shown may be incomplete.', + errors.SearchTimeout); +}; +_.class(errors.SearchTimeout).inherits(KbnError); + +/** + * Request Failure - When an entire mutli request fails + * @param {Error} err - the Error that came back + * @param {Object} resp - optional HTTP response + */ +errors.RequestFailure = function RequestFailure(err, resp) { + err = err || false; + + KbnError.call(this, + 'Request to Elasticsearch failed: ' + angular.toJson(resp || err.message), + errors.RequestFailure); + + this.origError = err; + this.resp = resp; +}; +_.class(errors.RequestFailure).inherits(KbnError); + +/** + * FetchFailure Error - when there is an error getting a doc or search within + * a multi-response response body + * @param {String} [msg] - An error message that will probably end up in a log. + */ +errors.FetchFailure = function FetchFailure(resp) { + KbnError.call(this, + 'Failed to get the doc: ' + angular.toJson(resp), + errors.FetchFailure); + + this.resp = resp; +}; +_.class(errors.FetchFailure).inherits(KbnError); + +/** + * ShardFailure Error - when one or more shards fail + * @param {String} [msg] - An error message that will probably end up in a log. + */ +errors.ShardFailure = function ShardFailure(resp) { + KbnError.call(this, resp._shards.failed + ' of ' + resp._shards.total + ' shards failed.', + errors.ShardFailure); + + this.resp = resp; +}; +_.class(errors.ShardFailure).inherits(KbnError); + + +/** + * A doc was re-indexed but it was out of date. + * @param {Object} resp - The response from es (one of the multi-response responses). + */ +errors.VersionConflict = function VersionConflict(resp) { + KbnError.call(this, + 'Failed to store document changes do to a version conflict.', + errors.VersionConflict); + + this.resp = resp; +}; +_.class(errors.VersionConflict).inherits(KbnError); + + +/** + * there was a conflict storing a doc + * @param {String} field - the fields which contains the conflict + */ +errors.MappingConflict = function MappingConflict(field) { + KbnError.call(this, + 'Field "' + field + '" is defined with at least two different types in indices matching the pattern', + errors.MappingConflict); +}; +_.class(errors.MappingConflict).inherits(KbnError); + +/** + * a field mapping was using a restricted fields name + * @param {String} field - the fields which contains the conflict + */ +errors.RestrictedMapping = function RestrictedMapping(field, index) { + var msg = field + ' is a restricted field name'; + if (index) msg += ', found it while attempting to fetch mapping for index pattern: ' + index; + + KbnError.call(this, msg, errors.RestrictedMapping); +}; +_.class(errors.RestrictedMapping).inherits(KbnError); + +/** + * a non-critical cache write to elasticseach failed + */ +errors.CacheWriteFailure = function CacheWriteFailure() { + KbnError.call(this, + 'A Elasticsearch cache write has failed.', + errors.CacheWriteFailure); +}; +_.class(errors.CacheWriteFailure).inherits(KbnError); + +/** + * when a field mapping is requested for an unknown field + * @param {String} name - the field name + */ +errors.FieldNotFoundInCache = function FieldNotFoundInCache(name) { + KbnError.call(this, + 'The ' + name + ' field was not found in the cached mappings', + errors.FieldNotFoundInCache); +}; +_.class(errors.FieldNotFoundInCache).inherits(KbnError); + +/** + * when a mapping already exists for a field the user is attempting to add + * @param {String} name - the field name + */ +errors.DuplicateField = function DuplicateField(name) { + KbnError.call(this, + 'The "' + name + '" field already exists in this mapping', + errors.DuplicateField); +}; +_.class(errors.DuplicateField).inherits(KbnError); + +/** + * A saved object was not found + * @param {String} field - the fields which contains the conflict + */ +errors.SavedObjectNotFound = function SavedObjectNotFound(type, id) { + this.savedObjectType = type; + this.savedObjectId = id; + var idMsg = id ? ' (id: ' + id + ')' : ''; + KbnError.call(this, + 'Could not locate that ' + type + idMsg, + errors.SavedObjectNotFound); +}; +_.class(errors.SavedObjectNotFound).inherits(KbnError); + +/** + * Tried to call a method that relies on SearchSource having an indexPattern assigned + */ +errors.IndexPatternMissingIndices = function IndexPatternMissingIndices(type) { + KbnError.call(this, + 'IndexPattern\'s configured pattern does not match any indices', + errors.IndexPatternMissingIndices); +}; +_.class(errors.IndexPatternMissingIndices).inherits(KbnError); + +/** + * Tried to call a method that relies on SearchSource having an indexPattern assigned + */ +errors.NoDefinedIndexPatterns = function NoDefinedIndexPatterns(type) { + KbnError.call(this, + 'Define at least one index pattern to continue', + errors.NoDefinedIndexPatterns); +}; +_.class(errors.NoDefinedIndexPatterns).inherits(KbnError); + + +/** + * Tried to load a route besides settings/indices but you don't have a default index pattern! + */ +errors.NoDefaultIndexPattern = function NoDefaultIndexPattern(type) { + KbnError.call(this, + 'Please specify a default index pattern', + errors.NoDefaultIndexPattern); +}; +_.class(errors.NoDefaultIndexPattern).inherits(KbnError); + + +/** + * used by the vislib, when the container is too small + * @param {String} message - the message to provide with the error + */ +errors.ContainerTooSmall = function ContainerTooSmall() { + KbnError.call(this, + 'This container is too small to render the visualization', + errors.ContainerTooSmall); +}; +_.class(errors.ContainerTooSmall).inherits(KbnError); + +/** + * error thrown when user tries to render an chart with less + * than the required number of data points + * @param {String} message - the message to provide with the error + */ +errors.NotEnoughData = function NotEnoughData(message) { + KbnError.call(this, message, errors.NotEnoughData); +}; +_.class(errors.NotEnoughData).inherits(KbnError); + +/** + * error thrown when no results are returned from an elasticsearch query + */ +errors.NoResults = function NoResults() { + KbnError.call(this, + 'No results found', + errors.NoResults); +}; +_.class(errors.NoResults).inherits(KbnError); + +/** + * error thrown when no results are returned from an elasticsearch query + */ +errors.PieContainsAllZeros = function PieContainsAllZeros() { + KbnError.call(this, + 'No results displayed because all values equal 0', + errors.PieContainsAllZeros); +}; +_.class(errors.PieContainsAllZeros).inherits(KbnError); + +/** + * error thrown when no results are returned from an elasticsearch query + */ +errors.InvalidLogScaleValues = function InvalidLogScaleValues() { + KbnError.call(this, + 'Values less than 1 cannot be displayed on a log scale', + errors.InvalidLogScaleValues); +}; +_.class(errors.InvalidLogScaleValues).inherits(KbnError); + +/** error thrown when wiggle chart is selected for non linear data */ +errors.InvalidWiggleSelection = function InvalidWiggleSelection() { + KbnError.call(this, + 'In wiggle mode the area chart requires ordered values on the x-axis. Try using a Histogram or Date Histogram aggregation.', + errors.InvalidWiggleSelection); +}; +_.class(errors.InvalidWiggleSelection).inherits(KbnError); + +errors.PersistedStateError = function PersistedStateError(msg) { + KbnError.call(this, + msg || 'PersistedState Error', + errors.PersistedStateError); +}; +_.class(errors.PersistedStateError).inherits(KbnError); + + +export default errors; diff --git a/src/ui/public/es.js b/src/ui/public/es.js index c95deb3f49eeda..a3090c186b4954 100644 --- a/src/ui/public/es.js +++ b/src/ui/public/es.js @@ -1,40 +1,38 @@ import 'elasticsearch-browser/elasticsearch.angular.js'; import _ from 'lodash'; -define(function (require) { - - var es; // share the client amoungst all apps - require('ui/modules') - .get('kibana', ['elasticsearch', 'kibana/config']) - .service('es', function (esFactory, esUrl, $q, esApiVersion) { - if (es) return es; - - es = esFactory({ - host: esUrl, - log: 'info', - requestTimeout: 0, - apiVersion: esApiVersion, - plugins: [function (Client, config) { - - // esFactory automatically injects the AngularConnector to the config - // https://github.com/elastic/elasticsearch-js/blob/master/src/lib/connectors/angular.js - _.class(CustomAngularConnector).inherits(config.connectionClass); - function CustomAngularConnector(host, config) { - CustomAngularConnector.Super.call(this, host, config); - - this.request = _.wrap(this.request, function (request, params, cb) { - if (String(params.method).toUpperCase() === 'GET') { - params.query = _.defaults({ _: Date.now() }, params.query); - } - - return request.call(this, params, cb); - }); - } - - config.connectionClass = CustomAngularConnector; - - }] - }); - - return es; + +var es; // share the client amoungst all apps +require('ui/modules') + .get('kibana', ['elasticsearch', 'kibana/config']) + .service('es', function (esFactory, esUrl, $q, esApiVersion) { + if (es) return es; + + es = esFactory({ + host: esUrl, + log: 'info', + requestTimeout: 0, + apiVersion: esApiVersion, + plugins: [function (Client, config) { + + // esFactory automatically injects the AngularConnector to the config + // https://github.com/elastic/elasticsearch-js/blob/master/src/lib/connectors/angular.js + _.class(CustomAngularConnector).inherits(config.connectionClass); + function CustomAngularConnector(host, config) { + CustomAngularConnector.Super.call(this, host, config); + + this.request = _.wrap(this.request, function (request, params, cb) { + if (String(params.method).toUpperCase() === 'GET') { + params.query = _.defaults({ _: Date.now() }, params.query); + } + + return request.call(this, params, cb); + }); + } + + config.connectionClass = CustomAngularConnector; + + }] }); -}); + + return es; + }); diff --git a/src/ui/public/events.js b/src/ui/public/events.js index 3b5daa2ae512d6..5bf1320829a09e 100644 --- a/src/ui/public/events.js +++ b/src/ui/public/events.js @@ -1,106 +1,104 @@ import _ from 'lodash'; import Notifier from 'ui/notify/notifier'; import SimpleEmitter from 'ui/utils/SimpleEmitter'; -define(function (require) { - return function EventsProvider(Private, Promise) { - var notify = new Notifier({ location: 'EventEmitter' }); - - _.class(Events).inherits(SimpleEmitter); - function Events() { - Events.Super.call(this); - this._listeners = {}; - this._emitChain = Promise.resolve(); +export default function EventsProvider(Private, Promise) { + var notify = new Notifier({ location: 'EventEmitter' }); + + _.class(Events).inherits(SimpleEmitter); + function Events() { + Events.Super.call(this); + this._listeners = {}; + this._emitChain = Promise.resolve(); + } + + /** + * Listens for events + * @param {string} name - The name of the event + * @param {function} handler - The function to call when the event is triggered + * @return {Events} - this, for chaining + */ + Events.prototype.on = function (name, handler) { + if (!_.isArray(this._listeners[name])) { + this._listeners[name] = []; } - /** - * Listens for events - * @param {string} name - The name of the event - * @param {function} handler - The function to call when the event is triggered - * @return {Events} - this, for chaining - */ - Events.prototype.on = function (name, handler) { - if (!_.isArray(this._listeners[name])) { - this._listeners[name] = []; - } - - var listener = { - handler: handler - }; - this._listeners[name].push(listener); - - (function rebuildDefer() { - listener.defer = Promise.defer(); - listener.resolved = listener.defer.promise.then(function (args) { - rebuildDefer(); - - // we ignore the completion of handlers, just watch for unhandled errors - Promise.resolve(handler.apply(handler, args)).catch(notify.fatal); - }); - }()); - - return this; + var listener = { + handler: handler }; + this._listeners[name].push(listener); - /** - * Removes an event listener - * @param {string} [name] - The name of the event - * @param {function} [handler] - The handler to remove - * @return {Events} - this, for chaining - */ - Events.prototype.off = function (name, handler) { - if (!name && !handler) { - return this.removeAllListeners(); - } - - // exit early if there is not an event that matches - if (!this._listeners[name]) return this; - - // If no hander remove all the events - if (!handler) { - delete this._listeners[name]; - } else { - this._listeners[name] = _.filter(this._listeners[name], function (listener) { - return handler !== listener.handler; - }); - } - - return this; - }; + (function rebuildDefer() { + listener.defer = Promise.defer(); + listener.resolved = listener.defer.promise.then(function (args) { + rebuildDefer(); - /** - * Emits the event to all listeners - * - * @param {string} name - The name of the event. - * @param {any} [value] - The value that will be passed to all event handlers. - * @returns {Promise} - */ - Events.prototype.emit = function (name) { - var self = this; - var args = _.rest(arguments); - - if (!self._listeners[name]) { - return self._emitChain; - } - - return Promise.map(self._listeners[name], function (listener) { - return self._emitChain = self._emitChain.then(function () { - listener.defer.resolve(args); - return listener.resolved; - }); + // we ignore the completion of handlers, just watch for unhandled errors + Promise.resolve(handler.apply(handler, args)).catch(notify.fatal); }); - }; + }()); - /** - * Get a list of the handler functions for a specific event - * - * @param {string} name - * @return {array[function]} - */ - Events.prototype.listeners = function (name) { - return _.pluck(this._listeners[name], 'handler'); - }; + return this; + }; - return Events; + /** + * Removes an event listener + * @param {string} [name] - The name of the event + * @param {function} [handler] - The handler to remove + * @return {Events} - this, for chaining + */ + Events.prototype.off = function (name, handler) { + if (!name && !handler) { + return this.removeAllListeners(); + } + + // exit early if there is not an event that matches + if (!this._listeners[name]) return this; + + // If no hander remove all the events + if (!handler) { + delete this._listeners[name]; + } else { + this._listeners[name] = _.filter(this._listeners[name], function (listener) { + return handler !== listener.handler; + }); + } + + return this; }; -}); + + /** + * Emits the event to all listeners + * + * @param {string} name - The name of the event. + * @param {any} [value] - The value that will be passed to all event handlers. + * @returns {Promise} + */ + Events.prototype.emit = function (name) { + var self = this; + var args = _.rest(arguments); + + if (!self._listeners[name]) { + return self._emitChain; + } + + return Promise.map(self._listeners[name], function (listener) { + return self._emitChain = self._emitChain.then(function () { + listener.defer.resolve(args); + return listener.resolved; + }); + }); + }; + + /** + * Get a list of the handler functions for a specific event + * + * @param {string} name + * @return {array[function]} + */ + Events.prototype.listeners = function (name) { + return _.pluck(this._listeners[name], 'handler'); + }; + + return Events; +}; diff --git a/src/ui/public/fancy_forms/KbnFormController.js b/src/ui/public/fancy_forms/KbnFormController.js index 1be26cc3efeb5f..2fbdbab4ca47e8 100644 --- a/src/ui/public/fancy_forms/KbnFormController.js +++ b/src/ui/public/fancy_forms/KbnFormController.js @@ -1,78 +1,76 @@ import _ from 'lodash'; -define(function (require) { - /** - * Extension of Angular's FormController class - * that provides helpers for error handling/validation. - * - * @param {$scope} $scope - */ - function KbnFormController($scope, $element) { - var self = this; +/** + * Extension of Angular's FormController class + * that provides helpers for error handling/validation. + * + * @param {$scope} $scope + */ +function KbnFormController($scope, $element) { + var self = this; - self.errorCount = function (predicate) { - return self.$$invalidModels().length; - }; + self.errorCount = function (predicate) { + return self.$$invalidModels().length; + }; - // same as error count, but filters out untouched and pristine models - self.softErrorCount = function () { - return self.$$invalidModels(function (model) { - return model.$touched || model.$dirty; - }).length; - }; + // same as error count, but filters out untouched and pristine models + self.softErrorCount = function () { + return self.$$invalidModels(function (model) { + return model.$touched || model.$dirty; + }).length; + }; - self.describeErrors = function () { - var count = self.softErrorCount(); - return count + ' Error' + (count === 1 ? '' : 's'); - }; + self.describeErrors = function () { + var count = self.softErrorCount(); + return count + ' Error' + (count === 1 ? '' : 's'); + }; - self.$$invalidModels = function (predicate) { - predicate = _.callback(predicate); + self.$$invalidModels = function (predicate) { + predicate = _.callback(predicate); - var invalid = []; + var invalid = []; - _.forOwn(self.$error, function collect(models) { - if (!models) return; + _.forOwn(self.$error, function collect(models) { + if (!models) return; - models.forEach(function (model) { - if (model.$$invalidModels) { - // recurse into child form - _.forOwn(model.$error, collect); - } else { - if (predicate(model)) { - // prevent dups - var len = invalid.length; - while (len--) if (invalid[len] === model) return; + models.forEach(function (model) { + if (model.$$invalidModels) { + // recurse into child form + _.forOwn(model.$error, collect); + } else { + if (predicate(model)) { + // prevent dups + var len = invalid.length; + while (len--) if (invalid[len] === model) return; - invalid.push(model); - } + invalid.push(model); } - }); + } }); + }); - return invalid; - }; + return invalid; + }; - self.$setTouched = function () { - self.$$invalidModels().forEach(function (model) { - // only kbnModels have $setTouched - if (model.$setTouched) model.$setTouched(); - }); - }; + self.$setTouched = function () { + self.$$invalidModels().forEach(function (model) { + // only kbnModels have $setTouched + if (model.$setTouched) model.$setTouched(); + }); + }; - function filterSubmits(event) { - if (self.errorCount()) { - event.preventDefault(); - event.stopImmediatePropagation(); - self.$setTouched(); - } + function filterSubmits(event) { + if (self.errorCount()) { + event.preventDefault(); + event.stopImmediatePropagation(); + self.$setTouched(); } - - $element.on('submit', filterSubmits); - $scope.$on('$destroy', function () { - $element.off('submit', filterSubmits); - }); } - return KbnFormController; -}); + $element.on('submit', filterSubmits); + $scope.$on('$destroy', function () { + $element.off('submit', filterSubmits); + }); +} + +export default KbnFormController; diff --git a/src/ui/public/fancy_forms/fancy_forms.js b/src/ui/public/fancy_forms/fancy_forms.js index 0ced0b9d41e40f..0546f581ad395e 100644 --- a/src/ui/public/fancy_forms/fancy_forms.js +++ b/src/ui/public/fancy_forms/fancy_forms.js @@ -1,43 +1,41 @@ import _ from 'lodash'; import $ from 'jquery'; import KbnFormController from 'ui/fancy_forms/KbnFormController'; -define(function (require) { - require('ui/modules') - .get('kibana') - .config(function ($provide) { - function decorateDirectiveController(DecorativeController) { - return function ($delegate, $injector) { - // directive providers are arrays - $delegate.forEach(function (directive) { - // get metadata about all init fns - var chain = [directive.controller, DecorativeController].map(function (fn) { - var deps = $injector.annotate(fn); - return { deps: deps, fn: _.isArray(fn) ? _.last(fn) : fn }; - }); +require('ui/modules') +.get('kibana') +.config(function ($provide) { + function decorateDirectiveController(DecorativeController) { + return function ($delegate, $injector) { + // directive providers are arrays + $delegate.forEach(function (directive) { + // get metadata about all init fns + var chain = [directive.controller, DecorativeController].map(function (fn) { + var deps = $injector.annotate(fn); + return { deps: deps, fn: _.isArray(fn) ? _.last(fn) : fn }; + }); - // replace the controller with one that will setup the actual controller - directive.controller = function stub() { - var allDeps = _.toArray(arguments); - return chain.reduce(function (controller, link, i) { - var deps = allDeps.splice(0, link.deps.length); - return link.fn.apply(controller, deps) || controller; - }, this); - }; + // replace the controller with one that will setup the actual controller + directive.controller = function stub() { + var allDeps = _.toArray(arguments); + return chain.reduce(function (controller, link, i) { + var deps = allDeps.splice(0, link.deps.length); + return link.fn.apply(controller, deps) || controller; + }, this); + }; - // set the deps of our new controller to be the merged deps of every fn - directive.controller.$inject = chain.reduce(function (deps, link) { - return deps.concat(link.deps); - }, []); - }); + // set the deps of our new controller to be the merged deps of every fn + directive.controller.$inject = chain.reduce(function (deps, link) { + return deps.concat(link.deps); + }, []); + }); - return $delegate; - }; - } + return $delegate; + }; + } - $provide.decorator('formDirective', decorateDirectiveController(KbnFormController)); - $provide.decorator('ngFormDirective', decorateDirectiveController(KbnFormController)); - }); + $provide.decorator('formDirective', decorateDirectiveController(KbnFormController)); + $provide.decorator('ngFormDirective', decorateDirectiveController(KbnFormController)); }); diff --git a/src/ui/public/field_editor/field_editor.js b/src/ui/public/field_editor/field_editor.js index ff789081bfc515..ce338169cc2e86 100644 --- a/src/ui/public/field_editor/field_editor.js +++ b/src/ui/public/field_editor/field_editor.js @@ -4,142 +4,140 @@ import 'angular-bootstrap-colorpicker/css/colorpicker.css'; import _ from 'lodash'; import RegistryFieldFormatsProvider from 'ui/registry/field_formats'; import IndexPatternsFieldProvider from 'ui/index_patterns/_field'; -define(function (require) { - - - require('ui/modules') - .get('kibana', ['colorpicker.module']) - .directive('fieldEditor', function (Private, $sce) { - var fieldFormats = Private(RegistryFieldFormatsProvider); - var Field = Private(IndexPatternsFieldProvider); - var scriptingInfo = $sce.trustAsHtml(require('ui/field_editor/scripting_info.html')); - var scriptingWarning = $sce.trustAsHtml(require('ui/field_editor/scripting_warning.html')); - - return { - restrict: 'E', - template: require('ui/field_editor/field_editor.html'), - scope: { - getIndexPattern: '&indexPattern', - getField: '&field' - }, - controllerAs: 'editor', - controller: function ($scope, Notifier, kbnUrl) { - var self = this; - var notify = new Notifier({ location: 'Field Editor' }); - - self.scriptingInfo = scriptingInfo; - self.scriptingWarning = scriptingWarning; - - self.indexPattern = $scope.getIndexPattern(); - self.field = shadowCopy($scope.getField()); - self.formatParams = self.field.format.params(); - - // only init on first create - self.creating = !self.indexPattern.fields.byName[self.field.name]; - self.selectedFormatId = _.get(self.indexPattern, ['fieldFormatMap', self.field.name, 'type', 'id']); - self.defFormatType = initDefaultFormat(); - self.fieldFormatTypes = [self.defFormatType].concat(fieldFormats.byFieldType[self.field.type] || []); - - self.cancel = redirectAway; - self.save = function () { - var indexPattern = self.indexPattern; - var fields = indexPattern.fields; - var field = self.field.toActualField(); - - fields.remove({ name: field.name }); - fields.push(field); - - if (!self.selectedFormatId) { - delete indexPattern.fieldFormatMap[field.name]; - } else { - indexPattern.fieldFormatMap[field.name] = self.field.format; - } - - return indexPattern.save() - .then(function () { - notify.info('Saved Field "' + self.field.name + '"'); - redirectAway(); - }); - }; - self.delete = function () { - var indexPattern = self.indexPattern; - var field = self.field; - indexPattern.fields.remove({ name: field.name }); - return indexPattern.save() - .then(function () { - notify.info('Deleted Field "' + field.name + '"'); - redirectAway(); - }); - }; +require('ui/modules') +.get('kibana', ['colorpicker.module']) +.directive('fieldEditor', function (Private, $sce) { + var fieldFormats = Private(RegistryFieldFormatsProvider); + var Field = Private(IndexPatternsFieldProvider); + var scriptingInfo = $sce.trustAsHtml(require('ui/field_editor/scripting_info.html')); + var scriptingWarning = $sce.trustAsHtml(require('ui/field_editor/scripting_warning.html')); + + return { + restrict: 'E', + template: require('ui/field_editor/field_editor.html'), + scope: { + getIndexPattern: '&indexPattern', + getField: '&field' + }, + controllerAs: 'editor', + controller: function ($scope, Notifier, kbnUrl) { + var self = this; + var notify = new Notifier({ location: 'Field Editor' }); + + self.scriptingInfo = scriptingInfo; + self.scriptingWarning = scriptingWarning; + + self.indexPattern = $scope.getIndexPattern(); + self.field = shadowCopy($scope.getField()); + self.formatParams = self.field.format.params(); + + // only init on first create + self.creating = !self.indexPattern.fields.byName[self.field.name]; + self.selectedFormatId = _.get(self.indexPattern, ['fieldFormatMap', self.field.name, 'type', 'id']); + self.defFormatType = initDefaultFormat(); + self.fieldFormatTypes = [self.defFormatType].concat(fieldFormats.byFieldType[self.field.type] || []); + + self.cancel = redirectAway; + self.save = function () { + var indexPattern = self.indexPattern; + var fields = indexPattern.fields; + var field = self.field.toActualField(); + + fields.remove({ name: field.name }); + fields.push(field); + + if (!self.selectedFormatId) { + delete indexPattern.fieldFormatMap[field.name]; + } else { + indexPattern.fieldFormatMap[field.name] = self.field.format; + } - $scope.$watch('editor.selectedFormatId', function (cur, prev) { - var format = self.field.format; - var changedFormat = cur !== prev; - var missingFormat = cur && (!format || format.type.id !== cur); + return indexPattern.save() + .then(function () { + notify.info('Saved Field "' + self.field.name + '"'); + redirectAway(); + }); + }; - if (!changedFormat || !missingFormat) return; + self.delete = function () { + var indexPattern = self.indexPattern; + var field = self.field; - // reset to the defaults, but make sure it's an object - self.formatParams = _.assign({}, _.cloneDeep(getFieldFormatType().paramDefaults)); + indexPattern.fields.remove({ name: field.name }); + return indexPattern.save() + .then(function () { + notify.info('Deleted Field "' + field.name + '"'); + redirectAway(); }); + }; + + $scope.$watch('editor.selectedFormatId', function (cur, prev) { + var format = self.field.format; + var changedFormat = cur !== prev; + var missingFormat = cur && (!format || format.type.id !== cur); + + if (!changedFormat || !missingFormat) return; + + // reset to the defaults, but make sure it's an object + self.formatParams = _.assign({}, _.cloneDeep(getFieldFormatType().paramDefaults)); + }); + + $scope.$watch('editor.formatParams', function () { + var FieldFormat = getFieldFormatType(); + self.field.format = new FieldFormat(self.formatParams); + }, true); + + // copy the defined properties of the field to a plain object + // which is mutable, and capture the changed seperately. + function shadowCopy(field) { + var changes = {}; + var shadowProps = { + toActualField: { + // bring the shadow copy out of the shadows + value: function toActualField() { + return new Field(self.indexPattern, _.defaults({}, changes, field.$$spec)); + } + } + }; - $scope.$watch('editor.formatParams', function () { - var FieldFormat = getFieldFormatType(); - self.field.format = new FieldFormat(self.formatParams); - }, true); - - // copy the defined properties of the field to a plain object - // which is mutable, and capture the changed seperately. - function shadowCopy(field) { - var changes = {}; - var shadowProps = { - toActualField: { - // bring the shadow copy out of the shadows - value: function toActualField() { - return new Field(self.indexPattern, _.defaults({}, changes, field.$$spec)); - } + Object.getOwnPropertyNames(field).forEach(function (prop) { + var desc = Object.getOwnPropertyDescriptor(field, prop); + shadowProps[prop] = { + enumerable: desc.enumerable, + get: function () { + return _.has(changes, prop) ? changes[prop] : field[prop]; + }, + set: function (v) { + changes[prop] = v; } }; + }); - Object.getOwnPropertyNames(field).forEach(function (prop) { - var desc = Object.getOwnPropertyDescriptor(field, prop); - shadowProps[prop] = { - enumerable: desc.enumerable, - get: function () { - return _.has(changes, prop) ? changes[prop] : field[prop]; - }, - set: function (v) { - changes[prop] = v; - } - }; - }); - - return Object.create(null, shadowProps); - } + return Object.create(null, shadowProps); + } - function redirectAway() { - kbnUrl.changeToRoute(self.indexPattern, self.field.scripted ? 'scriptedFields' : 'indexedFields'); - } + function redirectAway() { + kbnUrl.changeToRoute(self.indexPattern, self.field.scripted ? 'scriptedFields' : 'indexedFields'); + } - function getFieldFormatType() { - if (self.selectedFormatId) return fieldFormats.getType(self.selectedFormatId); - else return fieldFormats.getDefaultType(self.field.type); - } + function getFieldFormatType() { + if (self.selectedFormatId) return fieldFormats.getType(self.selectedFormatId); + else return fieldFormats.getDefaultType(self.field.type); + } - function initDefaultFormat() { - var def = Object.create(fieldFormats.getDefaultType(self.field.type)); + function initDefaultFormat() { + var def = Object.create(fieldFormats.getDefaultType(self.field.type)); - // explicitly set to undefined to prevent inheritting the prototypes id - def.id = undefined; - def.resolvedTitle = def.title; - def.title = '- default - '; + // explicitly set to undefined to prevent inheritting the prototypes id + def.id = undefined; + def.resolvedTitle = def.title; + def.title = '- default - '; - return def; - } + return def; } - }; - }); - + } + }; }); + diff --git a/src/ui/public/field_format_editor/field_format_editor.js b/src/ui/public/field_format_editor/field_format_editor.js index 2f8efd0ae5b06f..d8e7c180f34dc4 100644 --- a/src/ui/public/field_format_editor/field_format_editor.js +++ b/src/ui/public/field_format_editor/field_format_editor.js @@ -1,122 +1,120 @@ import _ from 'lodash'; import $ from 'jquery'; -define(function (require) { - - require('ui/modules') - .get('app/settings') - .directive('fieldFormatEditor', function (Private, $compile) { - return { - restrict: 'A', - scope: { - getField: '&field', - getFormatParams: '&formatParams' - }, - controllerAs: 'editor', - controller: function ($scope) { - var self = this; - - // bind the scope values to the controller, down with $scope.values - $scope.editor = this; - $scope.$bind('editor.field', 'getField()', $scope); - $scope.$bind('editor.formatParams', 'getFormatParams()', $scope); - - /** - * Read the FieldFormat's editor property and convert it into - * a "pseudoDirective". For clarity I'm reusing the directive def - * object api, but for simplicity not implementing the entire thing. - * - * possible configs: - * string: - * - used as an angular template - * directive def object, with support for the following opts: - * - template - * - compile or link - * - scope (creates isolate, reads from parent scope, not attributes) - * - controller - * - controllerAs - * - * @param {angular.element} $el - template - * @param {object} directiveDef - the directive definition object - * @return {undefined} - */ - $scope.$watch('editor.field.format.type', function (FieldFormat) { - var opts = FieldFormat && FieldFormat.editor; - - if (!opts) { - delete self.$$pseudoDirective; - return; - } - - if (typeof opts === 'string') { - self.$$pseudoDirective = { - template: opts - }; - return; - } +require('ui/modules') +.get('app/settings') +.directive('fieldFormatEditor', function (Private, $compile) { + return { + restrict: 'A', + scope: { + getField: '&field', + getFormatParams: '&formatParams' + }, + controllerAs: 'editor', + controller: function ($scope) { + var self = this; + + // bind the scope values to the controller, down with $scope.values + $scope.editor = this; + $scope.$bind('editor.field', 'getField()', $scope); + $scope.$bind('editor.formatParams', 'getFormatParams()', $scope); + + /** + * Read the FieldFormat's editor property and convert it into + * a "pseudoDirective". For clarity I'm reusing the directive def + * object api, but for simplicity not implementing the entire thing. + * + * possible configs: + * string: + * - used as an angular template + * directive def object, with support for the following opts: + * - template + * - compile or link + * - scope (creates isolate, reads from parent scope, not attributes) + * - controller + * - controllerAs + * + * @param {angular.element} $el - template + * @param {object} directiveDef - the directive definition object + * @return {undefined} + */ + $scope.$watch('editor.field.format.type', function (FieldFormat) { + var opts = FieldFormat && FieldFormat.editor; + + if (!opts) { + delete self.$$pseudoDirective; + return; + } + + if (typeof opts === 'string') { self.$$pseudoDirective = { - template: opts.template, - compile: opts.compile || function () { - return opts.link; - }, - scope: opts.scope || false, - controller: opts.controller, - controllerAs: opts.controllerAs + template: opts }; + return; + } + + self.$$pseudoDirective = { + template: opts.template, + compile: opts.compile || function () { + return opts.link; + }, + scope: opts.scope || false, + controller: opts.controller, + controllerAs: opts.controllerAs + }; + }); + + }, + link: function ($scope, $el) { + var scopesToTeardown = []; + + function setupScope(opts) { + if (typeof opts !== 'object') { + return scopesToTeardown[scopesToTeardown.push($scope.$new()) - 1]; + } + + var isolate = scopesToTeardown[scopesToTeardown.push($scope.$new(true)) - 1]; + _.forOwn(opts, function (from, to) { + isolate.$bind(to, from, $scope); }); + return isolate; + } - }, - link: function ($scope, $el) { - var scopesToTeardown = []; + $scope.$watch('editor.$$pseudoDirective', function (directive) { + $el.empty(); + _.invoke(scopesToTeardown.splice(0), '$destroy'); - function setupScope(opts) { - if (typeof opts !== 'object') { - return scopesToTeardown[scopesToTeardown.push($scope.$new()) - 1]; - } + if (!directive) return $el.hide(); + else $el.show(); - var isolate = scopesToTeardown[scopesToTeardown.push($scope.$new(true)) - 1]; - _.forOwn(opts, function (from, to) { - isolate.$bind(to, from, $scope); - }); - return isolate; + var askedForChild = !!directive.scope; + var reuseScope = !askedForChild && !directive.controller; + + var $formatEditor = $('
      ').html(directive.template); + var $formatEditorScope = reuseScope ? $scope : setupScope(directive.scope); + + if (directive.controller) { + // bind the controller to the injected element + var cntrlAs = (directive.controllerAs ? ' as ' + directive.controllerAs : ''); + $formatEditorScope.Controller = directive.controller; + $formatEditor.attr('ng-controller', 'Controller' + cntrlAs); } - $scope.$watch('editor.$$pseudoDirective', function (directive) { - $el.empty(); - _.invoke(scopesToTeardown.splice(0), '$destroy'); - - if (!directive) return $el.hide(); - else $el.show(); - - var askedForChild = !!directive.scope; - var reuseScope = !askedForChild && !directive.controller; - - var $formatEditor = $('
      ').html(directive.template); - var $formatEditorScope = reuseScope ? $scope : setupScope(directive.scope); - - if (directive.controller) { - // bind the controller to the injected element - var cntrlAs = (directive.controllerAs ? ' as ' + directive.controllerAs : ''); - $formatEditorScope.Controller = directive.controller; - $formatEditor.attr('ng-controller', 'Controller' + cntrlAs); - } - - var attrs = {}; - var linkFns = directive.compile && directive.compile($el, attrs); - if (!linkFns || _.isFunction(linkFns)) { - linkFns = { - pre: _.noop, - post: linkFns || _.noop - }; - } - - $el.html($formatEditor); - linkFns.pre($formatEditorScope, $formatEditor, attrs); - $compile($formatEditor)($formatEditorScope); - linkFns.post($formatEditorScope, $formatEditor, attrs); - }); + var attrs = {}; + var linkFns = directive.compile && directive.compile($el, attrs); + if (!linkFns || _.isFunction(linkFns)) { + linkFns = { + pre: _.noop, + post: linkFns || _.noop + }; + } - } - }; - }); + $el.html($formatEditor); + linkFns.pre($formatEditorScope, $formatEditor, attrs); + $compile($formatEditor)($formatEditorScope); + linkFns.post($formatEditorScope, $formatEditor, attrs); + }); + + } + }; }); diff --git a/src/ui/public/field_format_editor/numeral/numeral.js b/src/ui/public/field_format_editor/numeral/numeral.js index c711562500984c..1fc3ae0725a88e 100644 --- a/src/ui/public/field_format_editor/numeral/numeral.js +++ b/src/ui/public/field_format_editor/numeral/numeral.js @@ -1,12 +1,10 @@ import 'ui/field_format_editor/pattern/pattern'; -define(function (require) { - require('ui/modules') - .get('kibana') - .directive('fieldEditorNumeral', function () { - return { - restrict: 'E', - template: require('ui/field_format_editor/numeral/numeral.html') - }; - }); +require('ui/modules') +.get('kibana') +.directive('fieldEditorNumeral', function () { + return { + restrict: 'E', + template: require('ui/field_format_editor/numeral/numeral.html') + }; }); diff --git a/src/ui/public/field_format_editor/pattern/pattern.js b/src/ui/public/field_format_editor/pattern/pattern.js index d8f54e7d4ad001..57c11a0b083ba3 100644 --- a/src/ui/public/field_format_editor/pattern/pattern.js +++ b/src/ui/public/field_format_editor/pattern/pattern.js @@ -1,26 +1,24 @@ import 'ui/field_format_editor/samples/samples'; -define(function (require) { - require('ui/modules') - .get('kibana') - .directive('fieldFormatEditorPattern', function () { - return { - restrict: 'E', - template: require('ui/field_format_editor/pattern/pattern.html'), - require: ['ngModel', '^fieldEditor'], - scope: true, - link: function ($scope, $el, attrs, cntrls) { - var ngModelCntrl = cntrls[0]; +require('ui/modules') +.get('kibana') +.directive('fieldFormatEditorPattern', function () { + return { + restrict: 'E', + template: require('ui/field_format_editor/pattern/pattern.html'), + require: ['ngModel', '^fieldEditor'], + scope: true, + link: function ($scope, $el, attrs, cntrls) { + var ngModelCntrl = cntrls[0]; - $scope.$bind('inputs', attrs.inputs); - $scope.$bind('placeholder', attrs.placeholder); + $scope.$bind('inputs', attrs.inputs); + $scope.$bind('placeholder', attrs.placeholder); - // bind our local model with the outside ngModel - $scope.$watch('model', ngModelCntrl.$setViewValue); - ngModelCntrl.$render = function () { - $scope.model = ngModelCntrl.$viewValue; - }; - } - }; - }); + // bind our local model with the outside ngModel + $scope.$watch('model', ngModelCntrl.$setViewValue); + ngModelCntrl.$render = function () { + $scope.model = ngModelCntrl.$viewValue; + }; + } + }; }); diff --git a/src/ui/public/field_format_editor/samples/samples.js b/src/ui/public/field_format_editor/samples/samples.js index 1a83be505803b4..2a0885c007367b 100644 --- a/src/ui/public/field_format_editor/samples/samples.js +++ b/src/ui/public/field_format_editor/samples/samples.js @@ -1,45 +1,43 @@ import _ from 'lodash'; -define(function (require) { - require('ui/modules') - .get('kibana') - .directive('fieldFormatEditorSamples', function ($sce, Promise) { - return { - restrict: 'E', - template: require('ui/field_format_editor/samples/samples.html'), - require: ['?^ngModel', '^fieldEditor'], - scope: true, - link: function ($scope, $el, attrs, cntrls) { - var ngModelCntrl = cntrls[0]; +require('ui/modules') +.get('kibana') +.directive('fieldFormatEditorSamples', function ($sce, Promise) { + return { + restrict: 'E', + template: require('ui/field_format_editor/samples/samples.html'), + require: ['?^ngModel', '^fieldEditor'], + scope: true, + link: function ($scope, $el, attrs, cntrls) { + var ngModelCntrl = cntrls[0]; - $scope.samples = null; - $scope.$bind('inputs', attrs.inputs); + $scope.samples = null; + $scope.$bind('inputs', attrs.inputs); - $scope.$watchMulti([ - 'editor.field.format', - '[]inputs' - ], function () { - $scope.samples = null; - var field = $scope.editor.field; + $scope.$watchMulti([ + 'editor.field.format', + '[]inputs' + ], function () { + $scope.samples = null; + var field = $scope.editor.field; - if (!field || !field.format) { - return; - } + if (!field || !field.format) { + return; + } - Promise.try(function () { - var converter = field.format.getConverterFor('html'); - $scope.samples = _.map($scope.inputs, function (input) { - return [input, $sce.trustAsHtml(converter(input))]; - }); - }) - .then(validity, validity); - }); + Promise.try(function () { + var converter = field.format.getConverterFor('html'); + $scope.samples = _.map($scope.inputs, function (input) { + return [input, $sce.trustAsHtml(converter(input))]; + }); + }) + .then(validity, validity); + }); - function validity(err) { - $scope.error = err; - ngModelCntrl && ngModelCntrl.$setValidity('patternExecutes', !err); - } + function validity(err) { + $scope.error = err; + ngModelCntrl && ngModelCntrl.$setValidity('patternExecutes', !err); } - }; - }); + } + }; }); diff --git a/src/ui/public/filter_bar/filter_bar.js b/src/ui/public/filter_bar/filter_bar.js index 381bb4b6110c1f..99ba7794b99fb6 100644 --- a/src/ui/public/filter_bar/filter_bar.js +++ b/src/ui/public/filter_bar/filter_bar.js @@ -10,149 +10,147 @@ import FilterBarLibExtractTimeFilterProvider from 'ui/filter_bar/lib/extractTime import FilterBarLibFilterOutTimeBasedFilterProvider from 'ui/filter_bar/lib/filterOutTimeBasedFilter'; import FilterBarLibChangeTimeFilterProvider from 'ui/filter_bar/lib/changeTimeFilter'; import FilterBarQueryFilterProvider from 'ui/filter_bar/query_filter'; -define(function (require) { - var module = require('ui/modules').get('kibana'); - - - module.directive('filterBar', function (Private, Promise, getAppState) { - var mapAndFlattenFilters = Private(FilterBarLibMapAndFlattenFiltersProvider); - var mapFlattenAndWrapFilters = Private(FilterBarLibMapFlattenAndWrapFiltersProvider); - var extractTimeFilter = Private(FilterBarLibExtractTimeFilterProvider); - var filterOutTimeBasedFilter = Private(FilterBarLibFilterOutTimeBasedFilterProvider); - var changeTimeFilter = Private(FilterBarLibChangeTimeFilterProvider); - var queryFilter = Private(FilterBarQueryFilterProvider); - var privateFilterFieldRegex = /(^\$|meta)/; - - return { - restrict: 'E', - template: template, - scope: {}, - link: function ($scope, $el, attrs) { - // bind query filter actions to the scope - [ - 'addFilters', - 'toggleFilter', - 'toggleAll', - 'pinFilter', - 'pinAll', - 'invertFilter', - 'invertAll', - 'removeFilter', - 'removeAll', - 'updateFilter' - ].forEach(function (method) { - $scope[method] = queryFilter[method]; - }); - - $scope.state = getAppState(); - - $scope.aceLoaded = function (editor) { - editor.$blockScrolling = Infinity; - var session = editor.getSession(); - session.setTabSize(2); - session.setUseSoftTabs(true); - }; - - $scope.applyFilters = function (filters) { - // add new filters - $scope.addFilters(filterAppliedAndUnwrap(filters)); - $scope.newFilters = []; - - // change time filter - if ($scope.changeTimeFilter && $scope.changeTimeFilter.meta && $scope.changeTimeFilter.meta.apply) { - changeTimeFilter($scope.changeTimeFilter); - } - }; - - $scope.startEditingFilter = function (source) { - return $scope.editingFilter = { - source: source, - type: _.findKey(source, function (val, key) { - return !key.match(privateFilterFieldRegex); - }), - model: convertToEditableFilter(source), - alias: source.meta.alias - }; +var module = require('ui/modules').get('kibana'); + + +module.directive('filterBar', function (Private, Promise, getAppState) { + var mapAndFlattenFilters = Private(FilterBarLibMapAndFlattenFiltersProvider); + var mapFlattenAndWrapFilters = Private(FilterBarLibMapFlattenAndWrapFiltersProvider); + var extractTimeFilter = Private(FilterBarLibExtractTimeFilterProvider); + var filterOutTimeBasedFilter = Private(FilterBarLibFilterOutTimeBasedFilterProvider); + var changeTimeFilter = Private(FilterBarLibChangeTimeFilterProvider); + var queryFilter = Private(FilterBarQueryFilterProvider); + var privateFilterFieldRegex = /(^\$|meta)/; + + return { + restrict: 'E', + template: template, + scope: {}, + link: function ($scope, $el, attrs) { + // bind query filter actions to the scope + [ + 'addFilters', + 'toggleFilter', + 'toggleAll', + 'pinFilter', + 'pinAll', + 'invertFilter', + 'invertAll', + 'removeFilter', + 'removeAll', + 'updateFilter' + ].forEach(function (method) { + $scope[method] = queryFilter[method]; + }); + + $scope.state = getAppState(); + + $scope.aceLoaded = function (editor) { + editor.$blockScrolling = Infinity; + var session = editor.getSession(); + session.setTabSize(2); + session.setUseSoftTabs(true); + }; + + $scope.applyFilters = function (filters) { + // add new filters + $scope.addFilters(filterAppliedAndUnwrap(filters)); + $scope.newFilters = []; + + // change time filter + if ($scope.changeTimeFilter && $scope.changeTimeFilter.meta && $scope.changeTimeFilter.meta.apply) { + changeTimeFilter($scope.changeTimeFilter); + } + }; + + $scope.startEditingFilter = function (source) { + return $scope.editingFilter = { + source: source, + type: _.findKey(source, function (val, key) { + return !key.match(privateFilterFieldRegex); + }), + model: convertToEditableFilter(source), + alias: source.meta.alias }; + }; - $scope.stopEditingFilter = function () { - $scope.editingFilter = null; - }; + $scope.stopEditingFilter = function () { + $scope.editingFilter = null; + }; - $scope.editDone = function () { - $scope.updateFilter($scope.editingFilter); - $scope.stopEditingFilter(); - }; + $scope.editDone = function () { + $scope.updateFilter($scope.editingFilter); + $scope.stopEditingFilter(); + }; - $scope.clearFilterBar = function () { - $scope.newFilters = []; - $scope.changeTimeFilter = null; - }; - - // update the scope filter list on filter changes - $scope.$listen(queryFilter, 'update', function () { - $scope.stopEditingFilter(); - updateFilters(); - }); + $scope.clearFilterBar = function () { + $scope.newFilters = []; + $scope.changeTimeFilter = null; + }; - // when appState changes, update scope's state - $scope.$watch(getAppState, function (appState) { - $scope.state = appState; - }); - - $scope.$watch('state.$newFilters', function (filters) { - if (!filters) return; - - // If filters is not undefined and the length is greater than - // one we need to set the newFilters attribute and allow the - // users to decide what they want to apply. - if (filters.length > 1) { - return mapFlattenAndWrapFilters(filters) - .then(function (results) { - extractTimeFilter(results).then(function (filter) { - $scope.changeTimeFilter = filter; - }); - return results; - }) - .then(filterOutTimeBasedFilter) - .then(function (results) { - $scope.newFilters = results; + // update the scope filter list on filter changes + $scope.$listen(queryFilter, 'update', function () { + $scope.stopEditingFilter(); + updateFilters(); + }); + + // when appState changes, update scope's state + $scope.$watch(getAppState, function (appState) { + $scope.state = appState; + }); + + $scope.$watch('state.$newFilters', function (filters) { + if (!filters) return; + + // If filters is not undefined and the length is greater than + // one we need to set the newFilters attribute and allow the + // users to decide what they want to apply. + if (filters.length > 1) { + return mapFlattenAndWrapFilters(filters) + .then(function (results) { + extractTimeFilter(results).then(function (filter) { + $scope.changeTimeFilter = filter; }); - } - - // Just add single filters to the state. - if (filters.length === 1) { - Promise.resolve(filters).then(function (filters) { - extractTimeFilter(filters) - .then(function (timeFilter) { - if (timeFilter) changeTimeFilter(timeFilter); - }); - return filters; - }) - .then(filterOutTimeBasedFilter) - .then($scope.addFilters); - } - }); - - function convertToEditableFilter(filter) { - return _.omit(_.cloneDeep(filter), function (val, key) { - return key.match(privateFilterFieldRegex); + return results; + }) + .then(filterOutTimeBasedFilter) + .then(function (results) { + $scope.newFilters = results; }); } - function updateFilters() { - var filters = queryFilter.getFilters(); - mapAndFlattenFilters(filters).then(function (results) { - // used to display the current filters in the state - $scope.filters = _.sortBy(results, function (filter) { - return !filter.meta.pinned; + // Just add single filters to the state. + if (filters.length === 1) { + Promise.resolve(filters).then(function (filters) { + extractTimeFilter(filters) + .then(function (timeFilter) { + if (timeFilter) changeTimeFilter(timeFilter); }); - $scope.$emit('filterbar:updated'); - }); + return filters; + }) + .then(filterOutTimeBasedFilter) + .then($scope.addFilters); } + }); - updateFilters(); + function convertToEditableFilter(filter) { + return _.omit(_.cloneDeep(filter), function (val, key) { + return key.match(privateFilterFieldRegex); + }); + } + + function updateFilters() { + var filters = queryFilter.getFilters(); + mapAndFlattenFilters(filters).then(function (results) { + // used to display the current filters in the state + $scope.filters = _.sortBy(results, function (filter) { + return !filter.meta.pinned; + }); + $scope.$emit('filterbar:updated'); + }); } - }; - }); + + updateFilters(); + } + }; }); diff --git a/src/ui/public/filter_bar/filter_bar_click_handler.js b/src/ui/public/filter_bar/filter_bar_click_handler.js index a45d04b3f38b8c..ed254ba5957632 100644 --- a/src/ui/public/filter_bar/filter_bar_click_handler.js +++ b/src/ui/public/filter_bar/filter_bar_click_handler.js @@ -2,68 +2,66 @@ import _ from 'lodash'; import dedupFilters from './lib/dedupFilters'; import uniqFilters from './lib/uniqFilters'; import findByParam from 'ui/utils/find_by_param'; -define(function (require) { - return function (Notifier) { - return function ($state) { - return function (event, simulate) { - var notify = new Notifier({ - location: 'Filter bar' - }); - var aggConfigResult; +export default function (Notifier) { + return function ($state) { + return function (event, simulate) { + var notify = new Notifier({ + location: 'Filter bar' + }); + var aggConfigResult; - // Hierarchical and tabular data set their aggConfigResult parameter - // differently because of how the point is rewritten between the two. So - // we need to check if the point.orig is set, if not use try the point.aggConfigResult - if (event.point.orig) { - aggConfigResult = event.point.orig.aggConfigResult; - } else if (event.point.values) { - aggConfigResult = findByParam(event.point.values, 'aggConfigResult'); - } else { - aggConfigResult = event.point.aggConfigResult; - } - - if (aggConfigResult) { - var isLegendLabel = !!event.point.values; - var aggBuckets = _.filter(aggConfigResult.getPath(), { type: 'bucket' }); + // Hierarchical and tabular data set their aggConfigResult parameter + // differently because of how the point is rewritten between the two. So + // we need to check if the point.orig is set, if not use try the point.aggConfigResult + if (event.point.orig) { + aggConfigResult = event.point.orig.aggConfigResult; + } else if (event.point.values) { + aggConfigResult = findByParam(event.point.values, 'aggConfigResult'); + } else { + aggConfigResult = event.point.aggConfigResult; + } - // For legend clicks, use the last bucket in the path - if (isLegendLabel) { - // series data has multiple values, use aggConfig on the first - // hierarchical data values is an object with the addConfig - var aggConfig = findByParam(event.point.values, 'aggConfig'); - aggBuckets = aggBuckets.filter((result) => result.aggConfig && result.aggConfig === aggConfig); - } + if (aggConfigResult) { + var isLegendLabel = !!event.point.values; + var aggBuckets = _.filter(aggConfigResult.getPath(), { type: 'bucket' }); - var filters = _(aggBuckets) - .map(function (result) { - try { - return result.createFilter(); - } catch (e) { - notify.warning(e.message); - } - }) - .filter(Boolean) - .value(); - - if (!filters.length) return; + // For legend clicks, use the last bucket in the path + if (isLegendLabel) { + // series data has multiple values, use aggConfig on the first + // hierarchical data values is an object with the addConfig + var aggConfig = findByParam(event.point.values, 'aggConfig'); + aggBuckets = aggBuckets.filter((result) => result.aggConfig && result.aggConfig === aggConfig); + } - if (event.negate) { - _.each(filters, function (filter) { - filter.meta = filter.meta || {}; - filter.meta.negate = true; - }); + var filters = _(aggBuckets) + .map(function (result) { + try { + return result.createFilter(); + } catch (e) { + notify.warning(e.message); } + }) + .filter(Boolean) + .value(); - filters = dedupFilters($state.filters, uniqFilters(filters)); - // We need to add a bunch of filter deduping here. - if (!simulate) { - $state.$newFilters = filters; - } + if (!filters.length) return; + + if (event.negate) { + _.each(filters, function (filter) { + filter.meta = filter.meta || {}; + filter.meta.negate = true; + }); + } - return filters; + filters = dedupFilters($state.filters, uniqFilters(filters)); + // We need to add a bunch of filter deduping here. + if (!simulate) { + $state.$newFilters = filters; } - }; + + return filters; + } }; }; -}); +}; diff --git a/src/ui/public/filter_bar/lib/changeTimeFilter.js b/src/ui/public/filter_bar/lib/changeTimeFilter.js index b13d2062188a22..166f6a274516d9 100644 --- a/src/ui/public/filter_bar/lib/changeTimeFilter.js +++ b/src/ui/public/filter_bar/lib/changeTimeFilter.js @@ -1,13 +1,11 @@ import moment from 'moment'; import _ from 'lodash'; -define(function (require) { - return function changeTimeFilterProvider(timefilter) { - return function (filter) { - var key = _.keys(filter.range)[0]; - var values = filter.range[key]; - timefilter.time.from = moment(values.gt || values.gte); - timefilter.time.to = moment(values.lt || values.lte); - timefilter.time.mode = 'absolute'; - }; +export default function changeTimeFilterProvider(timefilter) { + return function (filter) { + var key = _.keys(filter.range)[0]; + var values = filter.range[key]; + timefilter.time.from = moment(values.gt || values.gte); + timefilter.time.to = moment(values.lt || values.lte); + timefilter.time.mode = 'absolute'; }; -}); +}; diff --git a/src/ui/public/filter_bar/lib/compareFilters.js b/src/ui/public/filter_bar/lib/compareFilters.js index 56f5c5c79b7d41..1e4c31db46f93d 100644 --- a/src/ui/public/filter_bar/lib/compareFilters.js +++ b/src/ui/public/filter_bar/lib/compareFilters.js @@ -1,33 +1,31 @@ import _ from 'lodash'; import angular from 'angular'; -define(function (require) { - var excludedAttributes; - var comparators; +var excludedAttributes; +var comparators; - /** - * Compare two filters to see if they match - * @param {object} first The first filter to compare - * @param {object} second The second filter to compare - * @param {object} comparatorOptions Parameters to use for comparison - * @returns {bool} Filters are the same - */ - return function (first, second, comparatorOptions) { - excludedAttributes = ['$$hashKey', 'meta']; - comparators = _.defaults(comparatorOptions || {}, { - state: false, - negate: false, - disabled: false, - }); +/** + * Compare two filters to see if they match + * @param {object} first The first filter to compare + * @param {object} second The second filter to compare + * @param {object} comparatorOptions Parameters to use for comparison + * @returns {bool} Filters are the same + */ +export default function (first, second, comparatorOptions) { + excludedAttributes = ['$$hashKey', 'meta']; + comparators = _.defaults(comparatorOptions || {}, { + state: false, + negate: false, + disabled: false, + }); - if (!comparators.state) excludedAttributes.push('$state'); + if (!comparators.state) excludedAttributes.push('$state'); - return _.isEqual(mapFilter(first), mapFilter(second)); - }; + return _.isEqual(mapFilter(first), mapFilter(second)); +}; - function mapFilter(filter) { - var cleaned = _.omit(filter, excludedAttributes); - if (comparators.negate) cleaned.negate = filter.meta && !!filter.meta.negate; - if (comparators.disabled) cleaned.disabled = filter.meta && !!filter.meta.disabled; - return cleaned; - } -}); +function mapFilter(filter) { + var cleaned = _.omit(filter, excludedAttributes); + if (comparators.negate) cleaned.negate = filter.meta && !!filter.meta.negate; + if (comparators.disabled) cleaned.disabled = filter.meta && !!filter.meta.disabled; + return cleaned; +} diff --git a/src/ui/public/filter_bar/lib/dedupFilters.js b/src/ui/public/filter_bar/lib/dedupFilters.js index b52869637b38aa..067f8cd95c19e9 100644 --- a/src/ui/public/filter_bar/lib/dedupFilters.js +++ b/src/ui/public/filter_bar/lib/dedupFilters.js @@ -1,22 +1,20 @@ import _ from 'lodash'; import angular from 'angular'; import compareFilters from 'ui/filter_bar/lib/compareFilters'; -define(function (require) { - /** - * Combine 2 filter collections, removing duplicates - * @param {object} existing The filters to compare to - * @param {object} filters The filters being added - * @param {object} comparatorOptions Parameters to use for comparison - * @returns {object} An array of filters that were not in existing - */ - return function (existingFilters, filters, comparatorOptions) { - if (!_.isArray(filters)) filters = [filters]; +/** + * Combine 2 filter collections, removing duplicates + * @param {object} existing The filters to compare to + * @param {object} filters The filters being added + * @param {object} comparatorOptions Parameters to use for comparison + * @returns {object} An array of filters that were not in existing + */ +export default function (existingFilters, filters, comparatorOptions) { + if (!_.isArray(filters)) filters = [filters]; - return _.filter(filters, function (filter) { - return !_.find(existingFilters, function (existingFilter) { - return compareFilters(existingFilter, filter, comparatorOptions); - }); + return _.filter(filters, function (filter) { + return !_.find(existingFilters, function (existingFilter) { + return compareFilters(existingFilter, filter, comparatorOptions); }); - }; -}); + }); +}; diff --git a/src/ui/public/filter_bar/lib/extractTimeFilter.js b/src/ui/public/filter_bar/lib/extractTimeFilter.js index 78716b28f3472d..b3e431451df4c5 100644 --- a/src/ui/public/filter_bar/lib/extractTimeFilter.js +++ b/src/ui/public/filter_bar/lib/extractTimeFilter.js @@ -1,21 +1,19 @@ import _ from 'lodash'; -define(function (require) { - return function extractTimeFilterProvider(courier, Promise) { - return Promise.method(function (filters) { - // Assume all the index patterns are the same since they will be added - // from the same visualization. - var id = _.get(filters, '[0].meta.index'); - if (id == null) return; +export default function extractTimeFilterProvider(courier, Promise) { + return Promise.method(function (filters) { + // Assume all the index patterns are the same since they will be added + // from the same visualization. + var id = _.get(filters, '[0].meta.index'); + if (id == null) return; - return courier.indexPatterns.get(id).then(function (indexPattern) { - var filter = _.find(filters, function (obj) { - var key = _.keys(obj.range)[0]; - return key === indexPattern.timeFieldName; - }); - if (filter && filter.range) { - return filter; - } + return courier.indexPatterns.get(id).then(function (indexPattern) { + var filter = _.find(filters, function (obj) { + var key = _.keys(obj.range)[0]; + return key === indexPattern.timeFieldName; }); + if (filter && filter.range) { + return filter; + } }); - }; -}); + }); +}; diff --git a/src/ui/public/filter_bar/lib/filterAppliedAndUnwrap.js b/src/ui/public/filter_bar/lib/filterAppliedAndUnwrap.js index d7249c96198a08..d45c8856ff364a 100644 --- a/src/ui/public/filter_bar/lib/filterAppliedAndUnwrap.js +++ b/src/ui/public/filter_bar/lib/filterAppliedAndUnwrap.js @@ -1,7 +1,5 @@ import _ from 'lodash'; -define(function (require) { - return function (filters) { - return _.filter(filters, 'meta.apply'); - }; -}); +export default function (filters) { + return _.filter(filters, 'meta.apply'); +}; diff --git a/src/ui/public/filter_bar/lib/filterOutTimeBasedFilter.js b/src/ui/public/filter_bar/lib/filterOutTimeBasedFilter.js index 71f1c51d26d6ac..489ecd8b2a2f37 100644 --- a/src/ui/public/filter_bar/lib/filterOutTimeBasedFilter.js +++ b/src/ui/public/filter_bar/lib/filterOutTimeBasedFilter.js @@ -1,15 +1,13 @@ import _ from 'lodash'; -define(function (require) { - return function filterOutTimeBaseFilter(courier, Promise) { - return Promise.method(function (filters) { - var id = _.get(filters, '[0].meta.index'); - if (id == null) return; +export default function filterOutTimeBaseFilter(courier, Promise) { + return Promise.method(function (filters) { + var id = _.get(filters, '[0].meta.index'); + if (id == null) return; - return courier.indexPatterns.get(id).then(function (indexPattern) { - return _.filter(filters, function (filter) { - return !(filter.range && filter.range[indexPattern.timeFieldName]); - }); + return courier.indexPatterns.get(id).then(function (indexPattern) { + return _.filter(filters, function (filter) { + return !(filter.range && filter.range[indexPattern.timeFieldName]); }); }); - }; -}); + }); +}; diff --git a/src/ui/public/filter_bar/lib/generateMappingChain.js b/src/ui/public/filter_bar/lib/generateMappingChain.js index 1de99e39c6caf6..9e0a32f9a97565 100644 --- a/src/ui/public/filter_bar/lib/generateMappingChain.js +++ b/src/ui/public/filter_bar/lib/generateMappingChain.js @@ -1,24 +1,22 @@ import _ from 'lodash'; -define(function (require) { - return function generateMappingChainProvider(Promise) { +export default function generateMappingChainProvider(Promise) { - var noop = function () { - return Promise.reject(new Error('No mappings have been found for filter.')); - }; + var noop = function () { + return Promise.reject(new Error('No mappings have been found for filter.')); + }; - return function (fn) { - return function (next) { - next = next || noop; - return function (filter) { - return fn(filter).catch(function (result) { - if (result === filter) { - return next(filter); - } - return Promise.reject(result); - }); - }; + return function (fn) { + return function (next) { + next = next || noop; + return function (filter) { + return fn(filter).catch(function (result) { + if (result === filter) { + return next(filter); + } + return Promise.reject(result); + }); }; }; - }; -}); + +}; diff --git a/src/ui/public/filter_bar/lib/mapAndFlattenFilters.js b/src/ui/public/filter_bar/lib/mapAndFlattenFilters.js index 8d101e9182f304..67b480dabc7281 100644 --- a/src/ui/public/filter_bar/lib/mapAndFlattenFilters.js +++ b/src/ui/public/filter_bar/lib/mapAndFlattenFilters.js @@ -1,15 +1,13 @@ import _ from 'lodash'; import FilterBarLibMapFilterProvider from 'ui/filter_bar/lib/mapFilter'; -define(function (require) { - return function mapAndFlattenFiltersProvider(Private, Promise) { - var mapFilter = Private(FilterBarLibMapFilterProvider); - return function (filters) { - return _(filters) - .flatten() - .compact() - .map(mapFilter) - .thru(Promise.all) - .value(); - }; +export default function mapAndFlattenFiltersProvider(Private, Promise) { + var mapFilter = Private(FilterBarLibMapFilterProvider); + return function (filters) { + return _(filters) + .flatten() + .compact() + .map(mapFilter) + .thru(Promise.all) + .value(); }; -}); +}; diff --git a/src/ui/public/filter_bar/lib/mapDefault.js b/src/ui/public/filter_bar/lib/mapDefault.js index 921490d93d0f1a..18d68489073ea7 100644 --- a/src/ui/public/filter_bar/lib/mapDefault.js +++ b/src/ui/public/filter_bar/lib/mapDefault.js @@ -1,20 +1,18 @@ import angular from 'angular'; import _ from 'lodash'; -define(function (require) { - return function mapDefaultProvider(Promise) { +export default function mapDefaultProvider(Promise) { - var metaProperty = /(^\$|meta)/; + var metaProperty = /(^\$|meta)/; - return function (filter) { - var key = _.find(_.keys(filter), function (key) { - return !key.match(metaProperty); - }); + return function (filter) { + var key = _.find(_.keys(filter), function (key) { + return !key.match(metaProperty); + }); - if (key) { - var value = angular.toJson(filter[key]); - return Promise.resolve({ key: key, value: value }); - } - return Promise.reject(filter); - }; + if (key) { + var value = angular.toJson(filter[key]); + return Promise.resolve({ key: key, value: value }); + } + return Promise.reject(filter); }; -}); +}; diff --git a/src/ui/public/filter_bar/lib/mapExists.js b/src/ui/public/filter_bar/lib/mapExists.js index 93c458a95318e8..2b94005b4f6e75 100644 --- a/src/ui/public/filter_bar/lib/mapExists.js +++ b/src/ui/public/filter_bar/lib/mapExists.js @@ -1,14 +1,12 @@ -define(function (require) { - return function mapExistsProvider(Promise) { - return function (filter) { - var key; - var value; - if (filter.exists) { - key = 'exists'; - value = filter.exists.field; - return Promise.resolve({ key: key, value: value }); - } - return Promise.reject(filter); - }; +export default function mapExistsProvider(Promise) { + return function (filter) { + var key; + var value; + if (filter.exists) { + key = 'exists'; + value = filter.exists.field; + return Promise.resolve({ key: key, value: value }); + } + return Promise.reject(filter); }; -}); +}; diff --git a/src/ui/public/filter_bar/lib/mapFilter.js b/src/ui/public/filter_bar/lib/mapFilter.js index 29d353519b7680..dbb8fb514a3897 100644 --- a/src/ui/public/filter_bar/lib/mapFilter.js +++ b/src/ui/public/filter_bar/lib/mapFilter.js @@ -9,67 +9,65 @@ import MapQueryStringProvider from './mapQueryString'; import MapGeoBoundingBoxProvider from './mapGeoBoundingBox'; import MapScriptProvider from './mapScript'; import MapDefaultProvider from './mapDefault'; -define(function (require) { - return function mapFilterProvider(Promise, Private) { +export default function mapFilterProvider(Promise, Private) { - var generateMappingChain = Private(GenerateMappingChainProvider); + var generateMappingChain = Private(GenerateMappingChainProvider); - /** Mappers **/ + /** Mappers **/ - // Each mapper is a simple promise function that test if the mapper can - // handle the mapping or not. If it handles it then it will resolve with - // and object that has the key and value for the filter. Otherwise it will - // reject it with the original filter. We had to go down the promise interface - // because mapTerms and mapRange need access to the indexPatterns to format - // the values and that's only available through the field formatters. + // Each mapper is a simple promise function that test if the mapper can + // handle the mapping or not. If it handles it then it will resolve with + // and object that has the key and value for the filter. Otherwise it will + // reject it with the original filter. We had to go down the promise interface + // because mapTerms and mapRange need access to the indexPatterns to format + // the values and that's only available through the field formatters. - // The mappers to apply. Each mapper will either return - // a result object with a key and value attribute or - // undefined. If undefined is return then the next - // mapper will get the opportunity to map the filter. - // To create a new mapper you just need to create a function - // that either handles the mapping operation or not - // and add it here. ProTip: These are executed in order listed - var mappers = [ - Private(MapMatchAllProvider), - Private(MapTermsProvider), - Private(MapRangeProvider), - Private(MapExistsProvider), - Private(MapMissingProvider), - Private(MapQueryStringProvider), - Private(MapGeoBoundingBoxProvider), - Private(MapScriptProvider), - Private(MapDefaultProvider) - ]; + // The mappers to apply. Each mapper will either return + // a result object with a key and value attribute or + // undefined. If undefined is return then the next + // mapper will get the opportunity to map the filter. + // To create a new mapper you just need to create a function + // that either handles the mapping operation or not + // and add it here. ProTip: These are executed in order listed + var mappers = [ + Private(MapMatchAllProvider), + Private(MapTermsProvider), + Private(MapRangeProvider), + Private(MapExistsProvider), + Private(MapMissingProvider), + Private(MapQueryStringProvider), + Private(MapGeoBoundingBoxProvider), + Private(MapScriptProvider), + Private(MapDefaultProvider) + ]; - var noop = function () { - return Promise.reject(new Error('No mappings have been found for filter.')); - }; + var noop = function () { + return Promise.reject(new Error('No mappings have been found for filter.')); + }; - // Create a chain of responsibility by reducing all the - // mappers down into one function. - var mapFn = _.reduceRight(mappers, function (memo, map) { - var filterChainFn = generateMappingChain(map); - return filterChainFn(memo); - }, noop); + // Create a chain of responsibility by reducing all the + // mappers down into one function. + var mapFn = _.reduceRight(mappers, function (memo, map) { + var filterChainFn = generateMappingChain(map); + return filterChainFn(memo); + }, noop); - /** - * Map the filter into an object with the key and value exposed so it's - * easier to work with in the template - * @param {object} fitler The filter the map - * @returns {Promise} - */ - return function (filter) { - // Apply the mapping function - return mapFn(filter).then(function (result) { - filter.meta = filter.meta || {}; - filter.meta.key = result.key; - filter.meta.value = result.value; - filter.meta.disabled = !!(filter.meta.disabled); - filter.meta.negate = !!(filter.meta.negate); - filter.meta.alias = filter.meta.alias || null; - return filter; - }); - }; + /** + * Map the filter into an object with the key and value exposed so it's + * easier to work with in the template + * @param {object} fitler The filter the map + * @returns {Promise} + */ + return function (filter) { + // Apply the mapping function + return mapFn(filter).then(function (result) { + filter.meta = filter.meta || {}; + filter.meta.key = result.key; + filter.meta.value = result.value; + filter.meta.disabled = !!(filter.meta.disabled); + filter.meta.negate = !!(filter.meta.negate); + filter.meta.alias = filter.meta.alias || null; + return filter; + }); }; -}); +}; diff --git a/src/ui/public/filter_bar/lib/mapFlattenAndWrapFilters.js b/src/ui/public/filter_bar/lib/mapFlattenAndWrapFilters.js index 4be7336429fdf5..22a315c28f24a7 100644 --- a/src/ui/public/filter_bar/lib/mapFlattenAndWrapFilters.js +++ b/src/ui/public/filter_bar/lib/mapFlattenAndWrapFilters.js @@ -1,16 +1,14 @@ import _ from 'lodash'; import FilterBarLibMapAndFlattenFiltersProvider from 'ui/filter_bar/lib/mapAndFlattenFilters'; -define(function (require) { - return function mapFlattenAndWrapFilters(Private) { - var mapAndFlattenFilters = Private(FilterBarLibMapAndFlattenFiltersProvider); - return function (filters) { - return mapAndFlattenFilters(filters).then(function (filters) { - return _.map(filters, function (filter) { - filter.meta = filter.meta || {}; - filter.meta.apply = true; - return filter; - }); +export default function mapFlattenAndWrapFilters(Private) { + var mapAndFlattenFilters = Private(FilterBarLibMapAndFlattenFiltersProvider); + return function (filters) { + return mapAndFlattenFilters(filters).then(function (filters) { + return _.map(filters, function (filter) { + filter.meta = filter.meta || {}; + filter.meta.apply = true; + return filter; }); - }; + }); }; -}); +}; diff --git a/src/ui/public/filter_bar/lib/mapGeoBoundingBox.js b/src/ui/public/filter_bar/lib/mapGeoBoundingBox.js index 0accb8bbafba69..fd4c183734e6c9 100644 --- a/src/ui/public/filter_bar/lib/mapGeoBoundingBox.js +++ b/src/ui/public/filter_bar/lib/mapGeoBoundingBox.js @@ -1,25 +1,23 @@ import _ from 'lodash'; -define(function (require) { - return function mapGeoBoundBoxProvider(Promise, courier) { - return function (filter) { - var key; - var value; - var topLeft; - var bottomRight; - var field; - if (filter.geo_bounding_box) { - return courier - .indexPatterns - .get(filter.meta.index).then(function (indexPattern) { - key = _.keys(filter.geo_bounding_box)[0]; - field = indexPattern.fields.byName[key]; - topLeft = field.format.convert(filter.geo_bounding_box[field.name].top_left); - bottomRight = field.format.convert(filter.geo_bounding_box[field.name].bottom_right); - value = topLeft + ' to ' + bottomRight; - return { key: key, value: value }; - }); - } - return Promise.reject(filter); - }; +export default function mapGeoBoundBoxProvider(Promise, courier) { + return function (filter) { + var key; + var value; + var topLeft; + var bottomRight; + var field; + if (filter.geo_bounding_box) { + return courier + .indexPatterns + .get(filter.meta.index).then(function (indexPattern) { + key = _.keys(filter.geo_bounding_box)[0]; + field = indexPattern.fields.byName[key]; + topLeft = field.format.convert(filter.geo_bounding_box[field.name].top_left); + bottomRight = field.format.convert(filter.geo_bounding_box[field.name].bottom_right); + value = topLeft + ' to ' + bottomRight; + return { key: key, value: value }; + }); + } + return Promise.reject(filter); }; -}); +}; diff --git a/src/ui/public/filter_bar/lib/mapMatchAll.js b/src/ui/public/filter_bar/lib/mapMatchAll.js index c062fa69e0dc30..32e21ac03471d0 100644 --- a/src/ui/public/filter_bar/lib/mapMatchAll.js +++ b/src/ui/public/filter_bar/lib/mapMatchAll.js @@ -1,12 +1,10 @@ -define(function (require) { - return function mapMatchAllProvider(Promise) { - return function (filter) { - if (filter.match_all) { - const key = filter.meta.field; - const value = filter.meta.formattedValue || 'all'; - return Promise.resolve({ key, value }); - } - return Promise.reject(filter); - }; +export default function mapMatchAllProvider(Promise) { + return function (filter) { + if (filter.match_all) { + const key = filter.meta.field; + const value = filter.meta.formattedValue || 'all'; + return Promise.resolve({ key, value }); + } + return Promise.reject(filter); }; -}); +}; diff --git a/src/ui/public/filter_bar/lib/mapMissing.js b/src/ui/public/filter_bar/lib/mapMissing.js index 245831c995d0e0..407a4909d313e3 100644 --- a/src/ui/public/filter_bar/lib/mapMissing.js +++ b/src/ui/public/filter_bar/lib/mapMissing.js @@ -1,14 +1,12 @@ -define(function (require) { - return function mapMissingProvider(Promise) { - return function (filter) { - var key; - var value; - if (filter.missing) { - key = 'missing'; - value = filter.missing.field; - return Promise.resolve({ key: key, value: value }); - } - return Promise.reject(filter); - }; +export default function mapMissingProvider(Promise) { + return function (filter) { + var key; + var value; + if (filter.missing) { + key = 'missing'; + value = filter.missing.field; + return Promise.resolve({ key: key, value: value }); + } + return Promise.reject(filter); }; -}); +}; diff --git a/src/ui/public/filter_bar/lib/mapQueryString.js b/src/ui/public/filter_bar/lib/mapQueryString.js index 57a141aa59cd0c..22487c07c681bd 100644 --- a/src/ui/public/filter_bar/lib/mapQueryString.js +++ b/src/ui/public/filter_bar/lib/mapQueryString.js @@ -1,14 +1,12 @@ -define(function (require) { - return function mapQueryStringProvider(Promise) { - return function (filter) { - var key; - var value; - if (filter.query && filter.query.query_string) { - key = 'query'; - value = filter.query.query_string.query; - return Promise.resolve({ key: key, value: value }); - } - return Promise.reject(filter); - }; +export default function mapQueryStringProvider(Promise) { + return function (filter) { + var key; + var value; + if (filter.query && filter.query.query_string) { + key = 'query'; + value = filter.query.query_string.query; + return Promise.resolve({ key: key, value: value }); + } + return Promise.reject(filter); }; -}); +}; diff --git a/src/ui/public/filter_bar/lib/mapRange.js b/src/ui/public/filter_bar/lib/mapRange.js index bee88c4764ae68..12a3cd96a2c643 100644 --- a/src/ui/public/filter_bar/lib/mapRange.js +++ b/src/ui/public/filter_bar/lib/mapRange.js @@ -1,29 +1,27 @@ import {has} from 'lodash'; -define(function (require) { - return function mapRangeProvider(Promise, courier) { - return function (filter) { - if (!filter.range) return Promise.reject(filter); +export default function mapRangeProvider(Promise, courier) { + return function (filter) { + if (!filter.range) return Promise.reject(filter); - return courier - .indexPatterns - .get(filter.meta.index) - .then(function (indexPattern) { - var key = Object.keys(filter.range)[0]; - var convert = indexPattern.fields.byName[key].format.getConverterFor('text'); - var range = filter.range[key]; + return courier + .indexPatterns + .get(filter.meta.index) + .then(function (indexPattern) { + var key = Object.keys(filter.range)[0]; + var convert = indexPattern.fields.byName[key].format.getConverterFor('text'); + var range = filter.range[key]; - var left = has(range, 'gte') ? range.gte : range.gt; - if (left == null) left = -Infinity; + var left = has(range, 'gte') ? range.gte : range.gt; + if (left == null) left = -Infinity; - var right = has(range, 'lte') ? range.lte : range.lt; - if (right == null) right = Infinity; + var right = has(range, 'lte') ? range.lte : range.lt; + if (right == null) right = Infinity; - return { - key: key, - value: `${convert(left)} to ${convert(right)}` - }; - }); + return { + key: key, + value: `${convert(left)} to ${convert(right)}` + }; + }); - }; }; -}); +}; diff --git a/src/ui/public/filter_bar/lib/mapTerms.js b/src/ui/public/filter_bar/lib/mapTerms.js index 39d49b2ea3f458..ba2d706a07acad 100644 --- a/src/ui/public/filter_bar/lib/mapTerms.js +++ b/src/ui/public/filter_bar/lib/mapTerms.js @@ -1,22 +1,20 @@ import _ from 'lodash'; -define(function (require) { - return function mapTermsProvider(Promise, courier) { - return function (filter) { - var key; - var value; - var field; - if (filter.query && filter.query.match) { - return courier - .indexPatterns - .get(filter.meta.index).then(function (indexPattern) { - key = _.keys(filter.query.match)[0]; - field = indexPattern.fields.byName[key]; - value = filter.query.match[key].query; - value = field.format.convert(value); - return { key: key, value: value }; - }); - } - return Promise.reject(filter); - }; +export default function mapTermsProvider(Promise, courier) { + return function (filter) { + var key; + var value; + var field; + if (filter.query && filter.query.match) { + return courier + .indexPatterns + .get(filter.meta.index).then(function (indexPattern) { + key = _.keys(filter.query.match)[0]; + field = indexPattern.fields.byName[key]; + value = filter.query.match[key].query; + value = field.format.convert(value); + return { key: key, value: value }; + }); + } + return Promise.reject(filter); }; -}); +}; diff --git a/src/ui/public/filter_bar/lib/onlyDisabled.js b/src/ui/public/filter_bar/lib/onlyDisabled.js index 6809851aae2cbf..002a0ff3047931 100644 --- a/src/ui/public/filter_bar/lib/onlyDisabled.js +++ b/src/ui/public/filter_bar/lib/onlyDisabled.js @@ -1,17 +1,15 @@ import _ from 'lodash'; -define(function (require) { - var pluckDisabled = function (filter) { - return _.get(filter, 'meta.disabled'); - }; +var pluckDisabled = function (filter) { + return _.get(filter, 'meta.disabled'); +}; - /** - * Checks to see if only disabled filters have been changed - * @returns {bool} Only disabled filters - */ - return function (newFilters, oldFilters) { - return _.every(newFilters.concat(oldFilters), function (newFilter) { - return pluckDisabled(newFilter); - }); - }; -}); +/** + * Checks to see if only disabled filters have been changed + * @returns {bool} Only disabled filters + */ +export default function (newFilters, oldFilters) { + return _.every(newFilters.concat(oldFilters), function (newFilter) { + return pluckDisabled(newFilter); + }); +}; diff --git a/src/ui/public/filter_bar/lib/onlyStateChanged.js b/src/ui/public/filter_bar/lib/onlyStateChanged.js index 6ad0e5a2995bb1..81cfa0807956ff 100644 --- a/src/ui/public/filter_bar/lib/onlyStateChanged.js +++ b/src/ui/public/filter_bar/lib/onlyStateChanged.js @@ -1,18 +1,16 @@ import _ from 'lodash'; import compareFilters from 'ui/filter_bar/lib/compareFilters'; -define(function (require) { - var compareOptions = { disabled: true, negate: true }; +var compareOptions = { disabled: true, negate: true }; - /** - * Checks to see if only disabled filters have been changed - * @returns {bool} Only disabled filters - */ - return function (newFilters, oldFilters) { - return _.every(newFilters, function (newFilter, i) { - var match = _.find(oldFilters, function (oldFilter) { - return compareFilters(newFilter, oldFilter, compareOptions); - }); - return !!match; +/** + * Checks to see if only disabled filters have been changed + * @returns {bool} Only disabled filters + */ +export default function (newFilters, oldFilters) { + return _.every(newFilters, function (newFilter, i) { + var match = _.find(oldFilters, function (oldFilter) { + return compareFilters(newFilter, oldFilter, compareOptions); }); - }; -}); + return !!match; + }); +}; diff --git a/src/ui/public/filter_bar/lib/remapFilters.js b/src/ui/public/filter_bar/lib/remapFilters.js index 63130fa2f61cc5..081b692a3d0b14 100644 --- a/src/ui/public/filter_bar/lib/remapFilters.js +++ b/src/ui/public/filter_bar/lib/remapFilters.js @@ -1,11 +1,9 @@ -define(function (require) { - /** - * Remap the filter from the intermediary back to it's original. - * @param {object} filter The original filter - * @returns {object} - */ - return function (filter) { - return filter.filter; - }; +/** + * Remap the filter from the intermediary back to it's original. + * @param {object} filter The original filter + * @returns {object} + */ +export default function (filter) { + return filter.filter; +}; -}); diff --git a/src/ui/public/filter_bar/lib/uniqFilters.js b/src/ui/public/filter_bar/lib/uniqFilters.js index d38bca1b236e29..4de74305fa2ea3 100644 --- a/src/ui/public/filter_bar/lib/uniqFilters.js +++ b/src/ui/public/filter_bar/lib/uniqFilters.js @@ -1,17 +1,15 @@ import _ from 'lodash'; import dedupFilters from 'ui/filter_bar/lib/dedupFilters'; -define(function (require) { - /** - * Remove duplicate filters from an array of filters - * @param {array} filters The filters to remove duplicates from - * @returns {object} The original filters array with duplicates removed - */ - return function (filters, comparatorOptions) { - var results = []; - _.each(filters, function (filter) { - results = _.union(results, dedupFilters(results, [filter], comparatorOptions)); - }); - return results; - }; -}); +/** + * Remove duplicate filters from an array of filters + * @param {array} filters The filters to remove duplicates from + * @returns {object} The original filters array with duplicates removed + */ +export default function (filters, comparatorOptions) { + var results = []; + _.each(filters, function (filter) { + results = _.union(results, dedupFilters(results, [filter], comparatorOptions)); + }); + return results; +}; diff --git a/src/ui/public/filter_bar/push_filter.js b/src/ui/public/filter_bar/push_filter.js index eb9f82d944688b..3b75d263af5fe4 100644 --- a/src/ui/public/filter_bar/push_filter.js +++ b/src/ui/public/filter_bar/push_filter.js @@ -1,19 +1,17 @@ import _ from 'lodash'; -define(function (require) { - return function () { - return function ($state) { - if (!_.isObject($state)) throw new Error('pushFilters requires a state object'); - return function (filter, negate, index) { - // Hierarchical and tabular data set their aggConfigResult parameter - // differently because of how the point is rewritten between the two. So - // we need to check if the point.orig is set, if not use try the point.aggConfigResult - var filters = _.clone($state.filters || []); - var pendingFilter = { meta: { negate: negate, index: index }}; - _.extend(pendingFilter, filter); - filters.push(pendingFilter); - $state.filters = filters; - }; +export default function () { + return function ($state) { + if (!_.isObject($state)) throw new Error('pushFilters requires a state object'); + return function (filter, negate, index) { + // Hierarchical and tabular data set their aggConfigResult parameter + // differently because of how the point is rewritten between the two. So + // we need to check if the point.orig is set, if not use try the point.aggConfigResult + var filters = _.clone($state.filters || []); + var pendingFilter = { meta: { negate: negate, index: index }}; + _.extend(pendingFilter, filter); + filters.push(pendingFilter); + $state.filters = filters; }; }; -}); +}; diff --git a/src/ui/public/filter_bar/query_filter.js b/src/ui/public/filter_bar/query_filter.js index 03063cb8214fa3..79f549d1ee9c97 100644 --- a/src/ui/public/filter_bar/query_filter.js +++ b/src/ui/public/filter_bar/query_filter.js @@ -6,382 +6,380 @@ import compareFilters from 'ui/filter_bar/lib/compareFilters'; import angular from 'angular'; import EventsProvider from 'ui/events'; import FilterBarLibMapAndFlattenFiltersProvider from 'ui/filter_bar/lib/mapAndFlattenFilters'; -define(function (require) { - return function (Private, $rootScope, getAppState, globalState, config) { - var EventEmitter = Private(EventsProvider); - var mapAndFlattenFilters = Private(FilterBarLibMapAndFlattenFiltersProvider); +export default function (Private, $rootScope, getAppState, globalState, config) { + var EventEmitter = Private(EventsProvider); + var mapAndFlattenFilters = Private(FilterBarLibMapAndFlattenFiltersProvider); - var queryFilter = new EventEmitter(); + var queryFilter = new EventEmitter(); - queryFilter.getFilters = function () { - var compareOptions = { disabled: true, negate: true }; - var appFilters = queryFilter.getAppFilters(); - var globalFilters = queryFilter.getGlobalFilters(); + queryFilter.getFilters = function () { + var compareOptions = { disabled: true, negate: true }; + var appFilters = queryFilter.getAppFilters(); + var globalFilters = queryFilter.getGlobalFilters(); - return uniqFilters(globalFilters.concat(appFilters), compareOptions); - }; - - queryFilter.getAppFilters = function () { - var appState = getAppState(); - if (!appState || !appState.filters) return []; - - // Work around for https://github.com/elastic/kibana/issues/5896 - appState.filters = validateStateFilters(appState); - - return (appState.filters) ? _.map(appState.filters, appendStoreType('appState')) : []; - }; - - queryFilter.getGlobalFilters = function () { - if (!globalState.filters) return []; - - // Work around for https://github.com/elastic/kibana/issues/5896 - globalState.filters = validateStateFilters(globalState); - - return _.map(globalState.filters, appendStoreType('globalState')); - }; - - /** - * Adds new filters to the scope and state - * @param {object|array} filters Filter(s) to add - * @param {bool} global Whether the filter should be added to global state - * @returns {Promise} filter map promise - */ - queryFilter.addFilters = function (filters, global) { + return uniqFilters(globalFilters.concat(appFilters), compareOptions); + }; - if (global === undefined) { - var configDefault = config.get('filters:pinnedByDefault'); + queryFilter.getAppFilters = function () { + var appState = getAppState(); + if (!appState || !appState.filters) return []; - if (configDefault === false || configDefault === true) { - global = configDefault; - } - } + // Work around for https://github.com/elastic/kibana/issues/5896 + appState.filters = validateStateFilters(appState); - // Determine the state for the new filter (whether to pass the filter through other apps or not) - var appState = getAppState(); - var filterState = (global) ? globalState : appState; - - if (!_.isArray(filters)) { - filters = [filters]; - } + return (appState.filters) ? _.map(appState.filters, appendStoreType('appState')) : []; + }; - return mapAndFlattenFilters(filters) - .then(function (filters) { - if (!filterState.filters) { - filterState.filters = []; - } + queryFilter.getGlobalFilters = function () { + if (!globalState.filters) return []; - filterState.filters = filterState.filters.concat(filters); - }); - }; + // Work around for https://github.com/elastic/kibana/issues/5896 + globalState.filters = validateStateFilters(globalState); - /** - * Removes the filter from the proper state - * @param {object} matchFilter The filter to remove - */ - queryFilter.removeFilter = function (matchFilter) { - var appState = getAppState(); - var filter = _.omit(matchFilter, ['$$hashKey']); - var state; - var index; - - // check for filter in appState - if (appState) { - index = _.findIndex(appState.filters, filter); - if (index !== -1) state = appState; - } + return _.map(globalState.filters, appendStoreType('globalState')); + }; - // if not found, check for filter in globalState - if (!state) { - index = _.findIndex(globalState.filters, filter); - if (index !== -1) state = globalState; - else return; // not found in either state, do nothing - } + /** + * Adds new filters to the scope and state + * @param {object|array} filters Filter(s) to add + * @param {bool} global Whether the filter should be added to global state + * @returns {Promise} filter map promise + */ + queryFilter.addFilters = function (filters, global) { - state.filters.splice(index, 1); - }; + if (global === undefined) { + var configDefault = config.get('filters:pinnedByDefault'); - /** - * Updates an existing filter - * @param {object} filter Contains a reference to a filter and its new model - * @param {object} filter.source The filter reference - * @param {string} filter.model The edited filter - * @returns {object} Promise that resolves to the new filter on a successful merge - */ - queryFilter.updateFilter = function (filter) { - var mergedFilter = _.assign({}, filter.source, filter.model); - mergedFilter.meta.alias = filter.alias; - //If the filter type is changed we want to discard the old type - //when merging changes back in - var filterTypeReplaced = filter.model[filter.type] !== mergedFilter[filter.type]; - if (filterTypeReplaced) { - delete mergedFilter[filter.type]; + if (configDefault === false || configDefault === true) { + global = configDefault; } + } - return angular.copy(mergedFilter, filter.source); - }; - - /** - * Removes all filters - */ - queryFilter.removeAll = function () { - var appState = getAppState(); - appState.filters = []; - globalState.filters = []; - }; + // Determine the state for the new filter (whether to pass the filter through other apps or not) + var appState = getAppState(); + var filterState = (global) ? globalState : appState; - /** - * Toggles the filter between enabled/disabled. - * @param {object} filter The filter to toggle - & @param {boolean} force Disabled true/false - * @returns {object} updated filter - */ - queryFilter.toggleFilter = function (filter, force) { - // Toggle the disabled flag - var disabled = _.isUndefined(force) ? !filter.meta.disabled : !!force; - filter.meta.disabled = disabled; - return filter; - }; + if (!_.isArray(filters)) { + filters = [filters]; + } - /** - * Disables all filters - * @params {boolean} force Disable/enable all filters - */ - queryFilter.toggleAll = function (force) { - function doToggle(filter) { - queryFilter.toggleFilter(filter, force); + return mapAndFlattenFilters(filters) + .then(function (filters) { + if (!filterState.filters) { + filterState.filters = []; } - executeOnFilters(doToggle); - }; + filterState.filters = filterState.filters.concat(filters); + }); + }; + /** + * Removes the filter from the proper state + * @param {object} matchFilter The filter to remove + */ + queryFilter.removeFilter = function (matchFilter) { + var appState = getAppState(); + var filter = _.omit(matchFilter, ['$$hashKey']); + var state; + var index; + + // check for filter in appState + if (appState) { + index = _.findIndex(appState.filters, filter); + if (index !== -1) state = appState; + } - /** - * Inverts the nagate value on the filter - * @param {object} filter The filter to toggle - * @returns {object} updated filter - */ - queryFilter.invertFilter = function (filter) { - // Toggle the negate meta state - filter.meta.negate = !filter.meta.negate; - return filter; - }; + // if not found, check for filter in globalState + if (!state) { + index = _.findIndex(globalState.filters, filter); + if (index !== -1) state = globalState; + else return; // not found in either state, do nothing + } - /** - * Inverts all filters - * @returns {object} Resulting updated filter list - */ - queryFilter.invertAll = function () { - executeOnFilters(queryFilter.invertFilter); - }; + state.filters.splice(index, 1); + }; + /** + * Updates an existing filter + * @param {object} filter Contains a reference to a filter and its new model + * @param {object} filter.source The filter reference + * @param {string} filter.model The edited filter + * @returns {object} Promise that resolves to the new filter on a successful merge + */ + queryFilter.updateFilter = function (filter) { + var mergedFilter = _.assign({}, filter.source, filter.model); + mergedFilter.meta.alias = filter.alias; + //If the filter type is changed we want to discard the old type + //when merging changes back in + var filterTypeReplaced = filter.model[filter.type] !== mergedFilter[filter.type]; + if (filterTypeReplaced) { + delete mergedFilter[filter.type]; + } - /** - * Pins the filter to the global state - * @param {object} filter The filter to pin - * @param {boolean} force pinned state - * @returns {object} updated filter - */ - queryFilter.pinFilter = function (filter, force) { - var appState = getAppState(); - if (!appState) return filter; + return angular.copy(mergedFilter, filter.source); + }; - // ensure that both states have a filters property - if (!_.isArray(globalState.filters)) globalState.filters = []; - if (!_.isArray(appState.filters)) appState.filters = []; + /** + * Removes all filters + */ + queryFilter.removeAll = function () { + var appState = getAppState(); + appState.filters = []; + globalState.filters = []; + }; - var appIndex = _.indexOf(appState.filters, filter); + /** + * Toggles the filter between enabled/disabled. + * @param {object} filter The filter to toggle + & @param {boolean} force Disabled true/false + * @returns {object} updated filter + */ + queryFilter.toggleFilter = function (filter, force) { + // Toggle the disabled flag + var disabled = _.isUndefined(force) ? !filter.meta.disabled : !!force; + filter.meta.disabled = disabled; + return filter; + }; - if (appIndex !== -1 && force !== false) { - appState.filters.splice(appIndex, 1); - globalState.filters.push(filter); - } else { - var globalIndex = _.indexOf(globalState.filters, filter); + /** + * Disables all filters + * @params {boolean} force Disable/enable all filters + */ + queryFilter.toggleAll = function (force) { + function doToggle(filter) { + queryFilter.toggleFilter(filter, force); + } - if (globalIndex === -1 || force === true) return filter; + executeOnFilters(doToggle); + }; - globalState.filters.splice(globalIndex, 1); - appState.filters.push(filter); - } - return filter; - }; + /** + * Inverts the nagate value on the filter + * @param {object} filter The filter to toggle + * @returns {object} updated filter + */ + queryFilter.invertFilter = function (filter) { + // Toggle the negate meta state + filter.meta.negate = !filter.meta.negate; + return filter; + }; - /** - * Pins all filters - * @params {boolean} force Pin/Unpin all filters - */ - queryFilter.pinAll = function (force) { - function pin(filter) { - queryFilter.pinFilter(filter, force); - } + /** + * Inverts all filters + * @returns {object} Resulting updated filter list + */ + queryFilter.invertAll = function () { + executeOnFilters(queryFilter.invertFilter); + }; - executeOnFilters(pin); - }; - initWatchers(); + /** + * Pins the filter to the global state + * @param {object} filter The filter to pin + * @param {boolean} force pinned state + * @returns {object} updated filter + */ + queryFilter.pinFilter = function (filter, force) { + var appState = getAppState(); + if (!appState) return filter; - return queryFilter; + // ensure that both states have a filters property + if (!_.isArray(globalState.filters)) globalState.filters = []; + if (!_.isArray(appState.filters)) appState.filters = []; - /** - * Rids filter list of null values and replaces state if any nulls are found - */ - function validateStateFilters(state) { - var compacted = _.compact(state.filters); - if (state.filters.length !== compacted.length) { - state.filters = compacted; - state.replace(); - } - return state.filters; - } + var appIndex = _.indexOf(appState.filters, filter); + if (appIndex !== -1 && force !== false) { + appState.filters.splice(appIndex, 1); + globalState.filters.push(filter); + } else { + var globalIndex = _.indexOf(globalState.filters, filter); - /** - * Saves both app and global states, ensuring filters are persisted - * @returns {object} Resulting filter list, app and global combined - */ - function saveState() { - var appState = getAppState(); - if (appState) appState.save(); - globalState.save(); - } + if (globalIndex === -1 || force === true) return filter; - function appendStoreType(type) { - return function (filter) { - filter.$state = { - store: type - }; - return filter; - }; + globalState.filters.splice(globalIndex, 1); + appState.filters.push(filter); } - // helper to run a function on all filters in all states - function executeOnFilters(fn) { - var appState = getAppState(); - var globalFilters = []; - var appFilters = []; - - if (globalState.filters) globalFilters = globalState.filters; - if (appState && appState.filters) appFilters = appState.filters; + return filter; + }; - globalFilters.concat(appFilters).forEach(fn); + /** + * Pins all filters + * @params {boolean} force Pin/Unpin all filters + */ + queryFilter.pinAll = function (force) { + function pin(filter) { + queryFilter.pinFilter(filter, force); } - function mergeStateFilters(gFilters, aFilters, compareOptions) { - // ensure we don't mutate the filters passed in - var globalFilters = gFilters ? _.cloneDeep(gFilters) : []; - var appFilters = aFilters ? _.cloneDeep(aFilters) : []; - compareOptions = _.defaults(compareOptions || {}, { disabled: true }); + executeOnFilters(pin); + }; - // existing globalFilters should be mutated by appFilters - _.each(appFilters, function (filter, i) { - var match = _.find(globalFilters, function (globalFilter) { - return compareFilters(globalFilter, filter, compareOptions); - }); + initWatchers(); - // no match, do nothing - if (!match) return; + return queryFilter; - // matching filter in globalState, update global and remove from appState - _.assign(match.meta, filter.meta); - appFilters.splice(i, 1); - }); - - return [ - uniqFilters(globalFilters, { disabled: true }), - uniqFilters(appFilters, { disabled: true }) - ]; + /** + * Rids filter list of null values and replaces state if any nulls are found + */ + function validateStateFilters(state) { + var compacted = _.compact(state.filters); + if (state.filters.length !== compacted.length) { + state.filters = compacted; + state.replace(); } - - /** - * Initializes state watchers that use the event emitter - * @returns {void} - */ - function initWatchers() { - var removeAppStateWatchers; - - $rootScope.$watch(getAppState, function () { - removeAppStateWatchers && removeAppStateWatchers(); - removeAppStateWatchers = initAppStateWatchers(); + return state.filters; + } + + + /** + * Saves both app and global states, ensuring filters are persisted + * @returns {object} Resulting filter list, app and global combined + */ + function saveState() { + var appState = getAppState(); + if (appState) appState.save(); + globalState.save(); + } + + function appendStoreType(type) { + return function (filter) { + filter.$state = { + store: type + }; + return filter; + }; + } + + // helper to run a function on all filters in all states + function executeOnFilters(fn) { + var appState = getAppState(); + var globalFilters = []; + var appFilters = []; + + if (globalState.filters) globalFilters = globalState.filters; + if (appState && appState.filters) appFilters = appState.filters; + + globalFilters.concat(appFilters).forEach(fn); + } + + function mergeStateFilters(gFilters, aFilters, compareOptions) { + // ensure we don't mutate the filters passed in + var globalFilters = gFilters ? _.cloneDeep(gFilters) : []; + var appFilters = aFilters ? _.cloneDeep(aFilters) : []; + compareOptions = _.defaults(compareOptions || {}, { disabled: true }); + + // existing globalFilters should be mutated by appFilters + _.each(appFilters, function (filter, i) { + var match = _.find(globalFilters, function (globalFilter) { + return compareFilters(globalFilter, filter, compareOptions); }); - function initAppStateWatchers() { - // multi watch on the app and global states - var stateWatchers = [{ - fn: $rootScope.$watch, - deep: true, - get: queryFilter.getGlobalFilters - }, { - fn: $rootScope.$watch, - deep: true, - get: queryFilter.getAppFilters - }]; - - // when states change, use event emitter to trigger updates and fetches - return $rootScope.$watchMulti(stateWatchers, function (next, prev) { - // prevent execution on watcher instantiation - if (_.isEqual(next, prev)) return; - - var doUpdate = false; - var doFetch = false; - - // reconcile filter in global and app states - var filters = mergeStateFilters(next[0], next[1]); - var globalFilters = filters[0]; - var appFilters = filters[1]; - var appState = getAppState(); - - // save the state, as it may have updated - var globalChanged = !_.isEqual(next[0], globalFilters); - var appChanged = !_.isEqual(next[1], appFilters); - - // the filters were changed, apply to state (re-triggers this watcher) - if (globalChanged || appChanged) { - globalState.filters = globalFilters; - if (appState) appState.filters = appFilters; - return; - } + // no match, do nothing + if (!match) return; + + // matching filter in globalState, update global and remove from appState + _.assign(match.meta, filter.meta); + appFilters.splice(i, 1); + }); + + return [ + uniqFilters(globalFilters, { disabled: true }), + uniqFilters(appFilters, { disabled: true }) + ]; + } + + /** + * Initializes state watchers that use the event emitter + * @returns {void} + */ + function initWatchers() { + var removeAppStateWatchers; + + $rootScope.$watch(getAppState, function () { + removeAppStateWatchers && removeAppStateWatchers(); + removeAppStateWatchers = initAppStateWatchers(); + }); + + function initAppStateWatchers() { + // multi watch on the app and global states + var stateWatchers = [{ + fn: $rootScope.$watch, + deep: true, + get: queryFilter.getGlobalFilters + }, { + fn: $rootScope.$watch, + deep: true, + get: queryFilter.getAppFilters + }]; + + // when states change, use event emitter to trigger updates and fetches + return $rootScope.$watchMulti(stateWatchers, function (next, prev) { + // prevent execution on watcher instantiation + if (_.isEqual(next, prev)) return; + + var doUpdate = false; + var doFetch = false; + + // reconcile filter in global and app states + var filters = mergeStateFilters(next[0], next[1]); + var globalFilters = filters[0]; + var appFilters = filters[1]; + var appState = getAppState(); + + // save the state, as it may have updated + var globalChanged = !_.isEqual(next[0], globalFilters); + var appChanged = !_.isEqual(next[1], appFilters); + + // the filters were changed, apply to state (re-triggers this watcher) + if (globalChanged || appChanged) { + globalState.filters = globalFilters; + if (appState) appState.filters = appFilters; + return; + } - // check for actions, bail if we're done - getActions(); - if (!doUpdate) return; + // check for actions, bail if we're done + getActions(); + if (!doUpdate) return; - // save states and emit the required events - saveState(); - queryFilter.emit('update') - .then(function () { - if (!doFetch) return; - queryFilter.emit('fetch'); - }); + // save states and emit the required events + saveState(); + queryFilter.emit('update') + .then(function () { + if (!doFetch) return; + queryFilter.emit('fetch'); + }); - // iterate over each state type, checking for changes - function getActions() { - var newFilters = []; - var oldFilters = []; + // iterate over each state type, checking for changes + function getActions() { + var newFilters = []; + var oldFilters = []; - stateWatchers.forEach(function (watcher, i) { - var nextVal = next[i]; - var prevVal = prev[i]; - newFilters = newFilters.concat(nextVal); - oldFilters = oldFilters.concat(prevVal); + stateWatchers.forEach(function (watcher, i) { + var nextVal = next[i]; + var prevVal = prev[i]; + newFilters = newFilters.concat(nextVal); + oldFilters = oldFilters.concat(prevVal); - // no update or fetch if there was no change - if (nextVal === prevVal) return; + // no update or fetch if there was no change + if (nextVal === prevVal) return; - if (nextVal) doUpdate = true; + if (nextVal) doUpdate = true; - // don't trigger fetch when only disabled filters - if (!onlyDisabled(nextVal, prevVal)) doFetch = true; - }); + // don't trigger fetch when only disabled filters + if (!onlyDisabled(nextVal, prevVal)) doFetch = true; + }); - // make sure change wasn't only a state move - // checking length first is an optimization - if (doFetch && newFilters.length === oldFilters.length) { - if (onlyStateChanged(newFilters, oldFilters)) doFetch = false; - } + // make sure change wasn't only a state move + // checking length first is an optimization + if (doFetch && newFilters.length === oldFilters.length) { + if (onlyStateChanged(newFilters, oldFilters)) doFetch = false; } - }); - } + } + }); } - }; -}); + } +}; diff --git a/src/ui/public/filter_manager/filter_manager.js b/src/ui/public/filter_manager/filter_manager.js index 02fed92551d694..3f121148a692a0 100644 --- a/src/ui/public/filter_manager/filter_manager.js +++ b/src/ui/public/filter_manager/filter_manager.js @@ -1,84 +1,82 @@ import _ from 'lodash'; import FilterBarQueryFilterProvider from 'ui/filter_bar/query_filter'; // Adds a filter to a passed state -define(function (require) { - return function (Private) { - var queryFilter = Private(FilterBarQueryFilterProvider); - var filterManager = {}; +export default function (Private) { + var queryFilter = Private(FilterBarQueryFilterProvider); + var filterManager = {}; - filterManager.add = function (field, values, operation, index) { - values = _.isArray(values) ? values : [values]; - var fieldName = _.isObject(field) ? field.name : field; - var filters = _.flatten([queryFilter.getAppFilters()]); - var newFilters = []; + filterManager.add = function (field, values, operation, index) { + values = _.isArray(values) ? values : [values]; + var fieldName = _.isObject(field) ? field.name : field; + var filters = _.flatten([queryFilter.getAppFilters()]); + var newFilters = []; - var negate = (operation === '-'); + var negate = (operation === '-'); - // TODO: On array fields, negating does not negate the combination, rather all terms - _.each(values, function (value) { - var filter; - var existing = _.find(filters, function (filter) { - if (!filter) return; + // TODO: On array fields, negating does not negate the combination, rather all terms + _.each(values, function (value) { + var filter; + var existing = _.find(filters, function (filter) { + if (!filter) return; - if (fieldName === '_exists_' && filter.exists) { - return filter.exists.field === value; - } + if (fieldName === '_exists_' && filter.exists) { + return filter.exists.field === value; + } - if (filter.query) { - return filter.query.match[fieldName] && filter.query.match[fieldName].query === value; - } + if (filter.query) { + return filter.query.match[fieldName] && filter.query.match[fieldName].query === value; + } - if (filter.script) { - return filter.meta.field === fieldName && filter.script.params.value === value; - } - }); + if (filter.script) { + return filter.meta.field === fieldName && filter.script.params.value === value; + } + }); - if (existing) { - existing.meta.disabled = false; - if (existing.meta.negate !== negate) { - queryFilter.invertFilter(existing); - } - return; + if (existing) { + existing.meta.disabled = false; + if (existing.meta.negate !== negate) { + queryFilter.invertFilter(existing); } + return; + } - switch (fieldName) { - case '_exists_': + switch (fieldName) { + case '_exists_': + filter = { + meta: { + negate: negate, + index: index + }, + exists: { + field: value + } + }; + break; + default: + if (field.scripted) { filter = { - meta: { - negate: negate, - index: index - }, - exists: { - field: value + meta: { negate: negate, index: index, field: fieldName }, + script: { + script: '(' + field.script + ') == value', + lang: field.lang, + params: { + value: value + } } }; - break; - default: - if (field.scripted) { - filter = { - meta: { negate: negate, index: index, field: fieldName }, - script: { - script: '(' + field.script + ') == value', - lang: field.lang, - params: { - value: value - } - } - }; - } else { - filter = { meta: { negate: negate, index: index }, query: { match: {} } }; - filter.query.match[fieldName] = { query: value, type: 'phrase' }; - } - - break; - } + } else { + filter = { meta: { negate: negate, index: index }, query: { match: {} } }; + filter.query.match[fieldName] = { query: value, type: 'phrase' }; + } - newFilters.push(filter); - }); + break; + } - return queryFilter.addFilters(newFilters); - }; + newFilters.push(filter); + }); - return filterManager; + return queryFilter.addFilters(newFilters); }; -}); + + return filterManager; +}; diff --git a/src/ui/public/filter_manager/lib/phrase.js b/src/ui/public/filter_manager/lib/phrase.js index 8a5699ebaad9de..2fcd3cb18c0532 100644 --- a/src/ui/public/filter_manager/lib/phrase.js +++ b/src/ui/public/filter_manager/lib/phrase.js @@ -1,24 +1,22 @@ import _ from 'lodash'; -define(function (require) { - return function buildPhraseFilter(field, value, indexPattern) { - var filter = { meta: { index: indexPattern.id} }; +export default function buildPhraseFilter(field, value, indexPattern) { + var filter = { meta: { index: indexPattern.id} }; - if (field.scripted) { - filter.script = { - script: '(' + field.script + ') == value', - lang: field.lang, - params: { - value: value - } - }; - filter.meta.field = field.name; - } else { - filter.query = { match: {} }; - filter.query.match[field.name] = { - query: value, - type: 'phrase' - }; - } - return filter; - }; -}); + if (field.scripted) { + filter.script = { + script: '(' + field.script + ') == value', + lang: field.lang, + params: { + value: value + } + }; + filter.meta.field = field.name; + } else { + filter.query = { match: {} }; + filter.query.match[field.name] = { + query: value, + type: 'phrase' + }; + } + return filter; +}; diff --git a/src/ui/public/filter_manager/lib/query.js b/src/ui/public/filter_manager/lib/query.js index ed2e1711a33afe..886bb08b925c62 100644 --- a/src/ui/public/filter_manager/lib/query.js +++ b/src/ui/public/filter_manager/lib/query.js @@ -1,11 +1,9 @@ import _ from 'lodash'; -define(function (require) { - return function buildQueryFilter(query, index) { - return { - query: query, - meta: { - index: index - } - }; +export default function buildQueryFilter(query, index) { + return { + query: query, + meta: { + index: index + } }; -}); +}; diff --git a/src/ui/public/filter_manager/lib/range.js b/src/ui/public/filter_manager/lib/range.js index 033bd4dad9ed76..bb42a96a61c9b7 100644 --- a/src/ui/public/filter_manager/lib/range.js +++ b/src/ui/public/filter_manager/lib/range.js @@ -1,55 +1,53 @@ import _ from 'lodash'; -define(function (require) { - const OPERANDS_IN_RANGE = 2; - - return function buildRangeFilter(field, params, indexPattern, formattedValue) { - const filter = { meta: { index: indexPattern.id } }; - if (formattedValue) filter.meta.formattedValue = formattedValue; - - params = _.clone(params); - - if ('gte' in params && 'gt' in params) throw new Error('gte and gt are mutually exclusive'); - if ('lte' in params && 'lt' in params) throw new Error('lte and lt are mutually exclusive'); - - const totalInfinite = ['gt', 'lt'].reduce((totalInfinite, op) => { - const key = op in params ? op : `${op}e`; - const isInfinite = Math.abs(params[key]) === Infinity; - - if (isInfinite) { - totalInfinite++; - delete params[key]; - } - - return totalInfinite; - }, 0); - - if (totalInfinite === OPERANDS_IN_RANGE) { - filter.match_all = {}; - filter.meta.field = field.name; - } else if (field.scripted) { - const operators = { - gt: '>', - gte: '>=', - lte: '<=', - lt: '<', - }; - - const script = _.map(params, function (val, key) { - return '(' + field.script + ')' + operators[key] + key; - }).join(' && '); - - const value = _.map(params, function (val, key) { - return operators[key] + field.format.convert(val); - }).join(' '); - - filter.script = { script: script, params: params, lang: field.lang }; - filter.script.params.value = value; - filter.meta.field = field.name; - } else { - filter.range = {}; - filter.range[field.name] = params; +const OPERANDS_IN_RANGE = 2; + +export default function buildRangeFilter(field, params, indexPattern, formattedValue) { + const filter = { meta: { index: indexPattern.id } }; + if (formattedValue) filter.meta.formattedValue = formattedValue; + + params = _.clone(params); + + if ('gte' in params && 'gt' in params) throw new Error('gte and gt are mutually exclusive'); + if ('lte' in params && 'lt' in params) throw new Error('lte and lt are mutually exclusive'); + + const totalInfinite = ['gt', 'lt'].reduce((totalInfinite, op) => { + const key = op in params ? op : `${op}e`; + const isInfinite = Math.abs(params[key]) === Infinity; + + if (isInfinite) { + totalInfinite++; + delete params[key]; } - return filter; - }; -}); + return totalInfinite; + }, 0); + + if (totalInfinite === OPERANDS_IN_RANGE) { + filter.match_all = {}; + filter.meta.field = field.name; + } else if (field.scripted) { + const operators = { + gt: '>', + gte: '>=', + lte: '<=', + lt: '<', + }; + + const script = _.map(params, function (val, key) { + return '(' + field.script + ')' + operators[key] + key; + }).join(' && '); + + const value = _.map(params, function (val, key) { + return operators[key] + field.format.convert(val); + }).join(' '); + + filter.script = { script: script, params: params, lang: field.lang }; + filter.script.params.value = value; + filter.meta.field = field.name; + } else { + filter.range = {}; + filter.range[field.name] = params; + } + + return filter; +}; diff --git a/src/ui/public/filters/_prop_filter.js b/src/ui/public/filters/_prop_filter.js index bcba1a2078526e..fca3db02af9286 100644 --- a/src/ui/public/filters/_prop_filter.js +++ b/src/ui/public/filters/_prop_filter.js @@ -1,56 +1,54 @@ import _ from 'lodash'; -define(function (require) { +/** + * Filters out a list by a given filter. This is currently used to impelment: + * - fieldType filters a list of fields by their type property + * - aggFilter filters a list of aggs by their name property + * + * @returns {function} - the filter function which can be registered with angular + */ +function propFilter(prop) { /** - * Filters out a list by a given filter. This is currently used to impelment: - * - fieldType filters a list of fields by their type property - * - aggFilter filters a list of aggs by their name property + * List filtering function which accepts an array or list of values that a property + * must contain * - * @returns {function} - the filter function which can be registered with angular + * @param {array} list - array of items to filter + * @param {array|string} filters - the values to match against the list. Can be + * an array, a single value as a string, or a comma + * -seperated list of items + * @return {array} - the filtered list */ - function propFilter(prop) { - /** - * List filtering function which accepts an array or list of values that a property - * must contain - * - * @param {array} list - array of items to filter - * @param {array|string} filters - the values to match against the list. Can be - * an array, a single value as a string, or a comma - * -seperated list of items - * @return {array} - the filtered list - */ - return function (list, filters) { - if (!filters) return filters; - if (!_.isArray(filters)) filters = filters.split(','); - if (_.contains(filters, '*')) return list; - - var options = filters.reduce(function (options, filter) { - var type = 'include'; - var value = filter; - - if (filter.charAt(0) === '!') { - type = 'exclude'; - value = filter.substr(1); - } - - if (!options[type]) options[type] = []; - options[type].push(value); - return options; - }, {}); - - return list.filter(function (item) { - var value = item[prop]; - - var excluded = options.exclude && _.contains(options.exclude, value); - if (excluded) return false; - - var included = !options.include || _.contains(options.include, value); - if (included) return true; - - return false; - }); - }; - } - - return propFilter; -}); + return function (list, filters) { + if (!filters) return filters; + if (!_.isArray(filters)) filters = filters.split(','); + if (_.contains(filters, '*')) return list; + + var options = filters.reduce(function (options, filter) { + var type = 'include'; + var value = filter; + + if (filter.charAt(0) === '!') { + type = 'exclude'; + value = filter.substr(1); + } + + if (!options[type]) options[type] = []; + options[type].push(value); + return options; + }, {}); + + return list.filter(function (item) { + var value = item[prop]; + + var excluded = options.exclude && _.contains(options.exclude, value); + if (excluded) return false; + + var included = !options.include || _.contains(options.include, value); + if (included) return true; + + return false; + }); + }; +} + +export default propFilter; diff --git a/src/ui/public/filters/commaList.js b/src/ui/public/filters/commaList.js index ec2759d54b8a31..c75d13d839e411 100644 --- a/src/ui/public/filters/commaList.js +++ b/src/ui/public/filters/commaList.js @@ -1,26 +1,24 @@ import _ from 'lodash'; -define(function (require) { - require('ui/modules') - .get('kibana') - .filter('commaList', function () { - /** - * Angular filter that accepts either an array or a comma-seperated string - * and outputs either an array, or a comma-seperated string for presentation. - * - * @param {String|Array} input - The comma-seperated list or array - * @param {Boolean} inclusive - Should the list be joined with an "and"? - * @return {String} - */ - return function (input, inclusive) { - var list = _.commaSeperatedList(input); - if (list.length < 2) { - return list.join(''); - } +require('ui/modules') +.get('kibana') +.filter('commaList', function () { + /** + * Angular filter that accepts either an array or a comma-seperated string + * and outputs either an array, or a comma-seperated string for presentation. + * + * @param {String|Array} input - The comma-seperated list or array + * @param {Boolean} inclusive - Should the list be joined with an "and"? + * @return {String} + */ + return function (input, inclusive) { + var list = _.commaSeperatedList(input); + if (list.length < 2) { + return list.join(''); + } - var conj = inclusive ? ' and ' : ' or '; - return list.slice(0, -1).join(', ') + conj + _.last(list); + var conj = inclusive ? ' and ' : ' or '; + return list.slice(0, -1).join(', ') + conj + _.last(list); - }; - }); + }; }); diff --git a/src/ui/public/filters/field_type.js b/src/ui/public/filters/field_type.js index cc748f615dac32..be3f8281e5f44e 100644 --- a/src/ui/public/filters/field_type.js +++ b/src/ui/public/filters/field_type.js @@ -3,11 +3,9 @@ import propFilter from 'ui/filters/_prop_filter'; // Gets all fields of a given type. // You may also pass "*" to get all types // Or an array of types to get all fields of that type -define(function (require) { - require('ui/modules') - .get('kibana') - .filter('fieldType', function () { - return propFilter('type'); - }); +require('ui/modules') +.get('kibana') +.filter('fieldType', function () { + return propFilter('type'); }); diff --git a/src/ui/public/filters/label.js b/src/ui/public/filters/label.js index 50c8aec3662caf..b5066a84335c86 100644 --- a/src/ui/public/filters/label.js +++ b/src/ui/public/filters/label.js @@ -1,16 +1,14 @@ -define(function (require) { - require('ui/modules') - .get('kibana') - .filter('label', function () { - return function (str) { - var words = str.split(' '); - return words.map(capFirst).join(' '); - }; - }); +require('ui/modules') + .get('kibana') + .filter('label', function () { + return function (str) { + var words = str.split(' '); + return words.map(capFirst).join(' '); + }; + }); - function capFirst(str) { - var i = str[0]; - var r = new RegExp(i, 'i'); - return str.replace(r, i.toUpperCase()); - } -}); +function capFirst(str) { + var i = str[0]; + var r = new RegExp(i, 'i'); + return str.replace(r, i.toUpperCase()); +} diff --git a/src/ui/public/filters/match_any.js b/src/ui/public/filters/match_any.js index e3ce87bf84ed71..b7f5240ac5ee31 100644 --- a/src/ui/public/filters/match_any.js +++ b/src/ui/public/filters/match_any.js @@ -2,25 +2,23 @@ import _ from 'lodash'; // Gets all fields of a given type. // You may also pass "*" to get all types // Or an array of types to get all fields of that type -define(function (require) { - require('ui/modules') - .get('kibana') - .filter('matchAny', function () { - return function (items, rules) { - if (!_.isArray(rules)) { - rules = [rules]; - } +require('ui/modules') +.get('kibana') +.filter('matchAny', function () { + return function (items, rules) { + if (!_.isArray(rules)) { + rules = [rules]; + } - return _.filter(items, function (item) { - for (var i = 0; i < rules.length; i++) { - if (_.some([item], rules[i])) { - return true; - } + return _.filter(items, function (item) { + for (var i = 0; i < rules.length; i++) { + if (_.some([item], rules[i])) { + return true; } + } - return false; - }); - }; - }); + return false; + }); + }; }); diff --git a/src/ui/public/filters/moment.js b/src/ui/public/filters/moment.js index 8d35df103d164a..0a4c427face828 100644 --- a/src/ui/public/filters/moment.js +++ b/src/ui/public/filters/moment.js @@ -1,15 +1,13 @@ import moment from 'moment'; import _ from 'lodash'; -define(function (require) { - require('ui/modules') - .get('kibana') - .filter('moment', function (config) { - return function (datetime) { - var format = config.get('dateFormat'); - if (moment.isMoment(datetime)) return datetime.format(format); - if (_.isDate(datetime)) return moment(datetime).format(format); - return datetime; - }; - }); -}); +require('ui/modules') + .get('kibana') + .filter('moment', function (config) { + return function (datetime) { + var format = config.get('dateFormat'); + if (moment.isMoment(datetime)) return datetime.format(format); + if (_.isDate(datetime)) return moment(datetime).format(format); + return datetime; + }; + }); diff --git a/src/ui/public/filters/rison.js b/src/ui/public/filters/rison.js index 20b459fe5d4b5d..5345491a06b160 100644 --- a/src/ui/public/filters/rison.js +++ b/src/ui/public/filters/rison.js @@ -1,16 +1,14 @@ import rison from 'ui/utils/rison'; -define(function (require) { - var module = require('ui/modules').get('kibana'); +var module = require('ui/modules').get('kibana'); - module.filter('rison', function () { - return function (str) { - return rison.encode(str); - }; - }); +module.filter('rison', function () { + return function (str) { + return rison.encode(str); + }; +}); - module.filter('risonDecode', function () { - return function (str) { - return rison.decode(str); - }; - }); +module.filter('risonDecode', function () { + return function (str) { + return rison.decode(str); + }; }); diff --git a/src/ui/public/filters/short_dots.js b/src/ui/public/filters/short_dots.js index 837bcd5583ac65..0715e121bfd5a8 100644 --- a/src/ui/public/filters/short_dots.js +++ b/src/ui/public/filters/short_dots.js @@ -2,29 +2,27 @@ import _ from 'lodash'; // Shorts dot notated strings // eg: foo.bar.baz becomes f.b.baz // 'foo.bar.baz'.replace(/(.+?\.)/g,function(v) {return v[0]+'.';}); -define(function (require) { - require('ui/modules') - .get('kibana') - .filter('shortDots', function (Private) { - return Private(shortDotsFilterProvider); - }); +require('ui/modules') + .get('kibana') + .filter('shortDots', function (Private) { + return Private(shortDotsFilterProvider); + }); - function shortDotsFilterProvider(config, $rootScope) { - var filter; +function shortDotsFilterProvider(config, $rootScope) { + var filter; - function updateFilter() { - filter = config.get('shortDots:enable') ? _.shortenDottedString : _.identity; - } + function updateFilter() { + filter = config.get('shortDots:enable') ? _.shortenDottedString : _.identity; + } - updateFilter(); - $rootScope.$on('change:config.shortDots:enable', updateFilter); - $rootScope.$on('init:config', updateFilter); + updateFilter(); + $rootScope.$on('change:config.shortDots:enable', updateFilter); + $rootScope.$on('init:config', updateFilter); - return function (str) { - return filter(str); - }; - } + return function (str) { + return filter(str); + }; +} - return shortDotsFilterProvider; -}); +export default shortDotsFilterProvider; diff --git a/src/ui/public/filters/start_from.js b/src/ui/public/filters/start_from.js index e5c8f34df75c53..8d8d58562e4a5f 100644 --- a/src/ui/public/filters/start_from.js +++ b/src/ui/public/filters/start_from.js @@ -1,11 +1,9 @@ -define(function (require) { - require('ui/modules') - .get('kibana') - .filter('startFrom', function () { - return function (input, start) { - if (!input) return []; - start = +start; //parse to int - return input.slice(start); - }; - }); -}); +require('ui/modules') + .get('kibana') + .filter('startFrom', function () { + return function (input, start) { + if (!input) return []; + start = +start; //parse to int + return input.slice(start); + }; + }); diff --git a/src/ui/public/filters/trust_as_html.js b/src/ui/public/filters/trust_as_html.js index 24161dfc4f9ffd..12d49e724ef428 100644 --- a/src/ui/public/filters/trust_as_html.js +++ b/src/ui/public/filters/trust_as_html.js @@ -1,10 +1,8 @@ import angular from 'angular'; -define(function (require) { - var module = require('ui/modules').get('kibana'); +var module = require('ui/modules').get('kibana'); - // Simple filter to allow using ng-bind-html without explicitly calling $sce.trustAsHtml in a controller - // (See http://goo.gl/mpj9o2) - module.filter('trustAsHtml', function ($sce) { - return $sce.trustAsHtml; - }); +// Simple filter to allow using ng-bind-html without explicitly calling $sce.trustAsHtml in a controller +// (See http://goo.gl/mpj9o2) +module.filter('trustAsHtml', function ($sce) { + return $sce.trustAsHtml; }); diff --git a/src/ui/public/filters/unique.js b/src/ui/public/filters/unique.js index 1ef9d0f437aa15..5fcd4ed44745da 100644 --- a/src/ui/public/filters/unique.js +++ b/src/ui/public/filters/unique.js @@ -1,13 +1,11 @@ import _ from 'lodash'; // Filters out all duplicate items in an array -define(function (require) { - require('ui/modules') - .get('kibana') - .filter('unique', function () { - return function (arr) { - var list = _.unique(arr); - return list; - }; - }); -}); +require('ui/modules') + .get('kibana') + .filter('unique', function () { + return function (arr) { + var list = _.unique(arr); + return list; + }; + }); diff --git a/src/ui/public/filters/uriescape.js b/src/ui/public/filters/uriescape.js index 37ee4021522cc0..bc2de7e3477841 100644 --- a/src/ui/public/filters/uriescape.js +++ b/src/ui/public/filters/uriescape.js @@ -1,9 +1,7 @@ -define(function (require) { - require('ui/modules') - .get('kibana') - .filter('uriescape', function () { - return function (str) { - return encodeURIComponent(str); - }; - }); -}); +require('ui/modules') + .get('kibana') + .filter('uriescape', function () { + return function (str) { + return encodeURIComponent(str); + }; + }); diff --git a/src/ui/public/fixedScroll.js b/src/ui/public/fixedScroll.js index c4ce542778a76e..eda6fec35c73af 100644 --- a/src/ui/public/fixedScroll.js +++ b/src/ui/public/fixedScroll.js @@ -1,115 +1,113 @@ import $ from 'jquery'; import _ from 'lodash'; -define(function (require) { - - var SCROLLER_HEIGHT = 20; - - require('ui/modules') - .get('kibana') - .directive('fixedScroll', function ($timeout) { - return { - restrict: 'A', - link: function ($scope, $el) { - var $window = $(window); - var $scroller = $('
      ').height(SCROLLER_HEIGHT); - - - /** - * Remove the listeners bound in listen() - * @type {function} - */ - var unlisten = _.noop; - - /** - * Listen for scroll events on the $scroller and the $el, sets unlisten() - * - * unlisten must be called before calling or listen() will throw an Error - * - * Since the browser emits "scroll" events after setting scrollLeft - * the listeners also prevent tug-of-war - * - * @throws {Error} If unlisten was not called first - * @return {undefined} - */ - function listen() { - if (unlisten !== _.noop) { - throw new Error('fixedScroll listeners were not cleaned up properly before re-listening!'); - } - var blockTo; - function bind($from, $to) { - function handler() { - if (blockTo === $to) return (blockTo = null); - $to.scrollLeft((blockTo = $from).scrollLeft()); - } - - $from.on('scroll', handler); - return function () { - $from.off('scroll', handler); - }; +var SCROLLER_HEIGHT = 20; + +require('ui/modules') +.get('kibana') +.directive('fixedScroll', function ($timeout) { + return { + restrict: 'A', + link: function ($scope, $el) { + var $window = $(window); + var $scroller = $('
      ').height(SCROLLER_HEIGHT); + + + /** + * Remove the listeners bound in listen() + * @type {function} + */ + var unlisten = _.noop; + + /** + * Listen for scroll events on the $scroller and the $el, sets unlisten() + * + * unlisten must be called before calling or listen() will throw an Error + * + * Since the browser emits "scroll" events after setting scrollLeft + * the listeners also prevent tug-of-war + * + * @throws {Error} If unlisten was not called first + * @return {undefined} + */ + function listen() { + if (unlisten !== _.noop) { + throw new Error('fixedScroll listeners were not cleaned up properly before re-listening!'); + } + + var blockTo; + function bind($from, $to) { + function handler() { + if (blockTo === $to) return (blockTo = null); + $to.scrollLeft((blockTo = $from).scrollLeft()); } - unlisten = _.flow( - bind($el, $scroller), - bind($scroller, $el), - function () { unlisten = _.noop; } - ); + $from.on('scroll', handler); + return function () { + $from.off('scroll', handler); + }; } - /** - * Revert DOM changes and event listeners - * @return {undefined} - */ - function cleanUp() { - unlisten(); - $scroller.detach(); - $el.css('padding-bottom', 0); - } + unlisten = _.flow( + bind($el, $scroller), + bind($scroller, $el), + function () { unlisten = _.noop; } + ); + } - /** - * Modify the DOM and attach event listeners based on need. - * Is called many times to re-setup, must be idempotent - * @return {undefined} - */ - function setup() { - cleanUp(); + /** + * Revert DOM changes and event listeners + * @return {undefined} + */ + function cleanUp() { + unlisten(); + $scroller.detach(); + $el.css('padding-bottom', 0); + } - var containerWidth = $el.width(); - var contentWidth = $el.prop('scrollWidth'); - var containerHorizOverflow = contentWidth - containerWidth; + /** + * Modify the DOM and attach event listeners based on need. + * Is called many times to re-setup, must be idempotent + * @return {undefined} + */ + function setup() { + cleanUp(); - var elTop = $el.offset().top - $window.scrollTop(); - var elBottom = elTop + $el.height(); - var windowVertOverflow = elBottom - $window.height(); + var containerWidth = $el.width(); + var contentWidth = $el.prop('scrollWidth'); + var containerHorizOverflow = contentWidth - containerWidth; - var requireScroller = containerHorizOverflow > 0 && windowVertOverflow > 0; - if (!requireScroller) return; + var elTop = $el.offset().top - $window.scrollTop(); + var elBottom = elTop + $el.height(); + var windowVertOverflow = elBottom - $window.height(); - // push the content away from the scroller - $el.css('padding-bottom', SCROLLER_HEIGHT); + var requireScroller = containerHorizOverflow > 0 && windowVertOverflow > 0; + if (!requireScroller) return; - // fill the scroller with a dummy element that mimics the content - $scroller - .width(containerWidth) - .html($('
      ').css({ width: contentWidth, height: SCROLLER_HEIGHT })) - .insertAfter($el); + // push the content away from the scroller + $el.css('padding-bottom', SCROLLER_HEIGHT); - // listen for scroll events - listen(); - } + // fill the scroller with a dummy element that mimics the content + $scroller + .width(containerWidth) + .html($('
      ').css({ width: contentWidth, height: SCROLLER_HEIGHT })) + .insertAfter($el); - // reset when the width or scrollWidth of the $el changes - $scope.$watchMulti([ - function () { return $el.prop('scrollWidth'); }, - function () { return $el.width(); } - ], setup); - - // cleanup when the scope is destroyed - $scope.$on('$destroy', function () { - cleanUp(); - $scroller = $window = null; - }); + // listen for scroll events + listen(); } - }; - }); + + // reset when the width or scrollWidth of the $el changes + $scope.$watchMulti([ + function () { return $el.prop('scrollWidth'); }, + function () { return $el.width(); } + ], setup); + + // cleanup when the scope is destroyed + $scope.$on('$destroy', function () { + cleanUp(); + $scroller = $window = null; + }); + } + }; }); diff --git a/src/ui/public/highlight/highlight.js b/src/ui/public/highlight/highlight.js index e6d9ea2ff729af..52148968e61b62 100644 --- a/src/ui/public/highlight/highlight.js +++ b/src/ui/public/highlight/highlight.js @@ -1,32 +1,30 @@ import 'ui/highlight/highlight_tags'; import _ from 'lodash'; import angular from 'angular'; -define(function (require) { - var module = require('ui/modules').get('kibana'); +var module = require('ui/modules').get('kibana'); - module.filter('highlight', function (highlightTags) { - return function (formatted, highlight) { - if (typeof formatted === 'object') formatted = angular.toJson(formatted); +module.filter('highlight', function (highlightTags) { + return function (formatted, highlight) { + if (typeof formatted === 'object') formatted = angular.toJson(formatted); - _.each(highlight, function (section) { - section = _.escape(section); + _.each(highlight, function (section) { + section = _.escape(section); - // Strip out the highlight tags to compare against the formatted string - var untagged = section - .split(highlightTags.pre).join('') - .split(highlightTags.post).join(''); + // Strip out the highlight tags to compare against the formatted string + var untagged = section + .split(highlightTags.pre).join('') + .split(highlightTags.post).join(''); - // Replace all highlight tags with proper html tags - var tagged = section - .split(highlightTags.pre).join('') - .split(highlightTags.post).join(''); + // Replace all highlight tags with proper html tags + var tagged = section + .split(highlightTags.pre).join('') + .split(highlightTags.post).join(''); - // Replace all instances of the untagged string with the properly tagged string - formatted = formatted.split(untagged).join(tagged); - }); + // Replace all instances of the untagged string with the properly tagged string + formatted = formatted.split(untagged).join(tagged); + }); - return formatted; - }; - }); + return formatted; + }; }); diff --git a/src/ui/public/highlight/highlight_tags.js b/src/ui/public/highlight/highlight_tags.js index 2f6aea6db14024..5db0f397d25a1a 100644 --- a/src/ui/public/highlight/highlight_tags.js +++ b/src/ui/public/highlight/highlight_tags.js @@ -1,11 +1,9 @@ -define(function (require) { - var module = require('ui/modules').get('kibana'); +var module = require('ui/modules').get('kibana'); - // By default, ElasticSearch surrounds matched values in . This is not ideal because it is possible that - // the value could contain in the value. We define these custom tags that we would never expect to see - // inside a field value. - module.constant('highlightTags', { - pre: '@kibana-highlighted-field@', - post: '@/kibana-highlighted-field@' - }); +// By default, ElasticSearch surrounds matched values in . This is not ideal because it is possible that +// the value could contain in the value. We define these custom tags that we would never expect to see +// inside a field value. +module.constant('highlightTags', { + pre: '@kibana-highlighted-field@', + post: '@/kibana-highlighted-field@' }); diff --git a/src/ui/public/index_patterns/_calculate_indices.js b/src/ui/public/index_patterns/_calculate_indices.js index 07b8ddfaddcd45..33a4634750dbc1 100644 --- a/src/ui/public/index_patterns/_calculate_indices.js +++ b/src/ui/public/index_patterns/_calculate_indices.js @@ -1,87 +1,85 @@ import _ from 'lodash'; import moment from 'moment'; -define(function (require) { - // gets parsed value if given arg is a moment object - function timeValue(val) { - return moment.isMoment(val) ? val.valueOf() : val; - } - - // returns a properly formatted millisecond timestamp index constraint - function msConstraint(comparison, value) { - return { - [comparison]: timeValue(value), - format: 'epoch_millis' - }; - } +// gets parsed value if given arg is a moment object +function timeValue(val) { + return moment.isMoment(val) ? val.valueOf() : val; +} - // returns a new object with any indexes removed that do not include the - // time field - // - // fixme: this really seems like a bug that needs to be fixed in - // elasticsearch itself, but this workaround will do for now - function omitIndicesWithoutTimeField(indices, timeFieldName) { - return _.pick(indices, index => index.fields[timeFieldName]); - } +// returns a properly formatted millisecond timestamp index constraint +function msConstraint(comparison, value) { + return { + [comparison]: timeValue(value), + format: 'epoch_millis' + }; +} - return function CalculateIndicesFactory(Promise, es) { +// returns a new object with any indexes removed that do not include the +// time field +// +// fixme: this really seems like a bug that needs to be fixed in +// elasticsearch itself, but this workaround will do for now +function omitIndicesWithoutTimeField(indices, timeFieldName) { + return _.pick(indices, index => index.fields[timeFieldName]); +} - // Uses the field stats api to determine the names of indices that need to - // be queried against that match the given pattern and fall within the - // given time range - function calculateIndices(pattern, timeFieldName, start, stop, sortDirection) { - return getFieldStats(pattern, timeFieldName, start, stop) - .then(resp => omitIndicesWithoutTimeField(resp.indices, timeFieldName)) - .then(indices => sortIndexStats(indices, timeFieldName, sortDirection)); - }; +export default function CalculateIndicesFactory(Promise, es) { - // creates the configuration hash that must be passed to the elasticsearch - // client - function getFieldStats(pattern, timeFieldName, start, stop) { - const constraints = {}; - if (start) { - constraints.max_value = msConstraint('gte', start); - } - if (stop) { - constraints.min_value = msConstraint('lte', stop); - } + // Uses the field stats api to determine the names of indices that need to + // be queried against that match the given pattern and fall within the + // given time range + function calculateIndices(pattern, timeFieldName, start, stop, sortDirection) { + return getFieldStats(pattern, timeFieldName, start, stop) + .then(resp => omitIndicesWithoutTimeField(resp.indices, timeFieldName)) + .then(indices => sortIndexStats(indices, timeFieldName, sortDirection)); + }; - return es.fieldStats({ - index: pattern, - level: 'indices', - body: { - fields: [ timeFieldName ], - index_constraints: { - [timeFieldName]: constraints - } - } - }); + // creates the configuration hash that must be passed to the elasticsearch + // client + function getFieldStats(pattern, timeFieldName, start, stop) { + const constraints = {}; + if (start) { + constraints.max_value = msConstraint('gte', start); + } + if (stop) { + constraints.min_value = msConstraint('lte', stop); } - function sortIndexStats(indices, timeFieldName, sortDirection) { - const desc = sortDirection === 'desc'; - const leader = desc ? 'max' : 'min'; + return es.fieldStats({ + index: pattern, + level: 'indices', + body: { + fields: [ timeFieldName ], + index_constraints: { + [timeFieldName]: constraints + } + } + }); + } - let indexDetails = _(indices).map((stats, index) => { - const field = stats.fields[timeFieldName]; + function sortIndexStats(indices, timeFieldName, sortDirection) { + const desc = sortDirection === 'desc'; + const leader = desc ? 'max' : 'min'; - // TODO: remove when we get to es 2.2, see elastic/elasticsearch#14404 - let min = field.min_value; - if (typeof min === 'string') min = moment(min).valueOf(); + let indexDetails = _(indices).map((stats, index) => { + const field = stats.fields[timeFieldName]; - let max = field.max_value; - if (typeof max === 'string') max = moment(max).valueOf(); + // TODO: remove when we get to es 2.2, see elastic/elasticsearch#14404 + let min = field.min_value; + if (typeof min === 'string') min = moment(min).valueOf(); - return { index, min, max }; - }); + let max = field.max_value; + if (typeof max === 'string') max = moment(max).valueOf(); - if (sortDirection) { - indexDetails = indexDetails.sortByOrder([leader], [sortDirection]); - } + return { index, min, max }; + }); - return indexDetails.value(); + if (sortDirection) { + indexDetails = indexDetails.sortByOrder([leader], [sortDirection]); } - return calculateIndices; - }; -}); + return indexDetails.value(); + } + + return calculateIndices; +}; diff --git a/src/ui/public/index_patterns/_cast_mapping_type.js b/src/ui/public/index_patterns/_cast_mapping_type.js index 7cb5b51d8d466a..1dd6cb6ca0adc0 100644 --- a/src/ui/public/index_patterns/_cast_mapping_type.js +++ b/src/ui/public/index_patterns/_cast_mapping_type.js @@ -1,42 +1,40 @@ import IndexedArray from 'ui/IndexedArray'; -define(function (require) { - return function CastMappingTypeFn() { +export default function CastMappingTypeFn() { - castMappingType.types = new IndexedArray({ - index: ['name'], - group: ['type'], - immutable: true, - initialSet: [ - { name: 'string', type: 'string', group: 'base' }, - { name: 'date', type: 'date', group: 'base' }, - { name: 'boolean', type: 'boolean', group: 'base' }, - { name: 'float', type: 'number', group: 'number' }, - { name: 'double', type: 'number', group: 'number' }, - { name: 'integer', type: 'number', group: 'number' }, - { name: 'long', type: 'number', group: 'number' }, - { name: 'short', type: 'number', group: 'number' }, - { name: 'byte', type: 'number', group: 'number' }, - { name: 'token_count', type: 'number', group: 'number' }, - { name: 'geo_point', type: 'geo_point', group: 'geo' }, - { name: 'geo_shape', type: 'geo_shape', group: 'geo' }, - { name: 'ip', type: 'ip', group: 'other' }, - { name: 'attachment', type: 'attachment', group: 'other' }, - { name: 'murmur3', type: 'murmur3', group: 'hash' } - ] - }); + castMappingType.types = new IndexedArray({ + index: ['name'], + group: ['type'], + immutable: true, + initialSet: [ + { name: 'string', type: 'string', group: 'base' }, + { name: 'date', type: 'date', group: 'base' }, + { name: 'boolean', type: 'boolean', group: 'base' }, + { name: 'float', type: 'number', group: 'number' }, + { name: 'double', type: 'number', group: 'number' }, + { name: 'integer', type: 'number', group: 'number' }, + { name: 'long', type: 'number', group: 'number' }, + { name: 'short', type: 'number', group: 'number' }, + { name: 'byte', type: 'number', group: 'number' }, + { name: 'token_count', type: 'number', group: 'number' }, + { name: 'geo_point', type: 'geo_point', group: 'geo' }, + { name: 'geo_shape', type: 'geo_shape', group: 'geo' }, + { name: 'ip', type: 'ip', group: 'other' }, + { name: 'attachment', type: 'attachment', group: 'other' }, + { name: 'murmur3', type: 'murmur3', group: 'hash' } + ] + }); - /** - * Accepts a mapping type, and converts it into it's js equivilent - * @param {String} type - the type from the mapping's 'type' field - * @return {String} - the most specific type that we care for - */ - function castMappingType(name) { - if (!name) return 'unknown'; + /** + * Accepts a mapping type, and converts it into it's js equivilent + * @param {String} type - the type from the mapping's 'type' field + * @return {String} - the most specific type that we care for + */ + function castMappingType(name) { + if (!name) return 'unknown'; - var match = castMappingType.types.byName[name]; - return match ? match.type : 'string'; - } + var match = castMappingType.types.byName[name]; + return match ? match.type : 'string'; + } - return castMappingType; - }; -}); + return castMappingType; +}; diff --git a/src/ui/public/index_patterns/_ensure_some.js b/src/ui/public/index_patterns/_ensure_some.js index 44a8c085308ad6..60e0f643809a5a 100644 --- a/src/ui/public/index_patterns/_ensure_some.js +++ b/src/ui/public/index_patterns/_ensure_some.js @@ -1,17 +1,15 @@ import errors from 'ui/errors'; -define(function (require) { - return function EnsureSomeIndexPatternsFn(Private, Notifier, $location, kbnUrl) { - var notify = new Notifier(); +export default function EnsureSomeIndexPatternsFn(Private, Notifier, $location, kbnUrl) { + var notify = new Notifier(); - return function ensureSomeIndexPatterns() { - return function promiseHandler(patterns) { - if (!patterns || patterns.length === 0) { - // notify.warning(new errors.NoDefinedIndexPatterns()); - kbnUrl.redirectPath('/settings/indices'); - } + return function ensureSomeIndexPatterns() { + return function promiseHandler(patterns) { + if (!patterns || patterns.length === 0) { + // notify.warning(new errors.NoDefinedIndexPatterns()); + kbnUrl.redirectPath('/settings/indices'); + } - return patterns; - }; + return patterns; }; }; -}); +}; diff --git a/src/ui/public/index_patterns/_field.js b/src/ui/public/index_patterns/_field.js index c8cdce67ab0c97..5061703b9e0997 100644 --- a/src/ui/public/index_patterns/_field.js +++ b/src/ui/public/index_patterns/_field.js @@ -2,79 +2,77 @@ import ObjDefine from 'ui/utils/ObjDefine'; import IndexPatternsFieldFormatFieldFormatProvider from 'ui/index_patterns/_field_format/FieldFormat'; import IndexPatternsFieldTypesProvider from 'ui/index_patterns/_field_types'; import RegistryFieldFormatsProvider from 'ui/registry/field_formats'; -define(function (require) { - return function FieldObjectProvider(Private, shortDotsFilter, $rootScope, Notifier) { - var notify = new Notifier({ location: 'IndexPattern Field' }); - var FieldFormat = Private(IndexPatternsFieldFormatFieldFormatProvider); - var fieldTypes = Private(IndexPatternsFieldTypesProvider); - var fieldFormats = Private(RegistryFieldFormatsProvider); +export default function FieldObjectProvider(Private, shortDotsFilter, $rootScope, Notifier) { + var notify = new Notifier({ location: 'IndexPattern Field' }); + var FieldFormat = Private(IndexPatternsFieldFormatFieldFormatProvider); + var fieldTypes = Private(IndexPatternsFieldTypesProvider); + var fieldFormats = Private(RegistryFieldFormatsProvider); - function Field(indexPattern, spec) { - // unwrap old instances of Field - if (spec instanceof Field) spec = spec.$$spec; + function Field(indexPattern, spec) { + // unwrap old instances of Field + if (spec instanceof Field) spec = spec.$$spec; - // constuct this object using ObjDefine class, which - // extends the Field.prototype but gets it's properties - // defined using the logic below - var obj = new ObjDefine(spec, Field.prototype); + // constuct this object using ObjDefine class, which + // extends the Field.prototype but gets it's properties + // defined using the logic below + var obj = new ObjDefine(spec, Field.prototype); - if (spec.name === '_source') { - spec.type = '_source'; - } - - // find the type for this field, fallback to unknown type - var type = fieldTypes.byName[spec.type]; - if (spec.type && !type) { - notify.error( - 'Unknown field type "' + spec.type + '"' + - ' for field "' + spec.name + '"' + - ' in indexPattern "' + indexPattern.id + '"' - ); - } + if (spec.name === '_source') { + spec.type = '_source'; + } - if (!type) type = fieldTypes.byName.unknown; + // find the type for this field, fallback to unknown type + var type = fieldTypes.byName[spec.type]; + if (spec.type && !type) { + notify.error( + 'Unknown field type "' + spec.type + '"' + + ' for field "' + spec.name + '"' + + ' in indexPattern "' + indexPattern.id + '"' + ); + } - var format = spec.format; - if (!format || !(format instanceof FieldFormat)) { - format = indexPattern.fieldFormatMap[spec.name] || fieldFormats.getDefaultInstance(spec.type); - } + if (!type) type = fieldTypes.byName.unknown; - var indexed = !!spec.indexed; - var scripted = !!spec.scripted; - var sortable = spec.name === '_score' || ((indexed || scripted) && type.sortable); - var filterable = spec.name === '_id' || scripted || (indexed && type.filterable); + var format = spec.format; + if (!format || !(format instanceof FieldFormat)) { + format = indexPattern.fieldFormatMap[spec.name] || fieldFormats.getDefaultInstance(spec.type); + } - obj.fact('name'); - obj.fact('type'); - obj.writ('count', spec.count || 0); + var indexed = !!spec.indexed; + var scripted = !!spec.scripted; + var sortable = spec.name === '_score' || ((indexed || scripted) && type.sortable); + var filterable = spec.name === '_id' || scripted || (indexed && type.filterable); - // scripted objs - obj.fact('scripted', scripted); - obj.writ('script', scripted ? spec.script : null); - obj.writ('lang', scripted ? (spec.lang || 'expression') : null); + obj.fact('name'); + obj.fact('type'); + obj.writ('count', spec.count || 0); - // mapping info - obj.fact('indexed', indexed); - obj.fact('analyzed', !!spec.analyzed); - obj.fact('doc_values', !!spec.doc_values); + // scripted objs + obj.fact('scripted', scripted); + obj.writ('script', scripted ? spec.script : null); + obj.writ('lang', scripted ? (spec.lang || 'expression') : null); - // usage flags, read-only and won't be saved - obj.comp('format', format); - obj.comp('sortable', sortable); - obj.comp('filterable', filterable); + // mapping info + obj.fact('indexed', indexed); + obj.fact('analyzed', !!spec.analyzed); + obj.fact('doc_values', !!spec.doc_values); - // computed values - obj.comp('indexPattern', indexPattern); - obj.comp('displayName', shortDotsFilter(spec.name)); - obj.comp('$$spec', spec); + // usage flags, read-only and won't be saved + obj.comp('format', format); + obj.comp('sortable', sortable); + obj.comp('filterable', filterable); - return obj.create(); - } + // computed values + obj.comp('indexPattern', indexPattern); + obj.comp('displayName', shortDotsFilter(spec.name)); + obj.comp('$$spec', spec); - Field.prototype.routes = { - edit: '/settings/indices/{{indexPattern.id}}/field/{{name}}' - }; + return obj.create(); + } - return Field; + Field.prototype.routes = { + edit: '/settings/indices/{{indexPattern.id}}/field/{{name}}' }; -}); + + return Field; +}; diff --git a/src/ui/public/index_patterns/_field_format/FieldFormat.js b/src/ui/public/index_patterns/_field_format/FieldFormat.js index e4fd10e54539f2..de83ab8fef0159 100644 --- a/src/ui/public/index_patterns/_field_format/FieldFormat.js +++ b/src/ui/public/index_patterns/_field_format/FieldFormat.js @@ -1,109 +1,107 @@ import _ from 'lodash'; import IndexPatternsFieldFormatContentTypesProvider from 'ui/index_patterns/_field_format/contentTypes'; -define(function (require) { - return function FieldFormatClassProvider(config, $rootScope, Private) { - var contentTypes = Private(IndexPatternsFieldFormatContentTypesProvider); +export default function FieldFormatClassProvider(config, $rootScope, Private) { + var contentTypes = Private(IndexPatternsFieldFormatContentTypesProvider); - function FieldFormat(params) { - var self = this; + function FieldFormat(params) { + var self = this; - // give the constructor a more appropriate name - self.type = self.constructor; + // give the constructor a more appropriate name + self.type = self.constructor; - // keep the params and defaults seperate - self._params = params || {}; - self._paramDefaults = self.type.paramDefaults || {}; + // keep the params and defaults seperate + self._params = params || {}; + self._paramDefaults = self.type.paramDefaults || {}; - // one content type, so assume text - if (_.isFunction(self._convert)) { - self._convert = { text: self._convert }; - } - - contentTypes.setup(self); + // one content type, so assume text + if (_.isFunction(self._convert)) { + self._convert = { text: self._convert }; } - FieldFormat.from = function (converter) { - _.class(FieldFormatFromConverter).inherits(FieldFormat); - function FieldFormatFromConverter(params) { - FieldFormatFromConverter.Super.call(this, params); - } - FieldFormatFromConverter.prototype._convert = converter; - return FieldFormatFromConverter; - }; + contentTypes.setup(self); + } - /** - * Convert a raw value to a formated string - * @param {any} value - * @param {string} [contentType=text] - optional content type, the only two contentTypes - * currently supported are "html" and "text", which helps - * formatters adjust to different contexts - * @return {string} - the formatted string, which is assumed to be html, safe for - * injecting into the DOM or a DOM attribute - */ - FieldFormat.prototype.convert = function (value, contentType) { - return this.getConverterFor(contentType)(value); - }; + FieldFormat.from = function (converter) { + _.class(FieldFormatFromConverter).inherits(FieldFormat); + function FieldFormatFromConverter(params) { + FieldFormatFromConverter.Super.call(this, params); + } + FieldFormatFromConverter.prototype._convert = converter; + return FieldFormatFromConverter; + }; - /** - * Get a convert function that is bound to a specific contentType - * @param {string} [contentType=text] - * @return {function} - a bound converter function - */ - FieldFormat.prototype.getConverterFor = function (contentType) { - return this._convert[contentType || 'text']; - }; + /** + * Convert a raw value to a formated string + * @param {any} value + * @param {string} [contentType=text] - optional content type, the only two contentTypes + * currently supported are "html" and "text", which helps + * formatters adjust to different contexts + * @return {string} - the formatted string, which is assumed to be html, safe for + * injecting into the DOM or a DOM attribute + */ + FieldFormat.prototype.convert = function (value, contentType) { + return this.getConverterFor(contentType)(value); + }; - /** - * Get the value of a param. This value may be a default value. - * - * @param {string} name - the param name to fetch - * @return {any} - */ - FieldFormat.prototype.param = function (name) { - var val = this._params[name]; - if (val || val === false || val === 0) { - // truthy, false, or 0 are fine - // '', NaN, null, undefined, etc are not - return val; - } + /** + * Get a convert function that is bound to a specific contentType + * @param {string} [contentType=text] + * @return {function} - a bound converter function + */ + FieldFormat.prototype.getConverterFor = function (contentType) { + return this._convert[contentType || 'text']; + }; - return this._paramDefaults[name]; - }; + /** + * Get the value of a param. This value may be a default value. + * + * @param {string} name - the param name to fetch + * @return {any} + */ + FieldFormat.prototype.param = function (name) { + var val = this._params[name]; + if (val || val === false || val === 0) { + // truthy, false, or 0 are fine + // '', NaN, null, undefined, etc are not + return val; + } - /** - * Get all of the params in a single object - * @return {object} - */ - FieldFormat.prototype.params = function () { - return _.cloneDeep(_.defaults({}, this._params, this._paramDefaults)); - }; + return this._paramDefaults[name]; + }; + + /** + * Get all of the params in a single object + * @return {object} + */ + FieldFormat.prototype.params = function () { + return _.cloneDeep(_.defaults({}, this._params, this._paramDefaults)); + }; - /** - * serialize this format to a simple POJO, with only the params - * that are not default - * - * @return {object} - */ - FieldFormat.prototype.toJSON = function () { - var type = this.type; - var defaults = this._paramDefaults; - - var params = _.transform(this._params, function (uniqParams, val, param) { - if (val !== defaults[param]) { - uniqParams[param] = val; - } - }, {}); - - if (!_.size(params)) { - params = undefined; + /** + * serialize this format to a simple POJO, with only the params + * that are not default + * + * @return {object} + */ + FieldFormat.prototype.toJSON = function () { + var type = this.type; + var defaults = this._paramDefaults; + + var params = _.transform(this._params, function (uniqParams, val, param) { + if (val !== defaults[param]) { + uniqParams[param] = val; } + }, {}); - return { - id: type.id, - params: params - }; - }; + if (!_.size(params)) { + params = undefined; + } - return FieldFormat; + return { + id: type.id, + params: params + }; }; -}); + + return FieldFormat; +}; diff --git a/src/ui/public/index_patterns/_field_format/contentTypes.js b/src/ui/public/index_patterns/_field_format/contentTypes.js index 58279b0e7ac6f7..8defa4b03d1334 100644 --- a/src/ui/public/index_patterns/_field_format/contentTypes.js +++ b/src/ui/public/index_patterns/_field_format/contentTypes.js @@ -1,66 +1,64 @@ import _ from 'lodash'; import angular from 'angular'; import 'ui/highlight'; -define(function (require) { - return function contentTypesProvider(highlightFilter) { +export default function contentTypesProvider(highlightFilter) { - var types = { - html: function (format, convert) { - return function recurse(value, field, hit) { - if (!value || typeof value.map !== 'function') { - return convert.call(format, value, field, hit); - } + var types = { + html: function (format, convert) { + return function recurse(value, field, hit) { + if (!value || typeof value.map !== 'function') { + return convert.call(format, value, field, hit); + } - var subVals = value.map(function (v) { - return recurse(v, field, hit); - }); - var useMultiLine = subVals.some(function (sub) { - return sub.indexOf('\n') > -1; - }); + var subVals = value.map(function (v) { + return recurse(v, field, hit); + }); + var useMultiLine = subVals.some(function (sub) { + return sub.indexOf('\n') > -1; + }); - return subVals.join(',' + (useMultiLine ? '\n' : ' ')); - }; - }, + return subVals.join(',' + (useMultiLine ? '\n' : ' ')); + }; + }, - text: function (format, convert) { - return function recurse(value) { - if (!value || typeof value.map !== 'function') { - return convert.call(format, value); - } + text: function (format, convert) { + return function recurse(value) { + if (!value || typeof value.map !== 'function') { + return convert.call(format, value); + } - // format a list of values. In text contexts we just use JSON encoding - return angular.toJson(value.map(recurse), true); - }; - } - }; - - function fallbackText(value) { - return _.asPrettyString(value); + // format a list of values. In text contexts we just use JSON encoding + return angular.toJson(value.map(recurse), true); + }; } + }; - function fallbackHtml(value, field, hit) { - var formatted = _.escape(this.convert(value, 'text')); + function fallbackText(value) { + return _.asPrettyString(value); + } - if (!hit || !hit.highlight || !hit.highlight[field.name]) { - return formatted; - } else { - return highlightFilter(formatted, hit.highlight[field.name]); - } + function fallbackHtml(value, field, hit) { + var formatted = _.escape(this.convert(value, 'text')); + + if (!hit || !hit.highlight || !hit.highlight[field.name]) { + return formatted; + } else { + return highlightFilter(formatted, hit.highlight[field.name]); } + } - function setup(format) { - var src = format._convert || {}; - var converters = format._convert = {}; + function setup(format) { + var src = format._convert || {}; + var converters = format._convert = {}; - converters.text = types.text(format, src.text || fallbackText); - converters.html = types.html(format, src.html || fallbackHtml); + converters.text = types.text(format, src.text || fallbackText); + converters.html = types.html(format, src.html || fallbackHtml); - return format._convert; - } + return format._convert; + } - return { - types: types, - setup: setup - }; + return { + types: types, + setup: setup }; -}); +}; diff --git a/src/ui/public/index_patterns/_field_list.js b/src/ui/public/index_patterns/_field_list.js index 2306c1215529ec..efa5764b82a125 100644 --- a/src/ui/public/index_patterns/_field_list.js +++ b/src/ui/public/index_patterns/_field_list.js @@ -1,21 +1,19 @@ import IndexedArray from 'ui/IndexedArray'; import _ from 'lodash'; import IndexPatternsFieldProvider from 'ui/index_patterns/_field'; -define(function (require) { - return function FieldListProvider(Private) { - var Field = Private(IndexPatternsFieldProvider); +export default function FieldListProvider(Private) { + var Field = Private(IndexPatternsFieldProvider); - _.class(FieldList).inherits(IndexedArray); - function FieldList(indexPattern, specs) { - FieldList.Super.call(this, { - index: ['name'], - group: ['type'], - initialSet: specs.map(function (field) { - return new Field(indexPattern, field); - }) - }); - } + _.class(FieldList).inherits(IndexedArray); + function FieldList(indexPattern, specs) { + FieldList.Super.call(this, { + index: ['name'], + group: ['type'], + initialSet: specs.map(function (field) { + return new Field(indexPattern, field); + }) + }); + } - return FieldList; - }; -}); + return FieldList; +}; diff --git a/src/ui/public/index_patterns/_field_types.js b/src/ui/public/index_patterns/_field_types.js index 4acd08dd1c021b..f61cafa8817277 100644 --- a/src/ui/public/index_patterns/_field_types.js +++ b/src/ui/public/index_patterns/_field_types.js @@ -1,25 +1,23 @@ import IndexedArray from 'ui/IndexedArray'; -define(function (require) { - return function IndexPatternFieldTypes() { +export default function IndexPatternFieldTypes() { - return new IndexedArray({ - index: ['name'], - group: ['sortable', 'filterable'], - immutable: true, - initialSet: [ - { name: 'ip', sortable: true, filterable: true }, - { name: 'date', sortable: true, filterable: true }, - { name: 'string', sortable: true, filterable: true }, - { name: 'number', sortable: true, filterable: true }, - { name: 'boolean', sortable: true, filterable: true }, - { name: 'conflict', sortable: false, filterable: false }, - { name: 'geo_point', sortable: false, filterable: false }, - { name: 'geo_shape', sortable: false, filterable: false }, - { name: 'attachment', sortable: false, filterable: false }, - { name: 'murmur3', sortable: false, filterable: false }, - { name: 'unknown', sortable: false, filterable: false }, - { name: '_source', sortable: false, filterable: false }, - ] - }); - }; -}); + return new IndexedArray({ + index: ['name'], + group: ['sortable', 'filterable'], + immutable: true, + initialSet: [ + { name: 'ip', sortable: true, filterable: true }, + { name: 'date', sortable: true, filterable: true }, + { name: 'string', sortable: true, filterable: true }, + { name: 'number', sortable: true, filterable: true }, + { name: 'boolean', sortable: true, filterable: true }, + { name: 'conflict', sortable: false, filterable: false }, + { name: 'geo_point', sortable: false, filterable: false }, + { name: 'geo_shape', sortable: false, filterable: false }, + { name: 'attachment', sortable: false, filterable: false }, + { name: 'murmur3', sortable: false, filterable: false }, + { name: 'unknown', sortable: false, filterable: false }, + { name: '_source', sortable: false, filterable: false }, + ] + }); +}; diff --git a/src/ui/public/index_patterns/_flatten_hit.js b/src/ui/public/index_patterns/_flatten_hit.js index 7424c199d6e471..322d30234e585d 100644 --- a/src/ui/public/index_patterns/_flatten_hit.js +++ b/src/ui/public/index_patterns/_flatten_hit.js @@ -1,62 +1,60 @@ import _ from 'lodash'; // Takes a hit, merges it with any stored/scripted fields, and with the metaFields // returns a flattened version -define(function (require) { - return function FlattenHitProvider(config, $rootScope) { +export default function FlattenHitProvider(config, $rootScope) { - var metaFields = config.get('metaFields'); - $rootScope.$on('change:config.metaFields', function () { - metaFields = config.get('metaFields'); - }); - - function flattenHit(indexPattern, hit) { - var flat = {}; + var metaFields = config.get('metaFields'); + $rootScope.$on('change:config.metaFields', function () { + metaFields = config.get('metaFields'); + }); - // recursively merge _source - var fields = indexPattern.fields.byName; - (function flatten(obj, keyPrefix) { - keyPrefix = keyPrefix ? keyPrefix + '.' : ''; - _.forOwn(obj, function (val, key) { - key = keyPrefix + key; + function flattenHit(indexPattern, hit) { + var flat = {}; - if (flat[key] !== void 0) return; + // recursively merge _source + var fields = indexPattern.fields.byName; + (function flatten(obj, keyPrefix) { + keyPrefix = keyPrefix ? keyPrefix + '.' : ''; + _.forOwn(obj, function (val, key) { + key = keyPrefix + key; - var hasValidMapping = (fields[key] && fields[key].type !== 'conflict'); - var isValue = !_.isPlainObject(val); + if (flat[key] !== void 0) return; - if (hasValidMapping || isValue) { - flat[key] = val; - return; - } + var hasValidMapping = (fields[key] && fields[key].type !== 'conflict'); + var isValue = !_.isPlainObject(val); - flatten(val, key); - }); - }(hit._source)); + if (hasValidMapping || isValue) { + flat[key] = val; + return; + } - // assign the meta fields - _.each(metaFields, function (meta) { - if (meta === '_source') return; - flat[meta] = hit[meta]; + flatten(val, key); }); + }(hit._source)); - // unwrap computed fields - _.forOwn(hit.fields, function (val, key) { - if (key[0] === '_' && !_.contains(metaFields, key)) return; - flat[key] = _.isArray(val) && val.length === 1 ? val[0] : val; - }); + // assign the meta fields + _.each(metaFields, function (meta) { + if (meta === '_source') return; + flat[meta] = hit[meta]; + }); - return flat; - } + // unwrap computed fields + _.forOwn(hit.fields, function (val, key) { + if (key[0] === '_' && !_.contains(metaFields, key)) return; + flat[key] = _.isArray(val) && val.length === 1 ? val[0] : val; + }); - return function (indexPattern) { - function cachedFlatten(hit) { - return hit.$$_flattened || (hit.$$_flattened = flattenHit(indexPattern, hit)); - } + return flat; + } + + return function (indexPattern) { + function cachedFlatten(hit) { + return hit.$$_flattened || (hit.$$_flattened = flattenHit(indexPattern, hit)); + } - cachedFlatten.uncached = _.partial(flattenHit, indexPattern); + cachedFlatten.uncached = _.partial(flattenHit, indexPattern); - return cachedFlatten; - }; + return cachedFlatten; }; +}; -}); diff --git a/src/ui/public/index_patterns/_format_hit.js b/src/ui/public/index_patterns/_format_hit.js index 6cf0b688d9c9e1..b2bdbfde6faa42 100644 --- a/src/ui/public/index_patterns/_format_hit.js +++ b/src/ui/public/index_patterns/_format_hit.js @@ -1,48 +1,46 @@ import _ from 'lodash'; // Takes a hit, merges it with any stored/scripted fields, and with the metaFields // returns a formated version -define(function (require) { - return function (indexPattern, defaultFormat) { +export default function (indexPattern, defaultFormat) { - function convert(hit, val, fieldName) { - var field = indexPattern.fields.byName[fieldName]; - if (!field) return defaultFormat.convert(val, 'html'); - return field.format.getConverterFor('html')(val, field, hit); - } - - function formatHit(hit) { - if (hit.$$_formatted) return hit.$$_formatted; + function convert(hit, val, fieldName) { + var field = indexPattern.fields.byName[fieldName]; + if (!field) return defaultFormat.convert(val, 'html'); + return field.format.getConverterFor('html')(val, field, hit); + } - // use and update the partial cache, but don't rewrite it. _source is stored in partials - // but not $$_formatted - var partials = hit.$$_partialFormatted || (hit.$$_partialFormatted = {}); - var cache = hit.$$_formatted = {}; + function formatHit(hit) { + if (hit.$$_formatted) return hit.$$_formatted; - _.forOwn(indexPattern.flattenHit(hit), function (val, fieldName) { - // sync the formatted and partial cache - var formatted = partials[fieldName] == null ? convert(hit, val, fieldName) : partials[fieldName]; - cache[fieldName] = partials[fieldName] = formatted; - }); + // use and update the partial cache, but don't rewrite it. _source is stored in partials + // but not $$_formatted + var partials = hit.$$_partialFormatted || (hit.$$_partialFormatted = {}); + var cache = hit.$$_formatted = {}; - return cache; - } + _.forOwn(indexPattern.flattenHit(hit), function (val, fieldName) { + // sync the formatted and partial cache + var formatted = partials[fieldName] == null ? convert(hit, val, fieldName) : partials[fieldName]; + cache[fieldName] = partials[fieldName] = formatted; + }); - formatHit.formatField = function (hit, fieldName) { - var partials = hit.$$_partialFormatted; - if (partials && partials[fieldName] != null) { - return partials[fieldName]; - } + return cache; + } - if (!partials) { - partials = hit.$$_partialFormatted = {}; - } + formatHit.formatField = function (hit, fieldName) { + var partials = hit.$$_partialFormatted; + if (partials && partials[fieldName] != null) { + return partials[fieldName]; + } - var val = fieldName === '_source' ? hit._source : indexPattern.flattenHit(hit)[fieldName]; - return partials[fieldName] = convert(hit, val, fieldName); - }; + if (!partials) { + partials = hit.$$_partialFormatted = {}; + } - return formatHit; + var val = fieldName === '_source' ? hit._source : indexPattern.flattenHit(hit)[fieldName]; + return partials[fieldName] = convert(hit, val, fieldName); }; -}); + return formatHit; +}; + diff --git a/src/ui/public/index_patterns/_get_computed_fields.js b/src/ui/public/index_patterns/_get_computed_fields.js index d15a2abc0a3022..75e98bb2be9242 100644 --- a/src/ui/public/index_patterns/_get_computed_fields.js +++ b/src/ui/public/index_patterns/_get_computed_fields.js @@ -1,23 +1,21 @@ import _ from 'lodash'; // Takes a hit, merges it with any stored/scripted fields, and with the metaFields // returns a flattened version -define(function (require) { - return function () { - var self = this; - var scriptFields = {}; - var fielddataFields = []; +export default function () { + var self = this; + var scriptFields = {}; + var fielddataFields = []; - fielddataFields = _.pluck(self.fields.byType.date, 'name'); + fielddataFields = _.pluck(self.fields.byType.date, 'name'); - _.each(self.getScriptedFields(), function (field) { - scriptFields[field.name] = { script: field.script, lang: field.lang }; - }); - - return { - fields: ['*', '_source'], - scriptFields: scriptFields, - fielddataFields: fielddataFields - }; + _.each(self.getScriptedFields(), function (field) { + scriptFields[field.name] = { script: field.script, lang: field.lang }; + }); + return { + fields: ['*', '_source'], + scriptFields: scriptFields, + fielddataFields: fielddataFields }; -}); + +}; diff --git a/src/ui/public/index_patterns/_get_ids.js b/src/ui/public/index_patterns/_get_ids.js index 81c224f0be7c2e..13934396c9152c 100644 --- a/src/ui/public/index_patterns/_get_ids.js +++ b/src/ui/public/index_patterns/_get_ids.js @@ -1,42 +1,40 @@ import _ from 'lodash'; -define(function (require) { - return function GetIndexPatternIdsFn(es, kbnIndex) { +export default function GetIndexPatternIdsFn(es, kbnIndex) { - // many places may require the id list, so we will cache it seperately - // didn't incorportate with the indexPattern cache to prevent id collisions. - var cachedPromise; + // many places may require the id list, so we will cache it seperately + // didn't incorportate with the indexPattern cache to prevent id collisions. + var cachedPromise; - var getIds = function () { - if (cachedPromise) { - // retrun a clone of the cached response - return cachedPromise.then(function (cachedResp) { - return _.clone(cachedResp); - }); - } - - cachedPromise = es.search({ - index: kbnIndex, - type: 'index-pattern', - fields: [], - body: { - query: { match_all: {} }, - size: 10000 - } - }) - .then(function (resp) { - return _.pluck(resp.hits.hits, '_id'); + var getIds = function () { + if (cachedPromise) { + // retrun a clone of the cached response + return cachedPromise.then(function (cachedResp) { + return _.clone(cachedResp); }); + } - // ensure that the response stays pristine by cloning it here too - return cachedPromise.then(function (resp) { - return _.clone(resp); - }); - }; + cachedPromise = es.search({ + index: kbnIndex, + type: 'index-pattern', + fields: [], + body: { + query: { match_all: {} }, + size: 10000 + } + }) + .then(function (resp) { + return _.pluck(resp.hits.hits, '_id'); + }); - getIds.clearCache = function () { - cachedPromise = null; - }; + // ensure that the response stays pristine by cloning it here too + return cachedPromise.then(function (resp) { + return _.clone(resp); + }); + }; - return getIds; + getIds.clearCache = function () { + cachedPromise = null; }; -}); + + return getIds; +}; diff --git a/src/ui/public/index_patterns/_index_pattern.js b/src/ui/public/index_patterns/_index_pattern.js index 36d2308715da40..f673b356be3379 100644 --- a/src/ui/public/index_patterns/_index_pattern.js +++ b/src/ui/public/index_patterns/_index_pattern.js @@ -13,323 +13,321 @@ import IndexPatternsFieldListProvider from 'ui/index_patterns/_field_list'; import IndexPatternsFlattenHitProvider from 'ui/index_patterns/_flatten_hit'; import IndexPatternsCalculateIndicesProvider from 'ui/index_patterns/_calculate_indices'; import IndexPatternsPatternCacheProvider from 'ui/index_patterns/_pattern_cache'; -define(function (require) { - return function IndexPatternFactory(Private, timefilter, Notifier, config, kbnIndex, Promise, $rootScope, safeConfirm) { - - var fieldformats = Private(RegistryFieldFormatsProvider); - var getIds = Private(IndexPatternsGetIdsProvider); - var mapper = Private(IndexPatternsMapperProvider); - var intervals = Private(IndexPatternsIntervalsProvider); - var DocSource = Private(CourierDataSourceDocSourceProvider); - var mappingSetup = Private(UtilsMappingSetupProvider); - var FieldList = Private(IndexPatternsFieldListProvider); - - var flattenHit = Private(IndexPatternsFlattenHitProvider); - var calculateIndices = Private(IndexPatternsCalculateIndicesProvider); - var patternCache = Private(IndexPatternsPatternCacheProvider); - - var type = 'index-pattern'; - - var notify = new Notifier(); - - var mapping = mappingSetup.expandShorthand({ - title: 'string', - timeFieldName: 'string', - notExpandable: 'boolean', - intervalName: 'string', - fields: 'json', - fieldFormatMap: { - type: 'string', - _serialize: function (map) { - if (map == null) return; - - var count = 0; - var serialized = _.transform(map, function (flat, format, field) { - if (!format) return; - count++; - flat[field] = format; - }); +export default function IndexPatternFactory(Private, timefilter, Notifier, config, kbnIndex, Promise, $rootScope, safeConfirm) { + + var fieldformats = Private(RegistryFieldFormatsProvider); + var getIds = Private(IndexPatternsGetIdsProvider); + var mapper = Private(IndexPatternsMapperProvider); + var intervals = Private(IndexPatternsIntervalsProvider); + var DocSource = Private(CourierDataSourceDocSourceProvider); + var mappingSetup = Private(UtilsMappingSetupProvider); + var FieldList = Private(IndexPatternsFieldListProvider); + + var flattenHit = Private(IndexPatternsFlattenHitProvider); + var calculateIndices = Private(IndexPatternsCalculateIndicesProvider); + var patternCache = Private(IndexPatternsPatternCacheProvider); + + var type = 'index-pattern'; + + var notify = new Notifier(); + + var mapping = mappingSetup.expandShorthand({ + title: 'string', + timeFieldName: 'string', + notExpandable: 'boolean', + intervalName: 'string', + fields: 'json', + fieldFormatMap: { + type: 'string', + _serialize: function (map) { + if (map == null) return; + + var count = 0; + var serialized = _.transform(map, function (flat, format, field) { + if (!format) return; + count++; + flat[field] = format; + }); - if (count) return angular.toJson(serialized); - }, - _deserialize: function (map) { - if (map == null) return {}; - return _.mapValues(angular.fromJson(map), function (mapping) { - var FieldFormat = fieldformats.byId[mapping.id]; - return FieldFormat && new FieldFormat(mapping.params); - }); - } + if (count) return angular.toJson(serialized); + }, + _deserialize: function (map) { + if (map == null) return {}; + return _.mapValues(angular.fromJson(map), function (mapping) { + var FieldFormat = fieldformats.byId[mapping.id]; + return FieldFormat && new FieldFormat(mapping.params); + }); } - }); + } + }); - function IndexPattern(id) { - var self = this; + function IndexPattern(id) { + var self = this; - setId(id); + setId(id); - var docSource = new DocSource(); + var docSource = new DocSource(); - self.init = function () { - // tell the docSource where to find the doc - docSource - .index(kbnIndex) - .type(type) - .id(self.id); + self.init = function () { + // tell the docSource where to find the doc + docSource + .index(kbnIndex) + .type(type) + .id(self.id); - // listen for config changes and update field list - $rootScope.$on('change:config', function () { - initFields(); - }); + // listen for config changes and update field list + $rootScope.$on('change:config', function () { + initFields(); + }); - return mappingSetup.isDefined(type) - .then(function (defined) { - // create mapping for this type if one does not exist - if (defined) return true; - return mappingSetup.setup(type, mapping); - }) - .then(function () { - // If there is no id, then there is no document to fetch from elasticsearch - if (!self.id) return; - - // fetch the object from ES - return docSource.fetch() - .then(function applyESResp(resp) { - if (!resp.found) throw new errors.SavedObjectNotFound(type, self.id); - - // deserialize any json fields - _.forOwn(mapping, function ittr(fieldMapping, name) { - if (fieldMapping._deserialize) { - resp._source[name] = fieldMapping._deserialize(resp._source[name], resp, name, fieldMapping); - } - }); - - // Give obj all of the values in _source - _.assign(self, resp._source); - - self._indexFields(); - - // Any time obj is updated, re-call applyESResp - docSource.onUpdate().then(applyESResp, notify.fatal); + return mappingSetup.isDefined(type) + .then(function (defined) { + // create mapping for this type if one does not exist + if (defined) return true; + return mappingSetup.setup(type, mapping); + }) + .then(function () { + // If there is no id, then there is no document to fetch from elasticsearch + if (!self.id) return; + + // fetch the object from ES + return docSource.fetch() + .then(function applyESResp(resp) { + if (!resp.found) throw new errors.SavedObjectNotFound(type, self.id); + + // deserialize any json fields + _.forOwn(mapping, function ittr(fieldMapping, name) { + if (fieldMapping._deserialize) { + resp._source[name] = fieldMapping._deserialize(resp._source[name], resp, name, fieldMapping); + } }); - }) - .then(function () { - // return our obj as the result of init() - return self; - }); - }; - function initFields(fields) { - self.fields = new FieldList(self, fields || self.fields || []); - } + // Give obj all of the values in _source + _.assign(self, resp._source); - self._indexFields = function () { - if (self.id) { - if (!self.fields) { - return self.refreshFields(); - } else { - initFields(); - } - } - }; + self._indexFields(); - self.addScriptedField = function (name, script, type, lang) { - type = type || 'string'; + // Any time obj is updated, re-call applyESResp + docSource.onUpdate().then(applyESResp, notify.fatal); + }); + }) + .then(function () { + // return our obj as the result of init() + return self; + }); + }; - var scriptFields = _.pluck(self.getScriptedFields(), 'name'); + function initFields(fields) { + self.fields = new FieldList(self, fields || self.fields || []); + } - if (_.contains(scriptFields, name)) { - throw new errors.DuplicateField(name); + self._indexFields = function () { + if (self.id) { + if (!self.fields) { + return self.refreshFields(); + } else { + initFields(); } + } + }; - self.fields.push({ - name: name, - script: script, - type: type, - scripted: true, - lang: lang - }); - - self.save(); - }; + self.addScriptedField = function (name, script, type, lang) { + type = type || 'string'; - self.removeScriptedField = function (name) { - var fieldIndex = _.findIndex(self.fields, { - name: name, - scripted: true - }); + var scriptFields = _.pluck(self.getScriptedFields(), 'name'); - self.fields.splice(fieldIndex, 1); + if (_.contains(scriptFields, name)) { + throw new errors.DuplicateField(name); + } - self.save(); - }; + self.fields.push({ + name: name, + script: script, + type: type, + scripted: true, + lang: lang + }); - self.popularizeField = function (fieldName, unit) { - if (unit == null) unit = 1; + self.save(); + }; - var field = _.get(self, ['fields', 'byName', fieldName]); - if (!field) return; + self.removeScriptedField = function (name) { + var fieldIndex = _.findIndex(self.fields, { + name: name, + scripted: true + }); - var count = Math.max((field.count || 0) + unit, 0); - if (field.count !== count) { - field.count = count; - self.save(); - } - }; + self.fields.splice(fieldIndex, 1); - self.getNonScriptedFields = function () { - return _.where(self.fields, { scripted: false }); - }; + self.save(); + }; - self.getScriptedFields = function () { - return _.where(self.fields, { scripted: true }); - }; + self.popularizeField = function (fieldName, unit) { + if (unit == null) unit = 1; - self.getInterval = function () { - return this.intervalName && _.find(intervals, { name: this.intervalName }); - }; + var field = _.get(self, ['fields', 'byName', fieldName]); + if (!field) return; - self.toIndexList = function (start, stop, sortDirection) { - return self - .toDetailedIndexList(start, stop, sortDirection) - .then(function (detailedIndices) { - if (!_.isArray(detailedIndices)) { - return detailedIndices.index; - } + var count = Math.max((field.count || 0) + unit, 0); + if (field.count !== count) { + field.count = count; + self.save(); + } + }; - return _.pluck(detailedIndices, 'index'); - }); - }; + self.getNonScriptedFields = function () { + return _.where(self.fields, { scripted: false }); + }; - self.toDetailedIndexList = Promise.method(function (start, stop, sortDirection) { - var interval = self.getInterval(); + self.getScriptedFields = function () { + return _.where(self.fields, { scripted: true }); + }; - if (interval) { - return intervals.toIndexList(self.id, interval, start, stop, sortDirection); - } + self.getInterval = function () { + return this.intervalName && _.find(intervals, { name: this.intervalName }); + }; - if (self.isWildcard() && self.hasTimeField() && self.canExpandIndices()) { - return calculateIndices(self.id, self.timeFieldName, start, stop, sortDirection); + self.toIndexList = function (start, stop, sortDirection) { + return self + .toDetailedIndexList(start, stop, sortDirection) + .then(function (detailedIndices) { + if (!_.isArray(detailedIndices)) { + return detailedIndices.index; } - return { - index: self.id, - min: -Infinity, - max: Infinity, - }; + return _.pluck(detailedIndices, 'index'); }); + }; - self.canExpandIndices = function () { - return !this.notExpandable; - }; + self.toDetailedIndexList = Promise.method(function (start, stop, sortDirection) { + var interval = self.getInterval(); - self.hasTimeField = function () { - return !!(this.timeFieldName && this.fields.byName[this.timeFieldName]); - }; + if (interval) { + return intervals.toIndexList(self.id, interval, start, stop, sortDirection); + } - self.isWildcard = function () { - return _.includes(this.id, '*'); + if (self.isWildcard() && self.hasTimeField() && self.canExpandIndices()) { + return calculateIndices(self.id, self.timeFieldName, start, stop, sortDirection); + } + + return { + index: self.id, + min: -Infinity, + max: Infinity, }; + }); - self.prepBody = function () { - var body = {}; + self.canExpandIndices = function () { + return !this.notExpandable; + }; - // serialize json fields - _.forOwn(mapping, function (fieldMapping, fieldName) { - if (self[fieldName] != null) { - body[fieldName] = (fieldMapping._serialize) - ? fieldMapping._serialize(self[fieldName]) - : self[fieldName]; - } - }); + self.hasTimeField = function () { + return !!(this.timeFieldName && this.fields.byName[this.timeFieldName]); + }; - // ensure that the docSource has the current self.id - docSource.id(self.id); + self.isWildcard = function () { + return _.includes(this.id, '*'); + }; - // clear the indexPattern list cache - getIds.clearCache(); - return body; - }; + self.prepBody = function () { + var body = {}; - function setId(id) { - return self.id = id; - } + // serialize json fields + _.forOwn(mapping, function (fieldMapping, fieldName) { + if (self[fieldName] != null) { + body[fieldName] = (fieldMapping._serialize) + ? fieldMapping._serialize(self[fieldName]) + : self[fieldName]; + } + }); - self.create = function () { - var body = self.prepBody(); - return docSource.doCreate(body) - .then(setId) - .catch(function (err) { - if (_.get(err, 'origError.status') === 409) { - var confirmMessage = 'Are you sure you want to overwrite this?'; - - return safeConfirm(confirmMessage).then( - function () { - return Promise.try(function () { - const cached = patternCache.get(self.id); - if (cached) { - return cached.then(pattern => pattern.destroy()); - } - }) - .then(() => docSource.doIndex(body)) - .then(setId); - }, - _.constant(false) // if the user doesn't overwrite, resolve with false - ); - } - return Promise.resolve(false); - }); - }; + // ensure that the docSource has the current self.id + docSource.id(self.id); - self.save = function () { - var body = self.prepBody(); - return docSource.doIndex(body).then(setId); - }; + // clear the indexPattern list cache + getIds.clearCache(); + return body; + }; - self.refreshFields = function () { - return mapper.clearCache(self) - .then(self._fetchFields) - .then(self.save); - }; + function setId(id) { + return self.id = id; + } - self._fetchFields = function () { - return mapper.getFieldsForIndexPattern(self, true) - .then(function (fields) { - // append existing scripted fields - fields = fields.concat(self.getScriptedFields()); + self.create = function () { + var body = self.prepBody(); + return docSource.doCreate(body) + .then(setId) + .catch(function (err) { + if (_.get(err, 'origError.status') === 409) { + var confirmMessage = 'Are you sure you want to overwrite this?'; + + return safeConfirm(confirmMessage).then( + function () { + return Promise.try(function () { + const cached = patternCache.get(self.id); + if (cached) { + return cached.then(pattern => pattern.destroy()); + } + }) + .then(() => docSource.doIndex(body)) + .then(setId); + }, + _.constant(false) // if the user doesn't overwrite, resolve with false + ); + } + return Promise.resolve(false); + }); + }; - // initialize self.field with this field list - initFields(fields); - }); - }; + self.save = function () { + var body = self.prepBody(); + return docSource.doIndex(body).then(setId); + }; - self.toJSON = function () { - return self.id; - }; + self.refreshFields = function () { + return mapper.clearCache(self) + .then(self._fetchFields) + .then(self.save); + }; - self.toString = function () { - return '' + self.toJSON(); - }; + self._fetchFields = function () { + return mapper.getFieldsForIndexPattern(self, true) + .then(function (fields) { + // append existing scripted fields + fields = fields.concat(self.getScriptedFields()); - self.destroy = function () { - patternCache.clear(self.id); - docSource.destroy(); - }; + // initialize self.field with this field list + initFields(fields); + }); + }; - self.metaFields = config.get('metaFields'); - self.getComputedFields = getComputedFields.bind(self); + self.toJSON = function () { + return self.id; + }; - self.flattenHit = flattenHit(self); - self.formatHit = formatHit(self, fieldformats.getDefaultInstance('string')); - self.formatField = self.formatHit.formatField; - } + self.toString = function () { + return '' + self.toJSON(); + }; - IndexPattern.prototype.routes = { - edit: '/settings/indices/{{id}}', - addField: '/settings/indices/{{id}}/create-field', - indexedFields: '/settings/indices/{{id}}?_a=(tab:indexedFields)', - scriptedFields: '/settings/indices/{{id}}?_a=(tab:scriptedFields)' + self.destroy = function () { + patternCache.clear(self.id); + docSource.destroy(); }; - return IndexPattern; + self.metaFields = config.get('metaFields'); + self.getComputedFields = getComputedFields.bind(self); + + self.flattenHit = flattenHit(self); + self.formatHit = formatHit(self, fieldformats.getDefaultInstance('string')); + self.formatField = self.formatHit.formatField; + } + + IndexPattern.prototype.routes = { + edit: '/settings/indices/{{id}}', + addField: '/settings/indices/{{id}}/create-field', + indexedFields: '/settings/indices/{{id}}?_a=(tab:indexedFields)', + scriptedFields: '/settings/indices/{{id}}?_a=(tab:scriptedFields)' }; -}); + + return IndexPattern; +}; diff --git a/src/ui/public/index_patterns/_intervals.js b/src/ui/public/index_patterns/_intervals.js index 24d34b12f59c0a..2910a2fa7f9c11 100644 --- a/src/ui/public/index_patterns/_intervals.js +++ b/src/ui/public/index_patterns/_intervals.js @@ -1,96 +1,94 @@ import _ from 'lodash'; import moment from 'moment'; import IndexedArray from 'ui/IndexedArray'; -define(function (require) { - return function IndexNameIntervalsService(timefilter) { +export default function IndexNameIntervalsService(timefilter) { - var intervals = new IndexedArray({ - index: ['name'], - initialSet: [ - { - name: 'hours', - startOf: 'hour', - display: 'Hourly' - }, - { - name: 'days', - startOf: 'day', - display: 'Daily' - }, - { - name: 'weeks', - startOf: 'isoWeek', - display: 'Weekly' - }, - { - name: 'months', - startOf: 'month', - display: 'Monthly' - }, - { - name: 'years', - startOf: 'year', - display: 'Yearly' - } - ] - }); - - intervals.toIndexList = function (format, interval, a, b, sortDirection) { - var bounds; + var intervals = new IndexedArray({ + index: ['name'], + initialSet: [ + { + name: 'hours', + startOf: 'hour', + display: 'Hourly' + }, + { + name: 'days', + startOf: 'day', + display: 'Daily' + }, + { + name: 'weeks', + startOf: 'isoWeek', + display: 'Weekly' + }, + { + name: 'months', + startOf: 'month', + display: 'Monthly' + }, + { + name: 'years', + startOf: 'year', + display: 'Yearly' + } + ] + }); - // setup the range that the list will span, return two moment objects that - // are in proper order. a and b can be numbers to specify to go before or after now (respectively) - // a certain number of times, based on the interval - var range = [[a, 'min', 'startOf'], [b, 'max', 'startOf']].map(function (v) { - var val = v[0]; - var bound = v[1]; - var extend = v[2]; + intervals.toIndexList = function (format, interval, a, b, sortDirection) { + var bounds; - // grab a bound from the time filter - if (val == null) { - bounds = bounds || timefilter.getBounds(); - val = bounds[bound]; - } + // setup the range that the list will span, return two moment objects that + // are in proper order. a and b can be numbers to specify to go before or after now (respectively) + // a certain number of times, based on the interval + var range = [[a, 'min', 'startOf'], [b, 'max', 'startOf']].map(function (v) { + var val = v[0]; + var bound = v[1]; + var extend = v[2]; - if (_.isNumeric(val)) val = moment().add(val, interval.name); - else if (!moment.isMoment(val)) val = moment(val); + // grab a bound from the time filter + if (val == null) { + bounds = bounds || timefilter.getBounds(); + val = bounds[bound]; + } - return val.clone().utc()[extend](interval.startOf); - }).sort(function (a, b) { - return a - b; - }); + if (_.isNumeric(val)) val = moment().add(val, interval.name); + else if (!moment.isMoment(val)) val = moment(val); - if (typeof interval === 'string') { - interval = _.find(intervals, { name: interval }); - if (!interval) throw new Error('Interval must be one of ' + _.pluck(intervals, 'name')); - } + return val.clone().utc()[extend](interval.startOf); + }).sort(function (a, b) { + return a - b; + }); - var indexList = []; - var start = range.shift(); - // turn stop into milliseconds to that it's not constantly converted by the while condition - var stop = range.shift().valueOf(); + if (typeof interval === 'string') { + interval = _.find(intervals, { name: interval }); + if (!interval) throw new Error('Interval must be one of ' + _.pluck(intervals, 'name')); + } - var add = sortDirection === 'desc' ? 'unshift' : 'push'; + var indexList = []; + var start = range.shift(); + // turn stop into milliseconds to that it's not constantly converted by the while condition + var stop = range.shift().valueOf(); - while (start <= stop) { - const index = start.format(format); - const next = moment(start).add(1, interval.name); - const bound = moment(next).subtract(1, 'ms'); + var add = sortDirection === 'desc' ? 'unshift' : 'push'; - const min = start.valueOf(); - const max = bound.valueOf(); - indexList[add]({ - index: index, - min: min, - max: max - }); + while (start <= stop) { + const index = start.format(format); + const next = moment(start).add(1, interval.name); + const bound = moment(next).subtract(1, 'ms'); - start = next; - } + const min = start.valueOf(); + const max = bound.valueOf(); + indexList[add]({ + index: index, + min: min, + max: max + }); - return indexList; - }; + start = next; + } - return intervals; + return indexList; }; -}); + + return intervals; +}; diff --git a/src/ui/public/index_patterns/_local_cache.js b/src/ui/public/index_patterns/_local_cache.js index 8776b6acf77e6c..b00a34aeb17dc9 100644 --- a/src/ui/public/index_patterns/_local_cache.js +++ b/src/ui/public/index_patterns/_local_cache.js @@ -1,37 +1,35 @@ import _ from 'lodash'; import angular from 'angular'; -define(function (require) { - return function LocalCacheFactory() { - function LocalCache(opts) { - opts = opts || {}; - var _id = opts.id || function (o) { return '' + o; }; - var _cache = {}; +export default function LocalCacheFactory() { + function LocalCache(opts) { + opts = opts || {}; + var _id = opts.id || function (o) { return '' + o; }; + var _cache = {}; - this.get = function (obj) { - var id = _id(obj); - return _cache[id] ? JSON.parse(_cache[id]) : null; - }; + this.get = function (obj) { + var id = _id(obj); + return _cache[id] ? JSON.parse(_cache[id]) : null; + }; - this.set = function (obj, val) { - var id = _id(obj); - var clean = !_cache.hasOwnProperty(id); - _cache[id] = angular.toJson(val); - return clean; - }; + this.set = function (obj, val) { + var id = _id(obj); + var clean = !_cache.hasOwnProperty(id); + _cache[id] = angular.toJson(val); + return clean; + }; - this.clear = function (obj) { - if (!obj) { - _cache = {}; - return; - } + this.clear = function (obj) { + if (!obj) { + _cache = {}; + return; + } - var id = _id(obj); - delete _cache[id]; - }; - } + var id = _id(obj); + delete _cache[id]; + }; + } - return LocalCache; - }; + return LocalCache; +}; -}); diff --git a/src/ui/public/index_patterns/_map_field.js b/src/ui/public/index_patterns/_map_field.js index 60f967749bd826..ef1d5c2094af1d 100644 --- a/src/ui/public/index_patterns/_map_field.js +++ b/src/ui/public/index_patterns/_map_field.js @@ -1,52 +1,50 @@ import _ from 'lodash'; import IndexPatternsCastMappingTypeProvider from 'ui/index_patterns/_cast_mapping_type'; -define(function (require) { - return function MapFieldFn(Private, config) { - var castMappingType = Private(IndexPatternsCastMappingTypeProvider); +export default function MapFieldFn(Private, config) { + var castMappingType = Private(IndexPatternsCastMappingTypeProvider); - /** - * Accepts a field object and its name, and tries to give it a mapping - * @param {Object} field - the field mapping returned by elasticsearch - * @param {String} type - name of the field - * @return {Object} - the resulting field after overrides and tweaking - */ - return function mapField(field, name) { - var keys = Object.keys(field.mapping); - if (keys.length === 0 || (name[0] === '_') && !_.contains(config.get('metaFields'), name)) return; + /** + * Accepts a field object and its name, and tries to give it a mapping + * @param {Object} field - the field mapping returned by elasticsearch + * @param {String} type - name of the field + * @return {Object} - the resulting field after overrides and tweaking + */ + return function mapField(field, name) { + var keys = Object.keys(field.mapping); + if (keys.length === 0 || (name[0] === '_') && !_.contains(config.get('metaFields'), name)) return; - var mapping = _.cloneDeep(field.mapping[keys.shift()]); - mapping.type = castMappingType(mapping.type); + var mapping = _.cloneDeep(field.mapping[keys.shift()]); + mapping.type = castMappingType(mapping.type); - // Override the mapping, even if elasticsearch says otherwise - var mappingOverrides = { - _source: { type: '_source' }, - _index: { type: 'string' }, - _type: { type: 'string' }, - _id: { type: 'string' }, - _timestamp: { - type: 'date', - indexed: true - }, - _score: { - type: 'number', - indexed: false - } - }; - - if (!mapping.index || mapping.index === 'no') { - // elasticsearch responds with false sometimes and 'no' others - mapping.indexed = false; - } else { - mapping.indexed = true; + // Override the mapping, even if elasticsearch says otherwise + var mappingOverrides = { + _source: { type: '_source' }, + _index: { type: 'string' }, + _type: { type: 'string' }, + _id: { type: 'string' }, + _timestamp: { + type: 'date', + indexed: true + }, + _score: { + type: 'number', + indexed: false } + }; - mapping.analyzed = mapping.index === 'analyzed' ? true : false; + if (!mapping.index || mapping.index === 'no') { + // elasticsearch responds with false sometimes and 'no' others + mapping.indexed = false; + } else { + mapping.indexed = true; + } - if (mappingOverrides[name]) { - _.merge(mapping, mappingOverrides[name]); - } + mapping.analyzed = mapping.index === 'analyzed' ? true : false; - return mapping; - }; + if (mappingOverrides[name]) { + _.merge(mapping, mappingOverrides[name]); + } + + return mapping; }; -}); +}; diff --git a/src/ui/public/index_patterns/_mapper.js b/src/ui/public/index_patterns/_mapper.js index 6fec0200da70d9..88a11da71947db 100644 --- a/src/ui/public/index_patterns/_mapper.js +++ b/src/ui/public/index_patterns/_mapper.js @@ -5,131 +5,129 @@ import IndexPatternsTransformMappingIntoFieldsProvider from 'ui/index_patterns/_ import IndexPatternsIntervalsProvider from 'ui/index_patterns/_intervals'; import IndexPatternsPatternToWildcardProvider from 'ui/index_patterns/_pattern_to_wildcard'; import IndexPatternsLocalCacheProvider from 'ui/index_patterns/_local_cache'; -define(function (require) { - return function MapperService(Private, Promise, es, config, kbnIndex) { - - var transformMappingIntoFields = Private(IndexPatternsTransformMappingIntoFieldsProvider); - var intervals = Private(IndexPatternsIntervalsProvider); - var patternToWildcard = Private(IndexPatternsPatternToWildcardProvider); - - var LocalCache = Private(IndexPatternsLocalCacheProvider); - - function Mapper() { - - // Save a reference to mapper - var self = this; - - // proper-ish cache, keeps a clean copy of the object, only returns copies of it's copy - var fieldCache = self.cache = new LocalCache(); - - /** - * Gets an object containing all fields with their mappings - * @param {dataSource} dataSource - * @param {boolean} skipIndexPatternCache - should we ping the index-pattern objects - * @returns {Promise} - * @async - */ - self.getFieldsForIndexPattern = function (indexPattern, skipIndexPatternCache) { - var id = indexPattern.id; - - var cache = fieldCache.get(id); - if (cache) return Promise.resolve(cache); - - if (!skipIndexPatternCache) { - return es.get({ - index: kbnIndex, - type: 'index-pattern', - id: id, - _sourceInclude: ['fields'] - }) - .then(function (resp) { - if (resp.found && resp._source.fields) { - fieldCache.set(id, JSON.parse(resp._source.fields)); - } - return self.getFieldsForIndexPattern(indexPattern, true); - }); - } - - var promise = Promise.resolve(id); - if (indexPattern.intervalName) { - promise = self.getIndicesForIndexPattern(indexPattern) - .then(function (existing) { - if (existing.matches.length === 0) throw new IndexPatternMissingIndices(); - return existing.matches.slice(-config.get('indexPattern:fieldMapping:lookBack')); // Grab the most recent - }); - } - - return promise.then(function (indexList) { - return es.indices.getFieldMapping({ - index: indexList, - field: '*', - ignoreUnavailable: _.isArray(indexList), - allowNoIndices: false, - includeDefaults: true - }); - }) - .catch(handleMissingIndexPattern) - .then(transformMappingIntoFields) - .then(function (fields) { - fieldCache.set(id, fields); - return fieldCache.get(id); - }); - }; +export default function MapperService(Private, Promise, es, config, kbnIndex) { + + var transformMappingIntoFields = Private(IndexPatternsTransformMappingIntoFieldsProvider); + var intervals = Private(IndexPatternsIntervalsProvider); + var patternToWildcard = Private(IndexPatternsPatternToWildcardProvider); + + var LocalCache = Private(IndexPatternsLocalCacheProvider); + + function Mapper() { - self.getIndicesForIndexPattern = function (indexPattern) { - return es.indices.getAliases({ - index: patternToWildcard(indexPattern.id) + // Save a reference to mapper + var self = this; + + // proper-ish cache, keeps a clean copy of the object, only returns copies of it's copy + var fieldCache = self.cache = new LocalCache(); + + /** + * Gets an object containing all fields with their mappings + * @param {dataSource} dataSource + * @param {boolean} skipIndexPatternCache - should we ping the index-pattern objects + * @returns {Promise} + * @async + */ + self.getFieldsForIndexPattern = function (indexPattern, skipIndexPatternCache) { + var id = indexPattern.id; + + var cache = fieldCache.get(id); + if (cache) return Promise.resolve(cache); + + if (!skipIndexPatternCache) { + return es.get({ + index: kbnIndex, + type: 'index-pattern', + id: id, + _sourceInclude: ['fields'] }) .then(function (resp) { - // var all = Object.keys(resp).sort(); - var all = _(resp) - .map(function (index, key) { - if (index.aliases) { - return [Object.keys(index.aliases), key]; - } else { - return key; - } - }) - .flattenDeep() - .sort() - .uniq(true) - .value(); - - var matches = all.filter(function (existingIndex) { - var parsed = moment(existingIndex, indexPattern.id); - return existingIndex === parsed.format(indexPattern.id); - }); - - return { - all: all, - matches: matches - }; - }) - .catch(handleMissingIndexPattern); - }; - - /** - * Clears mapping caches from elasticsearch and from local object - * @param {dataSource} dataSource - * @returns {Promise} - * @async - */ - self.clearCache = function (indexPattern) { - fieldCache.clear(indexPattern); - return Promise.resolve(); - }; - } + if (resp.found && resp._source.fields) { + fieldCache.set(id, JSON.parse(resp._source.fields)); + } + return self.getFieldsForIndexPattern(indexPattern, true); + }); + } - function handleMissingIndexPattern(err) { - if (err.status >= 400) { - // transform specific error type - return Promise.reject(new IndexPatternMissingIndices()); - } else { - // rethrow all others - throw err; + var promise = Promise.resolve(id); + if (indexPattern.intervalName) { + promise = self.getIndicesForIndexPattern(indexPattern) + .then(function (existing) { + if (existing.matches.length === 0) throw new IndexPatternMissingIndices(); + return existing.matches.slice(-config.get('indexPattern:fieldMapping:lookBack')); // Grab the most recent + }); } + + return promise.then(function (indexList) { + return es.indices.getFieldMapping({ + index: indexList, + field: '*', + ignoreUnavailable: _.isArray(indexList), + allowNoIndices: false, + includeDefaults: true + }); + }) + .catch(handleMissingIndexPattern) + .then(transformMappingIntoFields) + .then(function (fields) { + fieldCache.set(id, fields); + return fieldCache.get(id); + }); + }; + + self.getIndicesForIndexPattern = function (indexPattern) { + return es.indices.getAliases({ + index: patternToWildcard(indexPattern.id) + }) + .then(function (resp) { + // var all = Object.keys(resp).sort(); + var all = _(resp) + .map(function (index, key) { + if (index.aliases) { + return [Object.keys(index.aliases), key]; + } else { + return key; + } + }) + .flattenDeep() + .sort() + .uniq(true) + .value(); + + var matches = all.filter(function (existingIndex) { + var parsed = moment(existingIndex, indexPattern.id); + return existingIndex === parsed.format(indexPattern.id); + }); + + return { + all: all, + matches: matches + }; + }) + .catch(handleMissingIndexPattern); + }; + + /** + * Clears mapping caches from elasticsearch and from local object + * @param {dataSource} dataSource + * @returns {Promise} + * @async + */ + self.clearCache = function (indexPattern) { + fieldCache.clear(indexPattern); + return Promise.resolve(); + }; + } + + function handleMissingIndexPattern(err) { + if (err.status >= 400) { + // transform specific error type + return Promise.reject(new IndexPatternMissingIndices()); + } else { + // rethrow all others + throw err; } + } - return new Mapper(); - }; -}); + return new Mapper(); +}; diff --git a/src/ui/public/index_patterns/_pattern_cache.js b/src/ui/public/index_patterns/_pattern_cache.js index b1758443a257b5..5b6e205e316c31 100644 --- a/src/ui/public/index_patterns/_pattern_cache.js +++ b/src/ui/public/index_patterns/_pattern_cache.js @@ -1,24 +1,22 @@ import _ from 'lodash'; -define(function (require) { - return function PatternCache() { +export default function PatternCache() { - var vals = {}; + var vals = {}; - var validId = function (id) { - return typeof id !== 'object'; - }; + var validId = function (id) { + return typeof id !== 'object'; + }; - this.get = function (id) { - if (validId(id)) return vals[id]; - }; + this.get = function (id) { + if (validId(id)) return vals[id]; + }; - this.set = function (id, prom) { - if (validId(id)) vals[id] = prom; - return prom; - }; + this.set = function (id, prom) { + if (validId(id)) vals[id] = prom; + return prom; + }; - this.clear = this.delete = function (id) { - if (validId(id)) delete vals[id]; - }; + this.clear = this.delete = function (id) { + if (validId(id)) delete vals[id]; }; -}); +}; diff --git a/src/ui/public/index_patterns/_pattern_to_wildcard.js b/src/ui/public/index_patterns/_pattern_to_wildcard.js index 092f05617d65cc..e9029fb78343cd 100644 --- a/src/ui/public/index_patterns/_pattern_to_wildcard.js +++ b/src/ui/public/index_patterns/_pattern_to_wildcard.js @@ -1,39 +1,37 @@ -define(function (require) { - return function PatternToWildcardFn() { - return function (format) { - var wildcard = ''; - var inEscape = false; - var inPattern = false; +export default function PatternToWildcardFn() { + return function (format) { + var wildcard = ''; + var inEscape = false; + var inPattern = false; - for (var i = 0; i < format.length; i++) { - var ch = format.charAt(i); - switch (ch) { - case '[': - inPattern = false; - if (!inEscape) { - inEscape = true; - } else { - wildcard += ch; - } - break; - case ']': - if (inEscape) { - inEscape = false; - } else if (!inPattern) { - wildcard += ch; - } - break; - default: - if (inEscape) { - wildcard += ch; - } else if (!inPattern) { - wildcard += '*'; - inPattern = true; - } - } + for (var i = 0; i < format.length; i++) { + var ch = format.charAt(i); + switch (ch) { + case '[': + inPattern = false; + if (!inEscape) { + inEscape = true; + } else { + wildcard += ch; + } + break; + case ']': + if (inEscape) { + inEscape = false; + } else if (!inPattern) { + wildcard += ch; + } + break; + default: + if (inEscape) { + wildcard += ch; + } else if (!inPattern) { + wildcard += '*'; + inPattern = true; + } } + } - return wildcard; - }; + return wildcard; }; -}); +}; diff --git a/src/ui/public/index_patterns/_transform_mapping_into_fields.js b/src/ui/public/index_patterns/_transform_mapping_into_fields.js index d94c38235f9d3b..17c175bd348c69 100644 --- a/src/ui/public/index_patterns/_transform_mapping_into_fields.js +++ b/src/ui/public/index_patterns/_transform_mapping_into_fields.js @@ -1,54 +1,52 @@ import _ from 'lodash'; import IndexPatternsMapFieldProvider from 'ui/index_patterns/_map_field'; -define(function (require) { - return function transformMappingIntoFields(Private, kbnIndex, config) { - var mapField = Private(IndexPatternsMapFieldProvider); +export default function transformMappingIntoFields(Private, kbnIndex, config) { + var mapField = Private(IndexPatternsMapFieldProvider); - /** - * Convert the ES response into the simple map for fields to - * mappings which we will cache - * - * @param {object} response - complex, excessively nested - * object returned from ES - * @return {object} - simple object that works for all of kibana - * use-cases - */ - return function (response) { - var fields = {}; - _.each(response, function (index, indexName) { - if (indexName === kbnIndex) return; - _.each(index.mappings, function (mappings) { - _.each(mappings, function (field, name) { - var keys = Object.keys(field.mapping); - if (keys.length === 0 || (name[0] === '_') && !_.contains(config.get('metaFields'), name)) return; + /** + * Convert the ES response into the simple map for fields to + * mappings which we will cache + * + * @param {object} response - complex, excessively nested + * object returned from ES + * @return {object} - simple object that works for all of kibana + * use-cases + */ + return function (response) { + var fields = {}; + _.each(response, function (index, indexName) { + if (indexName === kbnIndex) return; + _.each(index.mappings, function (mappings) { + _.each(mappings, function (field, name) { + var keys = Object.keys(field.mapping); + if (keys.length === 0 || (name[0] === '_') && !_.contains(config.get('metaFields'), name)) return; - var mapping = mapField(field, name); + var mapping = mapField(field, name); - if (fields[name]) { - if (fields[name].type !== mapping.type) { - // conflict fields are not available for much except showing in the discover table - mapping.type = 'conflict'; - mapping.indexed = false; - } + if (fields[name]) { + if (fields[name].type !== mapping.type) { + // conflict fields are not available for much except showing in the discover table + mapping.type = 'conflict'; + mapping.indexed = false; } - fields[name] = _.pick(mapping, 'type', 'indexed', 'analyzed', 'doc_values'); - }); + } + fields[name] = _.pick(mapping, 'type', 'indexed', 'analyzed', 'doc_values'); }); }); + }); - config.get('metaFields').forEach(function (meta) { - if (fields[meta]) return; + config.get('metaFields').forEach(function (meta) { + if (fields[meta]) return; - var field = { mapping: {} }; - field.mapping[meta] = {}; - fields[meta] = mapField(field, meta); - }); + var field = { mapping: {} }; + field.mapping[meta] = {}; + fields[meta] = mapField(field, meta); + }); - return _.map(fields, function (mapping, name) { - mapping.name = name; - return mapping; - }); - }; + return _.map(fields, function (mapping, name) { + mapping.name = name; + return mapping; + }); }; -}); +}; diff --git a/src/ui/public/index_patterns/index_patterns.js b/src/ui/public/index_patterns/index_patterns.js index 961e13d7cedad7..ff65ad2da28e37 100644 --- a/src/ui/public/index_patterns/index_patterns.js +++ b/src/ui/public/index_patterns/index_patterns.js @@ -8,52 +8,50 @@ import IndexPatternsIntervalsProvider from 'ui/index_patterns/_intervals'; import IndexPatternsMapperProvider from 'ui/index_patterns/_mapper'; import IndexPatternsPatternToWildcardProvider from 'ui/index_patterns/_pattern_to_wildcard'; import RegistryFieldFormatsProvider from 'ui/registry/field_formats'; -define(function (require) { - var module = require('ui/modules').get('kibana/index_patterns'); - - function IndexPatternsProvider(es, Notifier, Private, Promise, kbnIndex) { - var self = this; - - var IndexPattern = Private(IndexPatternsIndexPatternProvider); - var patternCache = Private(IndexPatternsPatternCacheProvider); - - var notify = new Notifier({ location: 'IndexPatterns Service'}); - - self.get = function (id) { - if (!id) return self.make(); - - var cache = patternCache.get(id); - return cache || patternCache.set(id, self.make(id)); - }; - - self.make = function (id) { - return (new IndexPattern(id)).init(); - }; - - self.delete = function (pattern) { - self.getIds.clearCache(); - pattern.destroy(); - - return es.delete({ - index: kbnIndex, - type: 'index-pattern', - id: pattern.id - }); - }; - - self.errors = { - MissingIndices: errors.IndexPatternMissingIndices - }; - - self.cache = patternCache; - self.getIds = Private(IndexPatternsGetIdsProvider); - self.intervals = Private(IndexPatternsIntervalsProvider); - self.mapper = Private(IndexPatternsMapperProvider); - self.patternToWildcard = Private(IndexPatternsPatternToWildcardProvider); - self.fieldFormats = Private(RegistryFieldFormatsProvider); - self.IndexPattern = IndexPattern; - } - - module.service('indexPatterns', Private => Private(IndexPatternsProvider)); - return IndexPatternsProvider; -}); +var module = require('ui/modules').get('kibana/index_patterns'); + +function IndexPatternsProvider(es, Notifier, Private, Promise, kbnIndex) { + var self = this; + + var IndexPattern = Private(IndexPatternsIndexPatternProvider); + var patternCache = Private(IndexPatternsPatternCacheProvider); + + var notify = new Notifier({ location: 'IndexPatterns Service'}); + + self.get = function (id) { + if (!id) return self.make(); + + var cache = patternCache.get(id); + return cache || patternCache.set(id, self.make(id)); + }; + + self.make = function (id) { + return (new IndexPattern(id)).init(); + }; + + self.delete = function (pattern) { + self.getIds.clearCache(); + pattern.destroy(); + + return es.delete({ + index: kbnIndex, + type: 'index-pattern', + id: pattern.id + }); + }; + + self.errors = { + MissingIndices: errors.IndexPatternMissingIndices + }; + + self.cache = patternCache; + self.getIds = Private(IndexPatternsGetIdsProvider); + self.intervals = Private(IndexPatternsIntervalsProvider); + self.mapper = Private(IndexPatternsMapperProvider); + self.patternToWildcard = Private(IndexPatternsPatternToWildcardProvider); + self.fieldFormats = Private(RegistryFieldFormatsProvider); + self.IndexPattern = IndexPattern; +} + +module.service('indexPatterns', Private => Private(IndexPatternsProvider)); +export default IndexPatternsProvider; diff --git a/src/ui/public/listen/listen.js b/src/ui/public/listen/listen.js index ead9fa0f30f284..076726c9186524 100644 --- a/src/ui/public/listen/listen.js +++ b/src/ui/public/listen/listen.js @@ -1,24 +1,22 @@ import _ from 'lodash'; -define(function (require) { - require('ui/modules').get('kibana') - .run(function ($rootScope) { +require('ui/modules').get('kibana') +.run(function ($rootScope) { - /** - * Helper that registers an event listener, and removes that listener when - * the $scope is destroyed. - * - * @param {EventEmitter} emitter - the event emitter to listen to - * @param {string} eventName - the event name - * @param {Function} handler - the event handler - * @return {undefined} - */ - $rootScope.constructor.prototype.$listen = function (emitter, eventName, handler) { - emitter.on(eventName, handler); - this.$on('$destroy', function () { - emitter.off(eventName, handler); - }); - }; + /** + * Helper that registers an event listener, and removes that listener when + * the $scope is destroyed. + * + * @param {EventEmitter} emitter - the event emitter to listen to + * @param {string} eventName - the event name + * @param {Function} handler - the event handler + * @return {undefined} + */ + $rootScope.constructor.prototype.$listen = function (emitter, eventName, handler) { + emitter.on(eventName, handler); + this.$on('$destroy', function () { + emitter.off(eventName, handler); + }); + }; - }); }); diff --git a/src/ui/public/metadata.js b/src/ui/public/metadata.js index 5b2793f4d983fd..0b3897bb28e167 100644 --- a/src/ui/public/metadata.js +++ b/src/ui/public/metadata.js @@ -1,24 +1,22 @@ import _ from 'lodash'; // singleton for immutable copy of window.__KBN__ -define(function (require) { - if (!_.has(window, '__KBN__')) { - throw new Error('window.__KBN__ must be set for metadata'); - } +if (!_.has(window, '__KBN__')) { + throw new Error('window.__KBN__ must be set for metadata'); +} - const kbn = _.cloneDeep(window.__KBN__ || {}); - return deepFreeze(kbn); +const kbn = _.cloneDeep(window.__KBN__ || {}); +export default deepFreeze(kbn); - function deepFreeze(object) { - // for any properties that reference an object, makes sure that object is - // recursively frozen as well - Object.keys(object).forEach(key => { - const value = object[key]; - if (_.isObject(value)) { - deepFreeze(value); - } - }); +function deepFreeze(object) { + // for any properties that reference an object, makes sure that object is + // recursively frozen as well + Object.keys(object).forEach(key => { + const value = object[key]; + if (_.isObject(value)) { + deepFreeze(value); + } + }); - return Object.freeze(object); - } -}); + return Object.freeze(object); +} diff --git a/src/ui/public/modules.js b/src/ui/public/modules.js index 89a03205d39ff5..8176110fbfcd77 100644 --- a/src/ui/public/modules.js +++ b/src/ui/public/modules.js @@ -47,83 +47,81 @@ import _ from 'lodash'; * "kibana" module's injector. * */ -define(function (require) { - var existingModules = {}; - var links = []; +var existingModules = {}; +var links = []; - /** - * Take an angular module and extends the dependencies for that module to include all of the modules - * created using `ui/modules` - * - * @param {AngularModule} module - the module to extend - * @return {undefined} - */ - function link(module) { - // as modules are defined they will be set as requirements for this app - links.push(module); - - // merge in the existing modules - module.requires = _.union(module.requires, _.keys(existingModules)); - } +/** + * Take an angular module and extends the dependencies for that module to include all of the modules + * created using `ui/modules` + * + * @param {AngularModule} module - the module to extend + * @return {undefined} + */ +function link(module) { + // as modules are defined they will be set as requirements for this app + links.push(module); - /** - * The primary means of interacting with `ui/modules`. Returns an angular module. If the module already - * exists the existing version will be returned. `dependencies` are either set as or merged into the - * modules total dependencies. - * - * This is in contrast to the `angular.module(name, [dependencies])` function which will only - * create a module if the `dependencies` list is passed and get an existing module if no dependencies - * are passed. This requires knowing the order that your files will load, which we can't guarantee. - * - * @param {string} moduleName - the unique name for this module - * @param {array[string]} [requires=[]] - the other modules this module requires - * @return {AngularModule} - */ - function get(moduleName, requires) { - var module = existingModules[moduleName]; + // merge in the existing modules + module.requires = _.union(module.requires, _.keys(existingModules)); +} - if (module === void 0) { - // create the module - module = existingModules[moduleName] = angular.module(moduleName, []); +/** + * The primary means of interacting with `ui/modules`. Returns an angular module. If the module already + * exists the existing version will be returned. `dependencies` are either set as or merged into the + * modules total dependencies. + * + * This is in contrast to the `angular.module(name, [dependencies])` function which will only + * create a module if the `dependencies` list is passed and get an existing module if no dependencies + * are passed. This requires knowing the order that your files will load, which we can't guarantee. + * + * @param {string} moduleName - the unique name for this module + * @param {array[string]} [requires=[]] - the other modules this module requires + * @return {AngularModule} + */ +function get(moduleName, requires) { + var module = existingModules[moduleName]; - module.close = _.partial(close, moduleName); + if (module === void 0) { + // create the module + module = existingModules[moduleName] = angular.module(moduleName, []); - // ensure that it is required by linked modules - _.each(links, function (app) { - if (!~app.requires.indexOf(moduleName)) app.requires.push(moduleName); - }); - } + module.close = _.partial(close, moduleName); - if (requires) { - // update requires list with possibly new requirements - module.requires = _.union(module.requires, requires); - } + // ensure that it is required by linked modules + _.each(links, function (app) { + if (!~app.requires.indexOf(moduleName)) app.requires.push(moduleName); + }); + } - return module; + if (requires) { + // update requires list with possibly new requirements + module.requires = _.union(module.requires, requires); } - function close(moduleName) { - var module = existingModules[moduleName]; + return module; +} - // already closed - if (!module) return; +function close(moduleName) { + var module = existingModules[moduleName]; - // if the module is currently linked, unlink it - var i = links.indexOf(module); - if (i > -1) links.splice(i, 1); + // already closed + if (!module) return; - // remove from linked modules list of required modules - _.each(links, function (app) { - _.pull(app.requires, moduleName); - }); + // if the module is currently linked, unlink it + var i = links.indexOf(module); + if (i > -1) links.splice(i, 1); - // remove module from existingModules - delete existingModules[moduleName]; - } + // remove from linked modules list of required modules + _.each(links, function (app) { + _.pull(app.requires, moduleName); + }); + + // remove module from existingModules + delete existingModules[moduleName]; +} - return { - link: link, - get: get, - close: close - }; -}); +export default { + link: link, + get: get, + close: close +}; diff --git a/src/ui/public/notify/directives.js b/src/ui/public/notify/directives.js index 21c81d23543884..dcddfdaac9494a 100644 --- a/src/ui/public/notify/directives.js +++ b/src/ui/public/notify/directives.js @@ -1,15 +1,13 @@ import _ from 'lodash'; -define(function (require) { - var notify = require('ui/modules').get('kibana/notify'); +var notify = require('ui/modules').get('kibana/notify'); - notify.directive('kbnNotifications', function () { - return { - restrict: 'E', - scope: { - list: '=list' - }, - replace: true, - template: require('ui/notify/partials/toaster.html') - }; - }); +notify.directive('kbnNotifications', function () { + return { + restrict: 'E', + scope: { + list: '=list' + }, + replace: true, + template: require('ui/notify/partials/toaster.html') + }; }); diff --git a/src/ui/public/notify/errors.js b/src/ui/public/notify/errors.js index 449f47c4cb2884..fb74b7450be3e2 100644 --- a/src/ui/public/notify/errors.js +++ b/src/ui/public/notify/errors.js @@ -1,29 +1,27 @@ import _ from 'lodash'; -define(function (require) { - var errors = {}; +var errors = {}; - var canStack = (function () { - var err = new Error(); - return !!err.stack; - }()); +var canStack = (function () { + var err = new Error(); + return !!err.stack; +}()); - // abstract error class - _.class(KibanaError).inherits(Error); - function KibanaError(msg, constructor) { - this.message = msg; +// abstract error class +_.class(KibanaError).inherits(Error); +function KibanaError(msg, constructor) { + this.message = msg; - Error.call(this, this.message); - if (!this.stack) { - if (Error.captureStackTrace) { - Error.captureStackTrace(this, constructor || KibanaError); - } else if (canStack) { - this.stack = (new Error()).stack; - } else { - this.stack = ''; - } + Error.call(this, this.message); + if (!this.stack) { + if (Error.captureStackTrace) { + Error.captureStackTrace(this, constructor || KibanaError); + } else if (canStack) { + this.stack = (new Error()).stack; + } else { + this.stack = ''; } } - errors.KibanaError = KibanaError; +} +errors.KibanaError = KibanaError; - return errors; -}); +export default errors; diff --git a/src/ui/public/notify/lib/_format_es_msg.js b/src/ui/public/notify/lib/_format_es_msg.js index cdd30049464ab7..1148da40647656 100644 --- a/src/ui/public/notify/lib/_format_es_msg.js +++ b/src/ui/public/notify/lib/_format_es_msg.js @@ -1,18 +1,16 @@ import _ from 'lodash'; -define(function (require) { - /** - * Utilize the extended error information returned from elasticsearch - * @param {Error|String} err - * @returns {string} - */ - return function formatESMsg(err) { - var rootCause = _.get(err, 'resp.error.root_cause'); - if (!rootCause) { - return; //undefined - } +/** + * Utilize the extended error information returned from elasticsearch + * @param {Error|String} err + * @returns {string} + */ +export default function formatESMsg(err) { + var rootCause = _.get(err, 'resp.error.root_cause'); + if (!rootCause) { + return; //undefined + } - var result = _.pluck(rootCause, 'reason').join('\n'); - return result; - }; -}); + var result = _.pluck(rootCause, 'reason').join('\n'); + return result; +}; diff --git a/src/ui/public/notify/lib/_format_msg.js b/src/ui/public/notify/lib/_format_msg.js index eff653f498f48a..15f0260c5b7dfd 100644 --- a/src/ui/public/notify/lib/_format_msg.js +++ b/src/ui/public/notify/lib/_format_msg.js @@ -1,43 +1,41 @@ import _ from 'lodash'; import formatESMsg from 'ui/notify/lib/_format_es_msg'; -define(function (require) { - var has = _.has; +var has = _.has; - /** - * Formats the error message from an error object, extended elasticsearch - * object or simple string; prepends optional second parameter to the message - * @param {Error|String} err - * @param {String} from - Prefix for message indicating source (optional) - * @returns {string} - */ - function formatMsg(err, from) { - var rtn = ''; - if (from) { - rtn += from + ': '; - } +/** + * Formats the error message from an error object, extended elasticsearch + * object or simple string; prepends optional second parameter to the message + * @param {Error|String} err + * @param {String} from - Prefix for message indicating source (optional) + * @returns {string} + */ +function formatMsg(err, from) { + var rtn = ''; + if (from) { + rtn += from + ': '; + } - var esMsg = formatESMsg(err); + var esMsg = formatESMsg(err); - if (typeof err === 'string') { - rtn += err; - } else if (esMsg) { - rtn += esMsg; - } else if (err instanceof Error) { - rtn += formatMsg.describeError(err); - } else if (has(err, 'status') && has(err, 'data')) { - // is an Angular $http "error object" - rtn += 'Error ' + err.status + ' ' + err.statusText + ': ' + err.data.message; - } + if (typeof err === 'string') { + rtn += err; + } else if (esMsg) { + rtn += esMsg; + } else if (err instanceof Error) { + rtn += formatMsg.describeError(err); + } else if (has(err, 'status') && has(err, 'data')) { + // is an Angular $http "error object" + rtn += 'Error ' + err.status + ' ' + err.statusText + ': ' + err.data.message; + } - return rtn; - }; + return rtn; +}; - formatMsg.describeError = function (err) { - if (!err) return undefined; - if (err.body && err.body.message) return err.body.message; - if (err.message) return err.message; - return '' + err; - }; +formatMsg.describeError = function (err) { + if (!err) return undefined; + if (err.body && err.body.message) return err.body.message; + if (err.message) return err.message; + return '' + err; +}; - return formatMsg; -}); +export default formatMsg; diff --git a/src/ui/public/notify/notifier.js b/src/ui/public/notify/notifier.js index b93642cb643246..332961e94e41c9 100644 --- a/src/ui/public/notify/notifier.js +++ b/src/ui/public/notify/notifier.js @@ -5,360 +5,358 @@ import formatMsg from 'ui/notify/lib/_format_msg'; import fatalSplashScreen from 'ui/notify/partials/fatal_splash_screen.html'; /* eslint no-console: 0 */ -define(function (require) { - var notifs = []; - var setTO = setTimeout; - var clearTO = clearTimeout; - var version = metadata.version; - var buildNum = metadata.buildNum; - var consoleGroups = ('group' in window.console) && ('groupCollapsed' in window.console) && ('groupEnd' in window.console); +var notifs = []; +var setTO = setTimeout; +var clearTO = clearTimeout; +var version = metadata.version; +var buildNum = metadata.buildNum; +var consoleGroups = ('group' in window.console) && ('groupCollapsed' in window.console) && ('groupEnd' in window.console); - var log = _.bindKey(console, 'log'); +var log = _.bindKey(console, 'log'); - // used to identify the first call to fatal, set to false there - var firstFatal = true; +// used to identify the first call to fatal, set to false there +var firstFatal = true; - var fatalToastTemplate = (function lazyTemplate(tmpl) { - var compiled; - return function (vars) { - return (compiled || (compiled = _.template(tmpl)))(vars); - }; - }(require('ui/notify/partials/fatal.html'))); - - function now() { - if (window.performance && window.performance.now) { - return window.performance.now(); - } - return Date.now(); - } +var fatalToastTemplate = (function lazyTemplate(tmpl) { + var compiled; + return function (vars) { + return (compiled || (compiled = _.template(tmpl)))(vars); + }; +}(require('ui/notify/partials/fatal.html'))); - function closeNotif(cb, key) { - return function () { - // this === notif - var i = notifs.indexOf(this); - if (i !== -1) notifs.splice(i, 1); - if (this.timerId) this.timerId = clearTO(this.timerId); - if (typeof cb === 'function') cb(key); - }; +function now() { + if (window.performance && window.performance.now) { + return window.performance.now(); } + return Date.now(); +} + +function closeNotif(cb, key) { + return function () { + // this === notif + var i = notifs.indexOf(this); + if (i !== -1) notifs.splice(i, 1); + if (this.timerId) this.timerId = clearTO(this.timerId); + if (typeof cb === 'function') cb(key); + }; +} - function add(notif, cb) { - _.set(notif, 'info.version', version); - _.set(notif, 'info.buildNum', buildNum); - - if (notif.lifetime !== Infinity) { - notif.timerId = setTO(function () { - closeNotif(cb, 'ignore').call(notif); - }, notif.lifetime); - } - - notif.clear = closeNotif(); - if (notif.actions) { - notif.actions.forEach(function (action) { - notif[action] = closeNotif(cb, action); - }); - } +function add(notif, cb) { + _.set(notif, 'info.version', version); + _.set(notif, 'info.buildNum', buildNum); - notif.count = (notif.count || 0) + 1; + if (notif.lifetime !== Infinity) { + notif.timerId = setTO(function () { + closeNotif(cb, 'ignore').call(notif); + }, notif.lifetime); + } - var dup = _.find(notifs, function (item) { - return item.content === notif.content && item.lifetime === notif.lifetime; + notif.clear = closeNotif(); + if (notif.actions) { + notif.actions.forEach(function (action) { + notif[action] = closeNotif(cb, action); }); - - if (dup) { - dup.count += 1; - dup.stacks = _.union(dup.stacks, [notif.stack]); - return dup; - } - - notif.stacks = [notif.stack]; - notifs.push(notif); - return notif; } - function formatInfo() { - var info = []; + notif.count = (notif.count || 0) + 1; - if (!_.isUndefined(version)) { - info.push(`Version: ${version}`); - } - - if (!_.isUndefined(buildNum)) { - info.push(`Build: ${buildNum}`); - } + var dup = _.find(notifs, function (item) { + return item.content === notif.content && item.lifetime === notif.lifetime; + }); - return info.join('\n'); + if (dup) { + dup.count += 1; + dup.stacks = _.union(dup.stacks, [notif.stack]); + return dup; } - // browsers format Error.stack differently; always include message - function formatStack(err) { - if (err.stack && !~err.stack.indexOf(err.message)) { - return 'Error: ' + err.message + '\n' + err.stack; - } - return err.stack; - } + notif.stacks = [notif.stack]; + notifs.push(notif); + return notif; +} - /** - * Functionality to check that - */ - function Notifier(opts) { - var self = this; - opts = opts || {}; +function formatInfo() { + var info = []; - // label type thing to say where notifications came from - self.from = opts.location; + if (!_.isUndefined(version)) { + info.push(`Version: ${version}`); + } - 'event lifecycle timed fatal error warning info'.split(' ').forEach(function (m) { - self[m] = _.bind(self[m], self); - }); + if (!_.isUndefined(buildNum)) { + info.push(`Build: ${buildNum}`); } - // to be notified when the first fatal error occurs, push a function into this array. - Notifier.fatalCallbacks = []; + return info.join('\n'); +} - // set the timer functions that all notification managers will use - Notifier.setTimerFns = function (set, clear) { - setTO = set; - clearTO = clear; - }; +// browsers format Error.stack differently; always include message +function formatStack(err) { + if (err.stack && !~err.stack.indexOf(err.message)) { + return 'Error: ' + err.message + '\n' + err.stack; + } + return err.stack; +} - // simply a pointer to the global notif list - Notifier.prototype._notifs = notifs; +/** + * Functionality to check that + */ +function Notifier(opts) { + var self = this; + opts = opts || {}; - /** - * Log a sometimes redundant event - * @param {string} name - The name of the group - * @param {boolean} success - Simple flag stating whether the event succeeded - */ - Notifier.prototype.event = createGroupLogger('event', { - open: true - }); + // label type thing to say where notifications came from + self.from = opts.location; - /** - * Log a major, important, event in the lifecycle of the application - * @param {string} name - The name of the lifecycle event - * @param {boolean} success - Simple flag stating whether the lifecycle event succeeded - */ - Notifier.prototype.lifecycle = createGroupLogger('lifecycle', { - open: true + 'event lifecycle timed fatal error warning info'.split(' ').forEach(function (m) { + self[m] = _.bind(self[m], self); }); +} + +// to be notified when the first fatal error occurs, push a function into this array. +Notifier.fatalCallbacks = []; + +// set the timer functions that all notification managers will use +Notifier.setTimerFns = function (set, clear) { + setTO = set; + clearTO = clear; +}; + +// simply a pointer to the global notif list +Notifier.prototype._notifs = notifs; + +/** + * Log a sometimes redundant event + * @param {string} name - The name of the group + * @param {boolean} success - Simple flag stating whether the event succeeded + */ +Notifier.prototype.event = createGroupLogger('event', { + open: true +}); - /** - * Wrap a function so that it's execution time gets logged. - * - * @param {function} fn - the function to wrap, it's .name property is - * read so make sure to set it - * @return {function} - the wrapped function - */ - Notifier.prototype.timed = function (name, fn) { - var self = this; - - if (typeof name === 'function') { - fn = name; - name = fn.name; - } - - return function WrappedNotifierFunction() { - var cntx = this; - var args = arguments; - - return self.event(name, function () { - return fn.apply(cntx, args); - }); - }; - }; +/** + * Log a major, important, event in the lifecycle of the application + * @param {string} name - The name of the lifecycle event + * @param {boolean} success - Simple flag stating whether the lifecycle event succeeded + */ +Notifier.prototype.lifecycle = createGroupLogger('lifecycle', { + open: true +}); - /** - * Kill the page, display an error, then throw the error. - * Used as a last-resort error back in many promise chains - * so it rethrows the error that's displayed on the page. - * - * @param {Error} err - The error that occured - */ - Notifier.prototype.fatal = function (err) { - this._showFatal(err); - throw err; - }; +/** + * Wrap a function so that it's execution time gets logged. + * + * @param {function} fn - the function to wrap, it's .name property is + * read so make sure to set it + * @return {function} - the wrapped function + */ +Notifier.prototype.timed = function (name, fn) { + var self = this; + + if (typeof name === 'function') { + fn = name; + name = fn.name; + } - /** - * Display an error that destroys the entire app. Broken out so that - * global error handlers can display fatal errors without throwing another - * error like in #fatal() - * - * @param {Error} err - The fatal error that occured - */ - Notifier.prototype._showFatal = function (err) { - if (firstFatal) { - _.callEach(Notifier.fatalCallbacks); - firstFatal = false; - window.addEventListener('hashchange', function () { - window.location.reload(); - }); - } + return function WrappedNotifierFunction() { + var cntx = this; + var args = arguments; - var html = fatalToastTemplate({ - info: formatInfo(), - msg: formatMsg(err, this.from), - stack: formatStack(err) + return self.event(name, function () { + return fn.apply(cntx, args); }); - - var $container = $('#fatal-splash-screen'); - - if (!$container.size()) { - $(document.body) - // in case the app has not completed boot - .removeAttr('ng-cloak') - .html(fatalSplashScreen); - - $container = $('#fatal-splash-screen'); - } - - $container.append(html); - console.error(err.stack); - }; - - /** - * Alert the user of an error that occured - * @param {Error|String} err - */ - Notifier.prototype.error = function (err, cb) { - return add({ - type: 'danger', - content: formatMsg(err, this.from), - icon: 'warning', - title: 'Error', - lifetime: Infinity, - actions: ['report', 'accept'], - stack: formatStack(err) - }, cb); }; +}; + +/** + * Kill the page, display an error, then throw the error. + * Used as a last-resort error back in many promise chains + * so it rethrows the error that's displayed on the page. + * + * @param {Error} err - The error that occured + */ +Notifier.prototype.fatal = function (err) { + this._showFatal(err); + throw err; +}; + +/** + * Display an error that destroys the entire app. Broken out so that + * global error handlers can display fatal errors without throwing another + * error like in #fatal() + * + * @param {Error} err - The fatal error that occured + */ +Notifier.prototype._showFatal = function (err) { + if (firstFatal) { + _.callEach(Notifier.fatalCallbacks); + firstFatal = false; + window.addEventListener('hashchange', function () { + window.location.reload(); + }); + } - /** - * Warn the user abort something - * @param {[type]} msg [description] - * @return {[type]} [description] - */ - Notifier.prototype.warning = function (msg, cb) { - return add({ - type: 'warning', - content: formatMsg(msg, this.from), - icon: 'warning', - title: 'Warning', - lifetime: 10000, - actions: ['accept'] - }, cb); - }; + var html = fatalToastTemplate({ + info: formatInfo(), + msg: formatMsg(err, this.from), + stack: formatStack(err) + }); - /** - * Display a debug message - * @param {String} msg [description] - * @return {[type]} [description] - */ - Notifier.prototype.info = function (msg, cb) { - return add({ - type: 'info', - content: formatMsg(msg, this.from), - icon: 'info-circle', - title: 'Debug', - lifetime: 5000, - actions: ['accept'] - }, cb); - }; + var $container = $('#fatal-splash-screen'); - Notifier.prototype.describeError = formatMsg.describeError; + if (!$container.size()) { + $(document.body) + // in case the app has not completed boot + .removeAttr('ng-cloak') + .html(fatalSplashScreen); - if (log === _.noop) { - Notifier.prototype.log = _.noop; - } else { - Notifier.prototype.log = function () { - var args = [].slice.apply(arguments); - if (this.from) args.unshift(this.from + ':'); - log.apply(null, args); - }; + $container = $('#fatal-splash-screen'); } - // general functionality used by .event() and .lifecycle() - function createGroupLogger(type, opts) { - // Track the groups managed by this logger - var groups = window[type + 'Groups'] = {}; - - return function logger(name, success) { - var status; // status of the timer - var exec; // function to execute and wrap - var ret; // return value - - var complete = function (val) { logger(name, true); return val; }; - var failure = function (err) { logger(name, false); throw err; }; - - if (typeof success === 'function' || success === void 0) { - // start - groups[name] = now(); - if (success) { - // success === the function to time - exec = success; - } else { - // function that can report on the success or failure of an op, and pass their value along - ret = complete; - ret.failure = failure; - } + $container.append(html); + console.error(err.stack); +}; + +/** + * Alert the user of an error that occured + * @param {Error|String} err + */ +Notifier.prototype.error = function (err, cb) { + return add({ + type: 'danger', + content: formatMsg(err, this.from), + icon: 'warning', + title: 'Error', + lifetime: Infinity, + actions: ['report', 'accept'], + stack: formatStack(err) + }, cb); +}; + +/** + * Warn the user abort something + * @param {[type]} msg [description] + * @return {[type]} [description] + */ +Notifier.prototype.warning = function (msg, cb) { + return add({ + type: 'warning', + content: formatMsg(msg, this.from), + icon: 'warning', + title: 'Warning', + lifetime: 10000, + actions: ['accept'] + }, cb); +}; + +/** + * Display a debug message + * @param {String} msg [description] + * @return {[type]} [description] + */ +Notifier.prototype.info = function (msg, cb) { + return add({ + type: 'info', + content: formatMsg(msg, this.from), + icon: 'info-circle', + title: 'Debug', + lifetime: 5000, + actions: ['accept'] + }, cb); +}; + +Notifier.prototype.describeError = formatMsg.describeError; + +if (log === _.noop) { + Notifier.prototype.log = _.noop; +} else { + Notifier.prototype.log = function () { + var args = [].slice.apply(arguments); + if (this.from) args.unshift(this.from + ':'); + log.apply(null, args); + }; +} + +// general functionality used by .event() and .lifecycle() +function createGroupLogger(type, opts) { + // Track the groups managed by this logger + var groups = window[type + 'Groups'] = {}; + + return function logger(name, success) { + var status; // status of the timer + var exec; // function to execute and wrap + var ret; // return value + + var complete = function (val) { logger(name, true); return val; }; + var failure = function (err) { logger(name, false); throw err; }; + + if (typeof success === 'function' || success === void 0) { + // start + groups[name] = now(); + if (success) { + // success === the function to time + exec = success; + } else { + // function that can report on the success or failure of an op, and pass their value along + ret = complete; + ret.failure = failure; } - else { - groups[name] = now() - (groups[name] || 0); - var time = ' in ' + groups[name].toFixed(2) + 'ms'; + } + else { + groups[name] = now() - (groups[name] || 0); + var time = ' in ' + groups[name].toFixed(2) + 'ms'; - // end - if (success) { - status = 'complete' + time; - } else { - groups[name] = false; - status = 'failure' + time; - } + // end + if (success) { + status = 'complete' + time; + } else { + groups[name] = false; + status = 'failure' + time; } + } - if (consoleGroups) { - if (status) { - console.log(status); - console.groupEnd(); + if (consoleGroups) { + if (status) { + console.log(status); + console.groupEnd(); + } else { + if (opts.open) { + console.group(name); } else { - if (opts.open) { - console.group(name); - } else { - console.groupCollapsed(name); - } + console.groupCollapsed(name); } - } else { - log('KBN: ' + name + (status ? ' - ' + status : '')); } + } else { + log('KBN: ' + name + (status ? ' - ' + status : '')); + } - if (exec) { - try { - ret = exec(); - } catch (e) { - return failure(e); - } - - if (ret && typeof ret.then === 'function') { - // return a new promise that proxies the value - // and logs about the promise outcome - return ret.then(function (val) { - complete(); - return val; - }, function (err) { - failure(err); - throw err; - }); - } + if (exec) { + try { + ret = exec(); + } catch (e) { + return failure(e); + } - // the function executed fine, and didn't return a promise, move along - complete(); + if (ret && typeof ret.then === 'function') { + // return a new promise that proxies the value + // and logs about the promise outcome + return ret.then(function (val) { + complete(); + return val; + }, function (err) { + failure(err); + throw err; + }); } - return ret; - }; - } + // the function executed fine, and didn't return a promise, move along + complete(); + } - return Notifier; -}); + return ret; + }; +} + +export default Notifier; diff --git a/src/ui/public/notify/notify.js b/src/ui/public/notify/notify.js index 264712f02373f4..89600b37101357 100644 --- a/src/ui/public/notify/notify.js +++ b/src/ui/public/notify/notify.js @@ -4,42 +4,40 @@ import modules from 'ui/modules'; import errors from 'ui/notify/errors'; import Notifier from 'ui/notify/notifier'; import 'ui/notify/directives'; -define(function (require) { - var module = modules.get('kibana/notify'); - var rootNotifier = new Notifier(); - - - module.factory('createNotifier', function () { - return function (opts) { - return new Notifier(opts); - }; - }); - - module.factory('Notifier', function () { - return Notifier; - }); - - module.run(function ($timeout) { - // provide alternate methods for setting timeouts, which will properly trigger digest cycles - Notifier.setTimerFns($timeout, $timeout.cancel); - }); - - /** - * Global Angular exception handler (NOT JUST UNCAUGHT EXCEPTIONS) - */ - // modules - // .get('exceptionOverride') - // .factory('$exceptionHandler', function () { - // return function (exception, cause) { - // rootNotifier.fatal(exception, cause); - // }; - // }); - - window.onerror = function (err, url, line) { - rootNotifier.fatal(new Error(err + ' (' + url + ':' + line + ')')); - return true; +var module = modules.get('kibana/notify'); +var rootNotifier = new Notifier(); + + +module.factory('createNotifier', function () { + return function (opts) { + return new Notifier(opts); }; +}); - return rootNotifier; +module.factory('Notifier', function () { + return Notifier; +}); +module.run(function ($timeout) { + // provide alternate methods for setting timeouts, which will properly trigger digest cycles + Notifier.setTimerFns($timeout, $timeout.cancel); }); + +/** + * Global Angular exception handler (NOT JUST UNCAUGHT EXCEPTIONS) + */ +// modules +// .get('exceptionOverride') +// .factory('$exceptionHandler', function () { +// return function (exception, cause) { +// rootNotifier.fatal(exception, cause); +// }; +// }); + +window.onerror = function (err, url, line) { + rootNotifier.fatal(new Error(err + ' (' + url + ':' + line + ')')); + return true; +}; + +export default rootNotifier; + diff --git a/src/ui/public/number_list/number_list.js b/src/ui/public/number_list/number_list.js index 0a8a5d0dd1c693..8c720affe1b646 100644 --- a/src/ui/public/number_list/number_list.js +++ b/src/ui/public/number_list/number_list.js @@ -1,108 +1,106 @@ import _ from 'lodash'; import parseRange from 'ui/utils/range'; import 'ui/number_list/number_list_input'; -define(function (require) { - - require('ui/modules') - .get('kibana') - .directive('kbnNumberList', function () { - return { - restrict: 'E', - template: require('ui/number_list/number_list.html'), - controllerAs: 'numberListCntr', - require: 'ngModel', - controller: function ($scope, $attrs, $parse) { - var self = this; - - // Called from the pre-link function once we have the controllers - self.init = function (modelCntr) { - self.modelCntr = modelCntr; - - self.getList = function () { - return self.modelCntr.$modelValue; - }; - - self.getUnitName = _.partial($parse($attrs.unit), $scope); - - var defaultRange = self.range = parseRange('[0,Infinity)'); - - $scope.$watch(function () { - return $attrs.range; - }, function (range, prev) { - if (!range) { - self.range = defaultRange; - return; - } - - try { - self.range = parseRange(range); - } catch (e) { - throw new TypeError('Unable to parse range: ' + e.message); - } - }); - - /** - * Remove an item from list by index - * @param {number} index - * @return {undefined} - */ - self.remove = function (index) { - var list = self.getList(); - if (!list) return; - - list.splice(index, 1); - }; - - /** - * Add an item to the end of the list - * @return {undefined} - */ - self.add = function () { - var list = self.getList(); - if (!list) return; - - list.push(_.last(list) + 1); - }; - - /** - * Check to see if the list is too short. - * - * @return {Boolean} - */ - self.tooShort = function () { - return _.size(self.getList()) < 1; - }; - - /** - * Check to see if the list is too short, but simply - * because the user hasn't interacted with it yet - * - * @return {Boolean} - */ - self.undefinedLength = function () { - return self.tooShort() && (self.modelCntr.$untouched && self.modelCntr.$pristine); - }; - - /** - * Check to see if the list is too short - * - * @return {Boolean} - */ - self.invalidLength = function () { - return self.tooShort() && !self.undefinedLength(); - }; - - $scope.$watchCollection(self.getList, function () { - self.modelCntr.$setValidity('numberListLength', !self.tooShort()); - }); + +require('ui/modules') +.get('kibana') +.directive('kbnNumberList', function () { + return { + restrict: 'E', + template: require('ui/number_list/number_list.html'), + controllerAs: 'numberListCntr', + require: 'ngModel', + controller: function ($scope, $attrs, $parse) { + var self = this; + + // Called from the pre-link function once we have the controllers + self.init = function (modelCntr) { + self.modelCntr = modelCntr; + + self.getList = function () { + return self.modelCntr.$modelValue; + }; + + self.getUnitName = _.partial($parse($attrs.unit), $scope); + + var defaultRange = self.range = parseRange('[0,Infinity)'); + + $scope.$watch(function () { + return $attrs.range; + }, function (range, prev) { + if (!range) { + self.range = defaultRange; + return; + } + + try { + self.range = parseRange(range); + } catch (e) { + throw new TypeError('Unable to parse range: ' + e.message); + } + }); + + /** + * Remove an item from list by index + * @param {number} index + * @return {undefined} + */ + self.remove = function (index) { + var list = self.getList(); + if (!list) return; + + list.splice(index, 1); }; - }, - link: { - pre: function ($scope, $el, attrs, ngModelCntr) { - $scope.numberListCntr.init(ngModelCntr); - } - }, - }; - }); + /** + * Add an item to the end of the list + * @return {undefined} + */ + self.add = function () { + var list = self.getList(); + if (!list) return; + + list.push(_.last(list) + 1); + }; + + /** + * Check to see if the list is too short. + * + * @return {Boolean} + */ + self.tooShort = function () { + return _.size(self.getList()) < 1; + }; + + /** + * Check to see if the list is too short, but simply + * because the user hasn't interacted with it yet + * + * @return {Boolean} + */ + self.undefinedLength = function () { + return self.tooShort() && (self.modelCntr.$untouched && self.modelCntr.$pristine); + }; + + /** + * Check to see if the list is too short + * + * @return {Boolean} + */ + self.invalidLength = function () { + return self.tooShort() && !self.undefinedLength(); + }; + + $scope.$watchCollection(self.getList, function () { + self.modelCntr.$setValidity('numberListLength', !self.tooShort()); + }); + }; + }, + link: { + pre: function ($scope, $el, attrs, ngModelCntr) { + $scope.numberListCntr.init(ngModelCntr); + } + }, + }; }); + diff --git a/src/ui/public/number_list/number_list_input.js b/src/ui/public/number_list/number_list_input.js index 67ef1a36421b70..300baed3572a8f 100644 --- a/src/ui/public/number_list/number_list_input.js +++ b/src/ui/public/number_list/number_list_input.js @@ -1,185 +1,183 @@ import $ from 'jquery'; import _ from 'lodash'; import keyMap from 'ui/utils/key_map'; -define(function (require) { - var INVALID = {}; // invalid flag - var FLOATABLE = /^[\d\.e\-\+]+$/i; +var INVALID = {}; // invalid flag +var FLOATABLE = /^[\d\.e\-\+]+$/i; - var VALIDATION_ERROR = 'numberListRangeAndOrder'; - var DIRECTIVE_ATTR = 'kbn-number-list-input'; +var VALIDATION_ERROR = 'numberListRangeAndOrder'; +var DIRECTIVE_ATTR = 'kbn-number-list-input'; - require('ui/modules') - .get('kibana') - .directive('kbnNumberListInput', function ($parse) { - return { - restrict: 'A', - require: ['ngModel', '^kbnNumberList'], - link: function ($scope, $el, attrs, controllers) { - var ngModelCntr = controllers[0]; - var numberListCntr = controllers[1]; +require('ui/modules') +.get('kibana') +.directive('kbnNumberListInput', function ($parse) { + return { + restrict: 'A', + require: ['ngModel', '^kbnNumberList'], + link: function ($scope, $el, attrs, controllers) { + var ngModelCntr = controllers[0]; + var numberListCntr = controllers[1]; - var $setModel = $parse(attrs.ngModel).assign; - var $repeater = $el.closest('[ng-repeat]'); + var $setModel = $parse(attrs.ngModel).assign; + var $repeater = $el.closest('[ng-repeat]'); - var handlers = { - up: change(add, 1), - 'shift-up': change(addTenth, 1), + var handlers = { + up: change(add, 1), + 'shift-up': change(addTenth, 1), - down: change(add, -1), - 'shift-down': change(addTenth, -1), + down: change(add, -1), + 'shift-down': change(addTenth, -1), - tab: go('next'), - 'shift-tab': go('prev'), + tab: go('next'), + 'shift-tab': go('prev'), - 'shift-enter': numberListCntr.add, + 'shift-enter': numberListCntr.add, - backspace: removeIfEmpty, - delete: removeIfEmpty - }; - - function removeIfEmpty(event) { - if (!ngModelCntr.$viewValue) { - $get('prev').focus(); - numberListCntr.remove($scope.$index); - event.preventDefault(); - } + backspace: removeIfEmpty, + delete: removeIfEmpty + }; - return false; + function removeIfEmpty(event) { + if (!ngModelCntr.$viewValue) { + $get('prev').focus(); + numberListCntr.remove($scope.$index); + event.preventDefault(); } - function $get(dir) { - return $repeater[dir]().find('[' + DIRECTIVE_ATTR + ']'); - } + return false; + } - function go(dir) { - return function () { - var $to = $get(dir); - if ($to.size()) $to.focus(); - else return false; - }; - } + function $get(dir) { + return $repeater[dir]().find('[' + DIRECTIVE_ATTR + ']'); + } - function idKey(event) { - var id = []; - if (event.ctrlKey) id.push('ctrl'); - if (event.shiftKey) id.push('shift'); - if (event.metaKey) id.push('meta'); - if (event.altKey) id.push('alt'); - id.push(keyMap[event.keyCode] || event.keyCode); - return id.join('-'); - } + function go(dir) { + return function () { + var $to = $get(dir); + if ($to.size()) $to.focus(); + else return false; + }; + } - function add(n, val) { - return parse(val + n); - } + function idKey(event) { + var id = []; + if (event.ctrlKey) id.push('ctrl'); + if (event.shiftKey) id.push('shift'); + if (event.metaKey) id.push('meta'); + if (event.altKey) id.push('alt'); + id.push(keyMap[event.keyCode] || event.keyCode); + return id.join('-'); + } - function addTenth(n, val, str) { - var int = Math.floor(val); - var dec = parseInt(str.split('.')[1] || 0, 10); - dec = dec + parseInt(n, 10); - - if (dec < 0 || dec > 9) { - int += Math.floor(dec / 10); - if (dec < 0) { - dec = 10 + (dec % 10); - } else { - dec = dec % 10; - } - } + function add(n, val) { + return parse(val + n); + } - return parse(int + '.' + dec); + function addTenth(n, val, str) { + var int = Math.floor(val); + var dec = parseInt(str.split('.')[1] || 0, 10); + dec = dec + parseInt(n, 10); + + if (dec < 0 || dec > 9) { + int += Math.floor(dec / 10); + if (dec < 0) { + dec = 10 + (dec % 10); + } else { + dec = dec % 10; + } } - function change(using, mod) { - return function () { - var str = String(ngModelCntr.$viewValue); - var val = parse(str); - if (val === INVALID) return; + return parse(int + '.' + dec); + } - var next = using(mod, val, str); - if (next === INVALID) return; + function change(using, mod) { + return function () { + var str = String(ngModelCntr.$viewValue); + var val = parse(str); + if (val === INVALID) return; - $el.val(next); - ngModelCntr.$setViewValue(next); - }; - } + var next = using(mod, val, str); + if (next === INVALID) return; - function onKeydown(event) { - var handler = handlers[idKey(event)]; - if (!handler) return; + $el.val(next); + ngModelCntr.$setViewValue(next); + }; + } - if (handler(event) !== false) { - event.preventDefault(); - } + function onKeydown(event) { + var handler = handlers[idKey(event)]; + if (!handler) return; - $scope.$apply(); + if (handler(event) !== false) { + event.preventDefault(); } - $el.on('keydown', onKeydown); - $scope.$on('$destroy', function () { - $el.off('keydown', onKeydown); - }); + $scope.$apply(); + } - function parse(viewValue) { - var num = viewValue; + $el.on('keydown', onKeydown); + $scope.$on('$destroy', function () { + $el.off('keydown', onKeydown); + }); - if (typeof num !== 'number' || isNaN(num)) { - // parse non-numbers - num = String(viewValue || 0).trim(); - if (!FLOATABLE.test(num)) return INVALID; + function parse(viewValue) { + var num = viewValue; - num = parseFloat(num); - if (isNaN(num)) return INVALID; - } + if (typeof num !== 'number' || isNaN(num)) { + // parse non-numbers + num = String(viewValue || 0).trim(); + if (!FLOATABLE.test(num)) return INVALID; - var range = numberListCntr.range; - if (!range.within(num)) return INVALID; + num = parseFloat(num); + if (isNaN(num)) return INVALID; + } - if ($scope.$index > 0) { - var i = $scope.$index - 1; - var list = numberListCntr.getList(); - var prev = list[i]; - if (num <= prev) return INVALID; - } + var range = numberListCntr.range; + if (!range.within(num)) return INVALID; - return num; + if ($scope.$index > 0) { + var i = $scope.$index - 1; + var list = numberListCntr.getList(); + var prev = list[i]; + if (num <= prev) return INVALID; } - $scope.$watchMulti([ - '$index', - { - fn: $scope.$watchCollection, - get: function () { - return numberListCntr.getList(); - } + return num; + } + + $scope.$watchMulti([ + '$index', + { + fn: $scope.$watchCollection, + get: function () { + return numberListCntr.getList(); } - ], function () { - var valid = parse(ngModelCntr.$viewValue) !== INVALID; - ngModelCntr.$setValidity(VALIDATION_ERROR, valid); - }); - - function validate(then) { - return function (input) { - var value = parse(input); - var valid = value !== INVALID; - value = valid ? value : input; - ngModelCntr.$setValidity(VALIDATION_ERROR, valid); - then && then(input, value); - return value; - }; } + ], function () { + var valid = parse(ngModelCntr.$viewValue) !== INVALID; + ngModelCntr.$setValidity(VALIDATION_ERROR, valid); + }); + + function validate(then) { + return function (input) { + var value = parse(input); + var valid = value !== INVALID; + value = valid ? value : input; + ngModelCntr.$setValidity(VALIDATION_ERROR, valid); + then && then(input, value); + return value; + }; + } - ngModelCntr.$parsers.push(validate()); - ngModelCntr.$formatters.push(validate(function (input, value) { - if (input !== value) $setModel($scope, value); - })); + ngModelCntr.$parsers.push(validate()); + ngModelCntr.$formatters.push(validate(function (input, value) { + if (input !== value) $setModel($scope, value); + })); - if (parse(ngModelCntr.$viewValue) === INVALID) { - ngModelCntr.$setTouched(); - } + if (parse(ngModelCntr.$viewValue) === INVALID) { + ngModelCntr.$setTouched(); } - }; - }); - + } + }; }); + diff --git a/src/ui/public/paginated_table/paginated_table.js b/src/ui/public/paginated_table/paginated_table.js index d9c7745b6c7a5e..d62ed19096abad 100644 --- a/src/ui/public/paginated_table/paginated_table.js +++ b/src/ui/public/paginated_table/paginated_table.js @@ -1,86 +1,84 @@ import _ from 'lodash'; -define(function (require) { - require('ui/modules') - .get('kibana') - .directive('paginatedTable', function ($filter) { - var orderBy = $filter('orderBy'); +require('ui/modules') +.get('kibana') +.directive('paginatedTable', function ($filter) { + var orderBy = $filter('orderBy'); - return { - restrict: 'E', - template: require('ui/paginated_table/paginated_table.html'), - transclude: true, - scope: { - rows: '=', - columns: '=', - perPage: '=?', - sortHandler: '=?', - showSelector: '=?' - }, - controllerAs: 'paginatedTable', - controller: function ($scope) { - var self = this; - self.sort = { - columnIndex: null, - direction: null - }; + return { + restrict: 'E', + template: require('ui/paginated_table/paginated_table.html'), + transclude: true, + scope: { + rows: '=', + columns: '=', + perPage: '=?', + sortHandler: '=?', + showSelector: '=?' + }, + controllerAs: 'paginatedTable', + controller: function ($scope) { + var self = this; + self.sort = { + columnIndex: null, + direction: null + }; - self.sortColumn = function (colIndex) { - var col = $scope.columns[colIndex]; + self.sortColumn = function (colIndex) { + var col = $scope.columns[colIndex]; - if (!col) return; - if (col.sortable === false) return; + if (!col) return; + if (col.sortable === false) return; - var sortDirection; + var sortDirection; - if (self.sort.columnIndex !== colIndex) { - sortDirection = 'asc'; - } else { - var directions = { - null: 'asc', - 'asc': 'desc', - 'desc': null - }; - sortDirection = directions[self.sort.direction]; - } + if (self.sort.columnIndex !== colIndex) { + sortDirection = 'asc'; + } else { + var directions = { + null: 'asc', + 'asc': 'desc', + 'desc': null + }; + sortDirection = directions[self.sort.direction]; + } - self.sort.columnIndex = colIndex; - self.sort.direction = sortDirection; - self._setSortGetter(colIndex); - }; + self.sort.columnIndex = colIndex; + self.sort.direction = sortDirection; + self._setSortGetter(colIndex); + }; - self._setSortGetter = function (index) { - if (_.isFunction($scope.sortHandler)) { - // use custom sort handler - self.sort.getter = $scope.sortHandler(index); - } else { - // use generic sort handler - self.sort.getter = function (row) { - var value = row[index]; - if (value && value.value != null) return value.value; - return value; - }; - } - }; + self._setSortGetter = function (index) { + if (_.isFunction($scope.sortHandler)) { + // use custom sort handler + self.sort.getter = $scope.sortHandler(index); + } else { + // use generic sort handler + self.sort.getter = function (row) { + var value = row[index]; + if (value && value.value != null) return value.value; + return value; + }; + } + }; - // update the sordedRows result - $scope.$watchMulti([ - 'rows', - 'columns', - '[]paginatedTable.sort' - ], function resortRows() { - if (!$scope.rows || !$scope.columns) { - $scope.sortedRows = false; - return; - } + // update the sordedRows result + $scope.$watchMulti([ + 'rows', + 'columns', + '[]paginatedTable.sort' + ], function resortRows() { + if (!$scope.rows || !$scope.columns) { + $scope.sortedRows = false; + return; + } - var sort = self.sort; - if (sort.direction == null) { - $scope.sortedRows = $scope.rows.slice(0); - } else { - $scope.sortedRows = orderBy($scope.rows, sort.getter, sort.direction === 'desc'); - } - }); - } - }; - }); + var sort = self.sort; + if (sort.direction == null) { + $scope.sortedRows = $scope.rows.slice(0); + } else { + $scope.sortedRows = orderBy($scope.rows, sort.getter, sort.direction === 'desc'); + } + }); + } + }; }); diff --git a/src/ui/public/parse_query/lib/from_user.js b/src/ui/public/parse_query/lib/from_user.js index e71b46fd5f37f0..42f76da0b16b14 100644 --- a/src/ui/public/parse_query/lib/from_user.js +++ b/src/ui/public/parse_query/lib/from_user.js @@ -1,44 +1,42 @@ import _ from 'lodash'; import CourierDataSourceDecorateQueryProvider from 'ui/courier/data_source/_decorate_query'; -define(function (require) { - return function GetQueryFromUser(es, Private) { - var decorateQuery = Private(CourierDataSourceDecorateQueryProvider); +export default function GetQueryFromUser(es, Private) { + var decorateQuery = Private(CourierDataSourceDecorateQueryProvider); - /** - * Take text from the user and make it into a query object - * @param {text} user's query input - * @returns {object} - */ - return function (text) { - function getQueryStringQuery(text) { - return decorateQuery({query_string: {query: text}}); - } + /** + * Take text from the user and make it into a query object + * @param {text} user's query input + * @returns {object} + */ + return function (text) { + function getQueryStringQuery(text) { + return decorateQuery({query_string: {query: text}}); + } - var matchAll = getQueryStringQuery('*'); + var matchAll = getQueryStringQuery('*'); - // If we get an empty object, treat it as a * - if (_.isObject(text)) { - if (Object.keys(text).length) { - return text; - } else { - return matchAll; - } + // If we get an empty object, treat it as a * + if (_.isObject(text)) { + if (Object.keys(text).length) { + return text; + } else { + return matchAll; } + } - // Nope, not an object. - text = (text || '').trim(); - if (text.length === 0) return matchAll; + // Nope, not an object. + text = (text || '').trim(); + if (text.length === 0) return matchAll; - if (text[0] === '{') { - try { - return JSON.parse(text); - } catch (e) { - return getQueryStringQuery(text); - } - } else { + if (text[0] === '{') { + try { + return JSON.parse(text); + } catch (e) { return getQueryStringQuery(text); } - }; + } else { + return getQueryStringQuery(text); + } }; -}); +}; diff --git a/src/ui/public/parse_query/lib/to_user.js b/src/ui/public/parse_query/lib/to_user.js index ddb5dac81c21fd..3e6531e767c9f8 100644 --- a/src/ui/public/parse_query/lib/to_user.js +++ b/src/ui/public/parse_query/lib/to_user.js @@ -1,18 +1,16 @@ import _ from 'lodash'; import angular from 'angular'; -define(function (require) { - /** - * Take text from the model and present it to the user as a string - * @param {text} model value - * @returns {string} - */ - return function toUser(text) { - if (text == null) return ''; - if (_.isObject(text)) { - if (text.query_string) return toUser(text.query_string.query); - return angular.toJson(text); - } - return '' + text; - }; -}); +/** + * Take text from the model and present it to the user as a string + * @param {text} model value + * @returns {string} + */ +export default function toUser(text) { + if (text == null) return ''; + if (_.isObject(text)) { + if (text.query_string) return toUser(text.query_string.query); + return angular.toJson(text); + } + return '' + text; +}; diff --git a/src/ui/public/parse_query/parse_query.js b/src/ui/public/parse_query/parse_query.js index eac39c0bce61b4..16b5a772b1110e 100644 --- a/src/ui/public/parse_query/parse_query.js +++ b/src/ui/public/parse_query/parse_query.js @@ -1,27 +1,25 @@ import toUser from 'ui/parse_query/lib/to_user'; import ParseQueryLibFromUserProvider from 'ui/parse_query/lib/from_user'; -define(function (require) { - require('ui/modules') - .get('kibana') - .directive('parseQuery', function (Private) { - var fromUser = Private(ParseQueryLibFromUserProvider); +require('ui/modules') + .get('kibana') + .directive('parseQuery', function (Private) { + var fromUser = Private(ParseQueryLibFromUserProvider); - return { - restrict: 'A', - require: 'ngModel', - scope: { - 'ngModel': '=' - }, - link: function ($scope, elem, attr, ngModel) { - var init = function () { - $scope.ngModel = fromUser($scope.ngModel); - }; + return { + restrict: 'A', + require: 'ngModel', + scope: { + 'ngModel': '=' + }, + link: function ($scope, elem, attr, ngModel) { + var init = function () { + $scope.ngModel = fromUser($scope.ngModel); + }; - ngModel.$parsers.push(fromUser); - ngModel.$formatters.push(toUser); + ngModel.$parsers.push(fromUser); + ngModel.$formatters.push(toUser); - init(); - } - }; - }); -}); + init(); + } + }; + }); diff --git a/src/ui/public/persisted_log/persisted_log.js b/src/ui/public/persisted_log/persisted_log.js index 2529e3c5e61be6..09607d49668b42 100644 --- a/src/ui/public/persisted_log/persisted_log.js +++ b/src/ui/public/persisted_log/persisted_log.js @@ -1,44 +1,42 @@ import modules from 'ui/modules'; import _ from 'lodash'; -define(function (require) { - - modules.get('kibana/persisted_log') - .factory('PersistedLog', function ($window, localStorage) { - function PersistedLog(name, options) { - options = options || {}; - this.name = name; - this.maxLength = parseInt(options.maxLength, 10); - this.filterDuplicates = options.filterDuplicates || false; - this.items = localStorage.get(this.name) || []; - if (!isNaN(this.maxLength)) this.items = _.take(this.items, this.maxLength); - } - PersistedLog.prototype.add = function (val) { - if (val == null) { - return this.items; - } +modules.get('kibana/persisted_log') +.factory('PersistedLog', function ($window, localStorage) { + function PersistedLog(name, options) { + options = options || {}; + this.name = name; + this.maxLength = parseInt(options.maxLength, 10); + this.filterDuplicates = options.filterDuplicates || false; + this.items = localStorage.get(this.name) || []; + if (!isNaN(this.maxLength)) this.items = _.take(this.items, this.maxLength); + } + + PersistedLog.prototype.add = function (val) { + if (val == null) { + return this.items; + } - // remove any matching items from the stack if option is set - if (this.filterDuplicates) { - _.remove(this.items, function (item) { - return _.isEqual(item, val); - }); - } + // remove any matching items from the stack if option is set + if (this.filterDuplicates) { + _.remove(this.items, function (item) { + return _.isEqual(item, val); + }); + } - this.items.unshift(val); + this.items.unshift(val); - // if maxLength is set, truncate the stack - if (!isNaN(this.maxLength)) this.items = _.take(this.items, this.maxLength); + // if maxLength is set, truncate the stack + if (!isNaN(this.maxLength)) this.items = _.take(this.items, this.maxLength); - // persist the stack - localStorage.set(this.name, this.items); - return this.items; - }; + // persist the stack + localStorage.set(this.name, this.items); + return this.items; + }; - PersistedLog.prototype.get = function () { - return this.items; - }; + PersistedLog.prototype.get = function () { + return this.items; + }; - return PersistedLog; - }); + return PersistedLog; }); diff --git a/src/ui/public/persisted_state/persisted_state.js b/src/ui/public/persisted_state/persisted_state.js index 414b299dc95798..a3f72d44342b3f 100644 --- a/src/ui/public/persisted_state/persisted_state.js +++ b/src/ui/public/persisted_state/persisted_state.js @@ -3,272 +3,270 @@ import toPath from 'lodash/internal/toPath'; import errors from 'ui/errors'; import SimpleEmitter from 'ui/utils/SimpleEmitter'; import EventsProvider from 'ui/events'; -define(function (require) { - return function (Private) { - var Events = Private(EventsProvider); +export default function (Private) { + var Events = Private(EventsProvider); - function validateParent(parent, path) { - if (path.length <= 0) { - throw new errors.PersistedStateError('PersistedState child objects must contain a path'); - } - - if (parent instanceof PersistedState) return; - throw new errors.PersistedStateError('Parent object must be an instance of PersistedState'); + function validateParent(parent, path) { + if (path.length <= 0) { + throw new errors.PersistedStateError('PersistedState child objects must contain a path'); } - function validateValue(value) { - var msg = 'State value must be a plain object'; - if (!value) return; - if (!_.isPlainObject(value)) throw new errors.PersistedStateError(msg); + if (parent instanceof PersistedState) return; + throw new errors.PersistedStateError('Parent object must be an instance of PersistedState'); + } + + function validateValue(value) { + var msg = 'State value must be a plain object'; + if (!value) return; + if (!_.isPlainObject(value)) throw new errors.PersistedStateError(msg); + } + + function prepSetParams(key, value, path) { + // key must be the value, set the entire state using it + if (_.isUndefined(value) && (_.isPlainObject(key) || path.length > 0)) { + // setting entire tree, swap the key and value to write to the state + value = key; + key = undefined; } - function prepSetParams(key, value, path) { - // key must be the value, set the entire state using it - if (_.isUndefined(value) && (_.isPlainObject(key) || path.length > 0)) { - // setting entire tree, swap the key and value to write to the state - value = key; - key = undefined; - } + // ensure the value being passed in is never mutated + return { + value: _.cloneDeep(value), + key: key + }; + } - // ensure the value being passed in is never mutated - return { - value: _.cloneDeep(value), - key: key + function parentDelegationMixin(from, to) { + _.forOwn(from.prototype, function (method, methodName) { + to.prototype[methodName] = function () { + return from.prototype[methodName].apply(this._parent || this, arguments); }; - } + }); + } - function parentDelegationMixin(from, to) { - _.forOwn(from.prototype, function (method, methodName) { - to.prototype[methodName] = function () { - return from.prototype[methodName].apply(this._parent || this, arguments); - }; - }); - } - - _.class(PersistedState).inherits(Events); - parentDelegationMixin(SimpleEmitter, PersistedState); - parentDelegationMixin(Events, PersistedState); + _.class(PersistedState).inherits(Events); + parentDelegationMixin(SimpleEmitter, PersistedState); + parentDelegationMixin(Events, PersistedState); - function PersistedState(value, path, parent, silent) { - PersistedState.Super.call(this); + function PersistedState(value, path, parent, silent) { + PersistedState.Super.call(this); - this._path = this._setPath(path); - this._parent = parent || false; + this._path = this._setPath(path); + this._parent = parent || false; - if (this._parent) { - validateParent(this._parent, this._path); - } else if (!this._path.length) { - validateValue(value); - } + if (this._parent) { + validateParent(this._parent, this._path); + } else if (!this._path.length) { + validateValue(value); + } - value = value || this._getDefault(); + value = value || this._getDefault(); - // copy passed state values and create internal trackers - (silent) ? this.setSilent(value) : this.set(value); - this._initialized = true; // used to track state changes - } + // copy passed state values and create internal trackers + (silent) ? this.setSilent(value) : this.set(value); + this._initialized = true; // used to track state changes + } - PersistedState.prototype.get = function (key, def) { - return _.cloneDeep(this._get(key, def)); - }; + PersistedState.prototype.get = function (key, def) { + return _.cloneDeep(this._get(key, def)); + }; - PersistedState.prototype.set = function (key, value) { - var params = prepSetParams(key, value, this._path); - var val = this._set(params.key, params.value); - this.emit('set'); - return val; - }; + PersistedState.prototype.set = function (key, value) { + var params = prepSetParams(key, value, this._path); + var val = this._set(params.key, params.value); + this.emit('set'); + return val; + }; - PersistedState.prototype.setSilent = function (key, value) { - var params = prepSetParams(key, value, this._path); - return this._set(params.key, params.value, true); - }; + PersistedState.prototype.setSilent = function (key, value) { + var params = prepSetParams(key, value, this._path); + return this._set(params.key, params.value, true); + }; - PersistedState.prototype.reset = function (path) { - var keyPath = this._getIndex(path); - var origValue = _.get(this._defaultState, keyPath); - var currentValue = _.get(this._mergedState, keyPath); + PersistedState.prototype.reset = function (path) { + var keyPath = this._getIndex(path); + var origValue = _.get(this._defaultState, keyPath); + var currentValue = _.get(this._mergedState, keyPath); - if (_.isUndefined(origValue)) { - this._cleanPath(path, this._mergedState); - } else { - _.set(this._mergedState, keyPath, origValue); - } + if (_.isUndefined(origValue)) { + this._cleanPath(path, this._mergedState); + } else { + _.set(this._mergedState, keyPath, origValue); + } - // clean up the changedState and defaultChildState trees - this._cleanPath(path, this._changedState); - this._cleanPath(path, this._defaultChildState); + // clean up the changedState and defaultChildState trees + this._cleanPath(path, this._changedState); + this._cleanPath(path, this._defaultChildState); - if (!_.isEqual(currentValue, origValue)) this.emit('change'); - }; + if (!_.isEqual(currentValue, origValue)) this.emit('change'); + }; - PersistedState.prototype.createChild = function (path, value, silent) { - this._setChild(this._getIndex(path), value, this._parent || this); - return new PersistedState(value, this._getIndex(path), this._parent || this, silent); - }; + PersistedState.prototype.createChild = function (path, value, silent) { + this._setChild(this._getIndex(path), value, this._parent || this); + return new PersistedState(value, this._getIndex(path), this._parent || this, silent); + }; - PersistedState.prototype.removeChild = function (path) { - var origValue = _.get(this._defaultState, this._getIndex(path)); + PersistedState.prototype.removeChild = function (path) { + var origValue = _.get(this._defaultState, this._getIndex(path)); - if (_.isUndefined(origValue)) { - this.reset(path); - } else { - this.set(path, origValue); - } - }; + if (_.isUndefined(origValue)) { + this.reset(path); + } else { + this.set(path, origValue); + } + }; - PersistedState.prototype.getChanges = function () { - return _.cloneDeep(this._changedState); - }; + PersistedState.prototype.getChanges = function () { + return _.cloneDeep(this._changedState); + }; - PersistedState.prototype.toJSON = function () { - return this.get(); - }; + PersistedState.prototype.toJSON = function () { + return this.get(); + }; - PersistedState.prototype.toString = function () { - return JSON.stringify(this.toJSON()); - }; + PersistedState.prototype.toString = function () { + return JSON.stringify(this.toJSON()); + }; - PersistedState.prototype.fromString = function (input) { - return this.set(JSON.parse(input)); - }; + PersistedState.prototype.fromString = function (input) { + return this.set(JSON.parse(input)); + }; - PersistedState.prototype._getIndex = function (key) { - if (_.isUndefined(key)) return this._path; - return (this._path || []).concat(toPath(key)); - }; + PersistedState.prototype._getIndex = function (key) { + if (_.isUndefined(key)) return this._path; + return (this._path || []).concat(toPath(key)); + }; - PersistedState.prototype._getPartialIndex = function (key) { - var keyPath = this._getIndex(key); - return keyPath.slice(this._path.length); - }; + PersistedState.prototype._getPartialIndex = function (key) { + var keyPath = this._getIndex(key); + return keyPath.slice(this._path.length); + }; - PersistedState.prototype._cleanPath = function (path, stateTree) { - var partialPath = this._getPartialIndex(path); - var remove = true; + PersistedState.prototype._cleanPath = function (path, stateTree) { + var partialPath = this._getPartialIndex(path); + var remove = true; - // recursively delete value tree, when no other keys exist - while (partialPath.length > 0) { - var lastKey = partialPath.splice(partialPath.length - 1, 1)[0]; - var statePath = this._path.concat(partialPath); - var stateVal = statePath.length > 0 ? _.get(stateTree, statePath) : stateTree; + // recursively delete value tree, when no other keys exist + while (partialPath.length > 0) { + var lastKey = partialPath.splice(partialPath.length - 1, 1)[0]; + var statePath = this._path.concat(partialPath); + var stateVal = statePath.length > 0 ? _.get(stateTree, statePath) : stateTree; - // if stateVal isn't an object, do nothing - if (!_.isPlainObject(stateVal)) return; + // if stateVal isn't an object, do nothing + if (!_.isPlainObject(stateVal)) return; - if (remove) delete stateVal[lastKey]; - if (Object.keys(stateVal).length > 0) remove = false; - } - }; + if (remove) delete stateVal[lastKey]; + if (Object.keys(stateVal).length > 0) remove = false; + } + }; - PersistedState.prototype._getDefault = function () { - var def = (this._hasPath()) ? undefined : {}; - return (this._parent ? this.get() : def); - }; + PersistedState.prototype._getDefault = function () { + var def = (this._hasPath()) ? undefined : {}; + return (this._parent ? this.get() : def); + }; - PersistedState.prototype._setPath = function (path) { - var isString = _.isString(path); - var isArray = _.isArray(path); + PersistedState.prototype._setPath = function (path) { + var isString = _.isString(path); + var isArray = _.isArray(path); - if (!isString && !isArray) return []; - return (isString) ? [this._getIndex(path)] : path; - }; + if (!isString && !isArray) return []; + return (isString) ? [this._getIndex(path)] : path; + }; - PersistedState.prototype._setChild = function (path, value, parent) { - parent._defaultChildState = parent._defaultChildState || {}; - _.set(parent._defaultChildState, path, value); - }; + PersistedState.prototype._setChild = function (path, value, parent) { + parent._defaultChildState = parent._defaultChildState || {}; + _.set(parent._defaultChildState, path, value); + }; - PersistedState.prototype._hasPath = function () { - return this._path.length > 0; - }; + PersistedState.prototype._hasPath = function () { + return this._path.length > 0; + }; - PersistedState.prototype._get = function (key, def) { - // delegate to parent instance - if (this._parent) return this._parent._get(this._getIndex(key), def); + PersistedState.prototype._get = function (key, def) { + // delegate to parent instance + if (this._parent) return this._parent._get(this._getIndex(key), def); - // no path and no key, get the whole state - if (!this._hasPath() && _.isUndefined(key)) { - return this._mergedState; - } + // no path and no key, get the whole state + if (!this._hasPath() && _.isUndefined(key)) { + return this._mergedState; + } - return _.get(this._mergedState, this._getIndex(key), def); - }; + return _.get(this._mergedState, this._getIndex(key), def); + }; - PersistedState.prototype._set = function (key, value, silent, initialChildState) { - var self = this; - var stateChanged = false; - var initialState = !this._initialized; - var keyPath = this._getIndex(key); - var hasKeyPath = keyPath.length > 0; - - // if this is the initial state value, save value as the default - if (initialState) { - this._changedState = {}; - if (!this._hasPath() && _.isUndefined(key)) this._defaultState = value; - else this._defaultState = _.set({}, keyPath, value); - } + PersistedState.prototype._set = function (key, value, silent, initialChildState) { + var self = this; + var stateChanged = false; + var initialState = !this._initialized; + var keyPath = this._getIndex(key); + var hasKeyPath = keyPath.length > 0; + + // if this is the initial state value, save value as the default + if (initialState) { + this._changedState = {}; + if (!this._hasPath() && _.isUndefined(key)) this._defaultState = value; + else this._defaultState = _.set({}, keyPath, value); + } - // delegate to parent instance, passing child's default value - if (this._parent) { - return this._parent._set(keyPath, value, silent, initialState); - } + // delegate to parent instance, passing child's default value + if (this._parent) { + return this._parent._set(keyPath, value, silent, initialState); + } - // everything in here affects only the parent state - if (!initialState) { - // no path and no key, set the whole state - if (!this._hasPath() && _.isUndefined(key)) { - // compare changedState and new state, emit an event when different - stateChanged = !_.isEqual(this._changedState, value); - if (!initialChildState) { - this._changedState = value; - this._mergedState = _.cloneDeep(value); - } - } else { - // check for changes at path, emit an event when different - var curVal = hasKeyPath ? this.get(keyPath) : this._mergedState; - stateChanged = !_.isEqual(curVal, value); - - if (!initialChildState) { - // arrays are merge by index, not desired - ensure they are replaced - if (_.isArray(_.get(this._mergedState, keyPath))) { - if (hasKeyPath) _.set(this._mergedState, keyPath, undefined); - else this._mergedState = undefined; - } - - if (hasKeyPath) _.set(this._changedState, keyPath, value); - else this._changedState = _.isPlainObject(value) ? value : {}; + // everything in here affects only the parent state + if (!initialState) { + // no path and no key, set the whole state + if (!this._hasPath() && _.isUndefined(key)) { + // compare changedState and new state, emit an event when different + stateChanged = !_.isEqual(this._changedState, value); + if (!initialChildState) { + this._changedState = value; + this._mergedState = _.cloneDeep(value); + } + } else { + // check for changes at path, emit an event when different + var curVal = hasKeyPath ? this.get(keyPath) : this._mergedState; + stateChanged = !_.isEqual(curVal, value); + + if (!initialChildState) { + // arrays are merge by index, not desired - ensure they are replaced + if (_.isArray(_.get(this._mergedState, keyPath))) { + if (hasKeyPath) _.set(this._mergedState, keyPath, undefined); + else this._mergedState = undefined; } + + if (hasKeyPath) _.set(this._changedState, keyPath, value); + else this._changedState = _.isPlainObject(value) ? value : {}; } } + } - // update the merged state value - var targetObj = this._mergedState || _.cloneDeep(this._defaultState); - var sourceObj = _.merge({}, this._defaultChildState, this._changedState); - - // handler arguments are (targetValue, sourceValue, key, target, source) - var mergeMethod = function (targetValue, sourceValue, mergeKey) { - // if not initial state, skip default merge method (ie. return value, see note below) - if (!initialState && !initialChildState && _.isEqual(keyPath, self._getIndex(mergeKey))) { - // use the sourceValue or fall back to targetValue - return !_.isUndefined(sourceValue) ? sourceValue : targetValue; - } - }; + // update the merged state value + var targetObj = this._mergedState || _.cloneDeep(this._defaultState); + var sourceObj = _.merge({}, this._defaultChildState, this._changedState); - // If `mergeMethod` is provided it is invoked to produce the merged values of the - // destination and source properties. - // If `mergeMethod` returns `undefined` the default merging method is used - this._mergedState = _.merge(targetObj, sourceObj, mergeMethod); + // handler arguments are (targetValue, sourceValue, key, target, source) + var mergeMethod = function (targetValue, sourceValue, mergeKey) { + // if not initial state, skip default merge method (ie. return value, see note below) + if (!initialState && !initialChildState && _.isEqual(keyPath, self._getIndex(mergeKey))) { + // use the sourceValue or fall back to targetValue + return !_.isUndefined(sourceValue) ? sourceValue : targetValue; + } + }; - // sanity check; verify that there are actually changes - if (_.isEqual(this._mergedState, this._defaultState)) this._changedState = {}; + // If `mergeMethod` is provided it is invoked to produce the merged values of the + // destination and source properties. + // If `mergeMethod` returns `undefined` the default merging method is used + this._mergedState = _.merge(targetObj, sourceObj, mergeMethod); - if (!silent && stateChanged) this.emit('change'); + // sanity check; verify that there are actually changes + if (_.isEqual(this._mergedState, this._defaultState)) this._changedState = {}; - return this; - }; + if (!silent && stateChanged) this.emit('change'); - return PersistedState; + return this; }; -}); \ No newline at end of file + + return PersistedState; +}; \ No newline at end of file diff --git a/src/ui/public/private/private.js b/src/ui/public/private/private.js index faa99643e0a7c1..548cb3608aa68e 100644 --- a/src/ui/public/private/private.js +++ b/src/ui/public/private/private.js @@ -1,191 +1,189 @@ import _ from 'lodash'; -define(function (require) { - /** - * # `Private()` - * Private module loader, used to merge angular and require js dependency styles - * by allowing a require.js module to export a single provider function that will - * create a value used within an angular application. This provider can declare - * angular dependencies by listing them as arguments, and can be require additional - * Private modules. - * - * ## Define a private module provider: - * ```js - * define(function (require) { - * return function PingProvider($http) { - * this.ping = function () { - * return $http.head('/health-check'); - * }; - * }; - * }); - * ``` - * - * ## Require a private module: - * ```js - * define(function (require) { - * return function ServerHealthProvider(Private, Promise) { - * var ping = Private(require('ui/ping')); - * return { - * check: Promise.method(function () { - * var attempts = 0; - * return (function attempt() { - * attempts += 1; - * return ping.ping() - * .catch(function (err) { - * if (attempts < 3) return attempt(); - * }) - * }()) - * .then(function () { - * return true; - * }) - * .catch(function () { - * return false; - * }); - * }) - * } - * }; - * }); - * ``` - * - * # `Private.stub(provider, newInstance)` - * `Private.stub()` replaces the instance of a module with another value. This is all we have needed until now. - * - * ```js - * beforeEach(inject(function ($injector, Private) { - * Private.stub( - * // since this module just exports a function, we need to change - * // what Private returns in order to modify it's behavior - * require('ui/agg_response/hierarchical/_build_split'), - * sinon.stub().returns(fakeSplit) - * ); - * })); - * ``` - * - * # `Private.swap(oldProvider, newProvider)` - * This new method does an 1-for-1 swap of module providers, unlike `stub()` which replaces a modules instance. - * Pass the module you want to swap out, and the one it should be replaced with, then profit. - * - * Note: even though this example shows `swap()` being called in a config - * function, it can be called from anywhere. It is particularly useful - * in this scenario though. - * - * ```js - * beforeEach(module('kibana', function (PrivateProvider) { - * PrivateProvider.swap( - * // since the courier is required automatically before the tests are loaded, - * // we can't stub it's internal components unless we do so before the - * // application starts. This is why angular has config functions - * require('ui/courier/_redirect_when_missing'), - * function StubbedRedirectProvider($decorate) { - * // $decorate is a function that will instantiate the original module when called - * return sinon.spy($decorate()); - * } - * ); - * })); - * ``` - * - * @param {[type]} prov [description] - */ - - - var nextId = _.partial(_.uniqueId, 'privateProvider#'); - - function name(fn) { - return fn.name || fn.toString().split('\n').shift(); - } +/** + * # `Private()` + * Private module loader, used to merge angular and require js dependency styles + * by allowing a require.js module to export a single provider function that will + * create a value used within an angular application. This provider can declare + * angular dependencies by listing them as arguments, and can be require additional + * Private modules. + * + * ## Define a private module provider: + * ```js + * define(function (require) { + * return function PingProvider($http) { + * this.ping = function () { + * return $http.head('/health-check'); + * }; + * }; + * }); + * ``` + * + * ## Require a private module: + * ```js + * define(function (require) { + * return function ServerHealthProvider(Private, Promise) { + * var ping = Private(require('ui/ping')); + * return { + * check: Promise.method(function () { + * var attempts = 0; + * return (function attempt() { + * attempts += 1; + * return ping.ping() + * .catch(function (err) { + * if (attempts < 3) return attempt(); + * }) + * }()) + * .then(function () { + * return true; + * }) + * .catch(function () { + * return false; + * }); + * }) + * } + * }; + * }); + * ``` + * + * # `Private.stub(provider, newInstance)` + * `Private.stub()` replaces the instance of a module with another value. This is all we have needed until now. + * + * ```js + * beforeEach(inject(function ($injector, Private) { + * Private.stub( + * // since this module just exports a function, we need to change + * // what Private returns in order to modify it's behavior + * require('ui/agg_response/hierarchical/_build_split'), + * sinon.stub().returns(fakeSplit) + * ); + * })); + * ``` + * + * # `Private.swap(oldProvider, newProvider)` + * This new method does an 1-for-1 swap of module providers, unlike `stub()` which replaces a modules instance. + * Pass the module you want to swap out, and the one it should be replaced with, then profit. + * + * Note: even though this example shows `swap()` being called in a config + * function, it can be called from anywhere. It is particularly useful + * in this scenario though. + * + * ```js + * beforeEach(module('kibana', function (PrivateProvider) { + * PrivateProvider.swap( + * // since the courier is required automatically before the tests are loaded, + * // we can't stub it's internal components unless we do so before the + * // application starts. This is why angular has config functions + * require('ui/courier/_redirect_when_missing'), + * function StubbedRedirectProvider($decorate) { + * // $decorate is a function that will instantiate the original module when called + * return sinon.spy($decorate()); + * } + * ); + * })); + * ``` + * + * @param {[type]} prov [description] + */ + + +var nextId = _.partial(_.uniqueId, 'privateProvider#'); + +function name(fn) { + return fn.name || fn.toString().split('\n').shift(); +} + +require('ui/modules').get('kibana') +.provider('Private', function () { + var provider = this; + + // one cache/swaps per Provider + var cache = {}; + var swaps = {}; + + // return the uniq id for this function + function identify(fn) { + if (typeof fn !== 'function') { + throw new TypeError('Expected private module "' + fn + '" to be a function'); + } - require('ui/modules').get('kibana') - .provider('Private', function () { - var provider = this; + if (fn.$$id) return fn.$$id; + else return (fn.$$id = nextId()); + } - // one cache/swaps per Provider - var cache = {}; - var swaps = {}; + provider.stub = function (fn, instance) { + cache[identify(fn)] = instance; + return instance; + }; - // return the uniq id for this function - function identify(fn) { - if (typeof fn !== 'function') { - throw new TypeError('Expected private module "' + fn + '" to be a function'); - } + provider.swap = function (fn, prov) { + var id = identify(fn); + swaps[id] = prov; + }; - if (fn.$$id) return fn.$$id; - else return (fn.$$id = nextId()); - } + provider.$get = ['$injector', function PrivateFactory($injector) { - provider.stub = function (fn, instance) { - cache[identify(fn)] = instance; - return instance; + // prevent circular deps by tracking where we came from + var privPath = []; + var pathToString = function () { + return privPath.map(name).join(' -> '); }; - provider.swap = function (fn, prov) { - var id = identify(fn); - swaps[id] = prov; - }; + // call a private provider and return the instance it creates + function instantiate(prov, locals) { + if (~privPath.indexOf(prov)) { + throw new Error( + 'Circular refrence to "' + name(prov) + '"' + + ' found while resolving private deps: ' + pathToString() + ); + } - provider.$get = ['$injector', function PrivateFactory($injector) { + privPath.push(prov); - // prevent circular deps by tracking where we came from - var privPath = []; - var pathToString = function () { - return privPath.map(name).join(' -> '); - }; + var context = {}; + var instance = $injector.invoke(prov, context, locals); + if (!_.isObject(instance)) instance = context; - // call a private provider and return the instance it creates - function instantiate(prov, locals) { - if (~privPath.indexOf(prov)) { - throw new Error( - 'Circular refrence to "' + name(prov) + '"' + - ' found while resolving private deps: ' + pathToString() - ); - } + privPath.pop(); + return instance; + } - privPath.push(prov); + // retrieve an instance from cache or create and store on + function get(id, prov, $delegateId, $delegateProv) { + if (cache[id]) return cache[id]; - var context = {}; - var instance = $injector.invoke(prov, context, locals); - if (!_.isObject(instance)) instance = context; + var instance; - privPath.pop(); - return instance; + if ($delegateId != null && $delegateProv != null) { + instance = instantiate(prov, { + $decorate: _.partial(get, $delegateId, $delegateProv) + }); + } else { + instance = instantiate(prov); } - // retrieve an instance from cache or create and store on - function get(id, prov, $delegateId, $delegateProv) { - if (cache[id]) return cache[id]; + return (cache[id] = instance); + } - var instance; + // main api, get the appropriate instance for a provider + function Private(prov) { + var id = identify(prov); + var $delegateId; + var $delegateProv; - if ($delegateId != null && $delegateProv != null) { - instance = instantiate(prov, { - $decorate: _.partial(get, $delegateId, $delegateProv) - }); - } else { - instance = instantiate(prov); - } + if (swaps[id]) { + $delegateId = id; + $delegateProv = prov; - return (cache[id] = instance); + prov = swaps[$delegateId]; + id = identify(prov); } - // main api, get the appropriate instance for a provider - function Private(prov) { - var id = identify(prov); - var $delegateId; - var $delegateProv; - - if (swaps[id]) { - $delegateId = id; - $delegateProv = prov; - - prov = swaps[$delegateId]; - id = identify(prov); - } - - return get(id, prov, $delegateId, $delegateProv); - } + return get(id, prov, $delegateId, $delegateProv); + } - Private.stub = provider.stub; - Private.swap = provider.swap; + Private.stub = provider.stub; + Private.swap = provider.swap; - return Private; - }]; - }); + return Private; + }]; }); diff --git a/src/ui/public/promises/promises.js b/src/ui/public/promises/promises.js index 9e367fbb270e73..c5d578ce774956 100644 --- a/src/ui/public/promises/promises.js +++ b/src/ui/public/promises/promises.js @@ -1,169 +1,167 @@ import _ from 'lodash'; -define(function (require) { - var module = require('ui/modules').get('kibana'); +var module = require('ui/modules').get('kibana'); - // Provides a tiny subset of the excelent API from - // bluebird, reimplemented using the $q service - module.service('Promise', function ($q, $timeout) { - function Promise(fn) { - if (typeof this === 'undefined') throw new Error('Promise constructor must be called with "new"'); +// Provides a tiny subset of the excelent API from +// bluebird, reimplemented using the $q service +module.service('Promise', function ($q, $timeout) { + function Promise(fn) { + if (typeof this === 'undefined') throw new Error('Promise constructor must be called with "new"'); - var defer = $q.defer(); - try { - fn(defer.resolve, defer.reject); - } catch (e) { - defer.reject(e); - } - return defer.promise; + var defer = $q.defer(); + try { + fn(defer.resolve, defer.reject); + } catch (e) { + defer.reject(e); } + return defer.promise; + } - Promise.all = Promise.props = $q.all; - Promise.resolve = function (val) { - var defer = $q.defer(); - defer.resolve(val); - return defer.promise; + Promise.all = Promise.props = $q.all; + Promise.resolve = function (val) { + var defer = $q.defer(); + defer.resolve(val); + return defer.promise; + }; + Promise.reject = function (reason) { + var defer = $q.defer(); + defer.reject(reason); + return defer.promise; + }; + Promise.cast = $q.when; + Promise.defer = $q.defer; + Promise.delay = function (ms) { + return $timeout(_.noop, ms); + }; + Promise.method = function (fn) { + return function () { + var args = Array.prototype.slice.call(arguments); + return Promise.try(fn, args, this); }; - Promise.reject = function (reason) { - var defer = $q.defer(); - defer.reject(reason); - return defer.promise; - }; - Promise.cast = $q.when; - Promise.defer = $q.defer; - Promise.delay = function (ms) { - return $timeout(_.noop, ms); - }; - Promise.method = function (fn) { - return function () { - var args = Array.prototype.slice.call(arguments); - return Promise.try(fn, args, this); - }; - }; - Promise.nodeify = function (promise, cb) { - promise.then(function (val) { - cb(void 0, val); - }, cb); - }; - Promise.map = function (arr, fn) { - return Promise.all(arr.map(function (i, el, list) { - return Promise.try(fn, [i, el, list]); - })); - }; - Promise.each = function (arr, fn) { - let queue = arr.slice(0); - let i = 0; - return (function next() { - if (!queue.length) return arr; - return Promise.try(fn, [arr.shift(), i++]).then(next); - }()); - }; - Promise.is = function (obj) { - // $q doesn't create instances of any constructor, promises are just objects with a then function - // https://github.com/angular/angular.js/blob/58f5da86645990ef984353418cd1ed83213b111e/src/ng/q.js#L335 - return obj && typeof obj.then === 'function'; - }; - Promise.halt = _.once(function () { - var promise = new Promise(); - promise.then = _.constant(promise); - promise.catch = _.constant(promise); - return promise; - }); - Promise.try = function (fn, args, ctx) { - if (typeof fn !== 'function') { - return Promise.reject('fn must be a function'); - } + }; + Promise.nodeify = function (promise, cb) { + promise.then(function (val) { + cb(void 0, val); + }, cb); + }; + Promise.map = function (arr, fn) { + return Promise.all(arr.map(function (i, el, list) { + return Promise.try(fn, [i, el, list]); + })); + }; + Promise.each = function (arr, fn) { + let queue = arr.slice(0); + let i = 0; + return (function next() { + if (!queue.length) return arr; + return Promise.try(fn, [arr.shift(), i++]).then(next); + }()); + }; + Promise.is = function (obj) { + // $q doesn't create instances of any constructor, promises are just objects with a then function + // https://github.com/angular/angular.js/blob/58f5da86645990ef984353418cd1ed83213b111e/src/ng/q.js#L335 + return obj && typeof obj.then === 'function'; + }; + Promise.halt = _.once(function () { + var promise = new Promise(); + promise.then = _.constant(promise); + promise.catch = _.constant(promise); + return promise; + }); + Promise.try = function (fn, args, ctx) { + if (typeof fn !== 'function') { + return Promise.reject('fn must be a function'); + } - var value; + var value; - if (_.isArray(args)) { - try { value = fn.apply(ctx, args); } - catch (e) { return Promise.reject(e); } - } else { - try { value = fn.call(ctx, args); } - catch (e) { return Promise.reject(e); } - } + if (_.isArray(args)) { + try { value = fn.apply(ctx, args); } + catch (e) { return Promise.reject(e); } + } else { + try { value = fn.call(ctx, args); } + catch (e) { return Promise.reject(e); } + } - return Promise.resolve(value); - }; - Promise.fromNode = function (takesCbFn) { - return new Promise(function (resolve, reject) { - takesCbFn(function (err, ...results) { - if (err) reject(err); - else if (results.length > 1) resolve(results); - else resolve(results[0]); - }); + return Promise.resolve(value); + }; + Promise.fromNode = function (takesCbFn) { + return new Promise(function (resolve, reject) { + takesCbFn(function (err, ...results) { + if (err) reject(err); + else if (results.length > 1) resolve(results); + else resolve(results[0]); }); - }; + }); + }; - return Promise; - }); + return Promise; +}); - module.factory('PromiseEmitter', function (Promise) { - /** - * Create a function that uses an "event" like pattern for promises. - * - * When a single argument is passed, this will behave just like calling `new Promise(fn)`, - * but when a second arguemnt is passed, the fn will be used to recreate a promise eveytime - * the previous is resolved. The following example demonstrates what this allows: - * - * When using `new Promise()` to create a promise, you can allow consumers to be - * notified of a single change: - * ``` - * obj.onUpdate= function() { - * // NOTE: we are NOT using `new Promise.emitter()` here - * return new Promise(function (resolve, reject) { - * // wait for the update... - * resolve(); - * }); - * } - * ``` - * - * And the consumer can ask for continual updates be re-invoking the `.onChange()` method - * every time a change occurs: - * ``` - * obj.onChange().then(function useChanges(change) { - * // use changes... - * // then register to receive notifcation of the next change - * obj.onChange().then(useChanges); - * }); - * ``` - * - * But by defining obj.onChange using `new Promise.emitter`: - * ``` - * obj.onChange = function (handler) { - * return new Promise.emitter(function (resolve, reject) { - * // wait for changes... - * resolve(); - * }); - * }; - * ``` - * - * The consumer can now simplify their code by passing the handler directly to `.onUpdate()` - * and the boilerplate of recalling `.onUpdate()` will be handled for them. - * ``` - * obj.onChanges(function useChanges(changes) { - * // use changes... - * }); - * ``` - * - * @param {Function} fn - Used to init the promise, and call either - * reject or resolve (passed as args) - * @param {Function} handler - A function that will be called every - * time this promise is resolved - * - * @return {Promise} - */ - function PromiseEmitter(fn, handler) { - var prom = new Promise(fn); +module.factory('PromiseEmitter', function (Promise) { + /** + * Create a function that uses an "event" like pattern for promises. + * + * When a single argument is passed, this will behave just like calling `new Promise(fn)`, + * but when a second arguemnt is passed, the fn will be used to recreate a promise eveytime + * the previous is resolved. The following example demonstrates what this allows: + * + * When using `new Promise()` to create a promise, you can allow consumers to be + * notified of a single change: + * ``` + * obj.onUpdate= function() { + * // NOTE: we are NOT using `new Promise.emitter()` here + * return new Promise(function (resolve, reject) { + * // wait for the update... + * resolve(); + * }); + * } + * ``` + * + * And the consumer can ask for continual updates be re-invoking the `.onChange()` method + * every time a change occurs: + * ``` + * obj.onChange().then(function useChanges(change) { + * // use changes... + * // then register to receive notifcation of the next change + * obj.onChange().then(useChanges); + * }); + * ``` + * + * But by defining obj.onChange using `new Promise.emitter`: + * ``` + * obj.onChange = function (handler) { + * return new Promise.emitter(function (resolve, reject) { + * // wait for changes... + * resolve(); + * }); + * }; + * ``` + * + * The consumer can now simplify their code by passing the handler directly to `.onUpdate()` + * and the boilerplate of recalling `.onUpdate()` will be handled for them. + * ``` + * obj.onChanges(function useChanges(changes) { + * // use changes... + * }); + * ``` + * + * @param {Function} fn - Used to init the promise, and call either + * reject or resolve (passed as args) + * @param {Function} handler - A function that will be called every + * time this promise is resolved + * + * @return {Promise} + */ + function PromiseEmitter(fn, handler) { + var prom = new Promise(fn); - if (!handler) return prom; + if (!handler) return prom; - return prom.then(handler).then(function recurse() { - return new PromiseEmitter(fn, handler); - }); - } + return prom.then(handler).then(function recurse() { + return new PromiseEmitter(fn, handler); + }); + } - return PromiseEmitter; - }); + return PromiseEmitter; }); diff --git a/src/ui/public/reflow_watcher/reflow_watcher.js b/src/ui/public/reflow_watcher/reflow_watcher.js index 5a8cd3d3ca7d79..6a6bcb4aee1e16 100644 --- a/src/ui/public/reflow_watcher/reflow_watcher.js +++ b/src/ui/public/reflow_watcher/reflow_watcher.js @@ -2,68 +2,66 @@ import angular from 'angular'; import $ from 'jquery'; import _ from 'lodash'; import EventsProvider from 'ui/events'; -define(function (require) { - return function ReflowWatcherService(Private, $rootScope, $http) { +export default function ReflowWatcherService(Private, $rootScope, $http) { - var EventEmitter = Private(EventsProvider); - var $body = $(document.body); - var $window = $(window); + var EventEmitter = Private(EventsProvider); + var $body = $(document.body); + var $window = $(window); - var MOUSE_EVENTS = 'mouseup'; - var WINDOW_EVENTS = 'resize'; + var MOUSE_EVENTS = 'mouseup'; + var WINDOW_EVENTS = 'resize'; - _.class(ReflowWatcher).inherits(EventEmitter); - /** - * Watches global activity which might hint at a change in the content, which - * in turn provides a hint to resizers that they should check their size - */ - function ReflowWatcher() { - ReflowWatcher.Super.call(this); + _.class(ReflowWatcher).inherits(EventEmitter); + /** + * Watches global activity which might hint at a change in the content, which + * in turn provides a hint to resizers that they should check their size + */ + function ReflowWatcher() { + ReflowWatcher.Super.call(this); - // bound version of trigger that can be used as a handler - this.trigger = _.bind(this.trigger, this); - this._emitReflow = _.bind(this._emitReflow, this); + // bound version of trigger that can be used as a handler + this.trigger = _.bind(this.trigger, this); + this._emitReflow = _.bind(this._emitReflow, this); - // list of functions to call that will unbind our watchers - this._unwatchers = [ - $rootScope.$watchCollection(function () { - return $http.pendingRequests; - }, this.trigger) - ]; + // list of functions to call that will unbind our watchers + this._unwatchers = [ + $rootScope.$watchCollection(function () { + return $http.pendingRequests; + }, this.trigger) + ]; - $body.on(MOUSE_EVENTS, this.trigger); - $window.on(WINDOW_EVENTS, this.trigger); - } + $body.on(MOUSE_EVENTS, this.trigger); + $window.on(WINDOW_EVENTS, this.trigger); + } - /** - * Simply emit reflow, but in a way that can be bound and passed to - * other functions. Using _.bind caused extra arguments to be added, and - * then emitted to other places. No Bueno - * - * @return {void} - */ - ReflowWatcher.prototype._emitReflow = function () { - this.emit('reflow'); - }; - - /** - * Emit the "reflow" event in the next tick of the digest cycle - * @return {void} - */ - ReflowWatcher.prototype.trigger = function () { - $rootScope.$evalAsync(this._emitReflow); - }; + /** + * Simply emit reflow, but in a way that can be bound and passed to + * other functions. Using _.bind caused extra arguments to be added, and + * then emitted to other places. No Bueno + * + * @return {void} + */ + ReflowWatcher.prototype._emitReflow = function () { + this.emit('reflow'); + }; - /** - * Signal to the ReflowWatcher that it should clean up it's listeners - * @return {void} - */ - ReflowWatcher.prototype.destroy = function () { - $body.off(MOUSE_EVENTS, this.trigger); - $window.off(WINDOW_EVENTS, this.trigger); - _.callEach(this._unwatchers); - }; + /** + * Emit the "reflow" event in the next tick of the digest cycle + * @return {void} + */ + ReflowWatcher.prototype.trigger = function () { + $rootScope.$evalAsync(this._emitReflow); + }; - return new ReflowWatcher(); + /** + * Signal to the ReflowWatcher that it should clean up it's listeners + * @return {void} + */ + ReflowWatcher.prototype.destroy = function () { + $body.off(MOUSE_EVENTS, this.trigger); + $window.off(WINDOW_EVENTS, this.trigger); + _.callEach(this._unwatchers); }; -}); + + return new ReflowWatcher(); +}; diff --git a/src/ui/public/registry/_registry.js b/src/ui/public/registry/_registry.js index 2fc7505853fa6b..43deb2f2e51cf9 100644 --- a/src/ui/public/registry/_registry.js +++ b/src/ui/public/registry/_registry.js @@ -1,92 +1,90 @@ import _ from 'lodash'; import IndexedArray from 'ui/IndexedArray'; import RegistryVisTypesProvider from 'ui/registry/vis_types'; -define(function (require) { - var notPropsOptNames = IndexedArray.OPT_NAMES.concat('constructor'); +var notPropsOptNames = IndexedArray.OPT_NAMES.concat('constructor'); + +/** + * Create a registry, which is just a Private module provider. + * + * The registry allows modifying the values it will provide + * using the #register method. + * + * To access these modules, pass the registry to the Private + * module loader. + * + * # Examples + * + * + register a module + * ```js + * var registry = require('ui/registry/vis_types'); + * registry.add(function InjectablePrivateModule($http, Promise) { + * ... + * }) + * ``` + * + * + get all registered modules + * ```js + * var visTypes = Private(RegistryVisTypesProvider); + * ``` + * + * + * @param {object} [spec] - an object describing the properties of + * the registry to create. Any property specified + * that is not listed below will be mixed into the + * final IndexedArray object. + * + * # init + * @param {Function} [spec.constructor] - an injectable function that is called when + * the registry is first instanciated by the app. + * + * # IndexedArray params + * @param {array[String]} [spec.index] - passed to the IndexedArray constructor + * @param {array[String]} [spec.group] - passed to the IndexedArray constructor + * @param {array[String]} [spec.order] - passed to the IndexedArray constructor + * @param {array[String]} [spec.initialSet] - passed to the IndexedArray constructor + * @param {array[String]} [spec.immutable] - passed to the IndexedArray constructor + * + * @return {[type]} [description] + */ +export default function createRegistry(spec) { + spec = spec || {}; + + var constructor = _.has(spec, 'constructor') && spec.constructor; + var iaOpts = _.defaults(_.pick(spec, IndexedArray.OPT_NAMES), { index: ['name'] }); + var props = _.omit(spec, notPropsOptNames); + var providers = []; /** - * Create a registry, which is just a Private module provider. - * - * The registry allows modifying the values it will provide - * using the #register method. - * - * To access these modules, pass the registry to the Private - * module loader. - * - * # Examples - * - * + register a module - * ```js - * var registry = require('ui/registry/vis_types'); - * registry.add(function InjectablePrivateModule($http, Promise) { - * ... - * }) - * ``` - * - * + get all registered modules - * ```js - * var visTypes = Private(RegistryVisTypesProvider); - * ``` - * + * This is the Private module that will be instanciated by * - * @param {object} [spec] - an object describing the properties of - * the registry to create. Any property specified - * that is not listed below will be mixed into the - * final IndexedArray object. - * - * # init - * @param {Function} [spec.constructor] - an injectable function that is called when - * the registry is first instanciated by the app. - * - * # IndexedArray params - * @param {array[String]} [spec.index] - passed to the IndexedArray constructor - * @param {array[String]} [spec.group] - passed to the IndexedArray constructor - * @param {array[String]} [spec.order] - passed to the IndexedArray constructor - * @param {array[String]} [spec.initialSet] - passed to the IndexedArray constructor - * @param {array[String]} [spec.immutable] - passed to the IndexedArray constructor - * - * @return {[type]} [description] + * @tag:PrivateModule + * @return {IndexedArray} - an indexed array containing the values + * that were registered, the registry spec + * defines how things will be indexed. */ - return function createRegistry(spec) { - spec = spec || {}; - - var constructor = _.has(spec, 'constructor') && spec.constructor; - var iaOpts = _.defaults(_.pick(spec, IndexedArray.OPT_NAMES), { index: ['name'] }); - var props = _.omit(spec, notPropsOptNames); - var providers = []; + var registry = function (Private, $injector) { + // index all of the modules + iaOpts.initialSet = providers.map(Private); + var modules = new IndexedArray(iaOpts); - /** - * This is the Private module that will be instanciated by - * - * @tag:PrivateModule - * @return {IndexedArray} - an indexed array containing the values - * that were registered, the registry spec - * defines how things will be indexed. - */ - var registry = function (Private, $injector) { - // index all of the modules - iaOpts.initialSet = providers.map(Private); - var modules = new IndexedArray(iaOpts); + // mixin other props + _.assign(modules, props); - // mixin other props - _.assign(modules, props); + // construct + if (constructor) { + modules = $injector.invoke(constructor, modules) || modules; + } - // construct - if (constructor) { - modules = $injector.invoke(constructor, modules) || modules; - } - - return modules; - }; - - registry.displayName = '[registry ' + props.name + ']'; + return modules; + }; - registry.register = function (privateModule) { - providers.push(privateModule); - return registry; - }; + registry.displayName = '[registry ' + props.name + ']'; + registry.register = function (privateModule) { + providers.push(privateModule); return registry; }; -}); + return registry; +}; + diff --git a/src/ui/public/registry/chrome_nav_controls.js b/src/ui/public/registry/chrome_nav_controls.js index 77093938ac8049..dd46988a79e9ea 100644 --- a/src/ui/public/registry/chrome_nav_controls.js +++ b/src/ui/public/registry/chrome_nav_controls.js @@ -1,6 +1,4 @@ -define(function (require) { - return require('ui/registry/_registry')({ - name: 'chromeNavControls', - order: ['order'] - }); +export default require('ui/registry/_registry')({ + name: 'chromeNavControls', + order: ['order'] }); diff --git a/src/ui/public/registry/field_formats.js b/src/ui/public/registry/field_formats.js index 7878b69b8f6fa6..96ac468b605cd4 100644 --- a/src/ui/public/registry/field_formats.js +++ b/src/ui/public/registry/field_formats.js @@ -1,89 +1,87 @@ import _ from 'lodash'; -define(function (require) { - return require('ui/registry/_registry')({ - name: 'fieldFormats', - index: ['id'], - group: ['fieldType'], +export default require('ui/registry/_registry')({ + name: 'fieldFormats', + index: ['id'], + group: ['fieldType'], - constructor: function (config, $rootScope) { - var self = this; - var defaultMap; - - function init() { - parseDefaultTypeMap(); - $rootScope.$on('init:config', parseDefaultTypeMap); - $rootScope.$on('change:config.format:defaultTypeMap', parseDefaultTypeMap); - } + constructor: function (config, $rootScope) { + var self = this; + var defaultMap; + function init() { + parseDefaultTypeMap(); + $rootScope.$on('init:config', parseDefaultTypeMap); + $rootScope.$on('change:config.format:defaultTypeMap', parseDefaultTypeMap); + } - /** - * Get the id of the default type for this field type - * using the format:defaultTypeMap config map - * - * @param {String} fieldType - the field type - * @return {String} - */ - self.getDefaultConfig = function (fieldType) { - return defaultMap[fieldType] || defaultMap._default_; - }; - /** - * Get a FieldFormat type (class) by it's id. - * - * @param {String} formatId - the format id - * @return {Function} - */ - self.getType = function (formatId) { - return self.byId[formatId]; - }; + /** + * Get the id of the default type for this field type + * using the format:defaultTypeMap config map + * + * @param {String} fieldType - the field type + * @return {String} + */ + self.getDefaultConfig = function (fieldType) { + return defaultMap[fieldType] || defaultMap._default_; + }; - /** - * Get the default FieldFormat type (class) for - * a field type, using the format:defaultTypeMap. - * - * @param {String} fieldType - * @return {Function} - */ - self.getDefaultType = function (fieldType) { - return self.byId[self.getDefaultConfig(fieldType).id]; - }; + /** + * Get a FieldFormat type (class) by it's id. + * + * @param {String} formatId - the format id + * @return {Function} + */ + self.getType = function (formatId) { + return self.byId[formatId]; + }; - /** - * Get the singleton instance of the FieldFormat type by it's id. - * - * @param {String} formatId - * @return {FieldFormat} - */ - self.getInstance = _.memoize(function (formatId) { - var FieldFormat = self.byId[formatId]; - return new FieldFormat(); - }); + /** + * Get the default FieldFormat type (class) for + * a field type, using the format:defaultTypeMap. + * + * @param {String} fieldType + * @return {Function} + */ + self.getDefaultType = function (fieldType) { + return self.byId[self.getDefaultConfig(fieldType).id]; + }; - /** - * Get the default fieldFormat instance for a field format. - * - * @param {String} fieldType - * @return {FieldFormat} - */ - self.getDefaultInstance = _.memoize(function (fieldType) { - var conf = self.getDefaultConfig(fieldType); - var FieldFormat = self.byId[conf.id]; - return new FieldFormat(conf.params); - }); + /** + * Get the singleton instance of the FieldFormat type by it's id. + * + * @param {String} formatId + * @return {FieldFormat} + */ + self.getInstance = _.memoize(function (formatId) { + var FieldFormat = self.byId[formatId]; + return new FieldFormat(); + }); + /** + * Get the default fieldFormat instance for a field format. + * + * @param {String} fieldType + * @return {FieldFormat} + */ + self.getDefaultInstance = _.memoize(function (fieldType) { + var conf = self.getDefaultConfig(fieldType); + var FieldFormat = self.byId[conf.id]; + return new FieldFormat(conf.params); + }); - function parseDefaultTypeMap() { - defaultMap = config.get('format:defaultTypeMap'); - _.forOwn(self, function (fn) { - if (_.isFunction(fn) && fn.cache) { - // clear all memoize caches - fn.cache = new _.memoize.Cache(); - } - }); - } - init(); + function parseDefaultTypeMap() { + defaultMap = config.get('format:defaultTypeMap'); + _.forOwn(self, function (fn) { + if (_.isFunction(fn) && fn.cache) { + // clear all memoize caches + fn.cache = new _.memoize.Cache(); + } + }); } - }); + + init(); + } }); diff --git a/src/ui/public/registry/navbar_extensions.js b/src/ui/public/registry/navbar_extensions.js index 085f85771faa45..291783fedb5047 100644 --- a/src/ui/public/registry/navbar_extensions.js +++ b/src/ui/public/registry/navbar_extensions.js @@ -1,8 +1,6 @@ -define(function (require) { - return require('ui/registry/_registry')({ - name: 'navbarExtensions', - index: ['name'], - group: ['appName'], - order: ['order'] - }); +export default require('ui/registry/_registry')({ + name: 'navbarExtensions', + index: ['name'], + group: ['appName'], + order: ['order'] }); diff --git a/src/ui/public/registry/spy_modes.js b/src/ui/public/registry/spy_modes.js index 638d815e8362de..44c7782fd754cc 100644 --- a/src/ui/public/registry/spy_modes.js +++ b/src/ui/public/registry/spy_modes.js @@ -1,7 +1,5 @@ -define(function (require) { - return require('ui/registry/_registry')({ - name: 'spyModes', - index: ['name'], - order: ['order'] - }); +export default require('ui/registry/_registry')({ + name: 'spyModes', + index: ['name'], + order: ['order'] }); diff --git a/src/ui/public/registry/vis_types.js b/src/ui/public/registry/vis_types.js index ed015993900cb1..a280520508ec47 100644 --- a/src/ui/public/registry/vis_types.js +++ b/src/ui/public/registry/vis_types.js @@ -1,7 +1,5 @@ -define(function (require) { - return require('ui/registry/_registry')({ - name: 'visTypes', - index: ['name'], - order: ['title'] - }); +export default require('ui/registry/_registry')({ + name: 'visTypes', + index: ['name'], + order: ['title'] }); diff --git a/src/ui/public/routes/WorkQueue.js b/src/ui/public/routes/WorkQueue.js index 49b7c302748461..eb2aa086588fe3 100644 --- a/src/ui/public/routes/WorkQueue.js +++ b/src/ui/public/routes/WorkQueue.js @@ -1,52 +1,50 @@ import _ from 'lodash'; -define(function (require) { - function WorkQueue() { - var q = this; +function WorkQueue() { + var q = this; - var work = []; - var fullDefers = []; + var work = []; + var fullDefers = []; - q.limit = 0; - Object.defineProperty(q, 'length', { - get: function () { - return work.length; - } - }); + q.limit = 0; + Object.defineProperty(q, 'length', { + get: function () { + return work.length; + } + }); - var resolve = function (defers) { - return defers.splice(0).map(function (defer) { - return defer.resolve(); - }); - }; - - var checkIfFull = function () { - if (work.length >= q.limit && fullDefers.length) { - resolve(fullDefers); - } - }; - - q.resolveWhenFull = function (defer) { - fullDefers.push(defer); - checkIfFull(); - }; - - q.doWork = function () { - var resps = resolve(work); - checkIfFull(); - return resps; - }; - - q.empty = function () { - work.splice(0); - checkIfFull(); - }; - - q.push = function (defer) { - work.push(defer); - checkIfFull(); - }; - } - - return WorkQueue; -}); + var resolve = function (defers) { + return defers.splice(0).map(function (defer) { + return defer.resolve(); + }); + }; + + var checkIfFull = function () { + if (work.length >= q.limit && fullDefers.length) { + resolve(fullDefers); + } + }; + + q.resolveWhenFull = function (defer) { + fullDefers.push(defer); + checkIfFull(); + }; + + q.doWork = function () { + var resps = resolve(work); + checkIfFull(); + return resps; + }; + + q.empty = function () { + work.splice(0); + checkIfFull(); + }; + + q.push = function (defer) { + work.push(defer); + checkIfFull(); + }; +} + +export default WorkQueue; diff --git a/src/ui/public/routes/wrapRouteWithPrep.js b/src/ui/public/routes/wrapRouteWithPrep.js index d386e8b62b0d65..6674f139b45bd0 100644 --- a/src/ui/public/routes/wrapRouteWithPrep.js +++ b/src/ui/public/routes/wrapRouteWithPrep.js @@ -2,37 +2,35 @@ import angular from 'angular'; import _ from 'lodash'; import WorkQueue from 'ui/routes/WorkQueue'; import errors from 'ui/errors'; -define(function (require) { - function wrapRouteWithPrep(route, setup) { - if (!route.resolve && route.redirectTo) return; +function wrapRouteWithPrep(route, setup) { + if (!route.resolve && route.redirectTo) return; - var userWork = new WorkQueue(); - // the point at which we will consider the queue "full" - userWork.limit = _.keys(route.resolve).length; + var userWork = new WorkQueue(); + // the point at which we will consider the queue "full" + userWork.limit = _.keys(route.resolve).length; - var resolve = { - __prep__: function ($injector) { - return $injector.invoke(setup.doWork, setup, { userWork }); - } - }; + var resolve = { + __prep__: function ($injector) { + return $injector.invoke(setup.doWork, setup, { userWork }); + } + }; - // send each user resolve to the userWork queue, which will prevent it from running before the - // prep is complete - _.forOwn(route.resolve || {}, function (expr, name) { - resolve[name] = function ($injector, Promise) { - var defer = Promise.defer(); - userWork.push(defer); - return defer.promise.then(function () { - return $injector[angular.isString(expr) ? 'get' : 'invoke'](expr); - }); - }; - }); + // send each user resolve to the userWork queue, which will prevent it from running before the + // prep is complete + _.forOwn(route.resolve || {}, function (expr, name) { + resolve[name] = function ($injector, Promise) { + var defer = Promise.defer(); + userWork.push(defer); + return defer.promise.then(function () { + return $injector[angular.isString(expr) ? 'get' : 'invoke'](expr); + }); + }; + }); - // we're copied everything over so now overwrite - route.resolve = resolve; - } + // we're copied everything over so now overwrite + route.resolve = resolve; +} - return wrapRouteWithPrep; -}); +export default wrapRouteWithPrep; diff --git a/src/ui/public/safe_confirm/safe_confirm.js b/src/ui/public/safe_confirm/safe_confirm.js index edbd1a6f9f1561..aa5fb606cfa469 100644 --- a/src/ui/public/safe_confirm/safe_confirm.js +++ b/src/ui/public/safe_confirm/safe_confirm.js @@ -1,31 +1,29 @@ -define(function (require) { - require('ui/modules').get('kibana') +require('ui/modules').get('kibana') - /* - * Angular doesn't play well with thread blocking calls such as - * window.confirm() unless those calls are specifically handled inside a call - * to $timeout(). Rather than litter the code with that implementation - * detail, safeConfirm() can be used. - * - * WARNING: safeConfirm differs from a native call to window.confirm in that - * it only blocks the thread beginning on the next tick. For that reason, a - * promise is returned so consumers can handle the control flow. - * - * Usage: - * safeConfirm('This message will be passed to window.confirm()').then( - * function () { - * // user clicked confirm - * }, - * function () { - * // user canceled the confirmation - * } - * ); - */ - .factory('safeConfirm', function ($window, $timeout, $q) { - return function safeConfirm(message) { - return $timeout(function () { - return $window.confirm(message) || $q.reject(false); - }); - }; - }); +/* + * Angular doesn't play well with thread blocking calls such as + * window.confirm() unless those calls are specifically handled inside a call + * to $timeout(). Rather than litter the code with that implementation + * detail, safeConfirm() can be used. + * + * WARNING: safeConfirm differs from a native call to window.confirm in that + * it only blocks the thread beginning on the next tick. For that reason, a + * promise is returned so consumers can handle the control flow. + * + * Usage: + * safeConfirm('This message will be passed to window.confirm()').then( + * function () { + * // user clicked confirm + * }, + * function () { + * // user canceled the confirmation + * } + * ); + */ +.factory('safeConfirm', function ($window, $timeout, $q) { + return function safeConfirm(message) { + return $timeout(function () { + return $window.confirm(message) || $q.reject(false); + }); + }; }); diff --git a/src/ui/public/saved_objects/saved_object_registry.js b/src/ui/public/saved_objects/saved_object_registry.js index 233469a8ccf57a..a633b27907d5c0 100644 --- a/src/ui/public/saved_objects/saved_object_registry.js +++ b/src/ui/public/saved_objects/saved_object_registry.js @@ -1,7 +1,5 @@ -define(function (require) { - return require('ui/registry/_registry')({ - name: 'savedObjects', - index: ['loaderProperties.name'], - order: ['loaderProperties.name'] - }); +export default require('ui/registry/_registry')({ + name: 'savedObjects', + index: ['loaderProperties.name'], + order: ['loaderProperties.name'] }); diff --git a/src/ui/public/state_management/_state_sync.js b/src/ui/public/state_management/_state_sync.js index ad229eab03c4ea..d94b5f6ffd7280 100644 --- a/src/ui/public/state_management/_state_sync.js +++ b/src/ui/public/state_management/_state_sync.js @@ -1,141 +1,139 @@ import angular from 'angular'; import _ from 'lodash'; import rison from 'ui/utils/rison'; -define(function (require) { - - - // invokable/private angular dep - return function ($location) { - // feed in some of the private state from globalState - return function (globalState, updateListeners, app) { - var getAppStash = function (search) { - var appStash = search._a && rison.decode(search._a); - if (app.current) { - // Apply the defaults to appStash - appStash = _.defaults(appStash || {}, app.defaults); - } - return appStash; - }; - - var diffTrans = function (trans) { - var obj = trans[0]; - var update = trans[1]; - - var diff = {}; - - // the keys that are currently set on obj, excluding methods - var objKeys = Object.keys(obj).filter(function (key) { - return typeof obj[key] !== 'function'; + + +// invokable/private angular dep +export default function ($location) { + // feed in some of the private state from globalState + return function (globalState, updateListeners, app) { + var getAppStash = function (search) { + var appStash = search._a && rison.decode(search._a); + if (app.current) { + // Apply the defaults to appStash + appStash = _.defaults(appStash || {}, app.defaults); + } + return appStash; + }; + + var diffTrans = function (trans) { + var obj = trans[0]; + var update = trans[1]; + + var diff = {}; + + // the keys that are currently set on obj, excluding methods + var objKeys = Object.keys(obj).filter(function (key) { + return typeof obj[key] !== 'function'; + }); + + if (update) { + // the keys obj should have after applying the update + var updateKeys = diff.keys = Object.keys(update).filter(function (key) { + return typeof update[key] !== 'function'; }); - if (update) { - // the keys obj should have after applying the update - var updateKeys = diff.keys = Object.keys(update).filter(function (key) { - return typeof update[key] !== 'function'; - }); - - // the keys that will be removed - diff.remove = _.difference(objKeys, updateKeys); - - // list of keys that will be added or changed - diff.change = updateKeys.filter(function (key) { - return !angular.equals(obj[key], update[key]); - }); - } else { - diff.keys = objKeys.slice(0); - diff.remove = []; - diff.change = []; - } - - // single list of all keys that are effected - diff.all = [].concat(diff.remove, diff.change); - - return diff; - }; - - var notify = function (trans, diff) { - var listeners = null; - - if (trans[0] === app.current) { - listeners = app.listeners; - } else if (trans[0] === globalState) { - listeners = updateListeners; - } - - listeners && listeners.splice(0).forEach(function (defer) { - defer.resolve(diff.all.slice(0)); + // the keys that will be removed + diff.remove = _.difference(objKeys, updateKeys); + + // list of keys that will be added or changed + diff.change = updateKeys.filter(function (key) { + return !angular.equals(obj[key], update[key]); }); - }; + } else { + diff.keys = objKeys.slice(0); + diff.remove = []; + diff.change = []; + } + + // single list of all keys that are effected + diff.all = [].concat(diff.remove, diff.change); + + return diff; + }; + + var notify = function (trans, diff) { + var listeners = null; + + if (trans[0] === app.current) { + listeners = app.listeners; + } else if (trans[0] === globalState) { + listeners = updateListeners; + } + + listeners && listeners.splice(0).forEach(function (defer) { + defer.resolve(diff.all.slice(0)); + }); + }; - var applyDiff = function (trans, diff) { - if (!diff.all.length) return; + var applyDiff = function (trans, diff) { + if (!diff.all.length) return; - var obj = trans[0]; - var update = trans[1]; + var obj = trans[0]; + var update = trans[1]; + + diff.remove.forEach(function (key) { + delete obj[key]; + }); + + diff.change.forEach(function (key) { + obj[key] = update[key]; + }); + }; + + var syncTrans = function (trans, forceNotify) { + // obj that will be modified by update(trans[1]) + // if it is empty, we can skip it all + var skipWrite = !trans[0]; + trans[0] = trans[0] || {}; + + var diff = diffTrans(trans); + if (!skipWrite && (forceNotify || diff.all.length)) { + applyDiff(trans, diff); + notify(trans, diff); + } + return diff; + }; - diff.remove.forEach(function (key) { - delete obj[key]; + return { + // sync by pushing to the url + push: function (forceNotify) { + var search = $location.search(); + + var appStash = getAppStash(search) || {}; + var globalStash = search._g ? rison.decode(search._g) : {}; + + var res = _.mapValues({ + app: [appStash, app.current], + global: [globalStash, globalState] + }, function (trans, key) { + var diff = syncTrans(trans, forceNotify); + var urlKey = '_' + key.charAt(0); + if (diff.keys.length === 0) { + delete search[urlKey]; + } else { + search[urlKey] = rison.encode(trans[0]); + } + return diff; }); - diff.change.forEach(function (key) { - obj[key] = update[key]; + $location.search(search); + return res; + }, + // sync by pulling from the url + pull: function (forceNotify) { + var search = $location.search(); + + var appStash = getAppStash(search); + var globalStash = search._g && rison.decode(search._g); + + return _.mapValues({ + app: [app.current, appStash], + global: [globalState, globalStash] + }, function (trans) { + return syncTrans(trans, forceNotify); }); - }; - - var syncTrans = function (trans, forceNotify) { - // obj that will be modified by update(trans[1]) - // if it is empty, we can skip it all - var skipWrite = !trans[0]; - trans[0] = trans[0] || {}; - - var diff = diffTrans(trans); - if (!skipWrite && (forceNotify || diff.all.length)) { - applyDiff(trans, diff); - notify(trans, diff); - } - return diff; - }; - - return { - // sync by pushing to the url - push: function (forceNotify) { - var search = $location.search(); - - var appStash = getAppStash(search) || {}; - var globalStash = search._g ? rison.decode(search._g) : {}; - - var res = _.mapValues({ - app: [appStash, app.current], - global: [globalStash, globalState] - }, function (trans, key) { - var diff = syncTrans(trans, forceNotify); - var urlKey = '_' + key.charAt(0); - if (diff.keys.length === 0) { - delete search[urlKey]; - } else { - search[urlKey] = rison.encode(trans[0]); - } - return diff; - }); - - $location.search(search); - return res; - }, - // sync by pulling from the url - pull: function (forceNotify) { - var search = $location.search(); - - var appStash = getAppStash(search); - var globalStash = search._g && rison.decode(search._g); - - return _.mapValues({ - app: [app.current, appStash], - global: [globalState, globalStash] - }, function (trans) { - return syncTrans(trans, forceNotify); - }); - } - }; + } }; }; -}); +}; diff --git a/src/ui/public/state_management/app_state.js b/src/ui/public/state_management/app_state.js index 017854adb00ea4..90ee457b19af22 100644 --- a/src/ui/public/state_management/app_state.js +++ b/src/ui/public/state_management/app_state.js @@ -2,95 +2,93 @@ import _ from 'lodash'; import modules from 'ui/modules'; import StateManagementStateProvider from 'ui/state_management/state'; import PersistedStatePersistedStateProvider from 'ui/persisted_state/persisted_state'; -define(function (require) { - var urlParam = '_a'; - - function AppStateProvider(Private, $rootScope, getAppState) { - var State = Private(StateManagementStateProvider); - var PersistedState = Private(PersistedStatePersistedStateProvider); - var persistedStates; - var eventUnsubscribers; - - _.class(AppState).inherits(State); - function AppState(defaults) { - persistedStates = {}; - eventUnsubscribers = []; - - AppState.Super.call(this, urlParam, defaults); - getAppState._set(this); - } - - // if the url param is missing, write it back - AppState.prototype._persistAcrossApps = false; - - AppState.prototype.destroy = function () { - AppState.Super.prototype.destroy.call(this); - getAppState._set(null); - _.callEach(eventUnsubscribers); - }; +var urlParam = '_a'; + +function AppStateProvider(Private, $rootScope, getAppState) { + var State = Private(StateManagementStateProvider); + var PersistedState = Private(PersistedStatePersistedStateProvider); + var persistedStates; + var eventUnsubscribers; - AppState.prototype.makeStateful = function (prop) { - if (persistedStates[prop]) return persistedStates[prop]; - var self = this; + _.class(AppState).inherits(State); + function AppState(defaults) { + persistedStates = {}; + eventUnsubscribers = []; - // set up the ui state - persistedStates[prop] = new PersistedState(); + AppState.Super.call(this, urlParam, defaults); + getAppState._set(this); + } - // update the app state when the stateful instance changes - var updateOnChange = function () { - var replaceState = false; // TODO: debouncing logic + // if the url param is missing, write it back + AppState.prototype._persistAcrossApps = false; - self[prop] = persistedStates[prop].getChanges(); - self.save(replaceState); - }; - var handlerOnChange = (method) => persistedStates[prop][method]('change', updateOnChange); - handlerOnChange('on'); - eventUnsubscribers.push(() => handlerOnChange('off')); + AppState.prototype.destroy = function () { + AppState.Super.prototype.destroy.call(this); + getAppState._set(null); + _.callEach(eventUnsubscribers); + }; - // update the stateful object when the app state changes - var persistOnChange = function (changes) { - if (!changes) return; + AppState.prototype.makeStateful = function (prop) { + if (persistedStates[prop]) return persistedStates[prop]; + var self = this; - if (changes.indexOf(prop) !== -1) { - persistedStates[prop].set(self[prop]); - } - }; - var handlePersist = (method) => this[method]('fetch_with_changes', persistOnChange); - handlePersist('on'); - eventUnsubscribers.push(() => handlePersist('off')); + // set up the ui state + persistedStates[prop] = new PersistedState(); - // if the thing we're making stateful has an appState value, write to persisted state - if (self[prop]) persistedStates[prop].setSilent(self[prop]); + // update the app state when the stateful instance changes + var updateOnChange = function () { + var replaceState = false; // TODO: debouncing logic - return persistedStates[prop]; + self[prop] = persistedStates[prop].getChanges(); + self.save(replaceState); }; + var handlerOnChange = (method) => persistedStates[prop][method]('change', updateOnChange); + handlerOnChange('on'); + eventUnsubscribers.push(() => handlerOnChange('off')); - return AppState; - } + // update the stateful object when the app state changes + var persistOnChange = function (changes) { + if (!changes) return; - modules.get('kibana/global_state') - .factory('AppState', function (Private) { - return Private(AppStateProvider); - }) - .service('getAppState', function ($location) { - var currentAppState; - - function get() { - return currentAppState; - } - - // Checks to see if the appState might already exist, even if it hasn't been newed up - get.previouslyStored = function () { - var search = $location.search(); - return search[urlParam] ? true : false; + if (changes.indexOf(prop) !== -1) { + persistedStates[prop].set(self[prop]); + } }; + var handlePersist = (method) => this[method]('fetch_with_changes', persistOnChange); + handlePersist('on'); + eventUnsubscribers.push(() => handlePersist('off')); - get._set = function (current) { - currentAppState = current; - }; + // if the thing we're making stateful has an appState value, write to persisted state + if (self[prop]) persistedStates[prop].setSilent(self[prop]); + + return persistedStates[prop]; + }; - return get; - }); + return AppState; +} - return AppStateProvider; +modules.get('kibana/global_state') +.factory('AppState', function (Private) { + return Private(AppStateProvider); +}) +.service('getAppState', function ($location) { + var currentAppState; + + function get() { + return currentAppState; + } + + // Checks to see if the appState might already exist, even if it hasn't been newed up + get.previouslyStored = function () { + var search = $location.search(); + return search[urlParam] ? true : false; + }; + + get._set = function (current) { + currentAppState = current; + }; + + return get; }); + +export default AppStateProvider; diff --git a/src/ui/public/state_management/global_state.js b/src/ui/public/state_management/global_state.js index 742cdcaae01231..dfd035e04afdeb 100644 --- a/src/ui/public/state_management/global_state.js +++ b/src/ui/public/state_management/global_state.js @@ -3,25 +3,23 @@ import angular from 'angular'; import qs from 'ui/utils/query_string'; import rison from 'ui/utils/rison'; import StateManagementStateProvider from 'ui/state_management/state'; -define(function (require) { - var module = require('ui/modules').get('kibana/global_state'); +var module = require('ui/modules').get('kibana/global_state'); - module.service('globalState', function (Private, $rootScope, $location) { - var State = Private(StateManagementStateProvider); +module.service('globalState', function (Private, $rootScope, $location) { + var State = Private(StateManagementStateProvider); - _.class(GlobalState).inherits(State); - function GlobalState(defaults) { - GlobalState.Super.call(this, '_g', defaults); - } + _.class(GlobalState).inherits(State); + function GlobalState(defaults) { + GlobalState.Super.call(this, '_g', defaults); + } - // if the url param is missing, write it back - GlobalState.prototype._persistAcrossApps = true; + // if the url param is missing, write it back + GlobalState.prototype._persistAcrossApps = true; - GlobalState.prototype.removeFromUrl = function (url) { - return qs.replaceParamInUrl(url, this._urlParam, null); - }; + GlobalState.prototype.removeFromUrl = function (url) { + return qs.replaceParamInUrl(url, this._urlParam, null); + }; - return new GlobalState(); - }); + return new GlobalState(); }); diff --git a/src/ui/public/state_management/state.js b/src/ui/public/state_management/state.js index 3c852d27a8bc2c..8c573a9d728129 100644 --- a/src/ui/public/state_management/state.js +++ b/src/ui/public/state_management/state.js @@ -3,150 +3,148 @@ import rison from 'ui/utils/rison'; import applyDiff from 'ui/utils/diff_object'; import qs from 'ui/utils/query_string'; import EventsProvider from 'ui/events'; -define(function (require) { - return function StateProvider(Notifier, Private, $rootScope, $location) { - var Events = Private(EventsProvider); +export default function StateProvider(Notifier, Private, $rootScope, $location) { + var Events = Private(EventsProvider); - _.class(State).inherits(Events); - function State(urlParam, defaults) { - State.Super.call(this); + _.class(State).inherits(Events); + function State(urlParam, defaults) { + State.Super.call(this); - var self = this; - self.setDefaults(defaults); - self._urlParam = urlParam || '_s'; + var self = this; + self.setDefaults(defaults); + self._urlParam = urlParam || '_s'; - // When the URL updates we need to fetch the values from the URL - self._cleanUpListeners = _.partial(_.callEach, [ - // partial route update, no app reload - $rootScope.$on('$routeUpdate', function () { - self.fetch(); - }), - - // beginning of full route update, new app will be initialized before - // $routeChangeSuccess or $routeChangeError - $rootScope.$on('$routeChangeStart', function () { - if (self._persistAcrossApps) { - self.fetch(); - } else { - self.destroy(); - } - }) - ]); - - // Initialize the State with fetch - self.fetch(); - } + // When the URL updates we need to fetch the values from the URL + self._cleanUpListeners = _.partial(_.callEach, [ + // partial route update, no app reload + $rootScope.$on('$routeUpdate', function () { + self.fetch(); + }), - State.prototype._readFromURL = function () { - var search = $location.search(); - try { - return search[this._urlParam] ? rison.decode(search[this._urlParam]) : null; - } catch (e) { - var notify = new Notifier(); - notify.error('Unable to parse URL'); - search[this._urlParam] = rison.encode(this._defaults); - $location.search(search).replace(); - return null; - } - }; - - /** - * Fetches the state from the url - * @returns {void} - */ - State.prototype.fetch = function () { - var stash = this._readFromURL(); - - // nothing to read from the url? save if ordered to persist - if (stash === null) { - if (this._persistAcrossApps) { - return this.save(); + // beginning of full route update, new app will be initialized before + // $routeChangeSuccess or $routeChangeError + $rootScope.$on('$routeChangeStart', function () { + if (self._persistAcrossApps) { + self.fetch(); } else { - stash = {}; + self.destroy(); } - } - - _.defaults(stash, this._defaults); - // apply diff to state from stash, will change state in place via side effect - var diffResults = applyDiff(this, stash); + }) + ]); + + // Initialize the State with fetch + self.fetch(); + } + + State.prototype._readFromURL = function () { + var search = $location.search(); + try { + return search[this._urlParam] ? rison.decode(search[this._urlParam]) : null; + } catch (e) { + var notify = new Notifier(); + notify.error('Unable to parse URL'); + search[this._urlParam] = rison.encode(this._defaults); + $location.search(search).replace(); + return null; + } + }; - if (diffResults.keys.length) { - this.emit('fetch_with_changes', diffResults.keys); - } - }; - - /** - * Saves the state to the url - * @returns {void} - */ - State.prototype.save = function (replace) { - var stash = this._readFromURL(); - var state = this.toObject(); - replace = replace || false; - - if (!stash) { - replace = true; + /** + * Fetches the state from the url + * @returns {void} + */ + State.prototype.fetch = function () { + var stash = this._readFromURL(); + + // nothing to read from the url? save if ordered to persist + if (stash === null) { + if (this._persistAcrossApps) { + return this.save(); + } else { stash = {}; } + } - _.defaults(state, this._defaults); - // apply diff to state from stash, will change state in place via side effect - var diffResults = applyDiff(stash, state); + _.defaults(stash, this._defaults); + // apply diff to state from stash, will change state in place via side effect + var diffResults = applyDiff(this, stash); - if (diffResults.keys.length) { - this.emit('save_with_changes', diffResults.keys); - } + if (diffResults.keys.length) { + this.emit('fetch_with_changes', diffResults.keys); + } + }; - // persist the state in the URL - var search = $location.search(); - search[this._urlParam] = this.toRISON(); - if (replace) { - $location.search(search).replace(); - } else { - $location.search(search); - } - }; - - /** - * Calls save with a forced replace - * @returns {void} - */ - State.prototype.replace = function () { - this.save(true); - }; - - /** - * Resets the state to the defaults - * - * @returns {void} - */ - State.prototype.reset = function () { - // apply diff to _attributes from defaults, this is side effecting so - // it will change the state in place. - var diffResults = applyDiff(this, this._defaults); - if (diffResults.keys.length) { - this.emit('reset_with_changes', diffResults.keys); - } - this.save(); - }; + /** + * Saves the state to the url + * @returns {void} + */ + State.prototype.save = function (replace) { + var stash = this._readFromURL(); + var state = this.toObject(); + replace = replace || false; + + if (!stash) { + replace = true; + stash = {}; + } - /** - * Cleans up the state object - * @returns {void} - */ - State.prototype.destroy = function () { - this.off(); // removes all listeners - this._cleanUpListeners(); // Removes the $routeUpdate listener - }; + _.defaults(state, this._defaults); + // apply diff to state from stash, will change state in place via side effect + var diffResults = applyDiff(stash, state); - State.prototype.setDefaults = function (defaults) { - this._defaults = defaults || {}; - }; + if (diffResults.keys.length) { + this.emit('save_with_changes', diffResults.keys); + } - return State; + // persist the state in the URL + var search = $location.search(); + search[this._urlParam] = this.toRISON(); + if (replace) { + $location.search(search).replace(); + } else { + $location.search(search); + } + }; + /** + * Calls save with a forced replace + * @returns {void} + */ + State.prototype.replace = function () { + this.save(true); }; -}); + /** + * Resets the state to the defaults + * + * @returns {void} + */ + State.prototype.reset = function () { + // apply diff to _attributes from defaults, this is side effecting so + // it will change the state in place. + var diffResults = applyDiff(this, this._defaults); + if (diffResults.keys.length) { + this.emit('reset_with_changes', diffResults.keys); + } + this.save(); + }; + + /** + * Cleans up the state object + * @returns {void} + */ + State.prototype.destroy = function () { + this.off(); // removes all listeners + this._cleanUpListeners(); // Removes the $routeUpdate listener + }; + + State.prototype.setDefaults = function (defaults) { + this._defaults = defaults || {}; + }; + + return State; + +}; + diff --git a/src/ui/public/storage/storage.js b/src/ui/public/storage/storage.js index 28fa44ca37f0f5..a5c3ad10aeedba 100644 --- a/src/ui/public/storage/storage.js +++ b/src/ui/public/storage/storage.js @@ -1,43 +1,41 @@ import modules from 'ui/modules'; import angular from 'angular'; -define(function (require) { - function Storage(store) { - var self = this; - self.store = store; +function Storage(store) { + var self = this; + self.store = store; - self.get = function (key) { - try { - return JSON.parse(self.store.getItem(key)); - } catch (e) { - return null; - } - }; + self.get = function (key) { + try { + return JSON.parse(self.store.getItem(key)); + } catch (e) { + return null; + } + }; - self.set = function (key, value) { - try { - return self.store.setItem(key, angular.toJson(value)); - } catch (e) { - return false; - } - }; + self.set = function (key, value) { + try { + return self.store.setItem(key, angular.toJson(value)); + } catch (e) { + return false; + } + }; - self.remove = function (key) { - return self.store.removeItem(key); - }; + self.remove = function (key) { + return self.store.removeItem(key); + }; - self.clear = function () { - return self.store.clear(); - }; - } + self.clear = function () { + return self.store.clear(); + }; +} - var createService = function (type) { - return function ($window) { - return new Storage($window[type]); - }; +var createService = function (type) { + return function ($window) { + return new Storage($window[type]); }; +}; - modules.get('kibana/storage') - .service('localStorage', createService('localStorage')) - .service('sessionStorage', createService('sessionStorage')); -}); +modules.get('kibana/storage') + .service('localStorage', createService('localStorage')) + .service('sessionStorage', createService('sessionStorage')); diff --git a/src/ui/public/stringify/register.js b/src/ui/public/stringify/register.js index ec431f85a9812a..eddf1d747c0688 100644 --- a/src/ui/public/stringify/register.js +++ b/src/ui/public/stringify/register.js @@ -1,13 +1,11 @@ import fieldFormats from 'ui/registry/field_formats'; -define(function (require) { - fieldFormats.register(require('ui/stringify/types/Url')); - fieldFormats.register(require('ui/stringify/types/Bytes')); - fieldFormats.register(require('ui/stringify/types/Date')); - fieldFormats.register(require('ui/stringify/types/Ip')); - fieldFormats.register(require('ui/stringify/types/Number')); - fieldFormats.register(require('ui/stringify/types/Percent')); - fieldFormats.register(require('ui/stringify/types/String')); - fieldFormats.register(require('ui/stringify/types/Source')); - fieldFormats.register(require('ui/stringify/types/Color')); - fieldFormats.register(require('ui/stringify/types/truncate')); -}); +fieldFormats.register(require('ui/stringify/types/Url')); +fieldFormats.register(require('ui/stringify/types/Bytes')); +fieldFormats.register(require('ui/stringify/types/Date')); +fieldFormats.register(require('ui/stringify/types/Ip')); +fieldFormats.register(require('ui/stringify/types/Number')); +fieldFormats.register(require('ui/stringify/types/Percent')); +fieldFormats.register(require('ui/stringify/types/String')); +fieldFormats.register(require('ui/stringify/types/Source')); +fieldFormats.register(require('ui/stringify/types/Color')); +fieldFormats.register(require('ui/stringify/types/truncate')); diff --git a/src/ui/public/stringify/types/Bytes.js b/src/ui/public/stringify/types/Bytes.js index af7dbc0b66b95d..97ab2809efbf44 100644 --- a/src/ui/public/stringify/types/Bytes.js +++ b/src/ui/public/stringify/types/Bytes.js @@ -1,12 +1,10 @@ import StringifyTypesNumeralProvider from 'ui/stringify/types/_Numeral'; -define(function (require) { - return function BytesFormatProvider(Private) { - var Numeral = Private(StringifyTypesNumeralProvider); - return Numeral.factory({ - id: 'bytes', - title: 'Bytes', - sampleInputs: [1024, 5150000, 1990000000] - }); - }; -}); +export default function BytesFormatProvider(Private) { + var Numeral = Private(StringifyTypesNumeralProvider); + return Numeral.factory({ + id: 'bytes', + title: 'Bytes', + sampleInputs: [1024, 5150000, 1990000000] + }); +}; diff --git a/src/ui/public/stringify/types/Color.js b/src/ui/public/stringify/types/Color.js index b9bfa48deb4008..2b56d10ecd25b2 100644 --- a/src/ui/public/stringify/types/Color.js +++ b/src/ui/public/stringify/types/Color.js @@ -1,61 +1,59 @@ import 'ui/stringify/editors/color.less'; import _ from 'lodash'; import IndexPatternsFieldFormatFieldFormatProvider from 'ui/index_patterns/_field_format/FieldFormat'; -define(function (require) { - return function _StringProvider(Private) { - - const FieldFormat = Private(IndexPatternsFieldFormatFieldFormatProvider); - const DEFAULT_COLOR = { - range: `${Number.NEGATIVE_INFINITY}:${Number.POSITIVE_INFINITY}`, - text: '#000000', - background: '#ffffff' - }; - - _.class(_Color).inherits(FieldFormat); - function _Color(params) { - _Color.Super.call(this, params); +export default function _StringProvider(Private) { + + const FieldFormat = Private(IndexPatternsFieldFormatFieldFormatProvider); + const DEFAULT_COLOR = { + range: `${Number.NEGATIVE_INFINITY}:${Number.POSITIVE_INFINITY}`, + text: '#000000', + background: '#ffffff' + }; + + _.class(_Color).inherits(FieldFormat); + function _Color(params) { + _Color.Super.call(this, params); + } + + _Color.id = 'color'; + _Color.title = 'Color'; + _Color.fieldType = [ + 'number' + ]; + + _Color.editor = { + template: require('ui/stringify/editors/color.html'), + controller($scope) { + $scope.addColor = function () { + $scope.editor.formatParams.colors.push(_.cloneDeep(DEFAULT_COLOR)); + }; + + $scope.removeColor = function (index) { + $scope.editor.formatParams.colors.splice(index, 1); + }; } + }; + - _Color.id = 'color'; - _Color.title = 'Color'; - _Color.fieldType = [ - 'number' - ]; - - _Color.editor = { - template: require('ui/stringify/editors/color.html'), - controller($scope) { - $scope.addColor = function () { - $scope.editor.formatParams.colors.push(_.cloneDeep(DEFAULT_COLOR)); - }; - - $scope.removeColor = function (index) { - $scope.editor.formatParams.colors.splice(index, 1); - }; - } - }; - - - _Color.paramDefaults = { - colors: [_.cloneDeep(DEFAULT_COLOR)] - }; - - _Color.prototype._convert = { - html(val) { - const color = _.findLast(this.param('colors'), ({ range }) => { - if (!range) return; - const [start, end] = range.split(':'); - return val >= Number(start) && val <= Number(end); - }); - - if (!color) return _.asPrettyString(val); - - const styleColor = color.text ? `color: ${color.text};` : ''; - const styleBackgroundColor = color.background ? `background-color: ${color.background};` : ''; - return `${_.escape(val)}`; - } - }; - - return _Color; + _Color.paramDefaults = { + colors: [_.cloneDeep(DEFAULT_COLOR)] }; -}); + + _Color.prototype._convert = { + html(val) { + const color = _.findLast(this.param('colors'), ({ range }) => { + if (!range) return; + const [start, end] = range.split(':'); + return val >= Number(start) && val <= Number(end); + }); + + if (!color) return _.asPrettyString(val); + + const styleColor = color.text ? `color: ${color.text};` : ''; + const styleBackgroundColor = color.background ? `background-color: ${color.background};` : ''; + return `${_.escape(val)}`; + } + }; + + return _Color; +}; diff --git a/src/ui/public/stringify/types/Date.js b/src/ui/public/stringify/types/Date.js index a62f38a3b64388..40399a101f5393 100644 --- a/src/ui/public/stringify/types/Date.js +++ b/src/ui/public/stringify/types/Date.js @@ -3,66 +3,64 @@ import moment from 'moment'; import 'ui/field_format_editor/pattern/pattern'; import IndexPatternsFieldFormatFieldFormatProvider from 'ui/index_patterns/_field_format/FieldFormat'; import BoundToConfigObjProvider from 'ui/bound_to_config_obj'; -define(function (require) { - return function DateTimeFormatProvider(Private) { - var FieldFormat = Private(IndexPatternsFieldFormatFieldFormatProvider); - var BoundToConfigObj = Private(BoundToConfigObjProvider); +export default function DateTimeFormatProvider(Private) { + var FieldFormat = Private(IndexPatternsFieldFormatFieldFormatProvider); + var BoundToConfigObj = Private(BoundToConfigObjProvider); - _.class(DateTime).inherits(FieldFormat); - function DateTime(params) { - DateTime.Super.call(this, params); - } - - DateTime.id = 'date'; - DateTime.title = 'Date'; - DateTime.fieldType = 'date'; + _.class(DateTime).inherits(FieldFormat); + function DateTime(params) { + DateTime.Super.call(this, params); + } - DateTime.paramDefaults = new BoundToConfigObj({ - pattern: '=dateFormat', - timezone: '=dateFormat:tz' - }); + DateTime.id = 'date'; + DateTime.title = 'Date'; + DateTime.fieldType = 'date'; - DateTime.editor = { - template: require('ui/stringify/editors/date.html'), - controllerAs: 'cntrl', - controller: function ($interval, $scope) { - var self = this; - self.sampleInputs = [ - Date.now(), - +moment().startOf('year'), - +moment().endOf('year') - ]; + DateTime.paramDefaults = new BoundToConfigObj({ + pattern: '=dateFormat', + timezone: '=dateFormat:tz' + }); - $scope.$on('$destroy', $interval(function () { - self.sampleInputs[0] = Date.now(); - }, 1000)); - } - }; + DateTime.editor = { + template: require('ui/stringify/editors/date.html'), + controllerAs: 'cntrl', + controller: function ($interval, $scope) { + var self = this; + self.sampleInputs = [ + Date.now(), + +moment().startOf('year'), + +moment().endOf('year') + ]; - DateTime.prototype._convert = function (val) { - // don't give away our ref to converter so - // we can hot-swap when config changes - var pattern = this.param('pattern'); - var timezone = this.param('timezone'); + $scope.$on('$destroy', $interval(function () { + self.sampleInputs[0] = Date.now(); + }, 1000)); + } + }; - var timezoneChanged = this._timeZone !== timezone; - var datePatternChanged = this._memoizedPattern !== pattern; - if (timezoneChanged || datePatternChanged) { - this._timeZone = timezone; - this._memoizedPattern = pattern; + DateTime.prototype._convert = function (val) { + // don't give away our ref to converter so + // we can hot-swap when config changes + var pattern = this.param('pattern'); + var timezone = this.param('timezone'); - this._memoizedConverter = _.memoize(function converter(val) { - if (val === null || val === undefined) { - return '-'; - } - return moment(val).format(pattern); - }); - } + var timezoneChanged = this._timeZone !== timezone; + var datePatternChanged = this._memoizedPattern !== pattern; + if (timezoneChanged || datePatternChanged) { + this._timeZone = timezone; + this._memoizedPattern = pattern; - return this._memoizedConverter(val); - }; + this._memoizedConverter = _.memoize(function converter(val) { + if (val === null || val === undefined) { + return '-'; + } + return moment(val).format(pattern); + }); + } - return DateTime; + return this._memoizedConverter(val); }; -}); + + return DateTime; +}; diff --git a/src/ui/public/stringify/types/Ip.js b/src/ui/public/stringify/types/Ip.js index b293b7746524cd..b2e1d2bdf319da 100644 --- a/src/ui/public/stringify/types/Ip.js +++ b/src/ui/public/stringify/types/Ip.js @@ -1,25 +1,23 @@ import _ from 'lodash'; import IndexPatternsFieldFormatFieldFormatProvider from 'ui/index_patterns/_field_format/FieldFormat'; -define(function (require) { - return function IpFormatProvider(Private) { - var FieldFormat = Private(IndexPatternsFieldFormatFieldFormatProvider); +export default function IpFormatProvider(Private) { + var FieldFormat = Private(IndexPatternsFieldFormatFieldFormatProvider); - _.class(Ip).inherits(FieldFormat); - function Ip(params) { - Ip.Super.call(this, params); - } + _.class(Ip).inherits(FieldFormat); + function Ip(params) { + Ip.Super.call(this, params); + } - Ip.id = 'ip'; - Ip.title = 'IP Address'; - Ip.fieldType = 'ip'; + Ip.id = 'ip'; + Ip.title = 'IP Address'; + Ip.fieldType = 'ip'; - Ip.prototype._convert = function (val) { - if (!isFinite(val)) return val; + Ip.prototype._convert = function (val) { + if (!isFinite(val)) return val; - // shazzam! - return [val >>> 24, val >>> 16 & 0xFF, val >>> 8 & 0xFF, val & 0xFF].join('.'); - }; - - return Ip; + // shazzam! + return [val >>> 24, val >>> 16 & 0xFF, val >>> 8 & 0xFF, val & 0xFF].join('.'); }; -}); + + return Ip; +}; diff --git a/src/ui/public/stringify/types/Number.js b/src/ui/public/stringify/types/Number.js index b55fecf45d3cc5..b59512994f92ff 100644 --- a/src/ui/public/stringify/types/Number.js +++ b/src/ui/public/stringify/types/Number.js @@ -1,14 +1,12 @@ import StringifyTypesNumeralProvider from 'ui/stringify/types/_Numeral'; -define(function (require) { - return function NumberFormatProvider(Private) { - var Numeral = Private(StringifyTypesNumeralProvider); - return Numeral.factory({ - id: 'number', - title: 'Number', - sampleInputs: [ - 10000, 12.345678, -1, -999, 0.52 - ] - }); - }; -}); +export default function NumberFormatProvider(Private) { + var Numeral = Private(StringifyTypesNumeralProvider); + return Numeral.factory({ + id: 'number', + title: 'Number', + sampleInputs: [ + 10000, 12.345678, -1, -999, 0.52 + ] + }); +}; diff --git a/src/ui/public/stringify/types/Percent.js b/src/ui/public/stringify/types/Percent.js index cc4fdbfd858c74..3709d0419f7bc6 100644 --- a/src/ui/public/stringify/types/Percent.js +++ b/src/ui/public/stringify/types/Percent.js @@ -1,26 +1,24 @@ import _ from 'lodash'; import BoundToConfigObjProvider from 'ui/bound_to_config_obj'; import StringifyTypesNumeralProvider from 'ui/stringify/types/_Numeral'; -define(function (require) { - return function NumberFormatProvider(Private) { - var BoundToConfigObj = Private(BoundToConfigObjProvider); - var Numeral = Private(StringifyTypesNumeralProvider); +export default function NumberFormatProvider(Private) { + var BoundToConfigObj = Private(BoundToConfigObjProvider); + var Numeral = Private(StringifyTypesNumeralProvider); - return Numeral.factory({ - id: 'percent', - title: 'Percentage', - paramDefaults: new BoundToConfigObj({ - pattern: '=format:percent:defaultPattern', - fractional: true - }), - sampleInputs: [ - 0.10, 0.99999, 1, 100, 1000 - ], - prototype: { - _convert: _.compose(Numeral.prototype._convert, function (val) { - return this.param('fractional') ? val : val / 100; - }) - } - }); - }; -}); + return Numeral.factory({ + id: 'percent', + title: 'Percentage', + paramDefaults: new BoundToConfigObj({ + pattern: '=format:percent:defaultPattern', + fractional: true + }), + sampleInputs: [ + 0.10, 0.99999, 1, 100, 1000 + ], + prototype: { + _convert: _.compose(Numeral.prototype._convert, function (val) { + return this.param('fractional') ? val : val / 100; + }) + } + }); +}; diff --git a/src/ui/public/stringify/types/Source.js b/src/ui/public/stringify/types/Source.js index 29de66e7e4af9b..c874b2b483f8ff 100644 --- a/src/ui/public/stringify/types/Source.js +++ b/src/ui/public/stringify/types/Source.js @@ -2,41 +2,39 @@ import _ from 'lodash'; import noWhiteSpace from 'ui/utils/no_white_space'; import angular from 'angular'; import IndexPatternsFieldFormatFieldFormatProvider from 'ui/index_patterns/_field_format/FieldFormat'; -define(function (require) { - return function _SourceProvider(Private, shortDotsFilter) { - var FieldFormat = Private(IndexPatternsFieldFormatFieldFormatProvider); - var template = _.template(noWhiteSpace(require('ui/stringify/types/_source.html'))); +export default function _SourceProvider(Private, shortDotsFilter) { + var FieldFormat = Private(IndexPatternsFieldFormatFieldFormatProvider); + var template = _.template(noWhiteSpace(require('ui/stringify/types/_source.html'))); - _.class(Source).inherits(FieldFormat); - function Source(params) { - Source.Super.call(this, params); - } - - Source.id = '_source'; - Source.title = '_source'; - Source.fieldType = '_source'; + _.class(Source).inherits(FieldFormat); + function Source(params) { + Source.Super.call(this, params); + } - Source.prototype._convert = { - text: angular.toJson, - html: function sourceToHtml(source, field, hit) { - if (!field) return this.getConverter('text')(source, field, hit); + Source.id = '_source'; + Source.title = '_source'; + Source.fieldType = '_source'; - var highlights = (hit && hit.highlight) || {}; - var formatted = field.indexPattern.formatHit(hit); - var highlightPairs = []; - var sourcePairs = []; + Source.prototype._convert = { + text: angular.toJson, + html: function sourceToHtml(source, field, hit) { + if (!field) return this.getConverter('text')(source, field, hit); - _.keys(formatted).forEach(function (key) { - var pairs = highlights[key] ? highlightPairs : sourcePairs; - var field = shortDotsFilter(key); - var val = formatted[key]; - pairs.push([field, val]); - }, []); + var highlights = (hit && hit.highlight) || {}; + var formatted = field.indexPattern.formatHit(hit); + var highlightPairs = []; + var sourcePairs = []; - return template({ defPairs: highlightPairs.concat(sourcePairs) }); - } - }; + _.keys(formatted).forEach(function (key) { + var pairs = highlights[key] ? highlightPairs : sourcePairs; + var field = shortDotsFilter(key); + var val = formatted[key]; + pairs.push([field, val]); + }, []); - return Source; + return template({ defPairs: highlightPairs.concat(sourcePairs) }); + } }; -}); + + return Source; +}; diff --git a/src/ui/public/stringify/types/String.js b/src/ui/public/stringify/types/String.js index 757f149b6b0b72..e5b11c918680fb 100644 --- a/src/ui/public/stringify/types/String.js +++ b/src/ui/public/stringify/types/String.js @@ -1,71 +1,69 @@ import _ from 'lodash'; import 'ui/field_format_editor/samples/samples'; import IndexPatternsFieldFormatFieldFormatProvider from 'ui/index_patterns/_field_format/FieldFormat'; -define(function (require) { - return function _StringProvider(Private) { - var FieldFormat = Private(IndexPatternsFieldFormatFieldFormatProvider); +export default function _StringProvider(Private) { + var FieldFormat = Private(IndexPatternsFieldFormatFieldFormatProvider); - _.class(_String).inherits(FieldFormat); - function _String(params) { - _String.Super.call(this, params); - } - - _String.id = 'string'; - _String.title = 'String'; - _String.fieldType = [ - 'number', - 'boolean', - 'date', - 'ip', - 'attachment', - 'geo_point', - 'geo_shape', - 'string', - 'murmur3', - 'unknown', - 'conflict' - ]; + _.class(_String).inherits(FieldFormat); + function _String(params) { + _String.Super.call(this, params); + } - _String.paramDefaults = { - transform: false - }; + _String.id = 'string'; + _String.title = 'String'; + _String.fieldType = [ + 'number', + 'boolean', + 'date', + 'ip', + 'attachment', + 'geo_point', + 'geo_shape', + 'string', + 'murmur3', + 'unknown', + 'conflict' + ]; - _String.editor = require('ui/stringify/editors/string.html'); + _String.paramDefaults = { + transform: false + }; - _String.transformOpts = [ - { id: false, name: '- none -' }, - { id: 'lower', name: 'Lower Case' }, - { id: 'upper', name: 'Upper Case' }, - { id: 'short', name: 'Short Dots' }, - { id: 'base64', name: 'Base64 Decode'} - ]; + _String.editor = require('ui/stringify/editors/string.html'); - _String.sampleInputs = [ - 'A Quick Brown Fox.', - 'com.organizations.project.ClassName', - 'hostname.net', - 'SGVsbG8gd29ybGQ=' - ]; + _String.transformOpts = [ + { id: false, name: '- none -' }, + { id: 'lower', name: 'Lower Case' }, + { id: 'upper', name: 'Upper Case' }, + { id: 'short', name: 'Short Dots' }, + { id: 'base64', name: 'Base64 Decode'} + ]; - _String.prototype._base64Decode = function (val) { - try { - return window.atob(val); - } catch (e) { - return _.asPrettyString(val); - } - }; + _String.sampleInputs = [ + 'A Quick Brown Fox.', + 'com.organizations.project.ClassName', + 'hostname.net', + 'SGVsbG8gd29ybGQ=' + ]; - _String.prototype._convert = function (val) { - switch (this.param('transform')) { - case 'lower': return String(val).toLowerCase(); - case 'upper': return String(val).toUpperCase(); - case 'short': return _.shortenDottedString(val); - case 'base64': return this._base64Decode(val); - default: return _.asPrettyString(val); - } - }; + _String.prototype._base64Decode = function (val) { + try { + return window.atob(val); + } catch (e) { + return _.asPrettyString(val); + } + }; - return _String; + _String.prototype._convert = function (val) { + switch (this.param('transform')) { + case 'lower': return String(val).toLowerCase(); + case 'upper': return String(val).toUpperCase(); + case 'short': return _.shortenDottedString(val); + case 'base64': return this._base64Decode(val); + default: return _.asPrettyString(val); + } }; -}); + + return _String; +}; diff --git a/src/ui/public/stringify/types/Url.js b/src/ui/public/stringify/types/Url.js index dbbc90e9cae12a..be075f4b56ca53 100644 --- a/src/ui/public/stringify/types/Url.js +++ b/src/ui/public/stringify/types/Url.js @@ -2,131 +2,129 @@ import _ from 'lodash'; import 'ui/field_format_editor/pattern/pattern'; import 'ui/stringify/icons'; import IndexPatternsFieldFormatFieldFormatProvider from 'ui/index_patterns/_field_format/FieldFormat'; -define(function (require) { - return function UrlFormatProvider(Private, highlightFilter) { - - var FieldFormat = Private(IndexPatternsFieldFormatFieldFormatProvider); - +export default function UrlFormatProvider(Private, highlightFilter) { + + var FieldFormat = Private(IndexPatternsFieldFormatFieldFormatProvider); + + + _.class(Url).inherits(FieldFormat); + function Url(params) { + Url.Super.call(this, params); + this._compileTemplate = _.memoize(this._compileTemplate); + } + + Url.id = 'url'; + Url.title = 'Url'; + Url.fieldType = [ + 'number', + 'boolean', + 'date', + 'ip', + 'string', + 'murmur3', + 'unknown', + 'conflict' + ]; + + Url.editor = { + template: require('ui/stringify/editors/url.html'), + controllerAs: 'url', + controller: function ($scope) { + var iconPattern = '/bundles/src/ui/public/stringify/icons/{{value}}.png'; + + this.samples = { + a: [ 'john', '/some/pathname/asset.png', 1234 ], + img: [ 'go', 'stop', ['de', 'ne', 'us', 'ni'], 'cv' ] + }; - _.class(Url).inherits(FieldFormat); - function Url(params) { - Url.Super.call(this, params); - this._compileTemplate = _.memoize(this._compileTemplate); + $scope.$watch('editor.formatParams.type', function (type, prev) { + var params = $scope.editor.formatParams; + if (type === 'img' && type !== prev && !params.urlTemplate) { + params.urlTemplate = iconPattern; + } + }); } + }; - Url.id = 'url'; - Url.title = 'Url'; - Url.fieldType = [ - 'number', - 'boolean', - 'date', - 'ip', - 'string', - 'murmur3', - 'unknown', - 'conflict' - ]; - - Url.editor = { - template: require('ui/stringify/editors/url.html'), - controllerAs: 'url', - controller: function ($scope) { - var iconPattern = '/bundles/src/ui/public/stringify/icons/{{value}}.png'; - - this.samples = { - a: [ 'john', '/some/pathname/asset.png', 1234 ], - img: [ 'go', 'stop', ['de', 'ne', 'us', 'ni'], 'cv' ] - }; - - $scope.$watch('editor.formatParams.type', function (type, prev) { - var params = $scope.editor.formatParams; - if (type === 'img' && type !== prev && !params.urlTemplate) { - params.urlTemplate = iconPattern; - } - }); - } - }; - - Url.templateMatchRE = /{{([\s\S]+?)}}/g; - Url.paramDefaults = { - type: 'a', - urlTemplate: null, - labelTemplate: null - }; - - Url.urlTypes = [ - { id: 'a', name: 'Link' }, - { id: 'img', name: 'Image' } - ]; - - Url.prototype._formatUrl = function (value) { - var template = this.param('urlTemplate'); - if (!template) return value; + Url.templateMatchRE = /{{([\s\S]+?)}}/g; + Url.paramDefaults = { + type: 'a', + urlTemplate: null, + labelTemplate: null + }; - return this._compileTemplate(template)({ - value: encodeURIComponent(value), - rawValue: value - }); - }; + Url.urlTypes = [ + { id: 'a', name: 'Link' }, + { id: 'img', name: 'Image' } + ]; - Url.prototype._formatLabel = function (value, url) { - var template = this.param('labelTemplate'); - if (url == null) url = this._formatUrl(value); - if (!template) return url; + Url.prototype._formatUrl = function (value) { + var template = this.param('urlTemplate'); + if (!template) return value; - return this._compileTemplate(template)({ - value: value, - url: url - }); - }; + return this._compileTemplate(template)({ + value: encodeURIComponent(value), + rawValue: value + }); + }; - Url.prototype._convert = { - text: function (value) { - return this._formatLabel(value); - }, + Url.prototype._formatLabel = function (value, url) { + var template = this.param('labelTemplate'); + if (url == null) url = this._formatUrl(value); + if (!template) return url; - html: function (rawValue, field, hit) { - var url = _.escape(this._formatUrl(rawValue)); - var label = _.escape(this._formatLabel(rawValue, url)); + return this._compileTemplate(template)({ + value: value, + url: url + }); + }; - switch (this.param('type')) { - case 'img': - return '' + label + ''; - default: - if (hit && hit.highlight && hit.highlight[field.name]) { - label = highlightFilter(label, hit.highlight[field.name]); - } + Url.prototype._convert = { + text: function (value) { + return this._formatLabel(value); + }, + + html: function (rawValue, field, hit) { + var url = _.escape(this._formatUrl(rawValue)); + var label = _.escape(this._formatLabel(rawValue, url)); + + switch (this.param('type')) { + case 'img': + return '' + label + ''; + default: + if (hit && hit.highlight && hit.highlight[field.name]) { + label = highlightFilter(label, hit.highlight[field.name]); + } - return '' + label + ''; - } + return '' + label + ''; } - }; - - Url.prototype._compileTemplate = function (template) { - var parts = template.split(Url.templateMatchRE).map(function (part, i) { - // trim all the odd bits, the variable names - return (i % 2) ? part.trim() : part; - }); + } + }; - return function (locals) { - // replace all the odd bits with their local var - var output = ''; - var i = -1; - while (++i < parts.length) { - if (i % 2) { - if (locals.hasOwnProperty(parts[i])) { - var local = locals[parts[i]]; - output += local == null ? '' : local; - } - } else { - output += parts[i]; + Url.prototype._compileTemplate = function (template) { + var parts = template.split(Url.templateMatchRE).map(function (part, i) { + // trim all the odd bits, the variable names + return (i % 2) ? part.trim() : part; + }); + + return function (locals) { + // replace all the odd bits with their local var + var output = ''; + var i = -1; + while (++i < parts.length) { + if (i % 2) { + if (locals.hasOwnProperty(parts[i])) { + var local = locals[parts[i]]; + output += local == null ? '' : local; } + } else { + output += parts[i]; } + } - return output; - }; + return output; }; - - return Url; }; -}); + + return Url; +}; diff --git a/src/ui/public/stringify/types/_Numeral.js b/src/ui/public/stringify/types/_Numeral.js index 20b809fa2028b4..7769319d9d3534 100644 --- a/src/ui/public/stringify/types/_Numeral.js +++ b/src/ui/public/stringify/types/_Numeral.js @@ -2,59 +2,57 @@ import _ from 'lodash'; import 'ui/field_format_editor/numeral/numeral'; import IndexPatternsFieldFormatFieldFormatProvider from 'ui/index_patterns/_field_format/FieldFormat'; import BoundToConfigObjProvider from 'ui/bound_to_config_obj'; -define(function (require) { - return function AbstractNumeralFormatProvider(Private) { - var FieldFormat = Private(IndexPatternsFieldFormatFieldFormatProvider); - var BoundToConfigObj = Private(BoundToConfigObjProvider); - var numeral = require('numeral')(); - - _.class(Numeral).inherits(FieldFormat); - function Numeral(params) { - Numeral.Super.call(this, params); +export default function AbstractNumeralFormatProvider(Private) { + var FieldFormat = Private(IndexPatternsFieldFormatFieldFormatProvider); + var BoundToConfigObj = Private(BoundToConfigObjProvider); + var numeral = require('numeral')(); + + _.class(Numeral).inherits(FieldFormat); + function Numeral(params) { + Numeral.Super.call(this, params); + } + + Numeral.prototype._convert = function (val) { + if (val === -Infinity) return '-∞'; + if (val === +Infinity) return '+∞'; + if (typeof val !== 'number') { + val = parseFloat(val); } - Numeral.prototype._convert = function (val) { - if (val === -Infinity) return '-∞'; - if (val === +Infinity) return '+∞'; - if (typeof val !== 'number') { - val = parseFloat(val); - } - - if (isNaN(val)) return ''; - - return numeral.set(val).format(this.param('pattern')); - }; + if (isNaN(val)) return ''; + return numeral.set(val).format(this.param('pattern')); + }; - Numeral.factory = function (opts) { - _.class(Class).inherits(Numeral); - function Class(params) { - Class.Super.call(this, params); - } - Class.id = opts.id; - Class.title = opts.title; - Class.fieldType = 'number'; + Numeral.factory = function (opts) { + _.class(Class).inherits(Numeral); + function Class(params) { + Class.Super.call(this, params); + } - Class.paramDefaults = opts.paramDefaults || new BoundToConfigObj({ - pattern: '=format:' + opts.id + ':defaultPattern', - }); + Class.id = opts.id; + Class.title = opts.title; + Class.fieldType = 'number'; - Class.editor = { - template: opts.editorTemplate || require('ui/field_format_editor/numeral/numeral.html'), - controllerAs: 'cntrl', - controller: opts.controller || function () { - this.sampleInputs = opts.sampleInputs; - } - }; + Class.paramDefaults = opts.paramDefaults || new BoundToConfigObj({ + pattern: '=format:' + opts.id + ':defaultPattern', + }); - if (opts.prototype) { - _.assign(Class.prototype, opts.prototype); + Class.editor = { + template: opts.editorTemplate || require('ui/field_format_editor/numeral/numeral.html'), + controllerAs: 'cntrl', + controller: opts.controller || function () { + this.sampleInputs = opts.sampleInputs; } - - return Class; }; - return Numeral; + if (opts.prototype) { + _.assign(Class.prototype, opts.prototype); + } + + return Class; }; -}); + + return Numeral; +}; diff --git a/src/ui/public/stringify/types/truncate.js b/src/ui/public/stringify/types/truncate.js index ba0a7d8b503323..05d650dbe7a4dc 100644 --- a/src/ui/public/stringify/types/truncate.js +++ b/src/ui/public/stringify/types/truncate.js @@ -1,36 +1,34 @@ import _ from 'lodash'; import IndexPatternsFieldFormatFieldFormatProvider from 'ui/index_patterns/_field_format/FieldFormat'; -define(function (require) { - return function TruncateFormatProvider(Private) { - var FieldFormat = Private(IndexPatternsFieldFormatFieldFormatProvider); - var omission = '...'; - - _.class(Truncate).inherits(FieldFormat); - - function Truncate(params) { - Truncate.Super.call(this, params); +export default function TruncateFormatProvider(Private) { + var FieldFormat = Private(IndexPatternsFieldFormatFieldFormatProvider); + var omission = '...'; + + _.class(Truncate).inherits(FieldFormat); + + function Truncate(params) { + Truncate.Super.call(this, params); + } + + Truncate.id = 'truncate'; + Truncate.title = 'Truncated String'; + Truncate.fieldType = ['string']; + + Truncate.prototype._convert = function (val) { + var length = this.param('fieldLength'); + if (length > 0) { + return _.trunc(val, { + 'length': length + omission.length, + 'omission': omission + }); } - Truncate.id = 'truncate'; - Truncate.title = 'Truncated String'; - Truncate.fieldType = ['string']; - - Truncate.prototype._convert = function (val) { - var length = this.param('fieldLength'); - if (length > 0) { - return _.trunc(val, { - 'length': length + omission.length, - 'omission': omission - }); - } - - return val; - }; + return val; + }; - Truncate.editor = require('ui/stringify/editors/truncate.html'); + Truncate.editor = require('ui/stringify/editors/truncate.html'); - Truncate.sampleInput = [ require('ui/stringify/samples/large.html') ]; + Truncate.sampleInput = [ require('ui/stringify/samples/large.html') ]; - return Truncate; - }; -}); \ No newline at end of file + return Truncate; +}; \ No newline at end of file diff --git a/src/ui/public/styleCompile/styleCompile.js b/src/ui/public/styleCompile/styleCompile.js index 7baf17dfbe0ea0..46ca2665439070 100644 --- a/src/ui/public/styleCompile/styleCompile.js +++ b/src/ui/public/styleCompile/styleCompile.js @@ -1,30 +1,28 @@ import _ from 'lodash'; import $ from 'jquery'; import 'ui/config'; -define(function (require) { - var $style = $('