- Icon, Link, Button, TextInput, CheckBox, Table, ControlledTable, ToolBar, ToolBarFooter.
- Update Local Nav to use classes with kui prefix.
- Add PostCSS loader to UI Framework webpack.
* Add low level i18n plugin
Manages languages that are available and is responsible for loading translated
content at the granularity of a plugin.
To be done:
- APIs for store and retrieval
* Use Kibana install as root for the translation store directory
Setting the path for storing the bundled language translation files to
<KIBANA_INSTALL>/data/store_translations/<PLUGIN_NAME>
* Updated i18n core plugin APIs to be asynchronous
To be done:
- Better error handling in APIs
- Fix threading issue with storePluginLanguageTranslations API
* Fix thread synchroization issue in storePluginLanguageTranslations
* Update error handling in i18n core plugin
* Change to use NodeJS mkdirp function for creating directories recursively
Updates with review comments from @srl295. Changed export syntax to show the
exported functions at end of file.
* Add REST API for getting translations of a language for a plugin
To be done:
- Add algorithm to decide on the language for a plugin by comparing the accept languages
from the REST call and the plugin supported languages
- Add REST API tests
* Add algorithm for determining plugin language when retrieving translations
Client would pass languages used in the 'accept-language' header. These
languages would then be compared against the plugin supported languages
and best compared language would be selected.
To be done:
- Add REST API tests
* Add API to return all registered plugin language translations
* Add HAPI API to get all plugins translation files
* Update register translations API to be independent of plugin name and language
The register API is updated to be independent of plugin name and language. The API will now
traverse the path given and create language bundles as per language files it traverses.
The translations files structure has also been simplified to be just key/value objects.
To be done:
- Add hapi API to get translations
- Extend the API tests to test responses
* Update API test
* Add eslint fix for API test
* Update with review comments
From review https://github.com/elastic/kibana/pull/7545#issuecomment-231147435
following comments updated:
- README, .gitignore, and .eslintrc are not needed in a core plugin
- package.json only needs name and version
- unit tests need to go in a tests directory otherwise they won't get picked up
by the grunt tasks. Also our convention is to name the test file with the same
name as the module it's testing (so i18n_tests.js should just be i18n.js)
- For consistency with the rest of the code base, rename the data directory to fixtures.
- Prefer const (or let if necessary). Don't use var.
- Use ES6 imports/exports rather than commonjs style
- Only export the i18n module's public API. For instance, I don't think getPluginTranslationDetails is used outside of the i18n module, so it shouldn't be exposed publicly. If you want to expose it for testing purposes, I would recommend creating an i18n directory with an index.js file that exports the module's public API, and a separate i18n.js file with the "private" API. index.js will be for public use, i18n.js will be for private internal use.
* Update after review comments
From review (https://github.com/elastic/kibana/pull/7545#issuecomment-231884490):
- i18n module API should return promises for async operations instead of using
callbacks
- All filesystem access should be async
- Unit tests need to be updated based on new proposed plugin structure
(single language file, not split by view)
From design (https://github.com/elastic/kibana/issues/6515#issuecomment-231400097):
- Removed API as will consider in later phase
TODO:
- Make write function async
* Update after review comments
Updated write function to be asynchronous
* Update registerTranslations API to take absolute translation file as argument
The API originally took the directory as the argument but following reviews it
was decided to change to absolute file because it will be less brittle
since it is more explicit.
* Translate the Kibana welcome message
Translates the start-up message (“Kibana is loading ...”)in the Jade template.
To be done:
- Means to register the core plugin translations. They are currently added
in the fixtures directory as static files. Need to be generated on the fly.
* Add build task to generate core plugin translations
Task which calls registerTranslations API and then a task which copies the
regsitered translations to <kibana_root>/build/kibana
* Add hook to optimize module to add registration during dev startup
Registration of the core plugin translations during development start of
Kibana server. The translations include the welcome message and server error
startup message.
* Handle scenario when the user preferred language header is not passed
The UI when loading asks i18n plugin which language translation to use
depending on the user preferred language header 'accept-language'.
This commit is to handle scenario where header is not passed. The algorithm
then chooses the default language.
* Replace registering of translations at plugin install time to the plugin init phase
This change follows review comments in:
https://github.com/elastic/kibana/issues/6515#issuecomment-236237218
* Update after review comments
Comments:
- https://github.com/elastic/kibana/pull/7545#discussion-diff-72890673
- https://github.com/elastic/kibana/pull/7545#discussion-diff-72894762
* Update after plugin folder layout changes in Kibana
This require to use <kibana_root>/data for registered translations
and i18n plugin moved to core_plugins from plugins.
Refer to PR for more details:
https://github.com/elastic/kibana/pull/7562
* Update translation registration to file path rather than bundling
After review discussions it was agreed to just register the absolute paths
to translation files rather than bundling each file into one central file
at registration.
* Update review comments
This commit contains the following review comments:
- https://github.com/elastic/kibana/pull/7545#discussion-diff-74661282
- https://github.com/elastic/kibana/pull/7545#discussion-diff-74661392
- https://github.com/elastic/kibana/pull/7545#discussion-diff-74662271
- https://github.com/elastic/kibana/pull/7545#discussion-diff-74663235
- https://github.com/elastic/kibana/pull/7545#discussion-diff-74669201
- https://github.com/elastic/kibana/pull/7545#discussion-diff-74669269
- https://github.com/elastic/kibana/pull/7545#discussion-diff-74669419
- https://github.com/elastic/kibana/pull/7545#discussion-diff-74669628
- https://github.com/elastic/kibana/pull/7545#discussion-diff-74799382
* Update review comments
The following review comments are included in the commit:
- https://github.com/elastic/kibana/pull/7545#discussion_r74663515
- https://github.com/elastic/kibana/pull/7545#discussion_r74666995
- https://github.com/elastic/kibana/pull/7545#discussion_r74805552
* Expose the i18n APIs in the server object for plugin access
Plugins should call the i18n plugin APIs through the server object
and not directly from the module.
This closes he following comments:
- https://github.com/elastic/kibana/pull/7545#discussion_r74662598
- https://github.com/elastic/kibana/pull/7545#discussion_r74669327
- https://github.com/elastic/kibana/pull/7545#discussion_r74669765
* Update accept-language-parser module to 1.2.0
Module version 1.2.0 fixes issue:
https://github.com/opentable/accept-language-parser/issues/8
This commit updates review comments:
https://github.com/elastic/kibana/pull/7545#discussion-diff-75525214https://github.com/elastic/kibana/pull/7545#issuecomment-240290461
* Add i18n default locale as a configurable item
Adds 'defaultLocale' configurable item to the i18n plugin configuration.
The default locale is used for translations if the locale specified by user
is not supported.
This commit satisfies the review comment:
- https://github.com/elastic/kibana/pull/7545#discussion-diff-74669970
* Move UI i18n wrapper functionality into a module
This commit better structures the i18n capability so that it can be called
in UI code in a clearly defined fashion with minimum code. It also fixes
potential race conditions.
This commit updates review comments:
- https://github.com/elastic/kibana/pull/7545#discussion-diff-74804791
- https://github.com/elastic/kibana/pull/7545#discussion-diff-74801802
- https://github.com/elastic/kibana/pull/7545#discussion-diff-74670457
* Fill any missing translations using translations from default locale
The default language translations are loaded and are compared against the selected
language translations. The comparison can then highlight any missing translation
keys and can load the default translations keys as needed. This helps to unsure
where possible that a translation string is available in most scenarios even if not
in the locale requested.
This commit resolves review comments:
- https://github.com/elastic/kibana/pull/7545#issuecomment-239202583
- https://github.com/elastic/kibana/pull/7545#issuecomment-239203734
* Add unit tests for the i18n UI wrapper functions
* Fix issues after rebase with master
* Add translation keys verification tool
This tool helps to check that translation keys are translated. This tool can be
used for non-angular translation constructs like the Jade templates.
* Updates after review comments
Updates for review comments:
https://github.com/elastic/kibana/pull/7545#pullrequestreview-3748114
* Update after review comments
Update for review comments:
https://github.com/elastic/kibana/pull/7545#pullrequestreview-3937958
To be done:
- Update of unit tests for UI and server
- Call of verify translations
* Update unit tests after review changes
There was a number of changes to the i18n module and the ui i18n wrapper
following review comments. This commit is to update the unit tests with
respect.
* Add build task for verify translations
* Update the kibana i18n IDs to be prefixed with kibana
* Update verify translations to test registered translations
It was testing the static translation files. It is now updated to
test the translations registered when Kibana server is started and
the plugins have initialized.
* Update after review comments
Updates following review comments:
https://github.com/elastic/kibana/pull/7545#pullrequestreview-5529711
* Update after review
This commit contain updates after the following review:
https://github.com/elastic/kibana/pull/7545#pullrequestreview-5707951
* Updates after review
Updates for review comments:
https://github.com/elastic/kibana/pull/7545#pullrequestreview-6656571
* Update after review
Updates for the following review comments:
https://github.com/elastic/kibana/pull/7545#pullrequestreview-6911265
* Update after review
Updates after the following review comments:
https://github.com/elastic/kibana/pull/7545#pullrequestreview-7084765
* Update unit tests to use expect throwError
* Update after rebase with master
Loading message changed following merge of commit
26c53e8a8d (diff-e25d7fee746a4f249e17f87c02fd95f8R55)
This required update to the welcome message and how it is called.
* Update following review
Updated the following review comments:
https://github.com/elastic/kibana/pull/7545#pullrequestreview-9297662
* Update the algorithm to return the locale
The algorithm to return which locale to use for translations based on the user
locale list and the regsitered locales is updated in this commit. The algorithm
previously did an exact match on all the user locales first before (by priority)
then checking for best case match. The algorithm is now modified to check each
user locale starting with the highest priority first for an exact match and then
for best case match. If no match it then moves to the next user locale with
the next highest priority. This is to follow the priority list that a user
browser is configured for where there maybe a locale translation available
but might not be the exact match with regard to the locale code and/or script.
An example of this is that the highest priority locale of the user is 'en-US'
but the locale translation available is 'en'. It is better select the 'en'
locale rather than select the next highest locale which is an exact match.
* Update after review comments
Updates after the following reviews:
https://github.com/elastic/kibana/pull/7545#pullrequestreview-9785665https://github.com/elastic/kibana/pull/7545#pullrequestreview-9786404
* Fix after merge with master
Change in the flo and layout of ui index meant that acceptLanguages were not
being passed. This commit is an update to fix this so that the welcome
messages are loaded.
* Update after review comments
This commit is for updates after the following review:
https://github.com/elastic/kibana/pull/7545#pullrequestreview-10435175
* Fix issue when unit test run in CI as core translations are registered
When unit tests are run on a test server (like in the CI), it will start
Kibana server and register the core translations. This means that the i18n
unit tests need to be able to store the existing registration prior to
testing and replace after testing.
* [server/ui] move i18n into ui module
* [server/ui] restore renderApp() method signature
* [server/ui] unify i18n logic in UiI18n class
* [server] move translation files into "translations" dir
* Update i18n module to loaded by multiple server instances within the one process
* Update i18n module to a class
Moving the i18n module into a class so as to encapsulate the registered
translations which means there can be different and distinct instances per process.
This is to accomodate the user case where there might be multiple Kibana server
instances in a process and the localization should be at the server level.
* Identify private members in a class with underscore-prefix convention
* Remove redundant translation from core translation file
Message starting with 'Give me a moment...' is no longer part of loading
message folowing a rebase with master.
* [ui/i18n] reject translations files that do not use absolute paths
* Update config item locale to defaultLocale
* Update after review comments
- Update after following review: https://github.com/elastic/kibana/pull/7545#pullrequestreview-12775161
- Also, fix syntax mess following rebase with master of src/optimize/index.js
* Fix rebase with master error
* Add task for verifying translations in CI
* Fix lint errors
* [uiFramework] include sass deps in production so we can rebuild
* [build] do not copy the doc_site source into the final build
* [licenses] allow code that uses the `Unlicense`
Migrate UI Framework source into Kibana.
- Add dependencies to package.json.
- Add task for building UI Framework docs and serving locally.
- Import UI Framework scss from autoload/styles.js instead of importing the CSS in base.less.
- Refactor UI Framework directory structure.
- Remove babel-polyfill.
- Include SCSS synchronously.
* Add close button to localNavDropdowns.
- Make Timelion docs dropdown scroll only the table.
- Make Timelion tutorial a fluid height, instead of fixed.
* Use chevron for localDropdownCloseButton.
* upgrade eslint, all related deps, and config files
* replace gruntify-eslint with basic eslint-cli wrapper
* arrow-IIFEs must be invoked outside of the parens
* move import statements before their use
* reindent to satisfy new indentation check algorithm
* place missing semicolon
* ignore copy-pasted decode geohash code
* [grunt/eslint] fix argument spacing
* [gurnt/eslint] add comment about contents of report
* [grunt/tasks] use `export default`
A tag cloud visualization is a visual representation of text data, typically used to visualize free form text. Tags are usually single words. The font size of word corresponds with its importance.
* [uiExports] add replaceInjectedVars() export type
* [ui] do not assume es plugin is always there
* [server/status] fix typo
* [ui] add errror handling to /app/{id} endpoint
* [ui] add tests for replaceInjectedVars()
* [npm] swap out jsdom with cheerio
* [server/ui] continue extender => replacer rename
- Migrate to new localNav component and subcomponent styles.
- Add support for multi-slot transclusion to kbnTopNav.
- Update Dashboard, Discover, Management, Visualize, Dev Tools, Timelion to use kbnTopNav consistently.
- Update these apps to also display localNavDropdowns consistently, including Timepicker (this mostly meant adding titles).
- Add checkLicenses npm script.
- Add .fullWidth utility class and use it to make search forms 100% width.
As of Node 6, crypto.pbkdf emits a deprecation warning when the digest isn't explicily set. Under certain conditions we are seeing this warning from Hapi's dependency Iron. Iron resolved this issue as of 4.0.4, which was introduced into Hapi as of 14.0.0.
Node deprecation: 8e8959d3ee
Iron's resolution: 9e0a1ef592
As of Hapi v9, they have removed three build-in plugins from the core which we rely on inert (files and directories), vision (view templates), and h2o2 (proxy). https://github.com/hapijs/hapi/issues/2682
Signed-off-by: Tyler Smalley <tyler.smalley@elastic.co>
- Remove share_object_url.
- Remove clipboard npm dependency.
- Add toggle for switching between Short and Long URLs.
- Add ability to share embedded iframe to saved visualizations, including current global state.
By default, the url.format function stringifies the query object and encodes each parameter with `encodeURIComponent()`. This is effective, but does not match the native browser behavior, which is to only encode the non-`pchar` characters as defined by [rfc3986][1]. Because of this, angular's `$location.search()` function uses a function internally called `encodeUriQuery()` to mimic the browser behavior before updating `location.href`.
To bring the same funtionality to the `unhashUrl()` function, the `encodeUriQuery()` was extracted into it's own package and used as the escape handler for `querystring.stringify()`
[1]: https://www.ietf.org/rfc/rfc3986.txt
The tests in master are currently failing regularly because our current browser tests are serious memory hogs. Investigation reveals that nearly every test is retaining all of the memory it causes to be allocated. We have made some progress to being able to diagnose the problems, but we expect that problem to take some serious work to fix. We need a short-term solution though, and this is it.
Rather than modify the bundling process, we will shard the top-level test suites by name. For now, we've created 4 shards, but adding new shards is trivial if we need to.
Sharding is accomplished by creating a murmur3 hash of the top level suite names, then bucketing based on the hash output. If a test suite resolves to shard2, but we are running shard1, we simply never pass the function to `mocha.describe()`. Rather than redefine every describe statement, we have shimmed the global `window.describe()` function to accomplish this.
Production builds should never be published directly from a local
machine. Instead, the release command will now publish to a
commit-specific staging URL, so you use it to publish a release
candidate, and then when those builds have been verified, you need to
copy the RC builds from on the staging location on s3 to the production
folder.
- Add 'test:visualRegression' grunt task.
- Run 'test:visualRegression' as part of npm script 'test'.
- Add 'clean:screenshots task'.
- Clean screenshots/session when funtional tests are run.
The default behavior of the build task is to now apply the -snapshot
suffix dynamically rather than us manually hardcoding and managing it
within the source code itself. The `--release` flag will drop the
-snapshot suffix on a build, which should be used for any release
candidate.
The default behavior of the build task has also changed to create
rpm/deb packages as well. Since we've only confirmed that this works on
linux, you can override that behavior by passing `skip-os-packages`.
If you do not want to create any zip or tar.gz archives, you can pass
`--skip-archives`.
- Remove test/output and added test/screenshots (requires a Jenkins change).
- Add test/screenshots/baseline images. These document the expected state of the UI.
- Add dependency on image-diff package.
- Add utilities/compareScreenshots.js, which can be run via 'npm run compareScreenshots'.
Datemath was already pulled out into an npm module so it could be reused
in the reporting plugin, so this should essentially be a noop on the
resulting source.
Rison was already pulled out into an npm module so it could be reused in
the reporting plugin, so this should essentially be a noop on the
resulting source.
The rison file was originally copied and pasted directly into the Kibana
project, so it doesn't match our styleguide and is unlintable. This
means we basically have to keep our hands off of it. The node module
also has the benefit of including some tests.
Unfortunately, the old version of bunyan we were depending on has a
compilation failure during npm install, so we need to upgrade it in
order to get more builds.
Different versions of makelogs are required based on the current Kibana
branch/version, so we now include it as a dev dependency that we can
version accordingly.
There is also an npm script for makelogs so you do not need to traverse
the node_modules bin directory.
CSS
#16492: Use @input-border-radius variables on input groups.
#16529: Un-style the caret on <select>s in IE10+.
#16562, #16563: Create and implement a new @dl-horizontal-breakpoint variable to replace the @grid-float-breakpoint on .dl-horizontal.
#16646, #16651: Fix hover border covering active links in pagination.
#16684: Fix border-radius not being set on two corners of vertical btn group.
#16718: Full 4-digit Unicode escape sequences in CSS for asterisk and plus Glyphicons.
#16769: Remove the min-height on modal headers and replace with a clearfix to avoid collapsing when no title exists.
#16779: Adjust the padding on jumbotrons within containers.
#16785: Round the padding on containers to match the new rounding of negative margins on rows.
#16796: Ensure carousel controls are clickable in IE9.
#16804: Indicate which buttons in a button group are selected, even when disabled.
#16824: Correct a math error in the padding-top of .control-labels in large and small horizontal forms.
#16975: Use @carousel-control-font-size for in specific pixel values.
#17001: Fix borders on focused inputs in input groups.
JS
#16865: Fix triggering of shown.bs.dropdown & hidden.bs.dropdown events so that relatedTarget property gets set properly.
#16896: Note jQuery v3 incompatibility.
Accessibility
Docs
#16630, #16632: Update mention of not-allowed cursor in disabled checkboxes, radios, and fieldsets docs section.
#16744: Mention in the README where Bootstrap's changelogs can be found.
#16745: Add CHANGELOG.md file that points to GitHub Releases and our blog.
#16747: Document that Collapse and Tab methods are asynchronous.
#16793: Add example with visible <label> and input group addon.
#16888: Add a local jQuery fallback.
#16902: Fix grid in modal example by removing .container-fluid.
#16965: Call out .icon-next, .icon-prev alternative classes for carousel.
#17003: Add .col-offset-0 example addition to docs.
#17726: Clarify the purpose of adding .in to the .fade of the initially-open Tab.
#17729: Add Subresource Integrity (SRI) hashes to BootstrapCDN links
#17742: Add CSS portion of IE10 viewport bug workaround to docs & examples
#17809: Note that container: 'body' should be used for tooltips/popovers on tabular elements
#17910: Document that .panel-title overrides the font size of <h1>–<h6> tags
#18080: Document conflict between strict Content Security Policy and inline style attributes of .progress bars, and available workarounds
Packaging
#16710: Add official NuGet package
#16877, #17693: Add support for Meteor 1.2.
Build tools
#16589: Enable source maps for bootstrap.min.css.
#17769: Setup Hound for JSHint linting in pull requests
Customizer
#16897: Clarify that Collapse requires Component animations
Browser bugs
Signed-off-by: Kevin Kirsche <Kev.Kirsche@gmail.com>
#16689: Add Wall of Browser Bugs entry for #16671.
#16691: Add Wall of Browser Bugs entry for #15968.
#16813/#16839: Reported WebKit bug (http://wkbug.com/146896) for #16809, which WebKit then fixed.
#16840: Remove entry from Wall of Browser Bugs because http://wkbug.com/141804 has been fixed.
#16841: Remove entry from Wall of Browser Bugs because http://wkbug.com/139803 has been fixed.
#16842: Remove entry from Wall of Browser Bugs because http://wkbug.com/144990 has been fixed.
#16881: Add Wall of Browser Bugs entry for #16814.
#16908: Remove entry from Wall of Browser Bugs because http://crbug.com/309483 is most likely invalid.
#16994: Add Wall of Browser Bugs entry for #16988.
#17438 / #14237: Add Wall of Browser Bugs entry for http://wkbug.com/149935#17712: Mention Chrome meta-bug on Wall of Browser Bugs
#17753: Remove entry from Wall of Browser Bugs because http://bugzil.la/1048279 was closed as WONTFIX.
#17820: Add Wall of Browser Bugs entry for http://crbug.com/534750#17902: Remove entry from Wall of Browser Bugs because http://wkbug.com/138167 has been fixed.
#17906: Add Wall of Browser Bugs entry for #14975#18111: Add Wall of Browser Bugs entry for http://wkbug.com/150715
When we moved the dev server to use https it became obvious that the Kibana server fails very quick when it receives http traffic. In most cases this is a good thing, but automatically redirecting to https is a far more user-friendly experience.
To do this we tell Hapi to listen to an alternate Server when we are using https. That server is provided by the httpolygot library, which knows how to handle both http and https requests. Then, when the server sees these requests it simply redirects when necessary.
with https://github.com/elastic/kibana/pull/5553 we added command line flags the told mocha it was supposed to use babel. This changes the strategy here and instead uses mocha's -r option (and it's mocha.opts file to specify it). This means that using mocha directly from the command line still works, and that we have a place where we can do other setup work.
"npm run clean" will now find all excess files, confirm they should be deleted, and then delete them. To exclude a file pass it as the --ignore argument