Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,7 @@
class="fullWidth"
>
<div ng-if="vis.type.requiresSearch && state.linked">
Linked to Saved Search
{{ ::'kbn.visualize.linkedToSearchInfoText' | i18n: { defaultMessage: 'Linked to Saved Search' } }}
<a
href="#/discover/{{savedVis.savedSearch.id}}"
>
Expand All @@ -30,7 +30,7 @@
data-test-subj="unlinkSavedSearch"
href=""
ng-dblclick="unlink()"
tooltip="Double click to unlink from Saved Search"
tooltip="{{ ::'kbn.visualize.linkedToSearch.unlinkButtonTooltip' | i18n: { defaultMessage: 'Double click to unlink from Saved Search' } }}"
>
<span aria-hidden="true" class="kuiIcon fa-chain-broken"></span>
</a>
Expand Down
80 changes: 62 additions & 18 deletions src/legacy/core_plugins/kibana/public/visualize/editor/editor.js
Original file line number Diff line number Diff line change
Expand Up @@ -52,13 +52,17 @@ uiRoutes
.when(VisualizeConstants.CREATE_PATH, {
template: editorTemplate,
resolve: {
savedVis: function (savedVisualizations, redirectWhenMissing, $route, Private) {
savedVis: function (savedVisualizations, redirectWhenMissing, $route, Private, i18n) {
const visTypes = Private(VisTypesRegistryProvider);
const visType = _.find(visTypes, { name: $route.current.params.type });
const shouldHaveIndex = visType.requiresSearch && visType.options.showIndexSelection;
const hasIndex = $route.current.params.indexPattern || $route.current.params.savedSearchId;
if (shouldHaveIndex && !hasIndex) {
throw new Error('You must provide either an indexPattern or a savedSearchId');
throw new Error(
i18n('kbn.visualize.createVisualization.noIndexPatternOrSavedSearchIdErrorMessage', {
defaultMessage: 'You must provide either an indexPattern or a savedSearchId',
})
);
}

return savedVisualizations.get($route.current.params)
Expand Down Expand Up @@ -115,7 +119,8 @@ function VisEditor(
Promise,
config,
kbnBaseUrl,
localStorage
localStorage,
i18n
) {
const docTitle = Private(DocTitleProvider);
const queryFilter = Private(FilterBarQueryFilterProvider);
Expand All @@ -135,15 +140,19 @@ function VisEditor(
};

$scope.topNavMenu = [{
key: 'save',
description: 'Save Visualization',
key: i18n('kbn.topNavMenu.saveVisualizationButtonLabel', { defaultMessage: 'save' }),
description: i18n('kbn.visualize.topNavMenu.saveVisualizationButtonAriaLabel', {
defaultMessage: 'Save Visualization',
}),
testId: 'visualizeSaveButton',
disableButton() {
return Boolean(vis.dirty);
},
tooltip() {
if (vis.dirty) {
return 'Apply or Discard your changes before saving';
return i18n('kbn.visualize.topNavMenu.saveVisualizationDisabledButtonTooltip', {
defaultMessage: 'Apply or Discard your changes before saving'
});
}
},
run: async () => {
Expand Down Expand Up @@ -176,8 +185,10 @@ function VisEditor(
showSaveModal(saveModal);
}
}, {
key: 'share',
description: 'Share Visualization',
key: i18n('kbn.topNavMenu.shareVisualizationButtonLabel', { defaultMessage: 'share' }),
description: i18n('kbn.visualize.topNavMenu.shareVisualizationButtonAriaLabel', {
defaultMessage: 'Share Visualization',
}),
testId: 'shareTopNavButton',
run: (menuItem, navController, anchorElement) => {
const hasUnappliedChanges = vis.dirty;
Expand All @@ -196,8 +207,10 @@ function VisEditor(
});
}
}, {
key: 'inspect',
description: 'Open Inspector for visualization',
key: i18n('kbn.topNavMenu.openInspectorButtonLabel', { defaultMessage: 'inspect' }),
description: i18n('kbn.visualize.topNavMenu.openInspectorButtonAriaLabel', {
defaultMessage: 'Open Inspector for visualization',
}),
testId: 'openInspectorButton',
disableButton() {
return !vis.hasInspector || !vis.hasInspector();
Expand All @@ -207,12 +220,16 @@ function VisEditor(
},
tooltip() {
if (!vis.hasInspector || !vis.hasInspector()) {
return 'This visualization doesn\'t support any inspectors.';
return i18n('kbn.visualize.topNavMenu.openInspectorDisabledButtonTooltip', {
defaultMessage: `This visualization doesn't support any inspectors.`,
});
}
}
}, {
key: 'refresh',
description: 'Refresh',
key: i18n('kbn.topNavMenu.refreshButtonLabel', { defaultMessage: 'refresh' }),
description: i18n('kbn.visualize.topNavMenu.refreshButtonAriaLabel', {
defaultMessage: 'Refresh',
}),
run: function () {
vis.forceReload();
},
Expand Down Expand Up @@ -288,7 +305,12 @@ function VisEditor(
$state.replace();

$scope.getVisualizationTitle = function getVisualizationTitle() {
return savedVis.lastSavedTitle || `${savedVis.title} (unsaved)`;
return savedVis.lastSavedTitle || i18n('kbn.visualize.topNavMenu.unsavedVisualizationTitle', {
defaultMessage: '{visTitle} (unsaved)',
values: {
visTitle: savedVis.title,
},
});
};

$scope.$watchMulti([
Expand Down Expand Up @@ -374,7 +396,12 @@ function VisEditor(

if (id) {
toastNotifications.addSuccess({
title: `Saved '${savedVis.title}'`,
title: i18n('kbn.visualize.topNavMenu.saveVisualization.successNotificationText', {
defaultMessage: `Saved '{visTitle}'`,
values: {
visTitle: savedVis.title,
},
}),
'data-test-subj': 'saveVisualizationSuccess',
});

Expand Down Expand Up @@ -407,7 +434,12 @@ function VisEditor(
// eslint-disable-next-line
console.error(error);
toastNotifications.addDanger({
title: `Error on saving '${savedVis.title}'`,
title: i18n('kbn.visualize.topNavMenu.saveVisualization.failureNotificationText', {
defaultMessage: `Error on saving '{visTitle}'`,
values: {
visTitle: savedVis.title,
},
}),
text: error.message,
'data-test-subj': 'saveVisualizationError',
});
Expand All @@ -431,14 +463,26 @@ function VisEditor(
searchSource.setField('index', searchSourceParent.getField('index'));
searchSource.setParent(searchSourceGrandparent);

toastNotifications.addSuccess(`Unlinked from saved search '${savedVis.savedSearch.title}'`);
toastNotifications.addSuccess(
i18n('kbn.visualize.linkedToSearch.unlinkSuccessNotificationText', {
defaultMessage: `Unlinked from saved search '{searchTitle}'`,
values: {
searchTitle: savedVis.savedSearch.title
}
})
);

$scope.fetch();
};


$scope.getAdditionalMessage = () => {
return `<i class="kuiIcon fa-flask"></i> This visualization is marked as experimental. ${vis.type.feedbackMessage}`;
return (
'<i class="kuiIcon fa-flask"></i>' +
i18n('kbn.visualize.experimentalVisInfoText', { defaultMessage: 'This visualization is marked as experimental.' }) +
' ' +
vis.type.feedbackMessage
);
};

init();
Expand Down
Original file line number Diff line number Diff line change
@@ -1,5 +1,15 @@
<div class="visDisabledLabVisualization">
<div class="kuiVerticalRhythm visDisabledLabVisualization__icon kuiIcon fa-flask" aria-hidden="true"></div>
<div class="kuiVerticalRhythm"><em class="visDisabledLabVisualization__title"></em> is a lab visualization.</div>
<div class="kuiVerticalRhythm">Please turn on lab-mode in the advanced settings to see lab visualizations.</div>
<div
class="kuiVerticalRhythm"
><em class="visDisabledLabVisualization__title"></em>
{{ ::'kbn.visualize.embeddableVisualization.labVisualizationInfoText' | i18n: {
defaultMessage: 'is a lab visualization.',
description: 'Part of "{visTitle} is a lab visualization."' } }}
</div>
<div
class="kuiVerticalRhythm"
i18n-id="kbn.visualize.embeddableVisualization.labModeHelpText"
i18n-default-message="Please turn on lab-mode in the advanced settings to see lab visualizations."
></div>
</div>
9 changes: 7 additions & 2 deletions src/legacy/core_plugins/kibana/public/visualize/index.js
Original file line number Diff line number Diff line change
Expand Up @@ -57,11 +57,16 @@ uiRoutes
redirectTo: VisualizeConstants.WIZARD_STEP_1_PAGE_PATH,
});

FeatureCatalogueRegistryProvider.register(() => {
FeatureCatalogueRegistryProvider.register(i18n => {
return {
id: 'visualize',
title: 'Visualize',
description: 'Create visualizations and aggregate data stores in your Elasticsearch indices.',
description: i18n(
'kbn.visualize.visualizeDescription',
{
defaultMessage: 'Create visualizations and aggregate data stores in your Elasticsearch indices.',
}
),
icon: 'visualizeApp',
path: `/app/kibana#${VisualizeConstants.LANDING_PAGE_PATH}`,
showOnHomePage: true,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,7 @@
*/

import React from 'react';
import { injectI18n, FormattedMessage } from '@kbn/i18n/react';

import {
KuiEmptyTablePrompt,
Expand All @@ -26,7 +27,7 @@ import {
KuiButtonIcon,
} from '@kbn/ui-framework/components';

export function NoVisualizationsPrompt({ onCreateVis }) {
function NoVisualizationsPromptUi({ onCreateVis, intl }) {
return (
<KuiEmptyTablePromptPanel>
<KuiEmptyTablePrompt
Expand All @@ -36,11 +37,19 @@ export function NoVisualizationsPrompt({ onCreateVis }) {
buttonType="primary"
icon={<KuiButtonIcon type="create"/>}
>
Create a visualization
<FormattedMessage
id="kbn.visualize.listing.noVisualizations.createVisualizationButtonLabel"
defaultMessage="Create a visualization"
/>
</KuiButton>
}
message="Looks like you don't have any visualizations. Let's create some!"
message={intl.formatMessage({
id: 'kbn.visualize.listing.noVisualizationsText',
defaultMessage: `Looks like you don't have any visualizations. Let's create some!`,
})}
/>
</KuiEmptyTablePromptPanel>
);
}

export const NoVisualizationsPrompt = injectI18n(NoVisualizationsPromptUi);
Original file line number Diff line number Diff line change
Expand Up @@ -10,9 +10,10 @@
class="kuiLocalTitle"
role="heading"
aria-level="1"
ng-if="listingController.showPluginBreadcrumbs">
Visualize
</div>
ng-if="listingController.showPluginBreadcrumbs"
i18n-id="kbn.visualize.listing.topLeftCornerTitle"
i18n-default-message="Visualize"
></div>
</div>
</div>
</kbn-top-nav>
Expand All @@ -24,7 +25,26 @@
<div class="kuiInfoPanel kuiInfoPanel--warning">
<div class="kuiInfoPanelBody">
<div class="kuiInfoPanelBody__message">
You have {{ listingController.totalItems }} visualizations, but your "listingLimit" setting prevents the table below from displaying more than {{ listingController.listingLimit }}. You can change this setting under <a kbn-href="#/management/kibana/settings" class="kuiLink">Advanced Settings</a>.
<span
i18n-id="kbn.visualize.listing.listingLimitHelpText"
i18n-default-message="You have {totalItems} visualizations, but your &quot;listingLimit&quot;
setting prevents the table below from displaying more than {listingLimit}.
You can change this setting under"
i18n-values="{
totalItems: listingController.totalItems,
listingLimit: listingController.listingLimit
}"
i18n-description="Part of composite text kbn.visualize.listing.listingLimitHelpText +
kbn.visualize.listing.listingLimitAdvancedSettingsLinkText"
></span>
<a
kbn-href="#/management/kibana/settings"
class="kuiLink"
i18n-id="kbn.visualize.listing.listingLimitAdvancedSettingsLinkText"
i18n-default-message="Advanced Settings"
i18n-description="Part of composite text kbn.visualize.listing.listingLimitHelpText +
kbn.visualize.listing.listingLimitAdvancedSettingsLinkText"
></a>.
</div>
</div>
</div>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -23,17 +23,17 @@ import 'ui/pager';
import { uiModules } from 'ui/modules';
import { timefilter } from 'ui/timefilter';
import { VisTypesRegistryProvider } from 'ui/registry/vis_types';
import { i18n } from '@kbn/i18n';
import chrome from 'ui/chrome';

import { VisualizeListingTable } from './visualize_listing_table';
import { NewVisModal } from '../wizard/new_vis_modal';
import { VisualizeConstants } from '../visualize_constants';

import { i18n } from '@kbn/i18n';
import { injectI18nProvider } from '@kbn/i18n/react';

const app = uiModules.get('app/visualize', ['ngRoute', 'react']);
app.directive('visualizeListingTable', reactDirective => reactDirective(VisualizeListingTable));
app.directive('visualizeListingTable', reactDirective => reactDirective(injectI18nProvider(VisualizeListingTable)));
app.directive('newVisModal', reactDirective => reactDirective(injectI18nProvider(NewVisModal)));

export function VisualizeListingController($injector, createNewVis) {
Expand Down
Loading