Ver Fonte

Merge branch 'master' into t/63

Maciej Gołaszewski há 6 anos atrás
pai
commit
85b65b9de4
100 ficheiros alterados com 1936 adições e 467 exclusões
  1. 2 2
      packages/ckeditor5-table/.eslintrc.js
  2. 12 12
      packages/ckeditor5-table/.travis.yml
  3. 68 0
      packages/ckeditor5-table/CHANGELOG.md
  4. 1 1
      packages/ckeditor5-table/LICENSE.md
  5. 1 1
      packages/ckeditor5-table/README.md
  6. 2 2
      packages/ckeditor5-table/docs/_snippets/features/build-table-source.js
  7. 2 2
      packages/ckeditor5-table/docs/_snippets/features/table.js
  8. 21 15
      packages/ckeditor5-table/docs/features/table.md
  9. 12 1
      packages/ckeditor5-table/lang/translations/ar.po
  10. 89 0
      packages/ckeditor5-table/lang/translations/az.po
  11. 12 1
      packages/ckeditor5-table/lang/translations/cs.po
  12. 12 1
      packages/ckeditor5-table/lang/translations/de-ch.po
  13. 14 3
      packages/ckeditor5-table/lang/translations/de.po
  14. 14 3
      packages/ckeditor5-table/lang/translations/en-au.po
  15. 12 1
      packages/ckeditor5-table/lang/translations/en.po
  16. 89 0
      packages/ckeditor5-table/lang/translations/es.po
  17. 15 4
      packages/ckeditor5-table/lang/translations/et.po
  18. 12 1
      packages/ckeditor5-table/lang/translations/fa.po
  19. 14 3
      packages/ckeditor5-table/lang/translations/fi.po
  20. 21 10
      packages/ckeditor5-table/lang/translations/fr.po
  21. 14 3
      packages/ckeditor5-table/lang/translations/gl.po
  22. 12 1
      packages/ckeditor5-table/lang/translations/hr.po
  23. 14 3
      packages/ckeditor5-table/lang/translations/hu.po
  24. 89 0
      packages/ckeditor5-table/lang/translations/id.po
  25. 14 3
      packages/ckeditor5-table/lang/translations/it.po
  26. 12 1
      packages/ckeditor5-table/lang/translations/ja.po
  27. 14 3
      packages/ckeditor5-table/lang/translations/ku.po
  28. 89 0
      packages/ckeditor5-table/lang/translations/lt.po
  29. 12 1
      packages/ckeditor5-table/lang/translations/nb.po
  30. 14 3
      packages/ckeditor5-table/lang/translations/ne.po
  31. 12 1
      packages/ckeditor5-table/lang/translations/nl.po
  32. 12 1
      packages/ckeditor5-table/lang/translations/no.po
  33. 12 1
      packages/ckeditor5-table/lang/translations/pl.po
  34. 14 3
      packages/ckeditor5-table/lang/translations/pt-br.po
  35. 16 5
      packages/ckeditor5-table/lang/translations/ru.po
  36. 14 3
      packages/ckeditor5-table/lang/translations/sk.po
  37. 12 1
      packages/ckeditor5-table/lang/translations/sq.po
  38. 89 0
      packages/ckeditor5-table/lang/translations/sr-latn.po
  39. 89 0
      packages/ckeditor5-table/lang/translations/sr.po
  40. 89 0
      packages/ckeditor5-table/lang/translations/sv.po
  41. 14 3
      packages/ckeditor5-table/lang/translations/tr.po
  42. 14 3
      packages/ckeditor5-table/lang/translations/uk.po
  43. 89 0
      packages/ckeditor5-table/lang/translations/vi.po
  44. 14 3
      packages/ckeditor5-table/lang/translations/zh-cn.po
  45. 89 0
      packages/ckeditor5-table/lang/translations/zh.po
  46. 28 24
      packages/ckeditor5-table/package.json
  47. 3 4
      packages/ckeditor5-table/src/commands/insertcolumncommand.js
  48. 3 4
      packages/ckeditor5-table/src/commands/insertrowcommand.js
  49. 3 4
      packages/ckeditor5-table/src/commands/inserttablecommand.js
  50. 4 5
      packages/ckeditor5-table/src/commands/removecolumncommand.js
  51. 2 2
      packages/ckeditor5-table/src/commands/removerowcommand.js
  52. 2 2
      packages/ckeditor5-table/src/commands/setheadercolumncommand.js
  53. 2 2
      packages/ckeditor5-table/src/commands/setheaderrowcommand.js
  54. 3 4
      packages/ckeditor5-table/src/commands/splitcellcommand.js
  55. 2 2
      packages/ckeditor5-table/src/commands/utils.js
  56. 44 33
      packages/ckeditor5-table/src/converters/downcast.js
  57. 17 4
      packages/ckeditor5-table/src/converters/table-cell-content-post-fixer.js
  58. 2 2
      packages/ckeditor5-table/src/converters/table-layout-post-fixer.js
  59. 19 3
      packages/ckeditor5-table/src/converters/tablecell-post-fixer.js
  60. 2 2
      packages/ckeditor5-table/src/converters/upcasttable.js
  61. 10 2
      packages/ckeditor5-table/src/table.js
  62. 13 17
      packages/ckeditor5-table/src/tableediting.js
  63. 8 31
      packages/ckeditor5-table/src/tabletoolbar.js
  64. 2 2
      packages/ckeditor5-table/src/tableui.js
  65. 2 2
      packages/ckeditor5-table/src/tableutils.js
  66. 7 7
      packages/ckeditor5-table/src/tablewalker.js
  67. 2 2
      packages/ckeditor5-table/src/ui/inserttableview.js
  68. 20 14
      packages/ckeditor5-table/src/utils.js
  69. 8 14
      packages/ckeditor5-table/tests/_utils/utils.js
  70. 2 2
      packages/ckeditor5-table/tests/commands/insertcolumncommand.js
  71. 2 2
      packages/ckeditor5-table/tests/commands/insertrowcommand.js
  72. 2 2
      packages/ckeditor5-table/tests/commands/inserttablecommand.js
  73. 2 2
      packages/ckeditor5-table/tests/commands/removecolumncommand.js
  74. 2 2
      packages/ckeditor5-table/tests/commands/removerowcommand.js
  75. 2 2
      packages/ckeditor5-table/tests/commands/setheadercolumncommand.js
  76. 2 2
      packages/ckeditor5-table/tests/commands/setheaderrowcommand.js
  77. 2 2
      packages/ckeditor5-table/tests/commands/splitcellcommand.js
  78. 2 2
      packages/ckeditor5-table/tests/commands/utils.js
  79. 76 7
      packages/ckeditor5-table/tests/converters/downcast.js
  80. 102 2
      packages/ckeditor5-table/tests/converters/table-cell-content-post-fixer.js
  81. 2 2
      packages/ckeditor5-table/tests/converters/table-layout-post-fixer.js
  82. 56 3
      packages/ckeditor5-table/tests/converters/tablecell-post-fixer.js
  83. 5 6
      packages/ckeditor5-table/tests/converters/upcasttable.js
  84. 2 2
      packages/ckeditor5-table/tests/integration.js
  85. 3 6
      packages/ckeditor5-table/tests/manual/table.js
  86. 12 0
      packages/ckeditor5-table/tests/manual/tableblockcontent.html
  87. 6 5
      packages/ckeditor5-table/tests/manual/tableblockcontent.js
  88. 1 0
      packages/ckeditor5-table/tests/manual/tableblockcontent.md
  89. 16 16
      packages/ckeditor5-table/tests/table-integration.js
  90. 2 2
      packages/ckeditor5-table/tests/table.js
  91. 81 5
      packages/ckeditor5-table/tests/tableediting.js
  92. 45 87
      packages/ckeditor5-table/tests/tabletoolbar.js
  93. 2 2
      packages/ckeditor5-table/tests/tableui.js
  94. 2 2
      packages/ckeditor5-table/tests/tableutils.js
  95. 2 2
      packages/ckeditor5-table/tests/tablewalker.js
  96. 2 2
      packages/ckeditor5-table/tests/ui/inserttableview.js
  97. 1 1
      packages/ckeditor5-table/theme/icons/table-column.svg
  98. 1 1
      packages/ckeditor5-table/theme/icons/table-merge-cell.svg
  99. 1 1
      packages/ckeditor5-table/theme/icons/table-row.svg
  100. 2 2
      packages/ckeditor5-table/theme/inserttable.css

+ 2 - 2
packages/ckeditor5-table/.eslintrc.js

@@ -1,6 +1,6 @@
 /**
 /**
- * @license Copyright (c) 2003-2018, CKSource - Frederico Knabben. All rights reserved.
- * For licensing, see LICENSE.md.
+ * @license Copyright (c) 2003-2019, CKSource - Frederico Knabben. All rights reserved.
+ * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license
  */
  */
 
 
 /* eslint-env node */
 /* eslint-env node */

+ 12 - 12
packages/ckeditor5-table/.travis.yml

@@ -1,33 +1,33 @@
 sudo: required
 sudo: required
 dist: trusty
 dist: trusty
 addons:
 addons:
+  chrome: stable
   firefox: latest
   firefox: latest
-  apt:
-    sources:
-    - google-chrome
-    packages:
-    - google-chrome-stable
 language: node_js
 language: node_js
+cache:
+  yarn: true
 node_js:
 node_js:
 - '8'
 - '8'
-cache:
-- node_modules
 branches:
 branches:
-   except:
-   - stable
+  except:
+  - stable
 before_install:
 before_install:
+- export START_TIME=$( date +%s )
 - export DISPLAY=:99.0
 - export DISPLAY=:99.0
 - sh -e /etc/init.d/xvfb start
 - sh -e /etc/init.d/xvfb start
-- npm config set package-lock false
-- npm i -g npm@^5.7.1
+- npm i -g yarn
 install:
 install:
-- npm install @ckeditor/ckeditor5-dev-tests
+- yarn add @ckeditor/ckeditor5-dev-tests
 - ckeditor5-dev-tests-install-dependencies
 - ckeditor5-dev-tests-install-dependencies
 script:
 script:
 - ckeditor5-dev-tests-travis
 - ckeditor5-dev-tests-travis
 after_success:
 after_success:
 - ckeditor5-dev-tests-save-revision
 - ckeditor5-dev-tests-save-revision
+after_script:
+- export END_TIME=$( date +%s )
+- ckeditor5-dev-tests-notify-travis-status
 env:
 env:
   global:
   global:
   - secure: BKC/208PtT8ya6P0gNbEczGvd5UCtvIljxjQokFrFESOAUmqtlmdUjES/MRCEyGn3hEi9cYLPFaiAH68qjl+F1uLSwcqvalTnXMPpUPUjGODHKze+P1BGyP6KjvsTO+Lw0exwisYLChkhkQhXN7uUehxg6pdZ85r4uS3XKeCkVdObC/OPnlEgB2IDULDHnR3EApOR+4vqU1+ci8+12/ct62EPgq8bbxirvk6xoelNJeLVBBgySdC2ltPNVmERq9OqWJfl6zv9y+NbgFcbYNNdvMFgm1WSlf1HzATTNYbpmXz3pf2kSRjy4ikoIlq7qZ3igLJpGrWPQFttmnpxh/kuapSEHX74LqlUi9ctHX4/gO9+NdCriXSERYQXkVO4beHfqfR5S1dADBXHfBJGGxEmDjkAdrWA9ATG4sOD8sX/qZOFI86NsVYnglbAbHfdjLhQVPjqQ+596nSi/C2sZEOtvnNFT6ZkEeQ10aLp1lWJOn79226sVkC6eAIlVlypME9M+C1DLyGIdXzxcc0+nunVF7cMwTXhwW0psToLASuHJjYJ0/X4uzpxLIaGVFQ0PJE5ALtO1HDZqUrPrJSOkYXcZnbDk8FYpkeAvqNbHKUOUWUtVfmtrzvBDGoZrSfgnLI7WfNYUtfuZ0FcCaB5RV4H3iHBcjqhbkBJrcUe7TNPdo=
   - secure: BKC/208PtT8ya6P0gNbEczGvd5UCtvIljxjQokFrFESOAUmqtlmdUjES/MRCEyGn3hEi9cYLPFaiAH68qjl+F1uLSwcqvalTnXMPpUPUjGODHKze+P1BGyP6KjvsTO+Lw0exwisYLChkhkQhXN7uUehxg6pdZ85r4uS3XKeCkVdObC/OPnlEgB2IDULDHnR3EApOR+4vqU1+ci8+12/ct62EPgq8bbxirvk6xoelNJeLVBBgySdC2ltPNVmERq9OqWJfl6zv9y+NbgFcbYNNdvMFgm1WSlf1HzATTNYbpmXz3pf2kSRjy4ikoIlq7qZ3igLJpGrWPQFttmnpxh/kuapSEHX74LqlUi9ctHX4/gO9+NdCriXSERYQXkVO4beHfqfR5S1dADBXHfBJGGxEmDjkAdrWA9ATG4sOD8sX/qZOFI86NsVYnglbAbHfdjLhQVPjqQ+596nSi/C2sZEOtvnNFT6ZkEeQ10aLp1lWJOn79226sVkC6eAIlVlypME9M+C1DLyGIdXzxcc0+nunVF7cMwTXhwW0psToLASuHJjYJ0/X4uzpxLIaGVFQ0PJE5ALtO1HDZqUrPrJSOkYXcZnbDk8FYpkeAvqNbHKUOUWUtVfmtrzvBDGoZrSfgnLI7WfNYUtfuZ0FcCaB5RV4H3iHBcjqhbkBJrcUe7TNPdo=
   - secure: XbRykrpv5bv7Pu7NNRtAvAJr+MZRTBC+/aHGzW06gzu4msi+yifK3AnE0FvOfMsBaiLMXSoxVyUJwRZmSPa7wXt4ZgUna9Ntbx1I7JxjjbbB3K+lUHY+9r+kGFHDpEYQIMqkrSSUeP2kE/rHn6aLAd+bFsrs1/FyxMefSOE4egYAmYYe7V2LfTFX2/M2QfyYa5lJopJYgil/OzTd5kHr3rqQF4h/2Ld2MuVNsjuob0tJLBlIgdAuOm4mKEnPwyIMRWrQDwPs3DBTIiPBtLJO+/Cd/e7i97M8SscFBtFwg+hisUhzj57ixwJb0IANtOZewsqqmtCNt6JJyWFYH4rvqUWQkeCqOI+Gbi0LI/+RLaTBHVzSFIJFdt/zujNiEUDMzR5pCgNqc9ckmmqriwaURw4EuSUqnYoFc0xp95GKOTbAd6+UZOBfub3aNJBmMCuC2VpGv7RYxrzvOmWljWd5S2E0ZePafYFAiPK5rB5725ah1SohgOr6iQh/7yFSEwqLpXIZSBjkKLd2sLyILjywXxk11aUMPlKgLULVoN5jSpiVbw+j+bDZuNuf7AVSHymPGxBzpkkHu6wsXAqzKUZ0XHVpFSxCmAY74vj+3khRgweO8MQYG61GxWV8lWJK5COFUVfHcHeT5sRZCgq06hHQE5NKKHzukBO3cCeola2D6wU=
   - secure: XbRykrpv5bv7Pu7NNRtAvAJr+MZRTBC+/aHGzW06gzu4msi+yifK3AnE0FvOfMsBaiLMXSoxVyUJwRZmSPa7wXt4ZgUna9Ntbx1I7JxjjbbB3K+lUHY+9r+kGFHDpEYQIMqkrSSUeP2kE/rHn6aLAd+bFsrs1/FyxMefSOE4egYAmYYe7V2LfTFX2/M2QfyYa5lJopJYgil/OzTd5kHr3rqQF4h/2Ld2MuVNsjuob0tJLBlIgdAuOm4mKEnPwyIMRWrQDwPs3DBTIiPBtLJO+/Cd/e7i97M8SscFBtFwg+hisUhzj57ixwJb0IANtOZewsqqmtCNt6JJyWFYH4rvqUWQkeCqOI+Gbi0LI/+RLaTBHVzSFIJFdt/zujNiEUDMzR5pCgNqc9ckmmqriwaURw4EuSUqnYoFc0xp95GKOTbAd6+UZOBfub3aNJBmMCuC2VpGv7RYxrzvOmWljWd5S2E0ZePafYFAiPK5rB5725ah1SohgOr6iQh/7yFSEwqLpXIZSBjkKLd2sLyILjywXxk11aUMPlKgLULVoN5jSpiVbw+j+bDZuNuf7AVSHymPGxBzpkkHu6wsXAqzKUZ0XHVpFSxCmAY74vj+3khRgweO8MQYG61GxWV8lWJK5COFUVfHcHeT5sRZCgq06hHQE5NKKHzukBO3cCeola2D6wU=
+  - secure: MTHJ5n94Ussk/u/YmIdBHsIDRan64VCbZRTklkx9hgtqwXcj+j6jV6S8makAZSCR55iBrscX1nrjROxSM4fbUsy4Owcu2Fik17IgA+xkYk2HgT2aupzLbpBD3DB538tHBxOb7me6m0GiO9Q9T3a2M8wBA4opxFfJX5O5qIy7lkKRnohy/ekGq2Av5cSU54tu0advGLA0okicE8qpkbpkV+DyZsPKYuHtOccJU/KJjX0dAH4/SWRqOeaXqRaOR6i8RcKEn4yEvKvZgqncv6hrzW4rJk1eXHFQCWlMnjIAQvIcpq0cplu5ktHjQ1W7/pTOELTnRLA4j+Oiu5+jZZqWKqTtNiZpATIp/fiDUTODrSIPovPbXZK0PepJhP3inWp2FtXTTj2/NrRtS2fL+U0jsI0wYBBx2WTDbj537BXFHAIRqKUDaEVxSzUGelA4H9STBNWbDXmyTeYzchWpimj/6TwG/VRYjhNQZ1rcwaGKpxNd8VDmDf2QxHcnfAu6+irsJb/0+B8zOj6hzw2ouLSlgEjfv9U5x997jeIUiStQBpdKrNiRw878tOuE0yOGbjIhfkKdo4gmcvDi20RioOs8qiO/tfYjgV/43sMBasrkNVkvv+RITTxUNf5kpWq6UnI8X5VjzWUDAKwELj6kPZl1C6MG0p8Fl8du2F77rnJS2wI=

+ 68 - 0
packages/ckeditor5-table/CHANGELOG.md

@@ -1,6 +1,74 @@
 Changelog
 Changelog
 =========
 =========
 
 
+## [13.0.0](https://github.com/ckeditor/ckeditor5-table/compare/v12.0.1...v13.0.0) (2019-06-05)
+
+### Bug fixes
+
+* Table cell view post-fixer should not fix valid view selection. Closes [ckeditor/ckeditor5#1554](https://github.com/ckeditor/ckeditor5/issues/1554). ([fa46cdc](https://github.com/ckeditor/ckeditor5-table/commit/fa46cdc))
+* Table cell view post-fixer will not crash if an element inside a cell got attribute and was removed at the same time. Closes [#191](https://github.com/ckeditor/ckeditor5-table/issues/191). ([900c178](https://github.com/ckeditor/ckeditor5-table/commit/900c178))
+* Table rows will not be added on tab key press if the associated command is disabled. Closes [#185](https://github.com/ckeditor/ckeditor5-table/issues/185). ([00848a8](https://github.com/ckeditor/ckeditor5-table/commit/00848a8))
+
+### Other changes
+
+* Removed deprecated `config.table.toolbar` configuration option. Closes [#167](https://github.com/ckeditor/ckeditor5-table/issues/167). ([5d024ce](https://github.com/ckeditor/ckeditor5-table/commit/5d024ce))
+* Updated translations. ([60ccc61](https://github.com/ckeditor/ckeditor5-table/commit/60ccc61))
+
+### BREAKING CHANGES
+
+* `config.table.toolbar` is now removed from code. Use `config.table.contentToolbar` instead.
+
+
+## [12.0.1](https://github.com/ckeditor/ckeditor5-table/compare/v12.0.0...v12.0.1) (2019-04-10)
+
+### Bug fixes
+
+* Single paragraphs with attributes inside `<tableCell>` will be properly converted in the data pipeline. Closes [ckeditor/ckeditor5#1620](https://github.com/ckeditor/ckeditor5/issues/1620). ([67ec89f](https://github.com/ckeditor/ckeditor5-table/commit/67ec89f))
+
+### Other changes
+
+* Optimized icons. ([c042369](https://github.com/ckeditor/ckeditor5-table/commit/c042369))
+* Updated translations. ([cd204c3](https://github.com/ckeditor/ckeditor5-table/commit/cd204c3))
+
+
+## [12.0.0](https://github.com/ckeditor/ckeditor5-table/compare/v11.0.1...v12.0.0) (2019-02-28)
+
+### Features
+
+* Enabled media embeds in table cells. Closes [#161](https://github.com/ckeditor/ckeditor5-table/issues/161). ([9ace3ba](https://github.com/ckeditor/ckeditor5-table/commit/9ace3ba))
+* Enabled images in table cells. Closes [#99](https://github.com/ckeditor/ckeditor5-table/issues/99). ([39c09e6](https://github.com/ckeditor/ckeditor5-table/commit/39c09e6))
+
+### Bug fixes
+
+* Autoparagraph text nodes in table cells. Closes [#134](https://github.com/ckeditor/ckeditor5-table/issues/134). ([5863307](https://github.com/ckeditor/ckeditor5-table/commit/5863307))
+* Make `<table>` a block element in the schema. Closes [#126](https://github.com/ckeditor/ckeditor5-table/issues/126). ([85719af](https://github.com/ckeditor/ckeditor5-table/commit/85719af))
+
+### Other changes
+
+* Aligned to the new `WidgetToolbarRepository` API. Replaced the `isTableWidgetSelected()` utility with `getSelectedTableWidget()`. Replaced `isTableContentSelected()` with `getTableWidgetAncestor()` (see [ckeditor/ckeditor5-widget#60](https://github.com/ckeditor/ckeditor5-widget/issues/60)). ([e3a5c09](https://github.com/ckeditor/ckeditor5-table/commit/e3a5c09))
+* Use `TableUtils` by a string when using `editor.plugins.get()`. ([ce09c39](https://github.com/ckeditor/ckeditor5-table/commit/ce09c39))
+* Updated translations. ([370d494](https://github.com/ckeditor/ckeditor5-table/commit/370d494)) ([5a47b95](https://github.com/ckeditor/ckeditor5-table/commit/5a47b95)) ([5e20d54](https://github.com/ckeditor/ckeditor5-table/commit/5e20d54))
+
+### BREAKING CHANGES
+
+* Upgraded minimal versions of Node to `8.0.0` and npm to `5.7.1`. See: [ckeditor/ckeditor5#1507](https://github.com/ckeditor/ckeditor5/issues/1507). ([612ea3c](https://github.com/ckeditor/ckeditor5-cloud-services/commit/612ea3c))
+* The `isTableWidgetSelected()` utility has been replaced by `getSelectedTableWidget()` and returns an editing `View` element instead of a `Boolean`.
+* The `isTableContentSelected()` utility has been replaced by `getTableWidgetAncestor()` and returns an editing `View` element instead of a `Boolean`.
+
+
+## [11.0.1](https://github.com/ckeditor/ckeditor5-table/compare/v11.0.0...v11.0.1) (2018-12-05)
+
+### Bug fixes
+
+* Skip text nodes between `<tr>` elements during table upcast. Closes [#145](https://github.com/ckeditor/ckeditor5-table/issues/145). ([2ecf448](https://github.com/ckeditor/ckeditor5-table/commit/2ecf448))
+
+### Other changes
+
+* Changed labels and command names for the insert column functionality for better UX and translatability. Closes [#138](https://github.com/ckeditor/ckeditor5-table/issues/138). ([fd2221f](https://github.com/ckeditor/ckeditor5-table/commit/fd2221f))
+* Improved SVG icons size. See [ckeditor/ckeditor5-theme-lark#206](https://github.com/ckeditor/ckeditor5-theme-lark/issues/206). ([23d6803](https://github.com/ckeditor/ckeditor5-table/commit/23d6803))
+* Updated translations. ([47475b2](https://github.com/ckeditor/ckeditor5-table/commit/47475b2)) ([5d39d35](https://github.com/ckeditor/ckeditor5-table/commit/5d39d35)) ([7ce6d5b](https://github.com/ckeditor/ckeditor5-table/commit/7ce6d5b)) ([268f607](https://github.com/ckeditor/ckeditor5-table/commit/268f607))
+
+
 ## [11.0.0](https://github.com/ckeditor/ckeditor5-table/compare/v10.1.0...v11.0.0) (2018-10-08)
 ## [11.0.0](https://github.com/ckeditor/ckeditor5-table/compare/v10.1.0...v11.0.0) (2018-10-08)
 
 
 ### Features
 ### Features

+ 1 - 1
packages/ckeditor5-table/LICENSE.md

@@ -2,7 +2,7 @@ Software License Agreement
 ==========================
 ==========================
 
 
 **CKEditor 5 Table Feature**  – https://github.com/ckeditor/ckeditor5-table <br>
 **CKEditor 5 Table Feature**  – https://github.com/ckeditor/ckeditor5-table <br>
-Copyright (c) 2003-2018, [CKSource](http://cksource.com) Frederico Knabben. All rights reserved.
+Copyright (c) 2003-2019, [CKSource](http://cksource.com) Frederico Knabben. All rights reserved.
 
 
 Licensed under the terms of [GNU General Public License Version 2 or later](http://www.gnu.org/licenses/gpl.html).
 Licensed under the terms of [GNU General Public License Version 2 or later](http://www.gnu.org/licenses/gpl.html).
 
 

+ 1 - 1
packages/ckeditor5-table/README.md

@@ -22,4 +22,4 @@ See the [`@ckeditor/ckeditor5-table` package](https://ckeditor.com/docs/ckeditor
 
 
 ## License
 ## License
 
 
-Licensed under the GPL, LGPL and MPL licenses, at your choice. For full details about the license, please check the `LICENSE.md` file.
+Licensed under the GPL, LGPL and MPL licenses, at your choice. For full details about the license, please check the `LICENSE.md` file or [https://ckeditor.com/legal/ckeditor-oss-license](https://ckeditor.com/legal/ckeditor-oss-license).

+ 2 - 2
packages/ckeditor5-table/docs/_snippets/features/build-table-source.js

@@ -1,6 +1,6 @@
 /**
 /**
- * @license Copyright (c) 2003-2018, CKSource - Frederico Knabben. All rights reserved.
- * For licensing, see LICENSE.md.
+ * @license Copyright (c) 2003-2019, CKSource - Frederico Knabben. All rights reserved.
+ * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license
  */
  */
 
 
 /* globals window */
 /* globals window */

+ 2 - 2
packages/ckeditor5-table/docs/_snippets/features/table.js

@@ -1,6 +1,6 @@
 /**
 /**
- * @license Copyright (c) 2003-2018, CKSource - Frederico Knabben. All rights reserved.
- * For licensing, see LICENSE.md.
+ * @license Copyright (c) 2003-2019, CKSource - Frederico Knabben. All rights reserved.
+ * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license
  */
  */
 
 
 /* globals ClassicEditor, console, window, document */
 /* globals ClassicEditor, console, window, document */

+ 21 - 15
packages/ckeditor5-table/docs/features/table.md

@@ -159,26 +159,32 @@ The {@link module:table/table~Table} plugin registers the following UI component
 
 
 And the following commands:
 And the following commands:
 
 
-* The `'insertTable'` command implemented by {@link module:table/commands/inserttablecommand~InsertTableCommand}.
-* The `'insertTableColumnLeft'` command implemented by {@link module:table/commands/insertcolumncommand~InsertColumnCommand}.
-* The `'insertTableColumnRight'` command implemented by {@link module:table/commands/insertcolumncommand~InsertColumnCommand}.
-* The `'insertTableRowAbove'` command implemented by {@link module:table/commands/insertrowcommand~InsertRowCommand}.
-* The `'insertTableRowBelow'` command implemented by {@link module:table/commands/insertrowcommand~InsertRowCommand}.
-* The `'removeTableColumn'` command implemented by {@link module:table/commands/removecolumncommand~RemoveColumnCommand}.
-* The `'removeTableRow'` command implemented by {@link module:table/commands/removerowcommand~RemoveRowCommand}.
-* The `'setTableColumnHeader'` command implemented by {@link module:table/commands/setheadercolumncommand~SetHeaderColumnCommand}.
-* The `'setTableRowHeader'` command implemented by {@link module:table/commands/setheaderrowcommand~SetHeaderRowCommand}.
-* The `'mergeTableCellRight'` command implemented by {@link module:table/commands/mergecellcommand~MergeCellCommand}.
-* The `'mergeTableCellLeft'` command implemented by {@link module:table/commands/mergecellcommand~MergeCellCommand}.
-* The `'mergeTableCellUp'` command implemented by {@link module:table/commands/mergecellcommand~MergeCellCommand}.
-* The `'mergeTableCellDown'` command implemented by {@link module:table/commands/mergecellcommand~MergeCellCommand}.
-* The `'splitTableCellVertically'` command implemented by {@link module:table/commands/splitcellcommand~SplitCellCommand}.
-* The `'splitTableCellHorizontally'` command implemented by {@link module:table/commands/splitcellcommand~SplitCellCommand}.
+| {@link framework/guides/architecture/core-editor-architecture#commands Command} name | Implemented by |
+|----------------------------------|-----------------------------------------------------------------------------|
+| `'insertTable'`                  | {@link module:table/commands/inserttablecommand~InsertTableCommand}         |
+| `'insertTableColumnLeft'`        | {@link module:table/commands/insertcolumncommand~InsertColumnCommand}       |
+| `'insertTableColumnRight'`       | {@link module:table/commands/insertcolumncommand~InsertColumnCommand}       |
+| `'insertTableRowAbove'`          | {@link module:table/commands/insertrowcommand~InsertRowCommand}             |
+| `'insertTableRowBelow'`          | {@link module:table/commands/insertrowcommand~InsertRowCommand}             |
+| `'removeTableColumn'`            | {@link module:table/commands/removecolumncommand~RemoveColumnCommand}       |
+| `'removeTableRow'`               | {@link module:table/commands/removerowcommand~RemoveRowCommand}             |
+| `'setTableColumnHeader'`         | {@link module:table/commands/setheadercolumncommand~SetHeaderColumnCommand} |
+| `'setTableRowHeader'`            | {@link module:table/commands/setheaderrowcommand~SetHeaderRowCommand}       |
+| `'mergeTableCellRight'`          | {@link module:table/commands/mergecellcommand~MergeCellCommand}             |
+| `'mergeTableCellLeft'`           | {@link module:table/commands/mergecellcommand~MergeCellCommand}             |
+| `'mergeTableCellUp'`             | {@link module:table/commands/mergecellcommand~MergeCellCommand}             |
+| `'mergeTableCellDown'`           | {@link module:table/commands/mergecellcommand~MergeCellCommand}             |
+| `'splitTableCellVertically'`     | {@link module:table/commands/splitcellcommand~SplitCellCommand}             |
+| `'splitTableCellHorizontally'`   | {@link module:table/commands/splitcellcommand~SplitCellCommand}             |
 
 
 The {@link module:table/tabletoolbar~TableToolbar} plugin introduces two balloon toolbars for tables.
 The {@link module:table/tabletoolbar~TableToolbar} plugin introduces two balloon toolbars for tables.
 * The content toolbar shows up when table cell is selected and is anchored to the table. It is possible to {@link module:table/table~TableConfig#contentToolbar configure} its content. Normally, it contains the table-related tools such as `'tableColumn'`, `'tableRow'`, and `'mergeTableCells'` dropdowns.
 * The content toolbar shows up when table cell is selected and is anchored to the table. It is possible to {@link module:table/table~TableConfig#contentToolbar configure} its content. Normally, it contains the table-related tools such as `'tableColumn'`, `'tableRow'`, and `'mergeTableCells'` dropdowns.
 * The table toolbar shows up when the whole table is selected, for instance using the widget handler. It is possible to {@link module:table/table~TableConfig#tableToolbar configure} its content.
 * The table toolbar shows up when the whole table is selected, for instance using the widget handler. It is possible to {@link module:table/table~TableConfig#tableToolbar configure} its content.
 
 
+<info-box>
+	We recommend using the official {@link framework/guides/development-tools#ckeditor-5-inspector CKEditor 5 inspector} for development and debugging. It will give you tons of useful information about the state of the editor such as internal data structures, selection, commands, and many more.
+</info-box>
+
 ## Contribute
 ## Contribute
 
 
 The source code of the feature is available on GitHub in https://github.com/ckeditor/ckeditor5-table.
 The source code of the feature is available on GitHub in https://github.com/ckeditor/ckeditor5-table.

+ 12 - 1
packages/ckeditor5-table/lang/translations/ar.po

@@ -1,4 +1,15 @@
-# Copyright (c) 2003-2018, CKSource - Frederico Knabben. All rights reserved.
+# Copyright (c) 2003-2019, CKSource - Frederico Knabben. All rights reserved.
+#
+#                                     !!! IMPORTANT !!!
+#
+#         Before you edit this file, please keep in mind that contributing to the project
+#                translations is possible ONLY via the Transifex online service.
+#
+#         To submit your translations, visit https://www.transifex.com/ckeditor/ckeditor5.
+#
+#                   To learn more, check out the official contributor's guide:
+#     https://ckeditor.com/docs/ckeditor5/latest/framework/guides/contributing/contributing.html
+#
 msgid ""
 msgid ""
 msgstr ""
 msgstr ""
 "Language-Team: Arabic (https://www.transifex.com/ckeditor/teams/11143/ar/)\n"
 "Language-Team: Arabic (https://www.transifex.com/ckeditor/teams/11143/ar/)\n"

+ 89 - 0
packages/ckeditor5-table/lang/translations/az.po

@@ -0,0 +1,89 @@
+# Copyright (c) 2003-2019, CKSource - Frederico Knabben. All rights reserved.
+#
+#                                     !!! IMPORTANT !!!
+#
+#         Before you edit this file, please keep in mind that contributing to the project
+#                translations is possible ONLY via the Transifex online service.
+#
+#         To submit your translations, visit https://www.transifex.com/ckeditor/ckeditor5.
+#
+#                   To learn more, check out the official contributor's guide:
+#     https://ckeditor.com/docs/ckeditor5/latest/framework/guides/contributing/contributing.html
+#
+msgid ""
+msgstr ""
+"Language-Team: Azerbaijani (https://www.transifex.com/ckeditor/teams/11143/az/)\n"
+"Language: az\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+
+msgctxt "Label for the insert table toolbar button."
+msgid "Insert table"
+msgstr "Cədvəli əlavə et"
+
+msgctxt "Label for the set/unset table header column button."
+msgid "Header column"
+msgstr "Başlıqlı sütun"
+
+msgctxt "Label for the insert table column to the left of the current one button."
+msgid "Insert column left"
+msgstr "Sola sütun əlavə et"
+
+msgctxt "Label for the insert table column to the right of the current one button."
+msgid "Insert column right"
+msgstr "Sağa sütun əlavə et"
+
+msgctxt "Label for the delete table column button."
+msgid "Delete column"
+msgstr "Sütunları sil"
+
+msgctxt "Label for the table column dropdown button."
+msgid "Column"
+msgstr "Sütun"
+
+msgctxt "Label for the set/unset table header row button."
+msgid "Header row"
+msgstr "Başlıqlı sətir"
+
+msgctxt "Label for the insert row below button."
+msgid "Insert row below"
+msgstr "Yuxarıya sətir əlavə et"
+
+msgctxt "Label for the insert row above button."
+msgid "Insert row above"
+msgstr "Aşağıya sətir əlavə et"
+
+msgctxt "Label for the delete table row button."
+msgid "Delete row"
+msgstr "Sətirləri sil"
+
+msgctxt "Label for the table row dropdown button."
+msgid "Row"
+msgstr "Sətir"
+
+msgctxt "Label for the merge table cell up button."
+msgid "Merge cell up"
+msgstr "Xanaları yuxarı birləşdir"
+
+msgctxt "Label for the merge table cell right button."
+msgid "Merge cell right"
+msgstr "Xanaları sağa birləşdir"
+
+msgctxt "Label for the merge table cell down button."
+msgid "Merge cell down"
+msgstr "Xanaları aşağı birləşdir"
+
+msgctxt "Label for the merge table cell left button."
+msgid "Merge cell left"
+msgstr "Xanaları sola birləşdir"
+
+msgctxt "Label for the split table cell vertically button."
+msgid "Split cell vertically"
+msgstr "Xanaları şaquli böl"
+
+msgctxt "Label for the split table cell horizontally button."
+msgid "Split cell horizontally"
+msgstr "Xanaları üfüqi böl"
+
+msgctxt "Label for the merge table cells button."
+msgid "Merge cells"
+msgstr "Xanaları birləşdir"

+ 12 - 1
packages/ckeditor5-table/lang/translations/cs.po

@@ -1,4 +1,15 @@
-# Copyright (c) 2003-2018, CKSource - Frederico Knabben. All rights reserved.
+# Copyright (c) 2003-2019, CKSource - Frederico Knabben. All rights reserved.
+#
+#                                     !!! IMPORTANT !!!
+#
+#         Before you edit this file, please keep in mind that contributing to the project
+#                translations is possible ONLY via the Transifex online service.
+#
+#         To submit your translations, visit https://www.transifex.com/ckeditor/ckeditor5.
+#
+#                   To learn more, check out the official contributor's guide:
+#     https://ckeditor.com/docs/ckeditor5/latest/framework/guides/contributing/contributing.html
+#
 msgid ""
 msgid ""
 msgstr ""
 msgstr ""
 "Language-Team: Czech (https://www.transifex.com/ckeditor/teams/11143/cs/)\n"
 "Language-Team: Czech (https://www.transifex.com/ckeditor/teams/11143/cs/)\n"

+ 12 - 1
packages/ckeditor5-table/lang/translations/de-ch.po

@@ -1,4 +1,15 @@
-# Copyright (c) 2003-2018, CKSource - Frederico Knabben. All rights reserved.
+# Copyright (c) 2003-2019, CKSource - Frederico Knabben. All rights reserved.
+#
+#                                     !!! IMPORTANT !!!
+#
+#         Before you edit this file, please keep in mind that contributing to the project
+#                translations is possible ONLY via the Transifex online service.
+#
+#         To submit your translations, visit https://www.transifex.com/ckeditor/ckeditor5.
+#
+#                   To learn more, check out the official contributor's guide:
+#     https://ckeditor.com/docs/ckeditor5/latest/framework/guides/contributing/contributing.html
+#
 msgid ""
 msgid ""
 msgstr ""
 msgstr ""
 "Language-Team: German (Switzerland) (https://www.transifex.com/ckeditor/teams/11143/de_CH/)\n"
 "Language-Team: German (Switzerland) (https://www.transifex.com/ckeditor/teams/11143/de_CH/)\n"

+ 14 - 3
packages/ckeditor5-table/lang/translations/de.po

@@ -1,4 +1,15 @@
-# Copyright (c) 2003-2018, CKSource - Frederico Knabben. All rights reserved.
+# Copyright (c) 2003-2019, CKSource - Frederico Knabben. All rights reserved.
+#
+#                                     !!! IMPORTANT !!!
+#
+#         Before you edit this file, please keep in mind that contributing to the project
+#                translations is possible ONLY via the Transifex online service.
+#
+#         To submit your translations, visit https://www.transifex.com/ckeditor/ckeditor5.
+#
+#                   To learn more, check out the official contributor's guide:
+#     https://ckeditor.com/docs/ckeditor5/latest/framework/guides/contributing/contributing.html
+#
 msgid ""
 msgid ""
 msgstr ""
 msgstr ""
 "Language-Team: German (https://www.transifex.com/ckeditor/teams/11143/de/)\n"
 "Language-Team: German (https://www.transifex.com/ckeditor/teams/11143/de/)\n"
@@ -15,11 +26,11 @@ msgstr "Kopfspalte"
 
 
 msgctxt "Label for the insert table column to the left of the current one button."
 msgctxt "Label for the insert table column to the left of the current one button."
 msgid "Insert column left"
 msgid "Insert column left"
-msgstr ""
+msgstr "Spalte links einfügen"
 
 
 msgctxt "Label for the insert table column to the right of the current one button."
 msgctxt "Label for the insert table column to the right of the current one button."
 msgid "Insert column right"
 msgid "Insert column right"
-msgstr ""
+msgstr "Spalte rechts einfügen"
 
 
 msgctxt "Label for the delete table column button."
 msgctxt "Label for the delete table column button."
 msgid "Delete column"
 msgid "Delete column"

+ 14 - 3
packages/ckeditor5-table/lang/translations/en-au.po

@@ -1,4 +1,15 @@
-# Copyright (c) 2003-2018, CKSource - Frederico Knabben. All rights reserved.
+# Copyright (c) 2003-2019, CKSource - Frederico Knabben. All rights reserved.
+#
+#                                     !!! IMPORTANT !!!
+#
+#         Before you edit this file, please keep in mind that contributing to the project
+#                translations is possible ONLY via the Transifex online service.
+#
+#         To submit your translations, visit https://www.transifex.com/ckeditor/ckeditor5.
+#
+#                   To learn more, check out the official contributor's guide:
+#     https://ckeditor.com/docs/ckeditor5/latest/framework/guides/contributing/contributing.html
+#
 msgid ""
 msgid ""
 msgstr ""
 msgstr ""
 "Language-Team: English (Australia) (https://www.transifex.com/ckeditor/teams/11143/en_AU/)\n"
 "Language-Team: English (Australia) (https://www.transifex.com/ckeditor/teams/11143/en_AU/)\n"
@@ -15,11 +26,11 @@ msgstr "Header column"
 
 
 msgctxt "Label for the insert table column to the left of the current one button."
 msgctxt "Label for the insert table column to the left of the current one button."
 msgid "Insert column left"
 msgid "Insert column left"
-msgstr ""
+msgstr "Insert column left"
 
 
 msgctxt "Label for the insert table column to the right of the current one button."
 msgctxt "Label for the insert table column to the right of the current one button."
 msgid "Insert column right"
 msgid "Insert column right"
-msgstr ""
+msgstr "Insert column right"
 
 
 msgctxt "Label for the delete table column button."
 msgctxt "Label for the delete table column button."
 msgid "Delete column"
 msgid "Delete column"

+ 12 - 1
packages/ckeditor5-table/lang/translations/en.po

@@ -1,4 +1,15 @@
-# Copyright (c) 2003-2018, CKSource - Frederico Knabben. All rights reserved.
+# Copyright (c) 2003-2019, CKSource - Frederico Knabben. All rights reserved.
+#
+#                                     !!! IMPORTANT !!!
+#
+#         Before you edit this file, please keep in mind that contributing to the project
+#                translations is possible ONLY via the Transifex online service.
+#
+#         To submit your translations, visit https://www.transifex.com/ckeditor/ckeditor5.
+#
+#                   To learn more, check out the official contributor's guide:
+#     https://ckeditor.com/docs/ckeditor5/latest/framework/guides/contributing/contributing.html
+#
 msgid ""
 msgid ""
 msgstr ""
 msgstr ""
 "Language: \n"
 "Language: \n"

+ 89 - 0
packages/ckeditor5-table/lang/translations/es.po

@@ -0,0 +1,89 @@
+# Copyright (c) 2003-2019, CKSource - Frederico Knabben. All rights reserved.
+#
+#                                     !!! IMPORTANT !!!
+#
+#         Before you edit this file, please keep in mind that contributing to the project
+#                translations is possible ONLY via the Transifex online service.
+#
+#         To submit your translations, visit https://www.transifex.com/ckeditor/ckeditor5.
+#
+#                   To learn more, check out the official contributor's guide:
+#     https://ckeditor.com/docs/ckeditor5/latest/framework/guides/contributing/contributing.html
+#
+msgid ""
+msgstr ""
+"Language-Team: Spanish (https://www.transifex.com/ckeditor/teams/11143/es/)\n"
+"Language: es\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+
+msgctxt "Label for the insert table toolbar button."
+msgid "Insert table"
+msgstr "Insertar tabla"
+
+msgctxt "Label for the set/unset table header column button."
+msgid "Header column"
+msgstr "Columna de encabezado"
+
+msgctxt "Label for the insert table column to the left of the current one button."
+msgid "Insert column left"
+msgstr "Insertar columna izquierda"
+
+msgctxt "Label for the insert table column to the right of the current one button."
+msgid "Insert column right"
+msgstr "Insertar columna derecha"
+
+msgctxt "Label for the delete table column button."
+msgid "Delete column"
+msgstr "Eliminar columna"
+
+msgctxt "Label for the table column dropdown button."
+msgid "Column"
+msgstr "Columna"
+
+msgctxt "Label for the set/unset table header row button."
+msgid "Header row"
+msgstr "Fila de encabezado"
+
+msgctxt "Label for the insert row below button."
+msgid "Insert row below"
+msgstr "Insertar fila debajo"
+
+msgctxt "Label for the insert row above button."
+msgid "Insert row above"
+msgstr "Insertar fila encima"
+
+msgctxt "Label for the delete table row button."
+msgid "Delete row"
+msgstr "Eliminar fila"
+
+msgctxt "Label for the table row dropdown button."
+msgid "Row"
+msgstr "Fila"
+
+msgctxt "Label for the merge table cell up button."
+msgid "Merge cell up"
+msgstr "Combinar celda superior"
+
+msgctxt "Label for the merge table cell right button."
+msgid "Merge cell right"
+msgstr "Combinar celda derecha"
+
+msgctxt "Label for the merge table cell down button."
+msgid "Merge cell down"
+msgstr "Combinar celda inferior"
+
+msgctxt "Label for the merge table cell left button."
+msgid "Merge cell left"
+msgstr "Combinar celda izquierda"
+
+msgctxt "Label for the split table cell vertically button."
+msgid "Split cell vertically"
+msgstr "Dividir celdas verticalmente"
+
+msgctxt "Label for the split table cell horizontally button."
+msgid "Split cell horizontally"
+msgstr "Dividir celdas horizontalmente"
+
+msgctxt "Label for the merge table cells button."
+msgid "Merge cells"
+msgstr "Combinar celdas"

+ 15 - 4
packages/ckeditor5-table/lang/translations/et.po

@@ -1,4 +1,15 @@
-# Copyright (c) 2003-2018, CKSource - Frederico Knabben. All rights reserved.
+# Copyright (c) 2003-2019, CKSource - Frederico Knabben. All rights reserved.
+#
+#                                     !!! IMPORTANT !!!
+#
+#         Before you edit this file, please keep in mind that contributing to the project
+#                translations is possible ONLY via the Transifex online service.
+#
+#         To submit your translations, visit https://www.transifex.com/ckeditor/ckeditor5.
+#
+#                   To learn more, check out the official contributor's guide:
+#     https://ckeditor.com/docs/ckeditor5/latest/framework/guides/contributing/contributing.html
+#
 msgid ""
 msgid ""
 msgstr ""
 msgstr ""
 "Language-Team: Estonian (https://www.transifex.com/ckeditor/teams/11143/et/)\n"
 "Language-Team: Estonian (https://www.transifex.com/ckeditor/teams/11143/et/)\n"
@@ -15,11 +26,11 @@ msgstr "Päise veerg"
 
 
 msgctxt "Label for the insert table column to the left of the current one button."
 msgctxt "Label for the insert table column to the left of the current one button."
 msgid "Insert column left"
 msgid "Insert column left"
-msgstr ""
+msgstr "Sisesta veerg vasakule"
 
 
 msgctxt "Label for the insert table column to the right of the current one button."
 msgctxt "Label for the insert table column to the right of the current one button."
 msgid "Insert column right"
 msgid "Insert column right"
-msgstr ""
+msgstr "Sisesta veerg paremale"
 
 
 msgctxt "Label for the delete table column button."
 msgctxt "Label for the delete table column button."
 msgid "Delete column"
 msgid "Delete column"
@@ -47,7 +58,7 @@ msgstr "Kustuta rida"
 
 
 msgctxt "Label for the table row dropdown button."
 msgctxt "Label for the table row dropdown button."
 msgid "Row"
 msgid "Row"
-msgstr "Rido"
+msgstr "Rida"
 
 
 msgctxt "Label for the merge table cell up button."
 msgctxt "Label for the merge table cell up button."
 msgid "Merge cell up"
 msgid "Merge cell up"

+ 12 - 1
packages/ckeditor5-table/lang/translations/fa.po

@@ -1,4 +1,15 @@
-# Copyright (c) 2003-2018, CKSource - Frederico Knabben. All rights reserved.
+# Copyright (c) 2003-2019, CKSource - Frederico Knabben. All rights reserved.
+#
+#                                     !!! IMPORTANT !!!
+#
+#         Before you edit this file, please keep in mind that contributing to the project
+#                translations is possible ONLY via the Transifex online service.
+#
+#         To submit your translations, visit https://www.transifex.com/ckeditor/ckeditor5.
+#
+#                   To learn more, check out the official contributor's guide:
+#     https://ckeditor.com/docs/ckeditor5/latest/framework/guides/contributing/contributing.html
+#
 msgid ""
 msgid ""
 msgstr ""
 msgstr ""
 "Language-Team: Persian (https://www.transifex.com/ckeditor/teams/11143/fa/)\n"
 "Language-Team: Persian (https://www.transifex.com/ckeditor/teams/11143/fa/)\n"

+ 14 - 3
packages/ckeditor5-table/lang/translations/fi.po

@@ -1,4 +1,15 @@
-# Copyright (c) 2003-2018, CKSource - Frederico Knabben. All rights reserved.
+# Copyright (c) 2003-2019, CKSource - Frederico Knabben. All rights reserved.
+#
+#                                     !!! IMPORTANT !!!
+#
+#         Before you edit this file, please keep in mind that contributing to the project
+#                translations is possible ONLY via the Transifex online service.
+#
+#         To submit your translations, visit https://www.transifex.com/ckeditor/ckeditor5.
+#
+#                   To learn more, check out the official contributor's guide:
+#     https://ckeditor.com/docs/ckeditor5/latest/framework/guides/contributing/contributing.html
+#
 msgid ""
 msgid ""
 msgstr ""
 msgstr ""
 "Language-Team: Finnish (https://www.transifex.com/ckeditor/teams/11143/fi/)\n"
 "Language-Team: Finnish (https://www.transifex.com/ckeditor/teams/11143/fi/)\n"
@@ -15,11 +26,11 @@ msgstr "Otsikkosarake"
 
 
 msgctxt "Label for the insert table column to the left of the current one button."
 msgctxt "Label for the insert table column to the left of the current one button."
 msgid "Insert column left"
 msgid "Insert column left"
-msgstr ""
+msgstr "Lisää sarake vasemmalle"
 
 
 msgctxt "Label for the insert table column to the right of the current one button."
 msgctxt "Label for the insert table column to the right of the current one button."
 msgid "Insert column right"
 msgid "Insert column right"
-msgstr ""
+msgstr "Lisää sarake oikealle"
 
 
 msgctxt "Label for the delete table column button."
 msgctxt "Label for the delete table column button."
 msgid "Delete column"
 msgid "Delete column"

+ 21 - 10
packages/ckeditor5-table/lang/translations/fr.po

@@ -1,4 +1,15 @@
-# Copyright (c) 2003-2018, CKSource - Frederico Knabben. All rights reserved.
+# Copyright (c) 2003-2019, CKSource - Frederico Knabben. All rights reserved.
+#
+#                                     !!! IMPORTANT !!!
+#
+#         Before you edit this file, please keep in mind that contributing to the project
+#                translations is possible ONLY via the Transifex online service.
+#
+#         To submit your translations, visit https://www.transifex.com/ckeditor/ckeditor5.
+#
+#                   To learn more, check out the official contributor's guide:
+#     https://ckeditor.com/docs/ckeditor5/latest/framework/guides/contributing/contributing.html
+#
 msgid ""
 msgid ""
 msgstr ""
 msgstr ""
 "Language-Team: French (https://www.transifex.com/ckeditor/teams/11143/fr/)\n"
 "Language-Team: French (https://www.transifex.com/ckeditor/teams/11143/fr/)\n"
@@ -15,11 +26,11 @@ msgstr "Colonne d'entête"
 
 
 msgctxt "Label for the insert table column to the left of the current one button."
 msgctxt "Label for the insert table column to the left of the current one button."
 msgid "Insert column left"
 msgid "Insert column left"
-msgstr ""
+msgstr "Insérer une colonne à gauche"
 
 
 msgctxt "Label for the insert table column to the right of the current one button."
 msgctxt "Label for the insert table column to the right of the current one button."
 msgid "Insert column right"
 msgid "Insert column right"
-msgstr ""
+msgstr "Insérer une colonne à droite"
 
 
 msgctxt "Label for the delete table column button."
 msgctxt "Label for the delete table column button."
 msgid "Delete column"
 msgid "Delete column"
@@ -31,23 +42,23 @@ msgstr "Colonne"
 
 
 msgctxt "Label for the set/unset table header row button."
 msgctxt "Label for the set/unset table header row button."
 msgid "Header row"
 msgid "Header row"
-msgstr "Rangée d'entête"
+msgstr "Ligne d'entête"
 
 
 msgctxt "Label for the insert row below button."
 msgctxt "Label for the insert row below button."
 msgid "Insert row below"
 msgid "Insert row below"
-msgstr "Insérer une rangée en-dessous"
+msgstr "Insérer une ligne en-dessous"
 
 
 msgctxt "Label for the insert row above button."
 msgctxt "Label for the insert row above button."
 msgid "Insert row above"
 msgid "Insert row above"
-msgstr "Insérer une rangée au-dessus"
+msgstr "Insérer une ligne au-dessus"
 
 
 msgctxt "Label for the delete table row button."
 msgctxt "Label for the delete table row button."
 msgid "Delete row"
 msgid "Delete row"
-msgstr "Supprimer la rangée"
+msgstr "Supprimer la ligne"
 
 
 msgctxt "Label for the table row dropdown button."
 msgctxt "Label for the table row dropdown button."
 msgid "Row"
 msgid "Row"
-msgstr "Rangée"
+msgstr "Ligne"
 
 
 msgctxt "Label for the merge table cell up button."
 msgctxt "Label for the merge table cell up button."
 msgid "Merge cell up"
 msgid "Merge cell up"
@@ -67,11 +78,11 @@ msgstr "Fusionner la cellule à gauche"
 
 
 msgctxt "Label for the split table cell vertically button."
 msgctxt "Label for the split table cell vertically button."
 msgid "Split cell vertically"
 msgid "Split cell vertically"
-msgstr "Séparer la cellule verticalement"
+msgstr "Scinder la cellule verticalement"
 
 
 msgctxt "Label for the split table cell horizontally button."
 msgctxt "Label for the split table cell horizontally button."
 msgid "Split cell horizontally"
 msgid "Split cell horizontally"
-msgstr "Séparer la cellule horizontalement"
+msgstr "Scinder la cellule horizontalement"
 
 
 msgctxt "Label for the merge table cells button."
 msgctxt "Label for the merge table cells button."
 msgid "Merge cells"
 msgid "Merge cells"

+ 14 - 3
packages/ckeditor5-table/lang/translations/gl.po

@@ -1,4 +1,15 @@
-# Copyright (c) 2003-2018, CKSource - Frederico Knabben. All rights reserved.
+# Copyright (c) 2003-2019, CKSource - Frederico Knabben. All rights reserved.
+#
+#                                     !!! IMPORTANT !!!
+#
+#         Before you edit this file, please keep in mind that contributing to the project
+#                translations is possible ONLY via the Transifex online service.
+#
+#         To submit your translations, visit https://www.transifex.com/ckeditor/ckeditor5.
+#
+#                   To learn more, check out the official contributor's guide:
+#     https://ckeditor.com/docs/ckeditor5/latest/framework/guides/contributing/contributing.html
+#
 msgid ""
 msgid ""
 msgstr ""
 msgstr ""
 "Language-Team: Galician (https://www.transifex.com/ckeditor/teams/11143/gl/)\n"
 "Language-Team: Galician (https://www.transifex.com/ckeditor/teams/11143/gl/)\n"
@@ -15,11 +26,11 @@ msgstr "Cabeceira de columna"
 
 
 msgctxt "Label for the insert table column to the left of the current one button."
 msgctxt "Label for the insert table column to the left of the current one button."
 msgid "Insert column left"
 msgid "Insert column left"
-msgstr ""
+msgstr "Inserir columna á esquerda"
 
 
 msgctxt "Label for the insert table column to the right of the current one button."
 msgctxt "Label for the insert table column to the right of the current one button."
 msgid "Insert column right"
 msgid "Insert column right"
-msgstr ""
+msgstr "Inserir columna á dereita"
 
 
 msgctxt "Label for the delete table column button."
 msgctxt "Label for the delete table column button."
 msgid "Delete column"
 msgid "Delete column"

+ 12 - 1
packages/ckeditor5-table/lang/translations/hr.po

@@ -1,4 +1,15 @@
-# Copyright (c) 2003-2018, CKSource - Frederico Knabben. All rights reserved.
+# Copyright (c) 2003-2019, CKSource - Frederico Knabben. All rights reserved.
+#
+#                                     !!! IMPORTANT !!!
+#
+#         Before you edit this file, please keep in mind that contributing to the project
+#                translations is possible ONLY via the Transifex online service.
+#
+#         To submit your translations, visit https://www.transifex.com/ckeditor/ckeditor5.
+#
+#                   To learn more, check out the official contributor's guide:
+#     https://ckeditor.com/docs/ckeditor5/latest/framework/guides/contributing/contributing.html
+#
 msgid ""
 msgid ""
 msgstr ""
 msgstr ""
 "Language-Team: Croatian (https://www.transifex.com/ckeditor/teams/11143/hr/)\n"
 "Language-Team: Croatian (https://www.transifex.com/ckeditor/teams/11143/hr/)\n"

+ 14 - 3
packages/ckeditor5-table/lang/translations/hu.po

@@ -1,4 +1,15 @@
-# Copyright (c) 2003-2018, CKSource - Frederico Knabben. All rights reserved.
+# Copyright (c) 2003-2019, CKSource - Frederico Knabben. All rights reserved.
+#
+#                                     !!! IMPORTANT !!!
+#
+#         Before you edit this file, please keep in mind that contributing to the project
+#                translations is possible ONLY via the Transifex online service.
+#
+#         To submit your translations, visit https://www.transifex.com/ckeditor/ckeditor5.
+#
+#                   To learn more, check out the official contributor's guide:
+#     https://ckeditor.com/docs/ckeditor5/latest/framework/guides/contributing/contributing.html
+#
 msgid ""
 msgid ""
 msgstr ""
 msgstr ""
 "Language-Team: Hungarian (https://www.transifex.com/ckeditor/teams/11143/hu/)\n"
 "Language-Team: Hungarian (https://www.transifex.com/ckeditor/teams/11143/hu/)\n"
@@ -15,11 +26,11 @@ msgstr "Oszlop fejléc"
 
 
 msgctxt "Label for the insert table column to the left of the current one button."
 msgctxt "Label for the insert table column to the left of the current one button."
 msgid "Insert column left"
 msgid "Insert column left"
-msgstr ""
+msgstr "Oszlop beszúrása balra"
 
 
 msgctxt "Label for the insert table column to the right of the current one button."
 msgctxt "Label for the insert table column to the right of the current one button."
 msgid "Insert column right"
 msgid "Insert column right"
-msgstr ""
+msgstr "Oszlop beszúrása jobbra"
 
 
 msgctxt "Label for the delete table column button."
 msgctxt "Label for the delete table column button."
 msgid "Delete column"
 msgid "Delete column"

+ 89 - 0
packages/ckeditor5-table/lang/translations/id.po

@@ -0,0 +1,89 @@
+# Copyright (c) 2003-2019, CKSource - Frederico Knabben. All rights reserved.
+#
+#                                     !!! IMPORTANT !!!
+#
+#         Before you edit this file, please keep in mind that contributing to the project
+#                translations is possible ONLY via the Transifex online service.
+#
+#         To submit your translations, visit https://www.transifex.com/ckeditor/ckeditor5.
+#
+#                   To learn more, check out the official contributor's guide:
+#     https://ckeditor.com/docs/ckeditor5/latest/framework/guides/contributing/contributing.html
+#
+msgid ""
+msgstr ""
+"Language-Team: Indonesian (https://www.transifex.com/ckeditor/teams/11143/id/)\n"
+"Language: id\n"
+"Plural-Forms: nplurals=1; plural=0;\n"
+
+msgctxt "Label for the insert table toolbar button."
+msgid "Insert table"
+msgstr "Sisipkan tabel"
+
+msgctxt "Label for the set/unset table header column button."
+msgid "Header column"
+msgstr "Kolom tajuk"
+
+msgctxt "Label for the insert table column to the left of the current one button."
+msgid "Insert column left"
+msgstr "Sisipkan kolom ke kiri"
+
+msgctxt "Label for the insert table column to the right of the current one button."
+msgid "Insert column right"
+msgstr "Sisipkan kolom ke kanan"
+
+msgctxt "Label for the delete table column button."
+msgid "Delete column"
+msgstr "Hapus kolom"
+
+msgctxt "Label for the table column dropdown button."
+msgid "Column"
+msgstr "Kolom"
+
+msgctxt "Label for the set/unset table header row button."
+msgid "Header row"
+msgstr "Baris tajuk"
+
+msgctxt "Label for the insert row below button."
+msgid "Insert row below"
+msgstr "Sisipkan baris ke bawah"
+
+msgctxt "Label for the insert row above button."
+msgid "Insert row above"
+msgstr "Sisipkan baris ke atas"
+
+msgctxt "Label for the delete table row button."
+msgid "Delete row"
+msgstr "Hapus baris"
+
+msgctxt "Label for the table row dropdown button."
+msgid "Row"
+msgstr "Baris"
+
+msgctxt "Label for the merge table cell up button."
+msgid "Merge cell up"
+msgstr "Gabungkan sel ke atas"
+
+msgctxt "Label for the merge table cell right button."
+msgid "Merge cell right"
+msgstr "Gabungkan sel ke kanan"
+
+msgctxt "Label for the merge table cell down button."
+msgid "Merge cell down"
+msgstr "Gabungkan sel ke bawah"
+
+msgctxt "Label for the merge table cell left button."
+msgid "Merge cell left"
+msgstr "Gabungkan sel ke kiri"
+
+msgctxt "Label for the split table cell vertically button."
+msgid "Split cell vertically"
+msgstr "Bagikan sel secara vertikal"
+
+msgctxt "Label for the split table cell horizontally button."
+msgid "Split cell horizontally"
+msgstr "Bagikan sel secara horizontal"
+
+msgctxt "Label for the merge table cells button."
+msgid "Merge cells"
+msgstr "Gabungkan sel"

+ 14 - 3
packages/ckeditor5-table/lang/translations/it.po

@@ -1,4 +1,15 @@
-# Copyright (c) 2003-2018, CKSource - Frederico Knabben. All rights reserved.
+# Copyright (c) 2003-2019, CKSource - Frederico Knabben. All rights reserved.
+#
+#                                     !!! IMPORTANT !!!
+#
+#         Before you edit this file, please keep in mind that contributing to the project
+#                translations is possible ONLY via the Transifex online service.
+#
+#         To submit your translations, visit https://www.transifex.com/ckeditor/ckeditor5.
+#
+#                   To learn more, check out the official contributor's guide:
+#     https://ckeditor.com/docs/ckeditor5/latest/framework/guides/contributing/contributing.html
+#
 msgid ""
 msgid ""
 msgstr ""
 msgstr ""
 "Language-Team: Italian (https://www.transifex.com/ckeditor/teams/11143/it/)\n"
 "Language-Team: Italian (https://www.transifex.com/ckeditor/teams/11143/it/)\n"
@@ -15,11 +26,11 @@ msgstr "Intestazione colonna"
 
 
 msgctxt "Label for the insert table column to the left of the current one button."
 msgctxt "Label for the insert table column to the left of the current one button."
 msgid "Insert column left"
 msgid "Insert column left"
-msgstr ""
+msgstr "Inserisci colonna a sinistra"
 
 
 msgctxt "Label for the insert table column to the right of the current one button."
 msgctxt "Label for the insert table column to the right of the current one button."
 msgid "Insert column right"
 msgid "Insert column right"
-msgstr ""
+msgstr "Inserisci colonna a destra"
 
 
 msgctxt "Label for the delete table column button."
 msgctxt "Label for the delete table column button."
 msgid "Delete column"
 msgid "Delete column"

+ 12 - 1
packages/ckeditor5-table/lang/translations/ja.po

@@ -1,4 +1,15 @@
-# Copyright (c) 2003-2018, CKSource - Frederico Knabben. All rights reserved.
+# Copyright (c) 2003-2019, CKSource - Frederico Knabben. All rights reserved.
+#
+#                                     !!! IMPORTANT !!!
+#
+#         Before you edit this file, please keep in mind that contributing to the project
+#                translations is possible ONLY via the Transifex online service.
+#
+#         To submit your translations, visit https://www.transifex.com/ckeditor/ckeditor5.
+#
+#                   To learn more, check out the official contributor's guide:
+#     https://ckeditor.com/docs/ckeditor5/latest/framework/guides/contributing/contributing.html
+#
 msgid ""
 msgid ""
 msgstr ""
 msgstr ""
 "Language-Team: Japanese (https://www.transifex.com/ckeditor/teams/11143/ja/)\n"
 "Language-Team: Japanese (https://www.transifex.com/ckeditor/teams/11143/ja/)\n"

+ 14 - 3
packages/ckeditor5-table/lang/translations/ku.po

@@ -1,4 +1,15 @@
-# Copyright (c) 2003-2018, CKSource - Frederico Knabben. All rights reserved.
+# Copyright (c) 2003-2019, CKSource - Frederico Knabben. All rights reserved.
+#
+#                                     !!! IMPORTANT !!!
+#
+#         Before you edit this file, please keep in mind that contributing to the project
+#                translations is possible ONLY via the Transifex online service.
+#
+#         To submit your translations, visit https://www.transifex.com/ckeditor/ckeditor5.
+#
+#                   To learn more, check out the official contributor's guide:
+#     https://ckeditor.com/docs/ckeditor5/latest/framework/guides/contributing/contributing.html
+#
 msgid ""
 msgid ""
 msgstr ""
 msgstr ""
 "Language-Team: Kurdish (https://www.transifex.com/ckeditor/teams/11143/ku/)\n"
 "Language-Team: Kurdish (https://www.transifex.com/ckeditor/teams/11143/ku/)\n"
@@ -15,11 +26,11 @@ msgstr "ستوونی دەسپێک"
 
 
 msgctxt "Label for the insert table column to the left of the current one button."
 msgctxt "Label for the insert table column to the left of the current one button."
 msgid "Insert column left"
 msgid "Insert column left"
-msgstr ""
+msgstr "دانانی ستوون لە چەپ"
 
 
 msgctxt "Label for the insert table column to the right of the current one button."
 msgctxt "Label for the insert table column to the right of the current one button."
 msgid "Insert column right"
 msgid "Insert column right"
-msgstr ""
+msgstr "دانانی ستوون لە ڕاست"
 
 
 msgctxt "Label for the delete table column button."
 msgctxt "Label for the delete table column button."
 msgid "Delete column"
 msgid "Delete column"

+ 89 - 0
packages/ckeditor5-table/lang/translations/lt.po

@@ -0,0 +1,89 @@
+# Copyright (c) 2003-2019, CKSource - Frederico Knabben. All rights reserved.
+#
+#                                     !!! IMPORTANT !!!
+#
+#         Before you edit this file, please keep in mind that contributing to the project
+#                translations is possible ONLY via the Transifex online service.
+#
+#         To submit your translations, visit https://www.transifex.com/ckeditor/ckeditor5.
+#
+#                   To learn more, check out the official contributor's guide:
+#     https://ckeditor.com/docs/ckeditor5/latest/framework/guides/contributing/contributing.html
+#
+msgid ""
+msgstr ""
+"Language-Team: Lithuanian (https://www.transifex.com/ckeditor/teams/11143/lt/)\n"
+"Language: lt\n"
+"Plural-Forms: nplurals=4; plural=(n % 10 == 1 && (n % 100 > 19 || n % 100 < 11) ? 0 : (n % 10 >= 2 && n % 10 <=9) && (n % 100 > 19 || n % 100 < 11) ? 1 : n % 1 != 0 ? 2: 3);\n"
+
+msgctxt "Label for the insert table toolbar button."
+msgid "Insert table"
+msgstr "Įterpti lentelę"
+
+msgctxt "Label for the set/unset table header column button."
+msgid "Header column"
+msgstr "Antraštės stulpelis"
+
+msgctxt "Label for the insert table column to the left of the current one button."
+msgid "Insert column left"
+msgstr "Įterpti stulpelį kairėje"
+
+msgctxt "Label for the insert table column to the right of the current one button."
+msgid "Insert column right"
+msgstr "Įterpti stulpelį dešinėje"
+
+msgctxt "Label for the delete table column button."
+msgid "Delete column"
+msgstr "Ištrinti stulpelį"
+
+msgctxt "Label for the table column dropdown button."
+msgid "Column"
+msgstr "Stulpelis"
+
+msgctxt "Label for the set/unset table header row button."
+msgid "Header row"
+msgstr "Antraštės eilutė"
+
+msgctxt "Label for the insert row below button."
+msgid "Insert row below"
+msgstr "Įterpti eilutę žemiau"
+
+msgctxt "Label for the insert row above button."
+msgid "Insert row above"
+msgstr "Įterpti eilutę aukščiau"
+
+msgctxt "Label for the delete table row button."
+msgid "Delete row"
+msgstr "Ištrinti eilutę"
+
+msgctxt "Label for the table row dropdown button."
+msgid "Row"
+msgstr "Eilutė"
+
+msgctxt "Label for the merge table cell up button."
+msgid "Merge cell up"
+msgstr "Prijungti langelį viršuje"
+
+msgctxt "Label for the merge table cell right button."
+msgid "Merge cell right"
+msgstr "Prijungti langelį dešinėje"
+
+msgctxt "Label for the merge table cell down button."
+msgid "Merge cell down"
+msgstr "Prijungti langelį apačioje"
+
+msgctxt "Label for the merge table cell left button."
+msgid "Merge cell left"
+msgstr "Prijungti langelį kairėje"
+
+msgctxt "Label for the split table cell vertically button."
+msgid "Split cell vertically"
+msgstr "Padalinti langelį vertikaliai"
+
+msgctxt "Label for the split table cell horizontally button."
+msgid "Split cell horizontally"
+msgstr "Padalinti langelį horizontaliai"
+
+msgctxt "Label for the merge table cells button."
+msgid "Merge cells"
+msgstr "Sujungti langelius"

+ 12 - 1
packages/ckeditor5-table/lang/translations/nb.po

@@ -1,4 +1,15 @@
-# Copyright (c) 2003-2018, CKSource - Frederico Knabben. All rights reserved.
+# Copyright (c) 2003-2019, CKSource - Frederico Knabben. All rights reserved.
+#
+#                                     !!! IMPORTANT !!!
+#
+#         Before you edit this file, please keep in mind that contributing to the project
+#                translations is possible ONLY via the Transifex online service.
+#
+#         To submit your translations, visit https://www.transifex.com/ckeditor/ckeditor5.
+#
+#                   To learn more, check out the official contributor's guide:
+#     https://ckeditor.com/docs/ckeditor5/latest/framework/guides/contributing/contributing.html
+#
 msgid ""
 msgid ""
 msgstr ""
 msgstr ""
 "Language-Team: Norwegian Bokmål (https://www.transifex.com/ckeditor/teams/11143/nb/)\n"
 "Language-Team: Norwegian Bokmål (https://www.transifex.com/ckeditor/teams/11143/nb/)\n"

+ 14 - 3
packages/ckeditor5-table/lang/translations/ne.po

@@ -1,4 +1,15 @@
-# Copyright (c) 2003-2018, CKSource - Frederico Knabben. All rights reserved.
+# Copyright (c) 2003-2019, CKSource - Frederico Knabben. All rights reserved.
+#
+#                                     !!! IMPORTANT !!!
+#
+#         Before you edit this file, please keep in mind that contributing to the project
+#                translations is possible ONLY via the Transifex online service.
+#
+#         To submit your translations, visit https://www.transifex.com/ckeditor/ckeditor5.
+#
+#                   To learn more, check out the official contributor's guide:
+#     https://ckeditor.com/docs/ckeditor5/latest/framework/guides/contributing/contributing.html
+#
 msgid ""
 msgid ""
 msgstr ""
 msgstr ""
 "Language-Team: Nepali (Nepal) (https://www.transifex.com/ckeditor/teams/11143/ne_NP/)\n"
 "Language-Team: Nepali (Nepal) (https://www.transifex.com/ckeditor/teams/11143/ne_NP/)\n"
@@ -15,11 +26,11 @@ msgstr "हेडर स्तम्भ"
 
 
 msgctxt "Label for the insert table column to the left of the current one button."
 msgctxt "Label for the insert table column to the left of the current one button."
 msgid "Insert column left"
 msgid "Insert column left"
-msgstr ""
+msgstr "बायाँ स्तम्भ सम्मिलित गर्न"
 
 
 msgctxt "Label for the insert table column to the right of the current one button."
 msgctxt "Label for the insert table column to the right of the current one button."
 msgid "Insert column right"
 msgid "Insert column right"
-msgstr ""
+msgstr "दायाँ स्तम्भ सम्मिलित गर्न"
 
 
 msgctxt "Label for the delete table column button."
 msgctxt "Label for the delete table column button."
 msgid "Delete column"
 msgid "Delete column"

+ 12 - 1
packages/ckeditor5-table/lang/translations/nl.po

@@ -1,4 +1,15 @@
-# Copyright (c) 2003-2018, CKSource - Frederico Knabben. All rights reserved.
+# Copyright (c) 2003-2019, CKSource - Frederico Knabben. All rights reserved.
+#
+#                                     !!! IMPORTANT !!!
+#
+#         Before you edit this file, please keep in mind that contributing to the project
+#                translations is possible ONLY via the Transifex online service.
+#
+#         To submit your translations, visit https://www.transifex.com/ckeditor/ckeditor5.
+#
+#                   To learn more, check out the official contributor's guide:
+#     https://ckeditor.com/docs/ckeditor5/latest/framework/guides/contributing/contributing.html
+#
 msgid ""
 msgid ""
 msgstr ""
 msgstr ""
 "Language-Team: Dutch (https://www.transifex.com/ckeditor/teams/11143/nl/)\n"
 "Language-Team: Dutch (https://www.transifex.com/ckeditor/teams/11143/nl/)\n"

+ 12 - 1
packages/ckeditor5-table/lang/translations/no.po

@@ -1,4 +1,15 @@
-# Copyright (c) 2003-2018, CKSource - Frederico Knabben. All rights reserved.
+# Copyright (c) 2003-2019, CKSource - Frederico Knabben. All rights reserved.
+#
+#                                     !!! IMPORTANT !!!
+#
+#         Before you edit this file, please keep in mind that contributing to the project
+#                translations is possible ONLY via the Transifex online service.
+#
+#         To submit your translations, visit https://www.transifex.com/ckeditor/ckeditor5.
+#
+#                   To learn more, check out the official contributor's guide:
+#     https://ckeditor.com/docs/ckeditor5/latest/framework/guides/contributing/contributing.html
+#
 msgid ""
 msgid ""
 msgstr ""
 msgstr ""
 "Language-Team: Norwegian (https://www.transifex.com/ckeditor/teams/11143/no/)\n"
 "Language-Team: Norwegian (https://www.transifex.com/ckeditor/teams/11143/no/)\n"

+ 12 - 1
packages/ckeditor5-table/lang/translations/pl.po

@@ -1,4 +1,15 @@
-# Copyright (c) 2003-2018, CKSource - Frederico Knabben. All rights reserved.
+# Copyright (c) 2003-2019, CKSource - Frederico Knabben. All rights reserved.
+#
+#                                     !!! IMPORTANT !!!
+#
+#         Before you edit this file, please keep in mind that contributing to the project
+#                translations is possible ONLY via the Transifex online service.
+#
+#         To submit your translations, visit https://www.transifex.com/ckeditor/ckeditor5.
+#
+#                   To learn more, check out the official contributor's guide:
+#     https://ckeditor.com/docs/ckeditor5/latest/framework/guides/contributing/contributing.html
+#
 msgid ""
 msgid ""
 msgstr ""
 msgstr ""
 "Language-Team: Polish (https://www.transifex.com/ckeditor/teams/11143/pl/)\n"
 "Language-Team: Polish (https://www.transifex.com/ckeditor/teams/11143/pl/)\n"

+ 14 - 3
packages/ckeditor5-table/lang/translations/pt-br.po

@@ -1,4 +1,15 @@
-# Copyright (c) 2003-2018, CKSource - Frederico Knabben. All rights reserved.
+# Copyright (c) 2003-2019, CKSource - Frederico Knabben. All rights reserved.
+#
+#                                     !!! IMPORTANT !!!
+#
+#         Before you edit this file, please keep in mind that contributing to the project
+#                translations is possible ONLY via the Transifex online service.
+#
+#         To submit your translations, visit https://www.transifex.com/ckeditor/ckeditor5.
+#
+#                   To learn more, check out the official contributor's guide:
+#     https://ckeditor.com/docs/ckeditor5/latest/framework/guides/contributing/contributing.html
+#
 msgid ""
 msgid ""
 msgstr ""
 msgstr ""
 "Language-Team: Portuguese (Brazil) (https://www.transifex.com/ckeditor/teams/11143/pt_BR/)\n"
 "Language-Team: Portuguese (Brazil) (https://www.transifex.com/ckeditor/teams/11143/pt_BR/)\n"
@@ -15,11 +26,11 @@ msgstr "Coluna de cabeçalho"
 
 
 msgctxt "Label for the insert table column to the left of the current one button."
 msgctxt "Label for the insert table column to the left of the current one button."
 msgid "Insert column left"
 msgid "Insert column left"
-msgstr ""
+msgstr "Inserir coluna à esquerda"
 
 
 msgctxt "Label for the insert table column to the right of the current one button."
 msgctxt "Label for the insert table column to the right of the current one button."
 msgid "Insert column right"
 msgid "Insert column right"
-msgstr ""
+msgstr "Inserir coluna à direita"
 
 
 msgctxt "Label for the delete table column button."
 msgctxt "Label for the delete table column button."
 msgid "Delete column"
 msgid "Delete column"

+ 16 - 5
packages/ckeditor5-table/lang/translations/ru.po

@@ -1,4 +1,15 @@
-# Copyright (c) 2003-2018, CKSource - Frederico Knabben. All rights reserved.
+# Copyright (c) 2003-2019, CKSource - Frederico Knabben. All rights reserved.
+#
+#                                     !!! IMPORTANT !!!
+#
+#         Before you edit this file, please keep in mind that contributing to the project
+#                translations is possible ONLY via the Transifex online service.
+#
+#         To submit your translations, visit https://www.transifex.com/ckeditor/ckeditor5.
+#
+#                   To learn more, check out the official contributor's guide:
+#     https://ckeditor.com/docs/ckeditor5/latest/framework/guides/contributing/contributing.html
+#
 msgid ""
 msgid ""
 msgstr ""
 msgstr ""
 "Language-Team: Russian (https://www.transifex.com/ckeditor/teams/11143/ru/)\n"
 "Language-Team: Russian (https://www.transifex.com/ckeditor/teams/11143/ru/)\n"
@@ -15,11 +26,11 @@ msgstr "Столбец заголовков"
 
 
 msgctxt "Label for the insert table column to the left of the current one button."
 msgctxt "Label for the insert table column to the left of the current one button."
 msgid "Insert column left"
 msgid "Insert column left"
-msgstr ""
+msgstr "Вставить столбец слева"
 
 
 msgctxt "Label for the insert table column to the right of the current one button."
 msgctxt "Label for the insert table column to the right of the current one button."
 msgid "Insert column right"
 msgid "Insert column right"
-msgstr ""
+msgstr "Вставить столбец справа"
 
 
 msgctxt "Label for the delete table column button."
 msgctxt "Label for the delete table column button."
 msgid "Delete column"
 msgid "Delete column"
@@ -35,11 +46,11 @@ msgstr "Строка заголовков"
 
 
 msgctxt "Label for the insert row below button."
 msgctxt "Label for the insert row below button."
 msgid "Insert row below"
 msgid "Insert row below"
-msgstr "Вставить строку выше"
+msgstr "Вставить строку ниже"
 
 
 msgctxt "Label for the insert row above button."
 msgctxt "Label for the insert row above button."
 msgid "Insert row above"
 msgid "Insert row above"
-msgstr "Вставить строку ниже"
+msgstr "Вставить строку выше"
 
 
 msgctxt "Label for the delete table row button."
 msgctxt "Label for the delete table row button."
 msgid "Delete row"
 msgid "Delete row"

+ 14 - 3
packages/ckeditor5-table/lang/translations/sk.po

@@ -1,4 +1,15 @@
-# Copyright (c) 2003-2018, CKSource - Frederico Knabben. All rights reserved.
+# Copyright (c) 2003-2019, CKSource - Frederico Knabben. All rights reserved.
+#
+#                                     !!! IMPORTANT !!!
+#
+#         Before you edit this file, please keep in mind that contributing to the project
+#                translations is possible ONLY via the Transifex online service.
+#
+#         To submit your translations, visit https://www.transifex.com/ckeditor/ckeditor5.
+#
+#                   To learn more, check out the official contributor's guide:
+#     https://ckeditor.com/docs/ckeditor5/latest/framework/guides/contributing/contributing.html
+#
 msgid ""
 msgid ""
 msgstr ""
 msgstr ""
 "Language-Team: Slovak (https://www.transifex.com/ckeditor/teams/11143/sk/)\n"
 "Language-Team: Slovak (https://www.transifex.com/ckeditor/teams/11143/sk/)\n"
@@ -15,11 +26,11 @@ msgstr "Stĺpec hlavičky"
 
 
 msgctxt "Label for the insert table column to the left of the current one button."
 msgctxt "Label for the insert table column to the left of the current one button."
 msgid "Insert column left"
 msgid "Insert column left"
-msgstr ""
+msgstr "Vložiť stĺpec vľavo"
 
 
 msgctxt "Label for the insert table column to the right of the current one button."
 msgctxt "Label for the insert table column to the right of the current one button."
 msgid "Insert column right"
 msgid "Insert column right"
-msgstr ""
+msgstr "Vložiť stĺpec vpravo"
 
 
 msgctxt "Label for the delete table column button."
 msgctxt "Label for the delete table column button."
 msgid "Delete column"
 msgid "Delete column"

+ 12 - 1
packages/ckeditor5-table/lang/translations/sq.po

@@ -1,4 +1,15 @@
-# Copyright (c) 2003-2018, CKSource - Frederico Knabben. All rights reserved.
+# Copyright (c) 2003-2019, CKSource - Frederico Knabben. All rights reserved.
+#
+#                                     !!! IMPORTANT !!!
+#
+#         Before you edit this file, please keep in mind that contributing to the project
+#                translations is possible ONLY via the Transifex online service.
+#
+#         To submit your translations, visit https://www.transifex.com/ckeditor/ckeditor5.
+#
+#                   To learn more, check out the official contributor's guide:
+#     https://ckeditor.com/docs/ckeditor5/latest/framework/guides/contributing/contributing.html
+#
 msgid ""
 msgid ""
 msgstr ""
 msgstr ""
 "Language-Team: Albanian (https://www.transifex.com/ckeditor/teams/11143/sq/)\n"
 "Language-Team: Albanian (https://www.transifex.com/ckeditor/teams/11143/sq/)\n"

+ 89 - 0
packages/ckeditor5-table/lang/translations/sr-latn.po

@@ -0,0 +1,89 @@
+# Copyright (c) 2003-2019, CKSource - Frederico Knabben. All rights reserved.
+#
+#                                     !!! IMPORTANT !!!
+#
+#         Before you edit this file, please keep in mind that contributing to the project
+#                translations is possible ONLY via the Transifex online service.
+#
+#         To submit your translations, visit https://www.transifex.com/ckeditor/ckeditor5.
+#
+#                   To learn more, check out the official contributor's guide:
+#     https://ckeditor.com/docs/ckeditor5/latest/framework/guides/contributing/contributing.html
+#
+msgid ""
+msgstr ""
+"Language-Team: Serbian (Latin) (https://www.transifex.com/ckeditor/teams/11143/sr@latin/)\n"
+"Language: sr@latin\n"
+"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n"
+
+msgctxt "Label for the insert table toolbar button."
+msgid "Insert table"
+msgstr "Dodaj tabelu"
+
+msgctxt "Label for the set/unset table header column button."
+msgid "Header column"
+msgstr "Kolona za zaglavlje"
+
+msgctxt "Label for the insert table column to the left of the current one button."
+msgid "Insert column left"
+msgstr "Dodaj kolonu levo"
+
+msgctxt "Label for the insert table column to the right of the current one button."
+msgid "Insert column right"
+msgstr "Dodaj kolonu desno"
+
+msgctxt "Label for the delete table column button."
+msgid "Delete column"
+msgstr "Briši kolonu"
+
+msgctxt "Label for the table column dropdown button."
+msgid "Column"
+msgstr "Kolona"
+
+msgctxt "Label for the set/unset table header row button."
+msgid "Header row"
+msgstr "Red za zaglavlje"
+
+msgctxt "Label for the insert row below button."
+msgid "Insert row below"
+msgstr "Dodaj red ispod"
+
+msgctxt "Label for the insert row above button."
+msgid "Insert row above"
+msgstr "Dodaj red iznad"
+
+msgctxt "Label for the delete table row button."
+msgid "Delete row"
+msgstr "Briši red"
+
+msgctxt "Label for the table row dropdown button."
+msgid "Row"
+msgstr "Red"
+
+msgctxt "Label for the merge table cell up button."
+msgid "Merge cell up"
+msgstr "Spoj ćelije na gore"
+
+msgctxt "Label for the merge table cell right button."
+msgid "Merge cell right"
+msgstr "Spoj ćelije na desno"
+
+msgctxt "Label for the merge table cell down button."
+msgid "Merge cell down"
+msgstr "Spoj ćelije na dole"
+
+msgctxt "Label for the merge table cell left button."
+msgid "Merge cell left"
+msgstr "Spoj ćelije na levo"
+
+msgctxt "Label for the split table cell vertically button."
+msgid "Split cell vertically"
+msgstr "Deli ćelije uspravno"
+
+msgctxt "Label for the split table cell horizontally button."
+msgid "Split cell horizontally"
+msgstr "Deli ćelije vodoravno"
+
+msgctxt "Label for the merge table cells button."
+msgid "Merge cells"
+msgstr "Spoj ćelije"

+ 89 - 0
packages/ckeditor5-table/lang/translations/sr.po

@@ -0,0 +1,89 @@
+# Copyright (c) 2003-2019, CKSource - Frederico Knabben. All rights reserved.
+#
+#                                     !!! IMPORTANT !!!
+#
+#         Before you edit this file, please keep in mind that contributing to the project
+#                translations is possible ONLY via the Transifex online service.
+#
+#         To submit your translations, visit https://www.transifex.com/ckeditor/ckeditor5.
+#
+#                   To learn more, check out the official contributor's guide:
+#     https://ckeditor.com/docs/ckeditor5/latest/framework/guides/contributing/contributing.html
+#
+msgid ""
+msgstr ""
+"Language-Team: Serbian (https://www.transifex.com/ckeditor/teams/11143/sr/)\n"
+"Language: sr\n"
+"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n"
+
+msgctxt "Label for the insert table toolbar button."
+msgid "Insert table"
+msgstr "Додај табелу"
+
+msgctxt "Label for the set/unset table header column button."
+msgid "Header column"
+msgstr "Колона за заглавље"
+
+msgctxt "Label for the insert table column to the left of the current one button."
+msgid "Insert column left"
+msgstr "Додај колону лево"
+
+msgctxt "Label for the insert table column to the right of the current one button."
+msgid "Insert column right"
+msgstr "Додај колону десно"
+
+msgctxt "Label for the delete table column button."
+msgid "Delete column"
+msgstr "Бриши колону"
+
+msgctxt "Label for the table column dropdown button."
+msgid "Column"
+msgstr "Колона"
+
+msgctxt "Label for the set/unset table header row button."
+msgid "Header row"
+msgstr "Ред за заглавлје"
+
+msgctxt "Label for the insert row below button."
+msgid "Insert row below"
+msgstr "Додај ред испод"
+
+msgctxt "Label for the insert row above button."
+msgid "Insert row above"
+msgstr "Додај ред изнад"
+
+msgctxt "Label for the delete table row button."
+msgid "Delete row"
+msgstr "Бриши ред"
+
+msgctxt "Label for the table row dropdown button."
+msgid "Row"
+msgstr "Ред"
+
+msgctxt "Label for the merge table cell up button."
+msgid "Merge cell up"
+msgstr "Спој ћелије на горе"
+
+msgctxt "Label for the merge table cell right button."
+msgid "Merge cell right"
+msgstr "Спој ћелије на десно"
+
+msgctxt "Label for the merge table cell down button."
+msgid "Merge cell down"
+msgstr "Спој ћелије на доле"
+
+msgctxt "Label for the merge table cell left button."
+msgid "Merge cell left"
+msgstr "Cпој ћелије на лево"
+
+msgctxt "Label for the split table cell vertically button."
+msgid "Split cell vertically"
+msgstr "Дели ћелије усправно"
+
+msgctxt "Label for the split table cell horizontally button."
+msgid "Split cell horizontally"
+msgstr "Дели ћелије водоравно"
+
+msgctxt "Label for the merge table cells button."
+msgid "Merge cells"
+msgstr "Спој ћелије"

+ 89 - 0
packages/ckeditor5-table/lang/translations/sv.po

@@ -0,0 +1,89 @@
+# Copyright (c) 2003-2019, CKSource - Frederico Knabben. All rights reserved.
+#
+#                                     !!! IMPORTANT !!!
+#
+#         Before you edit this file, please keep in mind that contributing to the project
+#                translations is possible ONLY via the Transifex online service.
+#
+#         To submit your translations, visit https://www.transifex.com/ckeditor/ckeditor5.
+#
+#                   To learn more, check out the official contributor's guide:
+#     https://ckeditor.com/docs/ckeditor5/latest/framework/guides/contributing/contributing.html
+#
+msgid ""
+msgstr ""
+"Language-Team: Swedish (https://www.transifex.com/ckeditor/teams/11143/sv/)\n"
+"Language: sv\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+
+msgctxt "Label for the insert table toolbar button."
+msgid "Insert table"
+msgstr "Lägg in tabell"
+
+msgctxt "Label for the set/unset table header column button."
+msgid "Header column"
+msgstr ""
+
+msgctxt "Label for the insert table column to the left of the current one button."
+msgid "Insert column left"
+msgstr ""
+
+msgctxt "Label for the insert table column to the right of the current one button."
+msgid "Insert column right"
+msgstr ""
+
+msgctxt "Label for the delete table column button."
+msgid "Delete column"
+msgstr "Ta bort kolumn"
+
+msgctxt "Label for the table column dropdown button."
+msgid "Column"
+msgstr "Kolumn"
+
+msgctxt "Label for the set/unset table header row button."
+msgid "Header row"
+msgstr ""
+
+msgctxt "Label for the insert row below button."
+msgid "Insert row below"
+msgstr ""
+
+msgctxt "Label for the insert row above button."
+msgid "Insert row above"
+msgstr ""
+
+msgctxt "Label for the delete table row button."
+msgid "Delete row"
+msgstr "Ta bort rad"
+
+msgctxt "Label for the table row dropdown button."
+msgid "Row"
+msgstr "Rad"
+
+msgctxt "Label for the merge table cell up button."
+msgid "Merge cell up"
+msgstr ""
+
+msgctxt "Label for the merge table cell right button."
+msgid "Merge cell right"
+msgstr ""
+
+msgctxt "Label for the merge table cell down button."
+msgid "Merge cell down"
+msgstr ""
+
+msgctxt "Label for the merge table cell left button."
+msgid "Merge cell left"
+msgstr ""
+
+msgctxt "Label for the split table cell vertically button."
+msgid "Split cell vertically"
+msgstr ""
+
+msgctxt "Label for the split table cell horizontally button."
+msgid "Split cell horizontally"
+msgstr ""
+
+msgctxt "Label for the merge table cells button."
+msgid "Merge cells"
+msgstr ""

+ 14 - 3
packages/ckeditor5-table/lang/translations/tr.po

@@ -1,4 +1,15 @@
-# Copyright (c) 2003-2018, CKSource - Frederico Knabben. All rights reserved.
+# Copyright (c) 2003-2019, CKSource - Frederico Knabben. All rights reserved.
+#
+#                                     !!! IMPORTANT !!!
+#
+#         Before you edit this file, please keep in mind that contributing to the project
+#                translations is possible ONLY via the Transifex online service.
+#
+#         To submit your translations, visit https://www.transifex.com/ckeditor/ckeditor5.
+#
+#                   To learn more, check out the official contributor's guide:
+#     https://ckeditor.com/docs/ckeditor5/latest/framework/guides/contributing/contributing.html
+#
 msgid ""
 msgid ""
 msgstr ""
 msgstr ""
 "Language-Team: Turkish (https://www.transifex.com/ckeditor/teams/11143/tr/)\n"
 "Language-Team: Turkish (https://www.transifex.com/ckeditor/teams/11143/tr/)\n"
@@ -15,11 +26,11 @@ msgstr "Başlık kolonu"
 
 
 msgctxt "Label for the insert table column to the left of the current one button."
 msgctxt "Label for the insert table column to the left of the current one button."
 msgid "Insert column left"
 msgid "Insert column left"
-msgstr ""
+msgstr "Sola kolon ekle"
 
 
 msgctxt "Label for the insert table column to the right of the current one button."
 msgctxt "Label for the insert table column to the right of the current one button."
 msgid "Insert column right"
 msgid "Insert column right"
-msgstr ""
+msgstr "Sağa kolon ekle"
 
 
 msgctxt "Label for the delete table column button."
 msgctxt "Label for the delete table column button."
 msgid "Delete column"
 msgid "Delete column"

+ 14 - 3
packages/ckeditor5-table/lang/translations/uk.po

@@ -1,4 +1,15 @@
-# Copyright (c) 2003-2018, CKSource - Frederico Knabben. All rights reserved.
+# Copyright (c) 2003-2019, CKSource - Frederico Knabben. All rights reserved.
+#
+#                                     !!! IMPORTANT !!!
+#
+#         Before you edit this file, please keep in mind that contributing to the project
+#                translations is possible ONLY via the Transifex online service.
+#
+#         To submit your translations, visit https://www.transifex.com/ckeditor/ckeditor5.
+#
+#                   To learn more, check out the official contributor's guide:
+#     https://ckeditor.com/docs/ckeditor5/latest/framework/guides/contributing/contributing.html
+#
 msgid ""
 msgid ""
 msgstr ""
 msgstr ""
 "Language-Team: Ukrainian (https://www.transifex.com/ckeditor/teams/11143/uk/)\n"
 "Language-Team: Ukrainian (https://www.transifex.com/ckeditor/teams/11143/uk/)\n"
@@ -15,11 +26,11 @@ msgstr "Заголовок стовпця"
 
 
 msgctxt "Label for the insert table column to the left of the current one button."
 msgctxt "Label for the insert table column to the left of the current one button."
 msgid "Insert column left"
 msgid "Insert column left"
-msgstr ""
+msgstr "Вставити стовпець зліва"
 
 
 msgctxt "Label for the insert table column to the right of the current one button."
 msgctxt "Label for the insert table column to the right of the current one button."
 msgid "Insert column right"
 msgid "Insert column right"
-msgstr ""
+msgstr "Вставити стовпець справа"
 
 
 msgctxt "Label for the delete table column button."
 msgctxt "Label for the delete table column button."
 msgid "Delete column"
 msgid "Delete column"

+ 89 - 0
packages/ckeditor5-table/lang/translations/vi.po

@@ -0,0 +1,89 @@
+# Copyright (c) 2003-2019, CKSource - Frederico Knabben. All rights reserved.
+#
+#                                     !!! IMPORTANT !!!
+#
+#         Before you edit this file, please keep in mind that contributing to the project
+#                translations is possible ONLY via the Transifex online service.
+#
+#         To submit your translations, visit https://www.transifex.com/ckeditor/ckeditor5.
+#
+#                   To learn more, check out the official contributor's guide:
+#     https://ckeditor.com/docs/ckeditor5/latest/framework/guides/contributing/contributing.html
+#
+msgid ""
+msgstr ""
+"Language-Team: Vietnamese (https://www.transifex.com/ckeditor/teams/11143/vi/)\n"
+"Language: vi\n"
+"Plural-Forms: nplurals=1; plural=0;\n"
+
+msgctxt "Label for the insert table toolbar button."
+msgid "Insert table"
+msgstr "Tạo bảng"
+
+msgctxt "Label for the set/unset table header column button."
+msgid "Header column"
+msgstr "Tiêu đề cột"
+
+msgctxt "Label for the insert table column to the left of the current one button."
+msgid "Insert column left"
+msgstr "Thêm cột vào bên trái"
+
+msgctxt "Label for the insert table column to the right of the current one button."
+msgid "Insert column right"
+msgstr "Thêm cột vào bên phải"
+
+msgctxt "Label for the delete table column button."
+msgid "Delete column"
+msgstr "Xoá cột"
+
+msgctxt "Label for the table column dropdown button."
+msgid "Column"
+msgstr "Cột"
+
+msgctxt "Label for the set/unset table header row button."
+msgid "Header row"
+msgstr "Tiêu đề hàng"
+
+msgctxt "Label for the insert row below button."
+msgid "Insert row below"
+msgstr "Thêm hàng ở dưới"
+
+msgctxt "Label for the insert row above button."
+msgid "Insert row above"
+msgstr "Thêm hàng phía trên"
+
+msgctxt "Label for the delete table row button."
+msgid "Delete row"
+msgstr "Xoá hàng"
+
+msgctxt "Label for the table row dropdown button."
+msgid "Row"
+msgstr "Hàng"
+
+msgctxt "Label for the merge table cell up button."
+msgid "Merge cell up"
+msgstr ""
+
+msgctxt "Label for the merge table cell right button."
+msgid "Merge cell right"
+msgstr ""
+
+msgctxt "Label for the merge table cell down button."
+msgid "Merge cell down"
+msgstr ""
+
+msgctxt "Label for the merge table cell left button."
+msgid "Merge cell left"
+msgstr ""
+
+msgctxt "Label for the split table cell vertically button."
+msgid "Split cell vertically"
+msgstr ""
+
+msgctxt "Label for the split table cell horizontally button."
+msgid "Split cell horizontally"
+msgstr ""
+
+msgctxt "Label for the merge table cells button."
+msgid "Merge cells"
+msgstr ""

+ 14 - 3
packages/ckeditor5-table/lang/translations/zh-cn.po

@@ -1,4 +1,15 @@
-# Copyright (c) 2003-2018, CKSource - Frederico Knabben. All rights reserved.
+# Copyright (c) 2003-2019, CKSource - Frederico Knabben. All rights reserved.
+#
+#                                     !!! IMPORTANT !!!
+#
+#         Before you edit this file, please keep in mind that contributing to the project
+#                translations is possible ONLY via the Transifex online service.
+#
+#         To submit your translations, visit https://www.transifex.com/ckeditor/ckeditor5.
+#
+#                   To learn more, check out the official contributor's guide:
+#     https://ckeditor.com/docs/ckeditor5/latest/framework/guides/contributing/contributing.html
+#
 msgid ""
 msgid ""
 msgstr ""
 msgstr ""
 "Language-Team: Chinese (China) (https://www.transifex.com/ckeditor/teams/11143/zh_CN/)\n"
 "Language-Team: Chinese (China) (https://www.transifex.com/ckeditor/teams/11143/zh_CN/)\n"
@@ -15,11 +26,11 @@ msgstr "标题列"
 
 
 msgctxt "Label for the insert table column to the left of the current one button."
 msgctxt "Label for the insert table column to the left of the current one button."
 msgid "Insert column left"
 msgid "Insert column left"
-msgstr ""
+msgstr "左侧插入列"
 
 
 msgctxt "Label for the insert table column to the right of the current one button."
 msgctxt "Label for the insert table column to the right of the current one button."
 msgid "Insert column right"
 msgid "Insert column right"
-msgstr ""
+msgstr "右侧插入列"
 
 
 msgctxt "Label for the delete table column button."
 msgctxt "Label for the delete table column button."
 msgid "Delete column"
 msgid "Delete column"

+ 89 - 0
packages/ckeditor5-table/lang/translations/zh.po

@@ -0,0 +1,89 @@
+# Copyright (c) 2003-2019, CKSource - Frederico Knabben. All rights reserved.
+#
+#                                     !!! IMPORTANT !!!
+#
+#         Before you edit this file, please keep in mind that contributing to the project
+#                translations is possible ONLY via the Transifex online service.
+#
+#         To submit your translations, visit https://www.transifex.com/ckeditor/ckeditor5.
+#
+#                   To learn more, check out the official contributor's guide:
+#     https://ckeditor.com/docs/ckeditor5/latest/framework/guides/contributing/contributing.html
+#
+msgid ""
+msgstr ""
+"Language-Team: Chinese (Taiwan) (https://www.transifex.com/ckeditor/teams/11143/zh_TW/)\n"
+"Language: zh_TW\n"
+"Plural-Forms: nplurals=1; plural=0;\n"
+
+msgctxt "Label for the insert table toolbar button."
+msgid "Insert table"
+msgstr "插入表格"
+
+msgctxt "Label for the set/unset table header column button."
+msgid "Header column"
+msgstr "標題欄"
+
+msgctxt "Label for the insert table column to the left of the current one button."
+msgid "Insert column left"
+msgstr "插入左方欄"
+
+msgctxt "Label for the insert table column to the right of the current one button."
+msgid "Insert column right"
+msgstr "插入右方欄"
+
+msgctxt "Label for the delete table column button."
+msgid "Delete column"
+msgstr "刪除欄"
+
+msgctxt "Label for the table column dropdown button."
+msgid "Column"
+msgstr "欄"
+
+msgctxt "Label for the set/unset table header row button."
+msgid "Header row"
+msgstr "標題列"
+
+msgctxt "Label for the insert row below button."
+msgid "Insert row below"
+msgstr "插入下方列"
+
+msgctxt "Label for the insert row above button."
+msgid "Insert row above"
+msgstr "插入上方列"
+
+msgctxt "Label for the delete table row button."
+msgid "Delete row"
+msgstr "刪除列"
+
+msgctxt "Label for the table row dropdown button."
+msgid "Row"
+msgstr "列"
+
+msgctxt "Label for the merge table cell up button."
+msgid "Merge cell up"
+msgstr "合併上方儲存格"
+
+msgctxt "Label for the merge table cell right button."
+msgid "Merge cell right"
+msgstr "合併右方儲存格"
+
+msgctxt "Label for the merge table cell down button."
+msgid "Merge cell down"
+msgstr "合併下方儲存格"
+
+msgctxt "Label for the merge table cell left button."
+msgid "Merge cell left"
+msgstr "合併左方儲存格"
+
+msgctxt "Label for the split table cell vertically button."
+msgid "Split cell vertically"
+msgstr "垂直分割儲存格"
+
+msgctxt "Label for the split table cell horizontally button."
+msgid "Split cell horizontally"
+msgstr "水平分割儲存格"
+
+msgctxt "Label for the merge table cells button."
+msgid "Merge cells"
+msgstr "合併儲存格"

+ 28 - 24
packages/ckeditor5-table/package.json

@@ -1,6 +1,6 @@
 {
 {
   "name": "@ckeditor/ckeditor5-table",
   "name": "@ckeditor/ckeditor5-table",
-  "version": "11.0.0",
+  "version": "13.0.0",
   "description": "Table feature for CKEditor 5.",
   "description": "Table feature for CKEditor 5.",
   "keywords": [
   "keywords": [
     "ckeditor",
     "ckeditor",
@@ -10,35 +10,35 @@
     "ckeditor5-plugin"
     "ckeditor5-plugin"
   ],
   ],
   "dependencies": {
   "dependencies": {
-    "@ckeditor/ckeditor5-core": "^11.0.1",
-    "@ckeditor/ckeditor5-engine": "^11.0.0",
-    "@ckeditor/ckeditor5-ui": "^11.1.0",
-    "@ckeditor/ckeditor5-widget": "^10.3.0"
+    "@ckeditor/ckeditor5-core": "^12.1.1",
+    "@ckeditor/ckeditor5-ui": "^13.0.0",
+    "@ckeditor/ckeditor5-widget": "^11.0.2"
   },
   },
   "devDependencies": {
   "devDependencies": {
-    "@ckeditor/ckeditor5-alignment": "^10.0.3",
-    "@ckeditor/ckeditor5-block-quote": "^10.1.0",
-    "@ckeditor/ckeditor5-clipboard": "^10.0.3",
-    "@ckeditor/ckeditor5-editor-classic": "^11.0.1",
-    "@ckeditor/ckeditor5-image": "^11.0.0",
-    "@ckeditor/ckeditor5-list": "^11.0.2",
-    "@ckeditor/ckeditor5-media-embed": "^10.0.0",
-    "@ckeditor/ckeditor5-paragraph": "^10.0.3",
-    "@ckeditor/ckeditor5-typing": "^11.0.1",
-    "@ckeditor/ckeditor5-undo": "^10.0.3",
-    "@ckeditor/ckeditor5-utils": "^11.0.0",
+    "@ckeditor/ckeditor5-alignment": "^11.1.1",
+    "@ckeditor/ckeditor5-block-quote": "^11.1.0",
+    "@ckeditor/ckeditor5-clipboard": "^11.0.2",
+    "@ckeditor/ckeditor5-editor-classic": "^12.1.1",
+    "@ckeditor/ckeditor5-engine": "^13.1.1",
+    "@ckeditor/ckeditor5-image": "^13.1.0",
+    "@ckeditor/ckeditor5-list": "^12.0.2",
+    "@ckeditor/ckeditor5-media-embed": "^11.1.1",
+    "@ckeditor/ckeditor5-paragraph": "^11.0.2",
+    "@ckeditor/ckeditor5-typing": "^12.0.2",
+    "@ckeditor/ckeditor5-undo": "^11.0.2",
+    "@ckeditor/ckeditor5-utils": "^12.1.1",
     "eslint": "^5.5.0",
     "eslint": "^5.5.0",
-    "eslint-config-ckeditor5": "^1.0.7",
-    "husky": "^0.14.3",
+    "eslint-config-ckeditor5": "^1.0.11",
+    "husky": "^1.3.1",
     "lint-staged": "^7.0.0"
     "lint-staged": "^7.0.0"
   },
   },
   "engines": {
   "engines": {
-    "node": ">=6.9.0",
-    "npm": ">=3.0.0"
+    "node": ">=8.0.0",
+    "npm": ">=5.7.1"
   },
   },
   "author": "CKSource (http://cksource.com/)",
   "author": "CKSource (http://cksource.com/)",
   "license": "GPL-2.0-or-later",
   "license": "GPL-2.0-or-later",
-  "homepage": "https://ckeditor.com",
+  "homepage": "https://ckeditor.com/ckeditor-5",
   "bugs": "https://github.com/ckeditor/ckeditor5-table/issues",
   "bugs": "https://github.com/ckeditor/ckeditor5-table/issues",
   "repository": {
   "repository": {
     "type": "git",
     "type": "git",
@@ -50,8 +50,7 @@
     "theme"
     "theme"
   ],
   ],
   "scripts": {
   "scripts": {
-    "lint": "eslint --quiet '**/*.js'",
-    "precommit": "lint-staged"
+    "lint": "eslint --quiet '**/*.js'"
   },
   },
   "lint-staged": {
   "lint-staged": {
     "**/*.js": [
     "**/*.js": [
@@ -61,5 +60,10 @@
   "eslintIgnore": [
   "eslintIgnore": [
     "src/lib/**",
     "src/lib/**",
     "packages/**"
     "packages/**"
-  ]
+  ],
+  "husky": {
+    "hooks": {
+      "pre-commit": "lint-staged"
+    }
+  }
 }
 }

+ 3 - 4
packages/ckeditor5-table/src/commands/insertcolumncommand.js

@@ -1,6 +1,6 @@
 /**
 /**
- * @license Copyright (c) 2003-2018, CKSource - Frederico Knabben. All rights reserved.
- * For licensing, see LICENSE.md.
+ * @license Copyright (c) 2003-2019, CKSource - Frederico Knabben. All rights reserved.
+ * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license
  */
  */
 
 
 /**
 /**
@@ -9,7 +9,6 @@
 
 
 import Command from '@ckeditor/ckeditor5-core/src/command';
 import Command from '@ckeditor/ckeditor5-core/src/command';
 import { findAncestor } from './utils';
 import { findAncestor } from './utils';
-import TableUtils from '../tableutils';
 
 
 /**
 /**
  * The insert column command.
  * The insert column command.
@@ -70,7 +69,7 @@ export default class InsertColumnCommand extends Command {
 	execute() {
 	execute() {
 		const editor = this.editor;
 		const editor = this.editor;
 		const selection = editor.model.document.selection;
 		const selection = editor.model.document.selection;
-		const tableUtils = editor.plugins.get( TableUtils );
+		const tableUtils = editor.plugins.get( 'TableUtils' );
 
 
 		const firstPosition = selection.getFirstPosition();
 		const firstPosition = selection.getFirstPosition();
 
 

+ 3 - 4
packages/ckeditor5-table/src/commands/insertrowcommand.js

@@ -1,6 +1,6 @@
 /**
 /**
- * @license Copyright (c) 2003-2018, CKSource - Frederico Knabben. All rights reserved.
- * For licensing, see LICENSE.md.
+ * @license Copyright (c) 2003-2019, CKSource - Frederico Knabben. All rights reserved.
+ * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license
  */
  */
 
 
 /**
 /**
@@ -9,7 +9,6 @@
 
 
 import Command from '@ckeditor/ckeditor5-core/src/command';
 import Command from '@ckeditor/ckeditor5-core/src/command';
 import { findAncestor } from './utils';
 import { findAncestor } from './utils';
-import TableUtils from '../tableutils';
 
 
 /**
 /**
  * The insert row command.
  * The insert row command.
@@ -69,7 +68,7 @@ export default class InsertRowCommand extends Command {
 	execute() {
 	execute() {
 		const editor = this.editor;
 		const editor = this.editor;
 		const selection = editor.model.document.selection;
 		const selection = editor.model.document.selection;
-		const tableUtils = editor.plugins.get( TableUtils );
+		const tableUtils = editor.plugins.get( 'TableUtils' );
 
 
 		const tableCell = findAncestor( 'tableCell', selection.getFirstPosition() );
 		const tableCell = findAncestor( 'tableCell', selection.getFirstPosition() );
 		const tableRow = tableCell.parent;
 		const tableRow = tableCell.parent;

+ 3 - 4
packages/ckeditor5-table/src/commands/inserttablecommand.js

@@ -1,6 +1,6 @@
 /**
 /**
- * @license Copyright (c) 2003-2018, CKSource - Frederico Knabben. All rights reserved.
- * For licensing, see LICENSE.md.
+ * @license Copyright (c) 2003-2019, CKSource - Frederico Knabben. All rights reserved.
+ * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license
  */
  */
 
 
 /**
 /**
@@ -9,7 +9,6 @@
 
 
 import Command from '@ckeditor/ckeditor5-core/src/command';
 import Command from '@ckeditor/ckeditor5-core/src/command';
 import { findOptimalInsertionPosition } from '@ckeditor/ckeditor5-widget/src/utils';
 import { findOptimalInsertionPosition } from '@ckeditor/ckeditor5-widget/src/utils';
-import TableUtils from '../tableutils';
 
 
 /**
 /**
  * The insert table command.
  * The insert table command.
@@ -49,7 +48,7 @@ export default class InsertTableCommand extends Command {
 	execute( options = {} ) {
 	execute( options = {} ) {
 		const model = this.editor.model;
 		const model = this.editor.model;
 		const selection = model.document.selection;
 		const selection = model.document.selection;
-		const tableUtils = this.editor.plugins.get( TableUtils );
+		const tableUtils = this.editor.plugins.get( 'TableUtils' );
 
 
 		const rows = parseInt( options.rows ) || 2;
 		const rows = parseInt( options.rows ) || 2;
 		const columns = parseInt( options.columns ) || 2;
 		const columns = parseInt( options.columns ) || 2;

+ 4 - 5
packages/ckeditor5-table/src/commands/removecolumncommand.js

@@ -1,6 +1,6 @@
 /**
 /**
- * @license Copyright (c) 2003-2018, CKSource - Frederico Knabben. All rights reserved.
- * For licensing, see LICENSE.md.
+ * @license Copyright (c) 2003-2019, CKSource - Frederico Knabben. All rights reserved.
+ * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license
  */
  */
 
 
 /**
 /**
@@ -10,7 +10,6 @@
 import Command from '@ckeditor/ckeditor5-core/src/command';
 import Command from '@ckeditor/ckeditor5-core/src/command';
 
 
 import TableWalker from '../tablewalker';
 import TableWalker from '../tablewalker';
-import TableUtils from '../tableutils';
 import { findAncestor, updateNumericAttribute } from './utils';
 import { findAncestor, updateNumericAttribute } from './utils';
 
 
 /**
 /**
@@ -31,7 +30,7 @@ export default class RemoveColumnCommand extends Command {
 	refresh() {
 	refresh() {
 		const editor = this.editor;
 		const editor = this.editor;
 		const selection = editor.model.document.selection;
 		const selection = editor.model.document.selection;
-		const tableUtils = editor.plugins.get( TableUtils );
+		const tableUtils = editor.plugins.get( 'TableUtils' );
 
 
 		const tableCell = findAncestor( 'tableCell', selection.getFirstPosition() );
 		const tableCell = findAncestor( 'tableCell', selection.getFirstPosition() );
 
 
@@ -63,7 +62,7 @@ export default class RemoveColumnCommand extends Command {
 
 
 		let cellToFocus;
 		let cellToFocus;
 
 
-		const tableUtils = this.editor.plugins.get( TableUtils );
+		const tableUtils = this.editor.plugins.get( 'TableUtils' );
 		const columns = tableUtils.getColumns( tableCell.parent.parent );
 		const columns = tableUtils.getColumns( tableCell.parent.parent );
 
 
 		const columnToFocus = removedColumn === columns - 1 ? removedColumn - 1 : removedColumn + 1;
 		const columnToFocus = removedColumn === columns - 1 ? removedColumn - 1 : removedColumn + 1;

+ 2 - 2
packages/ckeditor5-table/src/commands/removerowcommand.js

@@ -1,6 +1,6 @@
 /**
 /**
- * @license Copyright (c) 2003-2018, CKSource - Frederico Knabben. All rights reserved.
- * For licensing, see LICENSE.md.
+ * @license Copyright (c) 2003-2019, CKSource - Frederico Knabben. All rights reserved.
+ * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license
  */
  */
 
 
 /**
 /**

+ 2 - 2
packages/ckeditor5-table/src/commands/setheadercolumncommand.js

@@ -1,6 +1,6 @@
 /**
 /**
- * @license Copyright (c) 2003-2018, CKSource - Frederico Knabben. All rights reserved.
- * For licensing, see LICENSE.md.
+ * @license Copyright (c) 2003-2019, CKSource - Frederico Knabben. All rights reserved.
+ * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license
  */
  */
 
 
 /**
 /**

+ 2 - 2
packages/ckeditor5-table/src/commands/setheaderrowcommand.js

@@ -1,6 +1,6 @@
 /**
 /**
- * @license Copyright (c) 2003-2018, CKSource - Frederico Knabben. All rights reserved.
- * For licensing, see LICENSE.md.
+ * @license Copyright (c) 2003-2019, CKSource - Frederico Knabben. All rights reserved.
+ * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license
  */
  */
 
 
 /**
 /**

+ 3 - 4
packages/ckeditor5-table/src/commands/splitcellcommand.js

@@ -1,6 +1,6 @@
 /**
 /**
- * @license Copyright (c) 2003-2018, CKSource - Frederico Knabben. All rights reserved.
- * For licensing, see LICENSE.md.
+ * @license Copyright (c) 2003-2019, CKSource - Frederico Knabben. All rights reserved.
+ * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license
  */
  */
 
 
 /**
 /**
@@ -8,7 +8,6 @@
  */
  */
 
 
 import Command from '@ckeditor/ckeditor5-core/src/command';
 import Command from '@ckeditor/ckeditor5-core/src/command';
-import TableUtils from '../tableutils';
 import { findAncestor } from './utils';
 import { findAncestor } from './utils';
 
 
 /**
 /**
@@ -68,7 +67,7 @@ export default class SplitCellCommand extends Command {
 
 
 		const isHorizontally = this.direction === 'horizontally';
 		const isHorizontally = this.direction === 'horizontally';
 
 
-		const tableUtils = this.editor.plugins.get( TableUtils );
+		const tableUtils = this.editor.plugins.get( 'TableUtils' );
 
 
 		if ( isHorizontally ) {
 		if ( isHorizontally ) {
 			tableUtils.splitCellHorizontally( tableCell, 2 );
 			tableUtils.splitCellHorizontally( tableCell, 2 );

+ 2 - 2
packages/ckeditor5-table/src/commands/utils.js

@@ -1,6 +1,6 @@
 /**
 /**
- * @license Copyright (c) 2003-2018, CKSource - Frederico Knabben. All rights reserved.
- * For licensing, see LICENSE.md.
+ * @license Copyright (c) 2003-2019, CKSource - Frederico Knabben. All rights reserved.
+ * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license
  */
  */
 
 
 /**
 /**

+ 44 - 33
packages/ckeditor5-table/src/converters/downcast.js

@@ -1,6 +1,6 @@
 /**
 /**
- * @license Copyright (c) 2003-2018, CKSource - Frederico Knabben. All rights reserved.
- * For licensing, see LICENSE.md.
+ * @license Copyright (c) 2003-2019, CKSource - Frederico Knabben. All rights reserved.
+ * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license
  */
  */
 
 
 /**
 /**
@@ -51,14 +51,17 @@ export function downcastInsertTable( options = {} ) {
 			headingColumns: table.getAttribute( 'headingColumns' ) || 0
 			headingColumns: table.getAttribute( 'headingColumns' ) || 0
 		};
 		};
 
 
+		// Cache for created table rows.
+		const viewRows = new Map();
+
 		for ( const tableWalkerValue of tableWalker ) {
 		for ( const tableWalkerValue of tableWalker ) {
 			const { row, cell } = tableWalkerValue;
 			const { row, cell } = tableWalkerValue;
 
 
 			const tableSection = getOrCreateTableSection( getSectionName( row, tableAttributes ), tableElement, conversionApi );
 			const tableSection = getOrCreateTableSection( getSectionName( row, tableAttributes ), tableElement, conversionApi );
 			const tableRow = table.getChild( row );
 			const tableRow = table.getChild( row );
 
 
-			// Check if row was converted
-			const trElement = getOrCreateTr( tableRow, row, tableSection, conversionApi );
+			const trElement = viewRows.get( row ) || createTr( tableRow, row, tableSection, conversionApi );
+			viewRows.set( row, trElement );
 
 
 			// Consume table cell - it will be always consumed as we convert whole table at once.
 			// Consume table cell - it will be always consumed as we convert whole table at once.
 			conversionApi.consumable.consume( cell, 'insert' );
 			conversionApi.consumable.consume( cell, 'insert' );
@@ -104,9 +107,14 @@ export function downcastInsertRow( options = {} ) {
 			headingColumns: table.getAttribute( 'headingColumns' ) || 0
 			headingColumns: table.getAttribute( 'headingColumns' ) || 0
 		};
 		};
 
 
+		// Cache for created table rows.
+		const viewRows = new Map();
+
 		for ( const tableWalkerValue of tableWalker ) {
 		for ( const tableWalkerValue of tableWalker ) {
 			const tableSection = getOrCreateTableSection( getSectionName( row, tableAttributes ), tableElement, conversionApi );
 			const tableSection = getOrCreateTableSection( getSectionName( row, tableAttributes ), tableElement, conversionApi );
-			const trElement = getOrCreateTr( tableRow, row, tableSection, conversionApi );
+
+			const trElement = viewRows.get( row ) || createTr( tableRow, row, tableSection, conversionApi );
+			viewRows.set( row, trElement );
 
 
 			// Consume table cell - it will be always consumed as we convert whole row at once.
 			// Consume table cell - it will be always consumed as we convert whole row at once.
 			conversionApi.consumable.consume( tableWalkerValue.cell, 'insert' );
 			conversionApi.consumable.consume( tableWalkerValue.cell, 'insert' );
@@ -313,7 +321,7 @@ export function downcastRemoveRow() {
 //
 //
 // @param {module:engine/model/element~Element} tableCell
 // @param {module:engine/model/element~Element} tableCell
 // @param {String} desiredCellElementName
 // @param {String} desiredCellElementName
-// @param {Object} conversionApi
+// @param {module:engine/conversion/downcastdispatcher~DowncastConversionApi} conversionApi
 // @param {Boolean} asWidget
 // @param {Boolean} asWidget
 function renameViewTableCell( tableCell, desiredCellElementName, conversionApi, asWidget ) {
 function renameViewTableCell( tableCell, desiredCellElementName, conversionApi, asWidget ) {
 	const viewWriter = conversionApi.writer;
 	const viewWriter = conversionApi.writer;
@@ -344,7 +352,7 @@ function renameViewTableCell( tableCell, desiredCellElementName, conversionApi,
 //
 //
 // @param {module:table/tablewalker~TableWalkerValue} tableWalkerValue
 // @param {module:table/tablewalker~TableWalkerValue} tableWalkerValue
 // @param {{headingColumns, headingRows}} tableAttributes
 // @param {{headingColumns, headingRows}} tableAttributes
-// @param {Object} conversionApi
+// @param {module:engine/conversion/downcastdispatcher~DowncastConversionApi} conversionApi
 // @param {Boolean} asWidget
 // @param {Boolean} asWidget
 function renameViewTableCellIfRequired( tableWalkerValue, tableAttributes, conversionApi, asWidget ) {
 function renameViewTableCellIfRequired( tableWalkerValue, tableAttributes, conversionApi, asWidget ) {
 	const { cell } = tableWalkerValue;
 	const { cell } = tableWalkerValue;
@@ -365,7 +373,7 @@ function renameViewTableCellIfRequired( tableWalkerValue, tableAttributes, conve
 //
 //
 // @param {module:table/tablewalker~TableWalkerValue} tableWalkerValue
 // @param {module:table/tablewalker~TableWalkerValue} tableWalkerValue
 // @param {module:engine/view/position~Position} insertPosition
 // @param {module:engine/view/position~Position} insertPosition
-// @param {Object} conversionApi
+// @param {module:engine/conversion/downcastdispatcher~DowncastConversionApi} conversionApi
 function createViewTableCellElement( tableWalkerValue, tableAttributes, insertPosition, conversionApi, options ) {
 function createViewTableCellElement( tableWalkerValue, tableAttributes, insertPosition, conversionApi, options ) {
 	const asWidget = options && options.asWidget;
 	const asWidget = options && options.asWidget;
 	const cellElementName = getCellElementName( tableWalkerValue, tableAttributes );
 	const cellElementName = getCellElementName( tableWalkerValue, tableAttributes );
@@ -376,20 +384,19 @@ function createViewTableCellElement( tableWalkerValue, tableAttributes, insertPo
 
 
 	const tableCell = tableWalkerValue.cell;
 	const tableCell = tableWalkerValue.cell;
 
 
-	const isSingleParagraph = tableCell.childCount === 1 && tableCell.getChild( 0 ).name === 'paragraph';
+	const firstChild = tableCell.getChild( 0 );
+	const isSingleParagraph = tableCell.childCount === 1 && firstChild.name === 'paragraph';
 
 
 	conversionApi.writer.insert( insertPosition, cellElement );
 	conversionApi.writer.insert( insertPosition, cellElement );
 
 
-	if ( isSingleParagraph ) {
+	if ( isSingleParagraph && !hasAnyAttribute( firstChild ) ) {
 		const innerParagraph = tableCell.getChild( 0 );
 		const innerParagraph = tableCell.getChild( 0 );
 		const paragraphInsertPosition = conversionApi.writer.createPositionAt( cellElement, 'end' );
 		const paragraphInsertPosition = conversionApi.writer.createPositionAt( cellElement, 'end' );
 
 
 		conversionApi.consumable.consume( innerParagraph, 'insert' );
 		conversionApi.consumable.consume( innerParagraph, 'insert' );
 
 
 		if ( options.asWidget ) {
 		if ( options.asWidget ) {
-			const containerName = [ ...innerParagraph.getAttributeKeys() ].length ? 'p' : 'span';
-
-			const fakeParagraph = conversionApi.writer.createContainerElement( containerName );
+			const fakeParagraph = conversionApi.writer.createContainerElement( 'span' );
 
 
 			conversionApi.mapper.bindElements( innerParagraph, fakeParagraph );
 			conversionApi.mapper.bindElements( innerParagraph, fakeParagraph );
 			conversionApi.writer.insert( paragraphInsertPosition, fakeParagraph );
 			conversionApi.writer.insert( paragraphInsertPosition, fakeParagraph );
@@ -404,29 +411,25 @@ function createViewTableCellElement( tableWalkerValue, tableAttributes, insertPo
 	}
 	}
 }
 }
 
 
-// Creates or returns an existing `<tr>` element from the view.
+// Creates `<tr>` view element.
 //
 //
 // @param {module:engine/view/element~Element} tableRow
 // @param {module:engine/view/element~Element} tableRow
 // @param {Number} rowIndex
 // @param {Number} rowIndex
 // @param {module:engine/view/element~Element} tableSection
 // @param {module:engine/view/element~Element} tableSection
-// @param {Object} conversionApi
+// @param {module:engine/conversion/downcastdispatcher~DowncastConversionApi} conversionApi
 // @returns {module:engine/view/element~Element}
 // @returns {module:engine/view/element~Element}
-function getOrCreateTr( tableRow, rowIndex, tableSection, conversionApi ) {
-	let trElement = conversionApi.mapper.toViewElement( tableRow );
+function createTr( tableRow, rowIndex, tableSection, conversionApi ) {
+	// Will always consume since we're converting <tableRow> element from a parent <table>.
+	conversionApi.consumable.consume( tableRow, 'insert' );
 
 
-	if ( !trElement ) {
-		// Will always consume since we're converting <tableRow> element from a parent <table>.
-		conversionApi.consumable.consume( tableRow, 'insert' );
+	const trElement = conversionApi.writer.createContainerElement( 'tr' );
+	conversionApi.mapper.bindElements( tableRow, trElement );
 
 
-		trElement = conversionApi.writer.createContainerElement( 'tr' );
-		conversionApi.mapper.bindElements( tableRow, trElement );
+	const headingRows = tableRow.parent.getAttribute( 'headingRows' ) || 0;
+	const offset = headingRows > 0 && rowIndex >= headingRows ? rowIndex - headingRows : rowIndex;
 
 
-		const headingRows = tableRow.parent.getAttribute( 'headingRows' ) || 0;
-		const offset = headingRows > 0 && rowIndex >= headingRows ? rowIndex - headingRows : rowIndex;
-
-		const position = conversionApi.writer.createPositionAt( tableSection, offset );
-		conversionApi.writer.insert( position, trElement );
-	}
+	const position = conversionApi.writer.createPositionAt( tableSection, offset );
+	conversionApi.writer.insert( position, trElement );
 
 
 	return trElement;
 	return trElement;
 }
 }
@@ -467,7 +470,7 @@ function getSectionName( row, tableAttributes ) {
 //
 //
 // @param {String} sectionName
 // @param {String} sectionName
 // @param {module:engine/view/element~Element} viewTable
 // @param {module:engine/view/element~Element} viewTable
-// @param {Object} conversionApi
+// @param {module:engine/conversion/downcastdispatcher~DowncastConversionApi} conversionApi
 // @param {Object} cachedTableSection An object that stores cached elements.
 // @param {Object} cachedTableSection An object that stores cached elements.
 // @returns {module:engine/view/containerelement~ContainerElement}
 // @returns {module:engine/view/containerelement~ContainerElement}
 function getOrCreateTableSection( sectionName, viewTable, conversionApi ) {
 function getOrCreateTableSection( sectionName, viewTable, conversionApi ) {
@@ -480,7 +483,7 @@ function getOrCreateTableSection( sectionName, viewTable, conversionApi ) {
 //
 //
 // @param {String} sectionName
 // @param {String} sectionName
 // @param {module:engine/view/element~Element} tableElement
 // @param {module:engine/view/element~Element} tableElement
-// @param {Object} conversionApi
+// @param {module:engine/conversion/downcastdispatcher~DowncastConversionApi} conversionApi
 function getExistingTableSectionElement( sectionName, tableElement ) {
 function getExistingTableSectionElement( sectionName, tableElement ) {
 	for ( const tableSection of tableElement.getChildren() ) {
 	for ( const tableSection of tableElement.getChildren() ) {
 		if ( tableSection.name == sectionName ) {
 		if ( tableSection.name == sectionName ) {
@@ -493,7 +496,7 @@ function getExistingTableSectionElement( sectionName, tableElement ) {
 //
 //
 // @param {String} sectionName
 // @param {String} sectionName
 // @param {module:engine/view/element~Element} tableElement
 // @param {module:engine/view/element~Element} tableElement
-// @param {Object} conversionApi
+// @param {module:engine/conversion/downcastdispatcher~DowncastConversionApi} conversionApi
 // @returns {module:engine/view/containerelement~ContainerElement}
 // @returns {module:engine/view/containerelement~ContainerElement}
 function createTableSection( sectionName, tableElement, conversionApi ) {
 function createTableSection( sectionName, tableElement, conversionApi ) {
 	const tableChildElement = conversionApi.writer.createContainerElement( sectionName );
 	const tableChildElement = conversionApi.writer.createContainerElement( sectionName );
@@ -509,7 +512,7 @@ function createTableSection( sectionName, tableElement, conversionApi ) {
 //
 //
 // @param {String} sectionName
 // @param {String} sectionName
 // @param {module:engine/view/element~Element} tableElement
 // @param {module:engine/view/element~Element} tableElement
-// @param {Object} conversionApi
+// @param {module:engine/conversion/downcastdispatcher~DowncastConversionApi} conversionApi
 function removeTableSectionIfEmpty( sectionName, tableElement, conversionApi ) {
 function removeTableSectionIfEmpty( sectionName, tableElement, conversionApi ) {
 	const tableSection = getExistingTableSectionElement( sectionName, tableElement );
 	const tableSection = getExistingTableSectionElement( sectionName, tableElement );
 
 
@@ -524,7 +527,7 @@ function removeTableSectionIfEmpty( sectionName, tableElement, conversionApi ) {
 //
 //
 // @param {Array.<module:engine/model/element~Element>} rowsToMove
 // @param {Array.<module:engine/model/element~Element>} rowsToMove
 // @param {module:engine/view/element~Element} viewTableSection
 // @param {module:engine/view/element~Element} viewTableSection
-// @param {Object} conversionApi
+// @param {module:engine/conversion/downcastdispatcher~DowncastConversionApi} conversionApi
 // @param {Number|'end'|'before'|'after'} offset Offset or one of the flags.
 // @param {Number|'end'|'before'|'after'} offset Offset or one of the flags.
 function moveViewRowsToTableSection( rowsToMove, viewTableSection, conversionApi, offset ) {
 function moveViewRowsToTableSection( rowsToMove, viewTableSection, conversionApi, offset ) {
 	for ( const tableRow of rowsToMove ) {
 	for ( const tableRow of rowsToMove ) {
@@ -550,3 +553,11 @@ function getViewTable( viewFigure ) {
 		}
 		}
 	}
 	}
 }
 }
+
+// Checks if element has any attribute set.
+//
+// @param {module:engine/model/element~Element element
+// @returns {Boolean}
+function hasAnyAttribute( element ) {
+	return !![ ...element.getAttributeKeys() ].length;
+}

+ 17 - 4
packages/ckeditor5-table/src/converters/table-cell-content-post-fixer.js

@@ -1,6 +1,6 @@
 /**
 /**
- * @license Copyright (c) 2003-2018, CKSource - Frederico Knabben. All rights reserved.
- * For licensing, see LICENSE.md.
+ * @license Copyright (c) 2003-2019, CKSource - Frederico Knabben. All rights reserved.
+ * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license
  */
  */
 
 
 /**
 /**
@@ -97,16 +97,29 @@ function fixTableRow( tableRow, writer ) {
 	return wasFixed;
 	return wasFixed;
 }
 }
 
 
-// Fixes all table cell content by adding paragraph to a table cell without any child.
+// Fixes all table cell content by:
+// - adding paragraph to a table cell without any child.
+// - wrapping direct $text in <paragraph>.
 //
 //
 // @param {module:engine/model/element~Element} table
 // @param {module:engine/model/element~Element} table
 // @param {module:engine/model/writer~Writer} writer
 // @param {module:engine/model/writer~Writer} writer
+// @returns {Boolean}
 function fixTableCellContent( tableCell, writer ) {
 function fixTableCellContent( tableCell, writer ) {
+	// Insert paragraph to an empty table cell.
 	if ( tableCell.childCount == 0 ) {
 	if ( tableCell.childCount == 0 ) {
 		writer.insertElement( 'paragraph', tableCell );
 		writer.insertElement( 'paragraph', tableCell );
 
 
 		return true;
 		return true;
 	}
 	}
 
 
-	return false;
+	// Check table cell children for directly placed $text nodes.
+	// Temporary solution. See https://github.com/ckeditor/ckeditor5/issues/1464.
+	const textNodes = Array.from( tableCell.getChildren() ).filter( child => child.is( 'text' ) );
+
+	for ( const child of textNodes ) {
+		writer.wrap( writer.createRangeOn( child ), 'paragraph' );
+	}
+
+	// Return true when there were text nodes to fix.
+	return !!textNodes.length;
 }
 }

+ 2 - 2
packages/ckeditor5-table/src/converters/table-layout-post-fixer.js

@@ -1,6 +1,6 @@
 /**
 /**
- * @license Copyright (c) 2003-2018, CKSource - Frederico Knabben. All rights reserved.
- * For licensing, see LICENSE.md.
+ * @license Copyright (c) 2003-2019, CKSource - Frederico Knabben. All rights reserved.
+ * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license
  */
  */
 
 
 /**
 /**

+ 19 - 3
packages/ckeditor5-table/src/converters/tablecell-post-fixer.js

@@ -1,6 +1,6 @@
 /**
 /**
- * @license Copyright (c) 2003-2018, CKSource - Frederico Knabben. All rights reserved.
- * For licensing, see LICENSE.md.
+ * @license Copyright (c) 2003-2019, CKSource - Frederico Knabben. All rights reserved.
+ * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license
  */
  */
 
 
 /**
 /**
@@ -91,7 +91,7 @@ function tableCellPostFixer( writer, model, mapper, view ) {
 	// Selection in the view might not be updated to renamed elements. Happens mostly when other feature inserts paragraph to the table cell
 	// Selection in the view might not be updated to renamed elements. Happens mostly when other feature inserts paragraph to the table cell
 	// (ie. when deleting table cell contents) and sets selection to it while table-post fixer changes view <p> to <span> element.
 	// (ie. when deleting table cell contents) and sets selection to it while table-post fixer changes view <p> to <span> element.
 	// The view.selection would have outdated nodes.
 	// The view.selection would have outdated nodes.
-	if ( wasFixed ) {
+	if ( wasFixed && selectionNeedsFix( view.document.selection, mapper ) ) {
 		updateRangesInViewSelection( model.document.selection, mapper, writer );
 		updateRangesInViewSelection( model.document.selection, mapper, writer );
 	}
 	}
 
 
@@ -126,6 +126,12 @@ function getElementsToCheck( view ) {
 // - span: for single paragraph with no attributes.
 // - span: for single paragraph with no attributes.
 // - p   : in other cases.
 // - p   : in other cases.
 function ensureProperElementName( currentViewElement, mapper, writer ) {
 function ensureProperElementName( currentViewElement, mapper, writer ) {
+	// This situation may happen if a view element was changed and removed at the same time.
+	// In this case, the view element is already unbound so the post-fixer would crash.
+	if ( !currentViewElement.root.is( 'rootElement' ) ) {
+		return false;
+	}
+
 	const modelParagraph = mapper.toModelElement( currentViewElement );
 	const modelParagraph = mapper.toModelElement( currentViewElement );
 	const expectedViewElementName = getExpectedElementName( modelParagraph.parent, modelParagraph );
 	const expectedViewElementName = getExpectedElementName( modelParagraph.parent, modelParagraph );
 
 
@@ -180,3 +186,13 @@ function updateRangesInViewSelection( selection, mapper, writer ) {
 
 
 	writer.setSelection( fixedRanges, { backward: selection.isBackward } );
 	writer.setSelection( fixedRanges, { backward: selection.isBackward } );
 }
 }
+
+// Checks if selection needs to be fixed by ensuring that current view selection position's parents are present in the editable view.
+//
+// @param {module:engine/view/selection~Selection} viewSelection
+function selectionNeedsFix( viewSelection ) {
+	const anchor = viewSelection.anchor;
+	const focus = viewSelection.focus;
+
+	return viewSelection.rangeCount && ( !anchor.root.is( 'rootElement' ) || !focus.root.is( 'rootElement' ) );
+}

+ 2 - 2
packages/ckeditor5-table/src/converters/upcasttable.js

@@ -1,6 +1,6 @@
 /**
 /**
- * @license Copyright (c) 2003-2018, CKSource - Frederico Knabben. All rights reserved.
- * For licensing, see LICENSE.md.
+ * @license Copyright (c) 2003-2019, CKSource - Frederico Knabben. All rights reserved.
+ * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license
  */
  */
 
 
 /**
 /**

+ 10 - 2
packages/ckeditor5-table/src/table.js

@@ -1,6 +1,6 @@
 /**
 /**
- * @license Copyright (c) 2003-2018, CKSource - Frederico Knabben. All rights reserved.
- * For licensing, see LICENSE.md.
+ * @license Copyright (c) 2003-2019, CKSource - Frederico Knabben. All rights reserved.
+ * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license
  */
  */
 
 
 /**
 /**
@@ -55,3 +55,11 @@ export default class Table extends Plugin {
  *
  *
  * @interface TableConfig
  * @interface TableConfig
  */
  */
+
+/**
+ * The configuration of the {@link module:table/table~Table} feature.
+ *
+ * Read more in {@link module:table/table~TableConfig}.
+ *
+ * @member {module:table/table~TableConfig} module:core/editor/editorconfig~EditorConfig#table
+ */

+ 13 - 17
packages/ckeditor5-table/src/tableediting.js

@@ -1,6 +1,6 @@
 /**
 /**
- * @license Copyright (c) 2003-2018, CKSource - Frederico Knabben. All rights reserved.
- * For licensing, see LICENSE.md.
+ * @license Copyright (c) 2003-2019, CKSource - Frederico Knabben. All rights reserved.
+ * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license
  */
  */
 
 
 /**
 /**
@@ -8,7 +8,6 @@
  */
  */
 
 
 import Plugin from '@ckeditor/ckeditor5-core/src/plugin';
 import Plugin from '@ckeditor/ckeditor5-core/src/plugin';
-import { upcastElementToElement } from '@ckeditor/ckeditor5-engine/src/conversion/upcast-converters';
 
 
 import upcastTable, { upcastTableCell } from './converters/upcasttable';
 import upcastTable, { upcastTableCell } from './converters/upcasttable';
 import {
 import {
@@ -57,7 +56,9 @@ export default class TableEditing extends Plugin {
 		schema.register( 'table', {
 		schema.register( 'table', {
 			allowWhere: '$block',
 			allowWhere: '$block',
 			allowAttributes: [ 'headingRows', 'headingColumns' ],
 			allowAttributes: [ 'headingRows', 'headingColumns' ],
-			isObject: true
+			isLimit: true,
+			isObject: true,
+			isBlock: true
 		} );
 		} );
 
 
 		schema.register( 'tableRow', {
 		schema.register( 'tableRow', {
@@ -81,17 +82,6 @@ export default class TableEditing extends Plugin {
 			}
 			}
 		} );
 		} );
 
 
-		// Disallow image and media in table cell.
-		schema.addChildCheck( ( context, childDefinition ) => {
-			if ( !Array.from( context.getNames() ).includes( 'table' ) ) {
-				return;
-			}
-
-			if ( childDefinition.name == 'image' || childDefinition.name == 'media' ) {
-				return false;
-			}
-		} );
-
 		// Table conversion.
 		// Table conversion.
 		conversion.for( 'upcast' ).add( upcastTable() );
 		conversion.for( 'upcast' ).add( upcastTable() );
 
 
@@ -99,7 +89,7 @@ export default class TableEditing extends Plugin {
 		conversion.for( 'dataDowncast' ).add( downcastInsertTable() );
 		conversion.for( 'dataDowncast' ).add( downcastInsertTable() );
 
 
 		// Table row conversion.
 		// Table row conversion.
-		conversion.for( 'upcast' ).add( upcastElementToElement( { model: 'tableRow', view: 'tr' } ) );
+		conversion.for( 'upcast' ).elementToElement( { model: 'tableRow', view: 'tr' } );
 
 
 		conversion.for( 'editingDowncast' ).add( downcastInsertRow( { asWidget: true } ) );
 		conversion.for( 'editingDowncast' ).add( downcastInsertRow( { asWidget: true } ) );
 		conversion.for( 'dataDowncast' ).add( downcastInsertRow() );
 		conversion.for( 'dataDowncast' ).add( downcastInsertRow() );
@@ -228,7 +218,13 @@ export default class TableEditing extends Plugin {
 			const isLastRow = currentRowIndex === table.childCount - 1;
 			const isLastRow = currentRowIndex === table.childCount - 1;
 
 
 			if ( isForward && isLastRow && isLastCellInRow ) {
 			if ( isForward && isLastRow && isLastCellInRow ) {
-				editor.plugins.get( TableUtils ).insertRows( table, { at: table.childCount } );
+				editor.execute( 'insertTableRowBelow' );
+
+				// Check if the command actually added a row. If `insertTableRowBelow` execution didn't add a row (because it was disabled
+				// or it got overwritten) do not change the selection.
+				if ( currentRowIndex === table.childCount - 1 ) {
+					return;
+				}
 			}
 			}
 
 
 			let cellToFocus;
 			let cellToFocus;

+ 8 - 31
packages/ckeditor5-table/src/tabletoolbar.js

@@ -1,6 +1,6 @@
 /**
 /**
- * @license Copyright (c) 2003-2018, CKSource - Frederico Knabben. All rights reserved.
- * For licensing, see LICENSE.md.
+ * @license Copyright (c) 2003-2019, CKSource - Frederico Knabben. All rights reserved.
+ * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license
  */
  */
 
 
 /**
 /**
@@ -8,21 +8,18 @@
  */
  */
 
 
 import Plugin from '@ckeditor/ckeditor5-core/src/plugin';
 import Plugin from '@ckeditor/ckeditor5-core/src/plugin';
-import { isTableContentSelected, isTableWidgetSelected } from './utils';
+import { getSelectedTableWidget, getTableWidgetAncestor } from './utils';
 import WidgetToolbarRepository from '@ckeditor/ckeditor5-widget/src/widgettoolbarrepository';
 import WidgetToolbarRepository from '@ckeditor/ckeditor5-widget/src/widgettoolbarrepository';
 
 
 /**
 /**
  * The table toolbar class. It creates toolbars for the table feature and its content (for now only for a table cell content).
  * The table toolbar class. It creates toolbars for the table feature and its content (for now only for a table cell content).
  *
  *
  * Table toolbar shows up when a table widget is selected. Its components (e.g. buttons) are created based on the
  * Table toolbar shows up when a table widget is selected. Its components (e.g. buttons) are created based on the
- * {@link module:table/table~TableConfig#toolbar `table.tableToolbar` configuration option}.
+ * {@link module:table/table~TableConfig#tableToolbar `table.tableToolbar` configuration option}.
  *
  *
  * Table content toolbar shows up when the selection is inside the content of a table. It creates its component based on the
  * Table content toolbar shows up when the selection is inside the content of a table. It creates its component based on the
  * {@link module:table/table~TableConfig#contentToolbar `table.contentToolbar` configuration option}.
  * {@link module:table/table~TableConfig#contentToolbar `table.contentToolbar` configuration option}.
  *
  *
- * Note that the old {@link module:table/table~TableConfig#toolbar `table.toolbar` configuration option} is deprecated
- * and will be removed in the next major release.
- *
  * @extends module:core/plugin~Plugin
  * @extends module:core/plugin~Plugin
  */
  */
 export default class TableToolbar extends Plugin {
 export default class TableToolbar extends Plugin {
@@ -48,45 +45,25 @@ export default class TableToolbar extends Plugin {
 		const widgetToolbarRepository = editor.plugins.get( WidgetToolbarRepository );
 		const widgetToolbarRepository = editor.plugins.get( WidgetToolbarRepository );
 
 
 		const tableContentToolbarItems = editor.config.get( 'table.contentToolbar' );
 		const tableContentToolbarItems = editor.config.get( 'table.contentToolbar' );
-		const deprecatedTableContentToolbarItems = editor.config.get( 'table.toolbar' );
 
 
 		const tableToolbarItems = editor.config.get( 'table.tableToolbar' );
 		const tableToolbarItems = editor.config.get( 'table.tableToolbar' );
 
 
-		if ( deprecatedTableContentToolbarItems ) {
-			// eslint-disable-next-line
-			console.warn(
-				'`config.table.toolbar` is deprecated and will be removed in the next major release.' +
-				' Use `config.table.contentToolbar` instead.'
-			);
-		}
-
-		if ( tableContentToolbarItems || deprecatedTableContentToolbarItems ) {
+		if ( tableContentToolbarItems ) {
 			widgetToolbarRepository.register( 'tableContent', {
 			widgetToolbarRepository.register( 'tableContent', {
-				items: tableContentToolbarItems || deprecatedTableContentToolbarItems,
-				visibleWhen: isTableContentSelected,
+				items: tableContentToolbarItems,
+				getRelatedElement: getTableWidgetAncestor
 			} );
 			} );
 		}
 		}
 
 
 		if ( tableToolbarItems ) {
 		if ( tableToolbarItems ) {
 			widgetToolbarRepository.register( 'table', {
 			widgetToolbarRepository.register( 'table', {
 				items: tableToolbarItems,
 				items: tableToolbarItems,
-				visibleWhen: isTableWidgetSelected,
+				getRelatedElement: getSelectedTableWidget
 			} );
 			} );
 		}
 		}
 	}
 	}
 }
 }
 
 
-/**
- * Items to be placed in the table content toolbar.
- *
- * **Note:** This configuration option is deprecated! Use {@link module:table/table~TableConfig#contentToolbar} instead.
- *
- * Read more about configuring toolbar in {@link module:core/editor/editorconfig~EditorConfig#toolbar}.
- *
- * @deprecated
- * @member {Array.<String>} module:table/table~TableConfig#toolbar
- */
-
 /**
 /**
  * Items to be placed in the table content toolbar.
  * Items to be placed in the table content toolbar.
  * The {@link module:table/tabletoolbar~TableToolbar} plugin is required to make this toolbar working.
  * The {@link module:table/tabletoolbar~TableToolbar} plugin is required to make this toolbar working.

+ 2 - 2
packages/ckeditor5-table/src/tableui.js

@@ -1,6 +1,6 @@
 /**
 /**
- * @license Copyright (c) 2003-2018, CKSource - Frederico Knabben. All rights reserved.
- * For licensing, see LICENSE.md.
+ * @license Copyright (c) 2003-2019, CKSource - Frederico Knabben. All rights reserved.
+ * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license
  */
  */
 
 
 /**
 /**

+ 2 - 2
packages/ckeditor5-table/src/tableutils.js

@@ -1,6 +1,6 @@
 /**
 /**
- * @license Copyright (c) 2003-2018, CKSource - Frederico Knabben. All rights reserved.
- * For licensing, see LICENSE.md.
+ * @license Copyright (c) 2003-2019, CKSource - Frederico Knabben. All rights reserved.
+ * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license
  */
  */
 
 
 /**
 /**

+ 7 - 7
packages/ckeditor5-table/src/tablewalker.js

@@ -1,6 +1,6 @@
 /**
 /**
- * @license Copyright (c) 2003-2018, CKSource - Frederico Knabben. All rights reserved.
- * For licensing, see LICENSE.md.
+ * @license Copyright (c) 2003-2019, CKSource - Frederico Knabben. All rights reserved.
+ * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license
  */
  */
 
 
 /**
 /**
@@ -34,13 +34,13 @@ export default class TableWalker {
 	 * For instance the code above for the following table:
 	 * For instance the code above for the following table:
 	 *
 	 *
 	 *		+----+----+----+----+----+----+
 	 *		+----+----+----+----+----+----+
-	 *		| 00      | 02 | 03      | 05 |
+	 *		| 00      | 02 | 03 | 04 | 05 |
 	 *		|         +----+----+----+----+
 	 *		|         +----+----+----+----+
 	 *		|         | 12      | 14 | 15 |
 	 *		|         | 12      | 14 | 15 |
-	 *		|         +----+----+----+----+
-	 *		|         | 22                |
-	 *		|----+----+                   +
-	 *		| 31 | 32 |                   |
+	 *		|         +----+----+----+    +
+	 *		|         | 22           |    |
+	 *		|----+----+----+----+----+    +
+	 *		| 30 | 31 | 32 | 33 | 34 |    |
 	 *		+----+----+----+----+----+----+
 	 *		+----+----+----+----+----+----+
 	 *
 	 *
 	 * will log in the console:
 	 * will log in the console:

+ 2 - 2
packages/ckeditor5-table/src/ui/inserttableview.js

@@ -1,6 +1,6 @@
 /**
 /**
- * @license Copyright (c) 2003-2018, CKSource - Frederico Knabben. All rights reserved.
- * For licensing, see LICENSE.md.
+ * @license Copyright (c) 2003-2019, CKSource - Frederico Knabben. All rights reserved.
+ * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license
  */
  */
 
 
 /**
 /**

+ 20 - 14
packages/ckeditor5-table/src/utils.js

@@ -1,6 +1,6 @@
 /**
 /**
- * @license Copyright (c) 2003-2018, CKSource - Frederico Knabben. All rights reserved.
- * For licensing, see LICENSE.md.
+ * @license Copyright (c) 2003-2019, CKSource - Frederico Knabben. All rights reserved.
+ * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license
  */
  */
 
 
 /**
 /**
@@ -10,8 +10,6 @@
 import { isWidget, toWidget } from '@ckeditor/ckeditor5-widget/src/utils';
 import { isWidget, toWidget } from '@ckeditor/ckeditor5-widget/src/utils';
 import { findAncestor } from './commands/utils';
 import { findAncestor } from './commands/utils';
 
 
-const tableSymbol = Symbol( 'isTable' );
-
 /**
 /**
  * Converts a given {@link module:engine/view/element~Element} to a table widget:
  * Converts a given {@link module:engine/view/element~Element} to a table widget:
  * * Adds a {@link module:engine/view/element~Element#_setCustomProperty custom property} allowing to recognize the table widget element.
  * * Adds a {@link module:engine/view/element~Element#_setCustomProperty custom property} allowing to recognize the table widget element.
@@ -23,7 +21,7 @@ const tableSymbol = Symbol( 'isTable' );
  * @returns {module:engine/view/element~Element}
  * @returns {module:engine/view/element~Element}
  */
  */
 export function toTableWidget( viewElement, writer ) {
 export function toTableWidget( viewElement, writer ) {
-	writer.setCustomProperty( tableSymbol, true, viewElement );
+	writer.setCustomProperty( 'table', true, viewElement );
 
 
 	return toWidget( viewElement, writer, { hasSelectionHandler: true } );
 	return toWidget( viewElement, writer, { hasSelectionHandler: true } );
 }
 }
@@ -35,29 +33,37 @@ export function toTableWidget( viewElement, writer ) {
  * @returns {Boolean}
  * @returns {Boolean}
  */
  */
 export function isTableWidget( viewElement ) {
 export function isTableWidget( viewElement ) {
-	return !!viewElement.getCustomProperty( tableSymbol ) && isWidget( viewElement );
+	return !!viewElement.getCustomProperty( 'table' ) && isWidget( viewElement );
 }
 }
 
 
 /**
 /**
- * Checks if a table widget is the only selected element.
+ * Returns a table widget editing view element if one is selected.
  *
  *
  * @param {module:engine/view/selection~Selection|module:engine/view/documentselection~DocumentSelection} selection
  * @param {module:engine/view/selection~Selection|module:engine/view/documentselection~DocumentSelection} selection
- * @returns {Boolean}
+ * @returns {module:engine/view/element~Element|null}
  */
  */
-export function isTableWidgetSelected( selection ) {
+export function getSelectedTableWidget( selection ) {
 	const viewElement = selection.getSelectedElement();
 	const viewElement = selection.getSelectedElement();
 
 
-	return !!( viewElement && isTableWidget( viewElement ) );
+	if ( viewElement && isTableWidget( viewElement ) ) {
+		return viewElement;
+	}
+
+	return null;
 }
 }
 
 
 /**
 /**
- * Checks if a table widget content is selected.
+ * Returns a table widget editing view element if one is among selection's ancestors.
  *
  *
  * @param {module:engine/view/selection~Selection|module:engine/view/documentselection~DocumentSelection} selection
  * @param {module:engine/view/selection~Selection|module:engine/view/documentselection~DocumentSelection} selection
- * @returns {Boolean}
+ * @returns {module:engine/view/element~Element|null}
  */
  */
-export function isTableContentSelected( selection ) {
+export function getTableWidgetAncestor( selection ) {
 	const parentTable = findAncestor( 'table', selection.getFirstPosition() );
 	const parentTable = findAncestor( 'table', selection.getFirstPosition() );
 
 
-	return !!( parentTable && isTableWidget( parentTable.parent ) );
+	if ( parentTable && isTableWidget( parentTable.parent ) ) {
+		return parentTable.parent;
+	}
+
+	return null;
 }
 }

+ 8 - 14
packages/ckeditor5-table/tests/_utils/utils.js

@@ -1,10 +1,8 @@
 /**
 /**
- * @license Copyright (c) 2003-2018, CKSource - Frederico Knabben. All rights reserved.
- * For licensing, see LICENSE.md.
+ * @license Copyright (c) 2003-2019, CKSource - Frederico Knabben. All rights reserved.
+ * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license
  */
  */
 
 
-import { upcastElementToElement } from '@ckeditor/ckeditor5-engine/src/conversion/upcast-converters';
-
 import {
 import {
 	downcastInsertCell,
 	downcastInsertCell,
 	downcastInsertRow,
 	downcastInsertRow,
@@ -108,7 +106,8 @@ export function viewTable( tableData, attributes = {} ) {
 			asWidget
 			asWidget
 		} ) }</tbody>` : '';
 		} ) }</tbody>` : '';
 
 
-	const figureAttributes = asWidget ? 'class="ck-widget ck-widget_selectable table" contenteditable="false"' : 'class="table"';
+	const figureAttributes = asWidget ?
+		'class="ck-widget ck-widget_with-selection-handler table" contenteditable="false"' : 'class="table"';
 	const widgetHandler = '<div class="ck ck-widget__selection-handler"></div>';
 	const widgetHandler = '<div class="ck ck-widget__selection-handler"></div>';
 
 
 	return `<figure ${ figureAttributes }>${ asWidget ? widgetHandler : '' }<table>${ thead }${ tbody }</table></figure>`;
 	return `<figure ${ figureAttributes }>${ asWidget ? widgetHandler : '' }<table>${ thead }${ tbody }</table></figure>`;
@@ -162,7 +161,9 @@ export function defaultSchema( schema, registerParagraph = true ) {
 	schema.register( 'table', {
 	schema.register( 'table', {
 		allowWhere: '$block',
 		allowWhere: '$block',
 		allowAttributes: [ 'headingRows', 'headingColumns' ],
 		allowAttributes: [ 'headingRows', 'headingColumns' ],
-		isObject: true
+		isLimit: true,
+		isObject: true,
+		isBlock: true
 	} );
 	} );
 
 
 	schema.register( 'tableRow', {
 	schema.register( 'tableRow', {
@@ -186,13 +187,6 @@ export function defaultSchema( schema, registerParagraph = true ) {
 		}
 		}
 	} );
 	} );
 
 
-	// Disallow image in table.
-	schema.addChildCheck( ( context, childDefinition ) => {
-		if ( childDefinition.name == 'image' && Array.from( context.getNames() ).includes( 'table' ) ) {
-			return false;
-		}
-	} );
-
 	if ( registerParagraph ) {
 	if ( registerParagraph ) {
 		schema.register( 'paragraph', { inheritAllFrom: '$block' } );
 		schema.register( 'paragraph', { inheritAllFrom: '$block' } );
 	}
 	}
@@ -206,7 +200,7 @@ export function defaultConversion( conversion, asWidget = false ) {
 	conversion.for( 'downcast' ).add( downcastInsertTable( { asWidget } ) );
 	conversion.for( 'downcast' ).add( downcastInsertTable( { asWidget } ) );
 
 
 	// Table row conversion.
 	// Table row conversion.
-	conversion.for( 'upcast' ).add( upcastElementToElement( { model: 'tableRow', view: 'tr' } ) );
+	conversion.for( 'upcast' ).elementToElement( { model: 'tableRow', view: 'tr' } );
 	conversion.for( 'downcast' ).add( downcastInsertRow( { asWidget } ) );
 	conversion.for( 'downcast' ).add( downcastInsertRow( { asWidget } ) );
 	conversion.for( 'downcast' ).add( downcastRemoveRow( { asWidget } ) );
 	conversion.for( 'downcast' ).add( downcastRemoveRow( { asWidget } ) );
 
 

+ 2 - 2
packages/ckeditor5-table/tests/commands/insertcolumncommand.js

@@ -1,6 +1,6 @@
 /**
 /**
- * @license Copyright (c) 2003-2018, CKSource - Frederico Knabben. All rights reserved.
- * For licensing, see LICENSE.md.
+ * @license Copyright (c) 2003-2019, CKSource - Frederico Knabben. All rights reserved.
+ * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license
  */
  */
 
 
 import ModelTestEditor from '@ckeditor/ckeditor5-core/tests/_utils/modeltesteditor';
 import ModelTestEditor from '@ckeditor/ckeditor5-core/tests/_utils/modeltesteditor';

+ 2 - 2
packages/ckeditor5-table/tests/commands/insertrowcommand.js

@@ -1,6 +1,6 @@
 /**
 /**
- * @license Copyright (c) 2003-2018, CKSource - Frederico Knabben. All rights reserved.
- * For licensing, see LICENSE.md.
+ * @license Copyright (c) 2003-2019, CKSource - Frederico Knabben. All rights reserved.
+ * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license
  */
  */
 
 
 import ModelTestEditor from '@ckeditor/ckeditor5-core/tests/_utils/modeltesteditor';
 import ModelTestEditor from '@ckeditor/ckeditor5-core/tests/_utils/modeltesteditor';

+ 2 - 2
packages/ckeditor5-table/tests/commands/inserttablecommand.js

@@ -1,6 +1,6 @@
 /**
 /**
- * @license Copyright (c) 2003-2018, CKSource - Frederico Knabben. All rights reserved.
- * For licensing, see LICENSE.md.
+ * @license Copyright (c) 2003-2019, CKSource - Frederico Knabben. All rights reserved.
+ * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license
  */
  */
 
 
 import ModelTestEditor from '@ckeditor/ckeditor5-core/tests/_utils/modeltesteditor';
 import ModelTestEditor from '@ckeditor/ckeditor5-core/tests/_utils/modeltesteditor';

+ 2 - 2
packages/ckeditor5-table/tests/commands/removecolumncommand.js

@@ -1,6 +1,6 @@
 /**
 /**
- * @license Copyright (c) 2003-2018, CKSource - Frederico Knabben. All rights reserved.
- * For licensing, see LICENSE.md.
+ * @license Copyright (c) 2003-2019, CKSource - Frederico Knabben. All rights reserved.
+ * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license
  */
  */
 
 
 import ModelTestEditor from '@ckeditor/ckeditor5-core/tests/_utils/modeltesteditor';
 import ModelTestEditor from '@ckeditor/ckeditor5-core/tests/_utils/modeltesteditor';

+ 2 - 2
packages/ckeditor5-table/tests/commands/removerowcommand.js

@@ -1,6 +1,6 @@
 /**
 /**
- * @license Copyright (c) 2003-2018, CKSource - Frederico Knabben. All rights reserved.
- * For licensing, see LICENSE.md.
+ * @license Copyright (c) 2003-2019, CKSource - Frederico Knabben. All rights reserved.
+ * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license
  */
  */
 
 
 import ModelTestEditor from '@ckeditor/ckeditor5-core/tests/_utils/modeltesteditor';
 import ModelTestEditor from '@ckeditor/ckeditor5-core/tests/_utils/modeltesteditor';

+ 2 - 2
packages/ckeditor5-table/tests/commands/setheadercolumncommand.js

@@ -1,6 +1,6 @@
 /**
 /**
- * @license Copyright (c) 2003-2018, CKSource - Frederico Knabben. All rights reserved.
- * For licensing, see LICENSE.md.
+ * @license Copyright (c) 2003-2019, CKSource - Frederico Knabben. All rights reserved.
+ * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license
  */
  */
 
 
 import ModelTestEditor from '@ckeditor/ckeditor5-core/tests/_utils/modeltesteditor';
 import ModelTestEditor from '@ckeditor/ckeditor5-core/tests/_utils/modeltesteditor';

+ 2 - 2
packages/ckeditor5-table/tests/commands/setheaderrowcommand.js

@@ -1,6 +1,6 @@
 /**
 /**
- * @license Copyright (c) 2003-2018, CKSource - Frederico Knabben. All rights reserved.
- * For licensing, see LICENSE.md.
+ * @license Copyright (c) 2003-2019, CKSource - Frederico Knabben. All rights reserved.
+ * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license
  */
  */
 
 
 import ModelTestEditor from '@ckeditor/ckeditor5-core/tests/_utils/modeltesteditor';
 import ModelTestEditor from '@ckeditor/ckeditor5-core/tests/_utils/modeltesteditor';

+ 2 - 2
packages/ckeditor5-table/tests/commands/splitcellcommand.js

@@ -1,6 +1,6 @@
 /**
 /**
- * @license Copyright (c) 2003-2018, CKSource - Frederico Knabben. All rights reserved.
- * For licensing, see LICENSE.md.
+ * @license Copyright (c) 2003-2019, CKSource - Frederico Knabben. All rights reserved.
+ * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license
  */
  */
 
 
 import ModelTestEditor from '@ckeditor/ckeditor5-core/tests/_utils/modeltesteditor';
 import ModelTestEditor from '@ckeditor/ckeditor5-core/tests/_utils/modeltesteditor';

+ 2 - 2
packages/ckeditor5-table/tests/commands/utils.js

@@ -1,6 +1,6 @@
 /**
 /**
- * @license Copyright (c) 2003-2018, CKSource - Frederico Knabben. All rights reserved.
- * For licensing, see LICENSE.md.
+ * @license Copyright (c) 2003-2019, CKSource - Frederico Knabben. All rights reserved.
+ * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license
  */
  */
 
 
 import ModelTestEditor from '@ckeditor/ckeditor5-core/tests/_utils/modeltesteditor';
 import ModelTestEditor from '@ckeditor/ckeditor5-core/tests/_utils/modeltesteditor';

+ 76 - 7
packages/ckeditor5-table/tests/converters/downcast.js

@@ -1,6 +1,6 @@
 /**
 /**
- * @license Copyright (c) 2003-2018, CKSource - Frederico Knabben. All rights reserved.
- * For licensing, see LICENSE.md.
+ * @license Copyright (c) 2003-2019, CKSource - Frederico Knabben. All rights reserved.
+ * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license
  */
  */
 
 
 import VirtualTestEditor from '@ckeditor/ckeditor5-core/tests/_utils/virtualtesteditor';
 import VirtualTestEditor from '@ckeditor/ckeditor5-core/tests/_utils/virtualtesteditor';
@@ -147,6 +147,35 @@ describe( 'downcast converters', () => {
 			) );
 			) );
 		} );
 		} );
 
 
+		it( 'should create table with block content (attribute on paragraph)', () => {
+			editor.conversion.attributeToAttribute(
+				{
+					model: { key: 'alignment', values: [ 'right', 'center', 'justify' ] },
+					view: {
+						right: { key: 'style', value: { 'text-align': 'right' } },
+						center: { key: 'style', value: { 'text-align': 'center' } },
+						justify: { key: 'style', value: { 'text-align': 'justify' } }
+					}
+				}
+			);
+
+			setModelData( model, modelTable( [
+				[ '<paragraph alignment="right">00</paragraph>' ]
+			] ) );
+
+			expect( formatTable( getViewData( view, { withoutSelection: true } ) ) ).to.equal( formatTable(
+				'<figure class="table">' +
+					'<table>' +
+						'<tbody>' +
+							'<tr>' +
+								'<td><p style="text-align:right">00</p></td>' +
+							'</tr>' +
+						'</tbody>' +
+					'</table>' +
+				'</figure>'
+			) );
+		} );
+
 		it( 'should be possible to overwrite', () => {
 		it( 'should be possible to overwrite', () => {
 			editor.conversion.elementToElement( { model: 'tableRow', view: 'tr', converterPriority: 'high' } );
 			editor.conversion.elementToElement( { model: 'tableRow', view: 'tr', converterPriority: 'high' } );
 			editor.conversion.elementToElement( { model: 'tableCell', view: 'td', converterPriority: 'high' } );
 			editor.conversion.elementToElement( { model: 'tableCell', view: 'td', converterPriority: 'high' } );
@@ -171,6 +200,46 @@ describe( 'downcast converters', () => {
 			) );
 			) );
 		} );
 		} );
 
 
+		it( 'should re-create table on reinsert', () => {
+			model.schema.register( 'wrapper', {
+				allowWhere: '$block',
+				allowContentOf: '$root'
+			} );
+			editor.conversion.elementToElement( { model: 'wrapper', view: 'div' } );
+
+			setModelData( model, modelTable( [ [ '[]' ] ] ) );
+
+			expect( formatTable( getViewData( view, { withoutSelection: true } ) ) ).to.equal( formatTable(
+				'<figure class="table">' +
+					'<table>' +
+						'<tbody>' +
+							'<tr><td></td></tr>' +
+						'</tbody>' +
+					'</table>' +
+				'</figure>'
+			) );
+
+			model.change( writer => {
+				const table = model.document.getRoot().getChild( 0 );
+				const range = writer.createRange( writer.createPositionBefore( table ), writer.createPositionAfter( table ) );
+				const wrapper = writer.createElement( 'wrapper' );
+
+				writer.wrap( range, wrapper );
+			} );
+
+			expect( formatTable( getViewData( view, { withoutSelection: true } ) ) ).to.equal( formatTable(
+				'<div>' +
+					'<figure class="table">' +
+						'<table>' +
+							'<tbody>' +
+								'<tr><td></td></tr>' +
+							'</tbody>' +
+						'</table>' +
+					'</figure>' +
+				'</div>'
+			) );
+		} );
+
 		describe( 'headingColumns attribute', () => {
 		describe( 'headingColumns attribute', () => {
 			it( 'should mark heading columns table cells', () => {
 			it( 'should mark heading columns table cells', () => {
 				setModelData( model, modelTable( [
 				setModelData( model, modelTable( [
@@ -264,7 +333,7 @@ describe( 'downcast converters', () => {
 				setModelData( model, modelTable( [ [ '' ] ] ) );
 				setModelData( model, modelTable( [ [ '' ] ] ) );
 
 
 				expect( formatTable( getViewData( view, { withoutSelection: true } ) ) ).to.equal( formatTable(
 				expect( formatTable( getViewData( view, { withoutSelection: true } ) ) ).to.equal( formatTable(
-					'<figure class="ck-widget ck-widget_selectable table" contenteditable="false">' +
+					'<figure class="ck-widget ck-widget_with-selection-handler table" contenteditable="false">' +
 					'<div class="ck ck-widget__selection-handler"></div>' +
 					'<div class="ck ck-widget__selection-handler"></div>' +
 						'<table>' +
 						'<table>' +
 							'<tbody>' +
 							'<tbody>' +
@@ -497,7 +566,7 @@ describe( 'downcast converters', () => {
 
 
 				expect( formatTable(
 				expect( formatTable(
 					getViewData( view, { withoutSelection: true } ) ) ).to.equal( formatTable(
 					getViewData( view, { withoutSelection: true } ) ) ).to.equal( formatTable(
-					'<figure class="ck-widget ck-widget_selectable table" contenteditable="false">' +
+					'<figure class="ck-widget ck-widget_with-selection-handler table" contenteditable="false">' +
 						'<div class="ck ck-widget__selection-handler"></div>' +
 						'<div class="ck ck-widget__selection-handler"></div>' +
 						'<table>' +
 						'<table>' +
 							'<tbody>' +
 							'<tbody>' +
@@ -643,7 +712,7 @@ describe( 'downcast converters', () => {
 				} );
 				} );
 
 
 				expect( formatTable( getViewData( view, { withoutSelection: true } ) ) ).to.equal( formatTable(
 				expect( formatTable( getViewData( view, { withoutSelection: true } ) ) ).to.equal( formatTable(
-					'<figure class="ck-widget ck-widget_selectable table" contenteditable="false">' +
+					'<figure class="ck-widget ck-widget_with-selection-handler table" contenteditable="false">' +
 					'<div class="ck ck-widget__selection-handler"></div>' +
 					'<div class="ck ck-widget__selection-handler"></div>' +
 						'<table>' +
 						'<table>' +
 							'<tbody>' +
 							'<tbody>' +
@@ -820,7 +889,7 @@ describe( 'downcast converters', () => {
 				} );
 				} );
 
 
 				expect( formatTable( getViewData( view, { withoutSelection: true } ) ) ).to.equal( formatTable(
 				expect( formatTable( getViewData( view, { withoutSelection: true } ) ) ).to.equal( formatTable(
-					'<figure class="ck-widget ck-widget_selectable table" contenteditable="false">' +
+					'<figure class="ck-widget ck-widget_with-selection-handler table" contenteditable="false">' +
 					'<div class="ck ck-widget__selection-handler"></div>' +
 					'<div class="ck ck-widget__selection-handler"></div>' +
 						'<table>' +
 						'<table>' +
 							'<thead>' +
 							'<thead>' +
@@ -1034,7 +1103,7 @@ describe( 'downcast converters', () => {
 				} );
 				} );
 
 
 				expect( formatTable( getViewData( view, { withoutSelection: true } ) ) ).to.equal( formatTable(
 				expect( formatTable( getViewData( view, { withoutSelection: true } ) ) ).to.equal( formatTable(
-					'<figure class="ck-widget ck-widget_selectable table" contenteditable="false">' +
+					'<figure class="ck-widget ck-widget_with-selection-handler table" contenteditable="false">' +
 					'<div class="ck ck-widget__selection-handler"></div>' +
 					'<div class="ck ck-widget__selection-handler"></div>' +
 						'<table>' +
 						'<table>' +
 							'<tbody>' +
 							'<tbody>' +

+ 102 - 2
packages/ckeditor5-table/tests/converters/table-cell-content-post-fixer.js

@@ -1,6 +1,6 @@
 /**
 /**
- * @license Copyright (c) 2003-2018, CKSource - Frederico Knabben. All rights reserved.
- * For licensing, see LICENSE.md.
+ * @license Copyright (c) 2003-2019, CKSource - Frederico Knabben. All rights reserved.
+ * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license
  */
  */
 
 
 import Paragraph from '@ckeditor/ckeditor5-paragraph/src/paragraph';
 import Paragraph from '@ckeditor/ckeditor5-paragraph/src/paragraph';
@@ -121,4 +121,104 @@ describe( 'Table cell content post-fixer', () => {
 			'</table>'
 			'</table>'
 		) );
 		) );
 	} );
 	} );
+
+	it( 'should wrap in paragraph $text nodes placed directly in tableCell (on table cell modification) ', () => {
+		setModelData( model,
+			'<table>' +
+				'<tableRow>' +
+					'<tableCell><paragraph></paragraph></tableCell>' +
+				'</tableRow>' +
+			'</table>'
+		);
+
+		// Remove paragraph from table cell & insert: $text<paragraph>$text</paragraph>$text.
+		model.change( writer => {
+			writer.remove( writer.createRangeIn( root.getNodeByPath( [ 0, 0, 0 ] ) ) );
+
+			const paragraph = writer.createElement( 'paragraph' );
+
+			writer.insertText( 'foo', root.getNodeByPath( [ 0, 0, 0 ] ) );
+			writer.insert( paragraph, root.getNodeByPath( [ 0, 0, 0 ] ), 'end' );
+			writer.insertText( 'bar', paragraph );
+			writer.insertText( 'baz', root.getNodeByPath( [ 0, 0, 0 ] ), 'end' );
+		} );
+
+		expect( formatTable( getModelData( model, { withoutSelection: true } ) ) ).to.equal( formatTable(
+			'<table>' +
+				'<tableRow>' +
+					'<tableCell>' +
+						'<paragraph>foo</paragraph>' +
+						'<paragraph>bar</paragraph>' +
+						'<paragraph>baz</paragraph>' +
+					'</tableCell>' +
+				'</tableRow>' +
+			'</table>'
+		) );
+	} );
+
+	it( 'should wrap in paragraph $text nodes placed directly in tableCell (on inserting table cell)', () => {
+		setModelData( model,
+			'<table>' +
+				'<tableRow>' +
+					'<tableCell><paragraph></paragraph></tableCell>' +
+				'</tableRow>' +
+			'</table>'
+		);
+
+		// Insert new tableCell with $text.
+		model.change( writer => {
+			const tableCell = writer.createElement( 'tableCell' );
+
+			writer.insertText( 'foo', tableCell );
+			writer.insert( tableCell, writer.createPositionAt( root.getNodeByPath( [ 0, 0 ] ), 'end' ) );
+		} );
+
+		expect( formatTable( getModelData( model, { withoutSelection: true } ) ) ).to.equal( formatTable(
+			'<table>' +
+				'<tableRow>' +
+					'<tableCell>' +
+						'<paragraph></paragraph>' +
+					'</tableCell>' +
+					'<tableCell>' +
+						'<paragraph>foo</paragraph>' +
+					'</tableCell>' +
+				'</tableRow>' +
+			'</table>'
+		) );
+	} );
+
+	it( 'should wrap in paragraph $text nodes placed directly in tableCell (on inserting table rows)', () => {
+		setModelData( model,
+			'<table>' +
+				'<tableRow>' +
+					'<tableCell><paragraph></paragraph></tableCell>' +
+				'</tableRow>' +
+			'</table>'
+		);
+
+		// Insert new tableRow with tableCell with $text.
+		model.change( writer => {
+			const tableRow = writer.createElement( 'tableRow' );
+			const tableCell = writer.createElement( 'tableCell' );
+
+			writer.insertText( 'foo', tableCell );
+			writer.insert( tableCell, tableRow );
+			writer.insert( tableRow, writer.createPositionAt( root.getNodeByPath( [ 0 ] ), 'end' ) );
+		} );
+
+		expect( formatTable( getModelData( model, { withoutSelection: true } ) ) ).to.equal( formatTable(
+			'<table>' +
+				'<tableRow>' +
+					'<tableCell>' +
+						'<paragraph></paragraph>' +
+					'</tableCell>' +
+				'</tableRow>' +
+				'<tableRow>' +
+					'<tableCell>' +
+						'<paragraph>foo</paragraph>' +
+					'</tableCell>' +
+				'</tableRow>' +
+			'</table>'
+		) );
+	} );
 } );
 } );

+ 2 - 2
packages/ckeditor5-table/tests/converters/table-layout-post-fixer.js

@@ -1,6 +1,6 @@
 /**
 /**
- * @license Copyright (c) 2003-2018, CKSource - Frederico Knabben. All rights reserved.
- * For licensing, see LICENSE.md.
+ * @license Copyright (c) 2003-2019, CKSource - Frederico Knabben. All rights reserved.
+ * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license
  */
  */
 
 
 import Paragraph from '@ckeditor/ckeditor5-paragraph/src/paragraph';
 import Paragraph from '@ckeditor/ckeditor5-paragraph/src/paragraph';

+ 56 - 3
packages/ckeditor5-table/tests/converters/tablecell-post-fixer.js

@@ -1,6 +1,6 @@
 /**
 /**
- * @license Copyright (c) 2003-2018, CKSource - Frederico Knabben. All rights reserved.
- * For licensing, see LICENSE.md.
+ * @license Copyright (c) 2003-2019, CKSource - Frederico Knabben. All rights reserved.
+ * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license
  */
  */
 
 
 /* globals document */
 /* globals document */
@@ -14,6 +14,8 @@ import env from '@ckeditor/ckeditor5-utils/src/env';
 import testUtils from '@ckeditor/ckeditor5-core/tests/_utils/utils';
 import testUtils from '@ckeditor/ckeditor5-core/tests/_utils/utils';
 import ClassicTestEditor from '@ckeditor/ckeditor5-core/tests/_utils/classictesteditor';
 import ClassicTestEditor from '@ckeditor/ckeditor5-core/tests/_utils/classictesteditor';
 
 
+import Delete from '@ckeditor/ckeditor5-typing/src/delete';
+
 describe( 'TableCell post-fixer', () => {
 describe( 'TableCell post-fixer', () => {
 	let editor, model, doc, root, view;
 	let editor, model, doc, root, view;
 
 
@@ -26,7 +28,7 @@ describe( 'TableCell post-fixer', () => {
 		// Most tests assume non-edge environment but we do not set `contenteditable=false` on Edge so stub `env.isEdge`.
 		// Most tests assume non-edge environment but we do not set `contenteditable=false` on Edge so stub `env.isEdge`.
 		testUtils.sinon.stub( env, 'isEdge' ).get( () => false );
 		testUtils.sinon.stub( env, 'isEdge' ).get( () => false );
 
 
-		return ClassicTestEditor.create( element )
+		return ClassicTestEditor.create( element, { extraPlugins: [ Delete ] } )
 			.then( newEditor => {
 			.then( newEditor => {
 				editor = newEditor;
 				editor = newEditor;
 				model = editor.model;
 				model = editor.model;
@@ -276,4 +278,55 @@ describe( 'TableCell post-fixer', () => {
 		// Trying to map view selection to DOM range shouldn't throw after post-fixer will fix inserted <p> to <span>.
 		// Trying to map view selection to DOM range shouldn't throw after post-fixer will fix inserted <p> to <span>.
 		expect( () => view.domConverter.viewRangeToDom( viewRange ) ).to.not.throw();
 		expect( () => view.domConverter.viewRangeToDom( viewRange ) ).to.not.throw();
 	} );
 	} );
+
+	it( 'should not update view selection after other feature set selection', () => {
+		editor.model.schema.register( 'widget', {
+			isObject: true,
+			isBlock: true,
+			allowWhere: '$block'
+		} );
+		editor.conversion.elementToElement( {
+			model: 'widget',
+			view: 'widget'
+		} );
+
+		editor.setData( viewTable( [ [ '<p>foo[]</p>' ] ] ) );
+
+		const spy = sinon.spy();
+
+		view.document.selection.on( 'change', spy );
+
+		// Insert a widget in table cell and select it.
+		model.change( writer => {
+			const widgetElement = writer.createElement( 'widget' );
+			const tableCell = root.getNodeByPath( [ 0, 0, 0, 0 ] );
+
+			writer.insert( widgetElement, writer.createPositionAfter( tableCell ) );
+
+			// Update the selection so it will be set on the widget and not in renamed paragraph.
+			writer.setSelection( widgetElement, 'on' );
+		} );
+
+		// View selection should be updated only twice - will be set to null and then to widget.
+		// If called thrice the selection post fixer for table cell was also called.
+		sinon.assert.calledTwice( spy );
+	} );
+
+	// https://github.com/ckeditor/ckeditor5-table/issues/191.
+	it( 'should not fire (and crash) for removed view elements', () => {
+		editor.setData( viewTable( [ [ '<p>foo</p>' ] ] ) );
+
+		const p = root.getNodeByPath( [ 0, 0, 0, 0 ] );
+
+		// Replace table cell contents with paragraph - as model.deleteContent() does.
+		model.change( writer => {
+			writer.setSelection( writer.createRangeIn( root ) );
+			editor.execute( 'delete' ); // For some reason it didn't crash with `writer.remove()`.
+
+			writer.setAttribute( 'foo', 'bar', p );
+		} );
+
+		// Trying to map view selection to DOM range shouldn't throw after post-fixer will fix inserted <p> to <span>.
+		expect( editor.getData() ).to.equal( '' );
+	} );
 } );
 } );

+ 5 - 6
packages/ckeditor5-table/tests/converters/upcasttable.js

@@ -1,10 +1,9 @@
 /**
 /**
- * @license Copyright (c) 2003-2018, CKSource - Frederico Knabben. All rights reserved.
- * For licensing, see LICENSE.md.
+ * @license Copyright (c) 2003-2019, CKSource - Frederico Knabben. All rights reserved.
+ * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license
  */
  */
 
 
 import VirtualTestEditor from '@ckeditor/ckeditor5-core/tests/_utils/virtualtesteditor';
 import VirtualTestEditor from '@ckeditor/ckeditor5-core/tests/_utils/virtualtesteditor';
-import { upcastElementToElement } from '@ckeditor/ckeditor5-engine/src/conversion/upcast-converters';
 import { getData as getModelData } from '@ckeditor/ckeditor5-engine/src/dev-utils/model';
 import { getData as getModelData } from '@ckeditor/ckeditor5-engine/src/dev-utils/model';
 import Paragraph from '@ckeditor/ckeditor5-paragraph/src/paragraph';
 import Paragraph from '@ckeditor/ckeditor5-paragraph/src/paragraph';
 import ImageEditing from '@ckeditor/ckeditor5-image/src/image/imageediting';
 import ImageEditing from '@ckeditor/ckeditor5-image/src/image/imageediting';
@@ -211,7 +210,7 @@ describe( 'upcastTable()', () => {
 		editor.model.schema.register( 'div', {
 		editor.model.schema.register( 'div', {
 			inheritAllFrom: '$block'
 			inheritAllFrom: '$block'
 		} );
 		} );
-		editor.conversion.for( 'upcast' ).add( upcastElementToElement( { model: 'div', view: 'div' } ) );
+		editor.conversion.for( 'upcast' ).elementToElement( { model: 'div', view: 'div' } );
 
 
 		editor.setData(
 		editor.setData(
 			'<div>foo' +
 			'<div>foo' +
@@ -457,7 +456,7 @@ describe( 'upcastTable()', () => {
 			] ) );
 			] ) );
 		} );
 		} );
 
 
-		it( 'should upcast table with <img> in table cell to empty table cell', () => {
+		it( 'should upcast table with <img> in table cell', () => {
 			editor.setData(
 			editor.setData(
 				'<table>' +
 				'<table>' +
 					'<tbody>' +
 					'<tbody>' +
@@ -469,7 +468,7 @@ describe( 'upcastTable()', () => {
 			);
 			);
 
 
 			expectModel( modelTable( [
 			expectModel( modelTable( [
-				[ '' ]
+				[ '<image src="sample.png"></image>' ]
 			] ) );
 			] ) );
 		} );
 		} );
 	} );
 	} );

+ 2 - 2
packages/ckeditor5-table/tests/integration.js

@@ -1,6 +1,6 @@
 /**
 /**
- * @license Copyright (c) 2003-2018, CKSource - Frederico Knabben. All rights reserved.
- * For licensing, see LICENSE.md.
+ * @license Copyright (c) 2003-2019, CKSource - Frederico Knabben. All rights reserved.
+ * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license
  */
  */
 
 
 import ClassicTestEditor from '@ckeditor/ckeditor5-core/tests/_utils/classictesteditor';
 import ClassicTestEditor from '@ckeditor/ckeditor5-core/tests/_utils/classictesteditor';

+ 3 - 6
packages/ckeditor5-table/tests/manual/table.js

@@ -1,19 +1,16 @@
 /**
 /**
- * @license Copyright (c) 2003-2018, CKSource - Frederico Knabben. All rights reserved.
- * For licensing, see LICENSE.md.
+ * @license Copyright (c) 2003-2019, CKSource - Frederico Knabben. All rights reserved.
+ * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license
  */
  */
 
 
 /* globals console, window, document */
 /* globals console, window, document */
 
 
 import ClassicEditor from '@ckeditor/ckeditor5-editor-classic/src/classiceditor';
 import ClassicEditor from '@ckeditor/ckeditor5-editor-classic/src/classiceditor';
 import ArticlePluginSet from '@ckeditor/ckeditor5-core/tests/_utils/articlepluginset';
 import ArticlePluginSet from '@ckeditor/ckeditor5-core/tests/_utils/articlepluginset';
-import Table from '../../src/table';
-import TableToolbar from '../../src/tabletoolbar';
-import BlockQuote from '@ckeditor/ckeditor5-block-quote/src/blockquote';
 
 
 ClassicEditor
 ClassicEditor
 	.create( document.querySelector( '#editor' ), {
 	.create( document.querySelector( '#editor' ), {
-		plugins: [ ArticlePluginSet, Table, TableToolbar, BlockQuote ],
+		plugins: [ ArticlePluginSet ],
 		toolbar: [
 		toolbar: [
 			'heading', '|', 'insertTable', '|', 'bold', 'italic', 'bulletedList', 'numberedList', 'blockQuote', 'undo', 'redo'
 			'heading', '|', 'insertTable', '|', 'bold', 'italic', 'bulletedList', 'numberedList', 'blockQuote', 'undo', 'redo'
 		],
 		],

+ 12 - 0
packages/ckeditor5-table/tests/manual/tableblockcontent.html

@@ -64,6 +64,18 @@
 			</td>
 			</td>
 			<td><blockquote><p style="text-align: right">A quote with paragraph with right alignment</p></blockquote></td>
 			<td><blockquote><p style="text-align: right">A quote with paragraph with right alignment</p></blockquote></td>
 		</tr>
 		</tr>
+		<tr>
+			<td>image</td>
+			<td>
+				<img alt="sample image" src="sample.jpg">
+			</td>
+			<td>
+				<p>An image aligned to right:</p>
+				<figure class="image image-style-side" contenteditable="false">
+					<img src="sample.jpg" alt="sample image">
+				</figure>
+			</td>
+		</tr>
 		</tbody>
 		</tbody>
 	</table>
 	</table>
 </div>
 </div>

+ 6 - 5
packages/ckeditor5-table/tests/manual/tableblockcontent.js

@@ -1,23 +1,24 @@
 /**
 /**
- * @license Copyright (c) 2003-2018, CKSource - Frederico Knabben. All rights reserved.
- * For licensing, see LICENSE.md.
+ * @license Copyright (c) 2003-2019, CKSource - Frederico Knabben. All rights reserved.
+ * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license
  */
  */
 
 
 /* globals console, window, document */
 /* globals console, window, document */
 
 
 import ClassicEditor from '@ckeditor/ckeditor5-editor-classic/src/classiceditor';
 import ClassicEditor from '@ckeditor/ckeditor5-editor-classic/src/classiceditor';
 import ArticlePluginSet from '@ckeditor/ckeditor5-core/tests/_utils/articlepluginset';
 import ArticlePluginSet from '@ckeditor/ckeditor5-core/tests/_utils/articlepluginset';
-import Table from '../../src/table';
-import TableToolbar from '../../src/tabletoolbar';
 import Alignment from '@ckeditor/ckeditor5-alignment/src/alignment';
 import Alignment from '@ckeditor/ckeditor5-alignment/src/alignment';
 
 
 ClassicEditor
 ClassicEditor
 	.create( document.querySelector( '#editor' ), {
 	.create( document.querySelector( '#editor' ), {
-		plugins: [ ArticlePluginSet, Table, TableToolbar, Alignment ],
+		plugins: [ ArticlePluginSet, Alignment ],
 		toolbar: [
 		toolbar: [
 			'heading', '|', 'insertTable', '|', 'bold', 'italic', 'bulletedList', 'numberedList', 'blockQuote',
 			'heading', '|', 'insertTable', '|', 'bold', 'italic', 'bulletedList', 'numberedList', 'blockQuote',
 			'alignment', '|', 'undo', 'redo'
 			'alignment', '|', 'undo', 'redo'
 		],
 		],
+		image: {
+			toolbar: [ 'imageStyle:full', 'imageStyle:side' ]
+		},
 		table: {
 		table: {
 			contentToolbar: [ 'tableColumn', 'tableRow', 'mergeTableCells' ]
 			contentToolbar: [ 'tableColumn', 'tableRow', 'mergeTableCells' ]
 		}
 		}

+ 1 - 0
packages/ckeditor5-table/tests/manual/tableblockcontent.md

@@ -6,6 +6,7 @@
     * List
     * List
     * Heading
     * Heading
     * Block Quote (with inner paragraph)
     * Block Quote (with inner paragraph)
+    * Image
 
 
 2. The third column consist blocks with text alignment.
 2. The third column consist blocks with text alignment.
     * Paragraph - should be rendered was `<p>` when alignment is set (apart from default) for single paragraph.
     * Paragraph - should be rendered was `<p>` when alignment is set (apart from default) for single paragraph.

+ 16 - 16
packages/ckeditor5-table/tests/table-integration.js

@@ -1,6 +1,6 @@
 /**
 /**
- * @license Copyright (c) 2003-2018, CKSource - Frederico Knabben. All rights reserved.
- * For licensing, see LICENSE.md.
+ * @license Copyright (c) 2003-2019, CKSource - Frederico Knabben. All rights reserved.
+ * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license
  */
  */
 
 
 import Widget from '@ckeditor/ckeditor5-widget/src/widget';
 import Widget from '@ckeditor/ckeditor5-widget/src/widget';
@@ -95,37 +95,37 @@ describe( 'Table feature – integration', () => {
 		} );
 		} );
 
 
 		it( 'fixing empty roots should be transparent to undo', () => {
 		it( 'fixing empty roots should be transparent to undo', () => {
-			expect( editor.getData() ).to.equal( '<p>&nbsp;</p>' );
+			expect( editor.getData( { trim: 'none' } ) ).to.equal( '<p>&nbsp;</p>' );
 			expect( editor.commands.get( 'undo' ).isEnabled ).to.be.false;
 			expect( editor.commands.get( 'undo' ).isEnabled ).to.be.false;
 
 
 			editor.data.set( viewTable( [ [ 'foo' ] ] ) );
 			editor.data.set( viewTable( [ [ 'foo' ] ] ) );
 
 
-			expect( editor.getData() ).to.equal( viewTable( [ [ 'foo' ] ] ) );
+			expect( editor.getData( { trim: 'none' } ) ).to.equal( viewTable( [ [ 'foo' ] ] ) );
 
 
 			editor.model.change( writer => {
 			editor.model.change( writer => {
 				writer.remove( root.getChild( 0 ) );
 				writer.remove( root.getChild( 0 ) );
 			} );
 			} );
 
 
-			expect( editor.getData() ).to.equal( '<p>&nbsp;</p>' );
+			expect( editor.getData( { trim: 'none' } ) ).to.equal( '<p>&nbsp;</p>' );
 
 
 			editor.execute( 'undo' );
 			editor.execute( 'undo' );
 
 
-			expect( editor.getData() ).to.equal( viewTable( [ [ 'foo' ] ] ) );
+			expect( editor.getData( { trim: 'none' } ) ).to.equal( viewTable( [ [ 'foo' ] ] ) );
 
 
 			editor.execute( 'redo' );
 			editor.execute( 'redo' );
 
 
-			expect( editor.getData() ).to.equal( '<p>&nbsp;</p>' );
+			expect( editor.getData( { trim: 'none' } ) ).to.equal( '<p>&nbsp;</p>' );
 
 
 			editor.execute( 'undo' );
 			editor.execute( 'undo' );
 
 
-			expect( editor.getData() ).to.equal( viewTable( [ [ 'foo' ] ] ) );
+			expect( editor.getData( { trim: 'none' } ) ).to.equal( viewTable( [ [ 'foo' ] ] ) );
 		} );
 		} );
 
 
 		it( 'fixing empty roots should be transparent to undo - multiple roots', () => {
 		it( 'fixing empty roots should be transparent to undo - multiple roots', () => {
 			const otherRoot = doc.createRoot( '$root', 'otherRoot' );
 			const otherRoot = doc.createRoot( '$root', 'otherRoot' );
 
 
-			editor.data.set( viewTable( [ [ 'foo' ] ] ), 'main' );
-			editor.data.set( viewTable( [ [ 'foo' ] ] ), 'otherRoot' );
+			editor.data.set( { main: viewTable( [ [ 'foo' ] ] ) } );
+			editor.data.set( { otherRoot: viewTable( [ [ 'foo' ] ] ) } );
 
 
 			editor.model.change( writer => {
 			editor.model.change( writer => {
 				writer.remove( root.getChild( 0 ) );
 				writer.remove( root.getChild( 0 ) );
@@ -135,18 +135,18 @@ describe( 'Table feature – integration', () => {
 				writer.remove( otherRoot.getChild( 0 ) );
 				writer.remove( otherRoot.getChild( 0 ) );
 			} );
 			} );
 
 
-			expect( editor.data.get( 'main' ) ).to.equal( '<p>&nbsp;</p>' );
-			expect( editor.data.get( 'otherRoot' ) ).to.equal( '<p>&nbsp;</p>' );
+			expect( editor.data.get( { trim: 'none', rootName: 'main' } ) ).to.equal( '<p>&nbsp;</p>' );
+			expect( editor.data.get( { trim: 'none', rootName: 'otherRoot' } ) ).to.equal( '<p>&nbsp;</p>' );
 
 
 			editor.execute( 'undo' );
 			editor.execute( 'undo' );
 
 
-			expect( editor.data.get( 'main' ) ).to.equal( '<p>&nbsp;</p>' );
-			expect( editor.data.get( 'otherRoot' ) ).to.equal( viewTable( [ [ 'foo' ] ] ) );
+			expect( editor.data.get( { trim: 'none', rootName: 'main' } ) ).to.equal( '<p>&nbsp;</p>' );
+			expect( editor.data.get( { trim: 'none', rootName: 'otherRoot' } ) ).to.equal( viewTable( [ [ 'foo' ] ] ) );
 
 
 			editor.execute( 'undo' );
 			editor.execute( 'undo' );
 
 
-			expect( editor.data.get( 'main' ) ).to.equal( viewTable( [ [ 'foo' ] ] ) );
-			expect( editor.data.get( 'otherRoot' ) ).to.equal( viewTable( [ [ 'foo' ] ] ) );
+			expect( editor.data.get( { trim: 'none', rootName: 'main' } ) ).to.equal( viewTable( [ [ 'foo' ] ] ) );
+			expect( editor.data.get( { trim: 'none', rootName: 'otherRoot' } ) ).to.equal( viewTable( [ [ 'foo' ] ] ) );
 		} );
 		} );
 	} );
 	} );
 
 

+ 2 - 2
packages/ckeditor5-table/tests/table.js

@@ -1,6 +1,6 @@
 /**
 /**
- * @license Copyright (c) 2003-2018, CKSource - Frederico Knabben. All rights reserved.
- * For licensing, see LICENSE.md.
+ * @license Copyright (c) 2003-2019, CKSource - Frederico Knabben. All rights reserved.
+ * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license
  */
  */
 
 
 import Table from '../src/table';
 import Table from '../src/table';

+ 81 - 5
packages/ckeditor5-table/tests/tableediting.js

@@ -1,6 +1,6 @@
 /**
 /**
- * @license Copyright (c) 2003-2018, CKSource - Frederico Knabben. All rights reserved.
- * For licensing, see LICENSE.md.
+ * @license Copyright (c) 2003-2019, CKSource - Frederico Knabben. All rights reserved.
+ * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license
  */
  */
 
 
 import Paragraph from '@ckeditor/ckeditor5-paragraph/src/paragraph';
 import Paragraph from '@ckeditor/ckeditor5-paragraph/src/paragraph';
@@ -46,6 +46,7 @@ describe( 'TableEditing', () => {
 		// Table:
 		// Table:
 		expect( model.schema.isRegistered( 'table' ) ).to.be.true;
 		expect( model.schema.isRegistered( 'table' ) ).to.be.true;
 		expect( model.schema.isObject( 'table' ) ).to.be.true;
 		expect( model.schema.isObject( 'table' ) ).to.be.true;
+		expect( model.schema.isBlock( 'table' ) ).to.be.true;
 		expect( model.schema.isLimit( 'table' ) ).to.be.true;
 		expect( model.schema.isLimit( 'table' ) ).to.be.true;
 
 
 		expect( model.schema.checkChild( [ '$root' ], 'table' ) ).to.be.true;
 		expect( model.schema.checkChild( [ '$root' ], 'table' ) ).to.be.true;
@@ -75,7 +76,7 @@ describe( 'TableEditing', () => {
 		expect( model.schema.checkChild( [ '$root', 'table', 'tableRow', 'tableCell' ], '$text' ) ).to.be.false;
 		expect( model.schema.checkChild( [ '$root', 'table', 'tableRow', 'tableCell' ], '$text' ) ).to.be.false;
 		expect( model.schema.checkChild( [ '$root', 'table', 'tableRow', 'tableCell' ], '$block' ) ).to.be.true;
 		expect( model.schema.checkChild( [ '$root', 'table', 'tableRow', 'tableCell' ], '$block' ) ).to.be.true;
 		expect( model.schema.checkChild( [ '$root', 'table', 'tableRow', 'tableCell' ], 'table' ) ).to.be.false;
 		expect( model.schema.checkChild( [ '$root', 'table', 'tableRow', 'tableCell' ], 'table' ) ).to.be.false;
-		expect( model.schema.checkChild( [ '$root', 'table', 'tableRow', 'tableCell' ], 'image' ) ).to.be.false;
+		expect( model.schema.checkChild( [ '$root', 'table', 'tableRow', 'tableCell' ], 'image' ) ).to.be.true;
 	} );
 	} );
 
 
 	it( 'adds insertTable command', () => {
 	it( 'adds insertTable command', () => {
@@ -171,17 +172,28 @@ describe( 'TableEditing', () => {
 			it( 'should convert table with image', () => {
 			it( 'should convert table with image', () => {
 				editor.setData( '<table><tbody><tr><td><img src="sample.png"></td></tr></tbody></table>' );
 				editor.setData( '<table><tbody><tr><td><img src="sample.png"></td></tr></tbody></table>' );
 
 
+				expect( getModelData( model, { withoutSelection: true } ) )
+					.to.equal( '<table><tableRow><tableCell><image src="sample.png"></image></tableCell></tableRow></table>' );
+			} );
+
+			it( 'should insert a paragraph when the cell content is unsupported', () => {
+				editor.setData(
+					'<table><tbody><tr><td><foo></foo></td></tr></tbody></table>'
+				);
+
 				expect( getModelData( model, { withoutSelection: true } ) )
 				expect( getModelData( model, { withoutSelection: true } ) )
 					.to.equal( '<table><tableRow><tableCell><paragraph></paragraph></tableCell></tableRow></table>' );
 					.to.equal( '<table><tableRow><tableCell><paragraph></paragraph></tableCell></tableRow></table>' );
 			} );
 			} );
 
 
-			it( 'should convert table with media', () => {
+			it( 'should convert a table with media', () => {
 				editor.setData(
 				editor.setData(
 					'<table><tbody><tr><td><oembed url="https://www.youtube.com/watch?v=H08tGjXNHO4"></oembed></td></tr></tbody></table>'
 					'<table><tbody><tr><td><oembed url="https://www.youtube.com/watch?v=H08tGjXNHO4"></oembed></td></tr></tbody></table>'
 				);
 				);
 
 
 				expect( getModelData( model, { withoutSelection: true } ) )
 				expect( getModelData( model, { withoutSelection: true } ) )
-					.to.equal( '<table><tableRow><tableCell><paragraph></paragraph></tableCell></tableRow></table>' );
+					.to.equal( '<table><tableRow><tableCell>' +
+						'<media url="https://www.youtube.com/watch?v=H08tGjXNHO4"></media>' +
+					'</tableCell></tableRow></table>' );
 			} );
 			} );
 		} );
 		} );
 	} );
 	} );
@@ -268,6 +280,22 @@ describe( 'TableEditing', () => {
 				] ) );
 				] ) );
 			} );
 			} );
 
 
+			it( 'should not create another row and not move the caret if insertTableRowBelow command is disabled', () => {
+				setModelData( model, modelTable( [
+					[ '11', '12[]' ]
+				] ) );
+
+				const insertTableRowBelowCommand = editor.commands.get( 'insertTableRowBelow' );
+
+				insertTableRowBelowCommand.forceDisabled( 'test' );
+
+				editor.editing.view.document.fire( 'keydown', domEvtDataStub );
+
+				expect( formatTable( getModelData( model ) ) ).to.equal( formattedModelTable( [
+					[ '11', '12[]' ]
+				] ) );
+			} );
+
 			it( 'should move to the first cell of next row if on end of a row', () => {
 			it( 'should move to the first cell of next row if on end of a row', () => {
 				setModelData( model, modelTable( [
 				setModelData( model, modelTable( [
 					[ '11', '12[]' ],
 					[ '11', '12[]' ],
@@ -298,6 +326,40 @@ describe( 'TableEditing', () => {
 				] ) );
 				] ) );
 			} );
 			} );
 
 
+			it( 'should move to next cell with an image', () => {
+				setModelData( model, modelTable( [
+					[ '11[]', '<paragraph>foo</paragraph><image></image>' ]
+				] ) );
+
+				editor.editing.view.document.fire( 'keydown', domEvtDataStub );
+
+				sinon.assert.calledOnce( domEvtDataStub.preventDefault );
+				sinon.assert.calledOnce( domEvtDataStub.stopPropagation );
+				expect( formatTable( getModelData( model ) ) ).to.equal( formattedModelTable( [
+					[ '11', '<paragraph>[foo</paragraph><image></image>]' ]
+				] ) );
+			} );
+
+			it( 'should move to next cell with an blockQuote', () => {
+				model.schema.register( 'blockQuote', {
+					allowWhere: '$block',
+					allowContentOf: '$root'
+				} );
+				editor.conversion.elementToElement( { model: 'blockQuote', view: 'blockquote' } );
+
+				setModelData( model, modelTable( [
+					[ '11[]', '<blockQuote><paragraph>foo</paragraph></blockQuote>' ]
+				] ) );
+
+				editor.editing.view.document.fire( 'keydown', domEvtDataStub );
+
+				sinon.assert.calledOnce( domEvtDataStub.preventDefault );
+				sinon.assert.calledOnce( domEvtDataStub.stopPropagation );
+				expect( formatTable( getModelData( model ) ) ).to.equal( formattedModelTable( [
+					[ '11', '<blockQuote><paragraph>[foo]</paragraph></blockQuote>' ]
+				] ) );
+			} );
+
 			it( 'should listen with lower priority then its children', () => {
 			it( 'should listen with lower priority then its children', () => {
 				// Cancel TAB event.
 				// Cancel TAB event.
 				editor.keystrokes.set( 'Tab', ( data, cancel ) => cancel() );
 				editor.keystrokes.set( 'Tab', ( data, cancel ) => cancel() );
@@ -446,6 +508,20 @@ describe( 'TableEditing', () => {
 					]
 					]
 				] ) );
 				] ) );
 			} );
 			} );
+
+			it( 'should move to previous cell with an image', () => {
+				setModelData( model, modelTable( [
+					[ '<paragraph>foo</paragraph><image></image>', 'bar[]' ]
+				] ) );
+
+				editor.editing.view.document.fire( 'keydown', domEvtDataStub );
+
+				sinon.assert.calledOnce( domEvtDataStub.preventDefault );
+				sinon.assert.calledOnce( domEvtDataStub.stopPropagation );
+				expect( formatTable( getModelData( model ) ) ).to.equal( formattedModelTable( [
+					[ '<paragraph>[foo</paragraph><image></image>]', 'bar' ]
+				] ) );
+			} );
 		} );
 		} );
 	} );
 	} );
 
 

+ 45 - 87
packages/ckeditor5-table/tests/tabletoolbar.js

@@ -1,9 +1,9 @@
 /**
 /**
- * @license Copyright (c) 2003-2018, CKSource - Frederico Knabben. All rights reserved.
- * For licensing, see LICENSE.md.
+ * @license Copyright (c) 2003-2019, CKSource - Frederico Knabben. All rights reserved.
+ * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license
  */
  */
 
 
-/* global document, window */
+/* global document */
 
 
 import ClassicTestEditor from '@ckeditor/ckeditor5-editor-classic/src/classiceditor';
 import ClassicTestEditor from '@ckeditor/ckeditor5-editor-classic/src/classiceditor';
 import TableToolbar from '../src/tabletoolbar';
 import TableToolbar from '../src/tabletoolbar';
@@ -16,6 +16,9 @@ import View from '@ckeditor/ckeditor5-ui/src/view';
 import { setData } from '@ckeditor/ckeditor5-engine/src/dev-utils/model';
 import { setData } from '@ckeditor/ckeditor5-engine/src/dev-utils/model';
 import WidgetToolbarRepository from '@ckeditor/ckeditor5-widget/src/widgettoolbarrepository';
 import WidgetToolbarRepository from '@ckeditor/ckeditor5-widget/src/widgettoolbarrepository';
 import testUtils from '@ckeditor/ckeditor5-core/tests/_utils/utils';
 import testUtils from '@ckeditor/ckeditor5-core/tests/_utils/utils';
+import ImageToolbar from '@ckeditor/ckeditor5-image/src/imagetoolbar';
+import Image from '@ckeditor/ckeditor5-image/src/image';
+import ImageStyle from '@ckeditor/ckeditor5-image/src/imagestyle';
 
 
 describe( 'TableToolbar', () => {
 describe( 'TableToolbar', () => {
 	testUtils.createSinonSandbox();
 	testUtils.createSinonSandbox();
@@ -29,7 +32,10 @@ describe( 'TableToolbar', () => {
 
 
 			return ClassicTestEditor
 			return ClassicTestEditor
 				.create( editorElement, {
 				.create( editorElement, {
-					plugins: [ Paragraph, Table, TableToolbar, FakeButton ],
+					plugins: [ Paragraph, Image, ImageStyle, ImageToolbar, Table, TableToolbar, FakeButton ],
+					image: {
+						toolbar: [ 'imageStyle:full', 'imageStyle:side' ]
+					},
 					table: {
 					table: {
 						contentToolbar: [ 'fake_button' ]
 						contentToolbar: [ 'fake_button' ]
 					}
 					}
@@ -39,7 +45,7 @@ describe( 'TableToolbar', () => {
 					model = newEditor.model;
 					model = newEditor.model;
 					doc = model.document;
 					doc = model.document;
 					widgetToolbarRepository = editor.plugins.get( WidgetToolbarRepository );
 					widgetToolbarRepository = editor.plugins.get( WidgetToolbarRepository );
-					toolbar = widgetToolbarRepository._toolbars.get( 'tableContent' ).view;
+					toolbar = widgetToolbarRepository._toolbarDefinitions.get( 'tableContent' ).view;
 					balloon = editor.plugins.get( 'ContextualBalloon' );
 					balloon = editor.plugins.get( 'ContextualBalloon' );
 				} );
 				} );
 		} );
 		} );
@@ -63,7 +69,7 @@ describe( 'TableToolbar', () => {
 			} )
 			} )
 				.then( editor => {
 				.then( editor => {
 					const widgetToolbarRepository = editor.plugins.get( WidgetToolbarRepository );
 					const widgetToolbarRepository = editor.plugins.get( WidgetToolbarRepository );
-					expect( widgetToolbarRepository._toolbars.get( 'tableContent' ) ).to.be.undefined;
+					expect( widgetToolbarRepository._toolbarDefinitions.get( 'tableContent' ) ).to.be.undefined;
 
 
 					editorElement.remove();
 					editorElement.remove();
 					return editor.destroy();
 					return editor.destroy();
@@ -71,7 +77,7 @@ describe( 'TableToolbar', () => {
 		} );
 		} );
 
 
 		describe( 'toolbar', () => {
 		describe( 'toolbar', () => {
-			it( 'should use the config.table.toolbar to create items', () => {
+			it( 'should use the config.table.contenToolbar to create items', () => {
 				expect( toolbar.items ).to.have.length( 1 );
 				expect( toolbar.items ).to.have.length( 1 );
 				expect( toolbar.items.get( 0 ).label ).to.equal( 'fake button' );
 				expect( toolbar.items.get( 0 ).label ).to.equal( 'fake button' );
 			} );
 			} );
@@ -154,6 +160,36 @@ describe( 'TableToolbar', () => {
 				expect( balloon.visibleView ).to.equal( toolbar );
 				expect( balloon.visibleView ).to.equal( toolbar );
 			} );
 			} );
 
 
+			it( 'should not show the toolbar on ui#update when the image inside table is selected', () => {
+				setData(
+					model,
+					'<paragraph>[foo]</paragraph>' +
+					'<table><tableRow><tableCell><paragraph>foo</paragraph><image src=""></image></tableCell></tableRow></table>'
+				);
+
+				expect( balloon.visibleView ).to.be.null;
+
+				const imageToolbar = widgetToolbarRepository._toolbarDefinitions.get( 'image' ).view;
+
+				model.change( writer => {
+					// Select the <tableCell><paragraph></paragraph>[<image></image>]</tableCell>
+					const nodeByPath = doc.getRoot().getNodeByPath( [ 1, 0, 0, 1 ] );
+
+					writer.setSelection( nodeByPath, 'on' );
+				} );
+
+				expect( balloon.visibleView ).to.equal( imageToolbar );
+
+				model.change( writer => {
+					// Select the <tableCell><paragraph>[]</paragraph><image></image></tableCell>
+					writer.setSelection(
+						writer.createPositionAt( doc.getRoot().getNodeByPath( [ 1, 0, 0, 0 ] ), 0 )
+					);
+				} );
+
+				expect( balloon.visibleView ).to.equal( toolbar );
+			} );
+
 			it( 'should not engage when the toolbar is in the balloon yet invisible', () => {
 			it( 'should not engage when the toolbar is in the balloon yet invisible', () => {
 				setData( model, '<table><tableRow><tableCell><paragraph>x[y]z</paragraph></tableCell></tableRow></table>' );
 				setData( model, '<table><tableRow><tableCell><paragraph>x[y]z</paragraph></tableCell></tableRow></table>' );
 
 
@@ -202,69 +238,6 @@ describe( 'TableToolbar', () => {
 		} );
 		} );
 	} );
 	} );
 
 
-	describe( 'deprecated toolbar', () => {
-		let editor, editorElement, warnMock;
-
-		it( 'table.toolbar should work as table.contentToolbar', () => {
-			editorElement = global.document.createElement( 'div' );
-			global.document.body.appendChild( editorElement );
-			warnMock = sinon.stub( window.console, 'warn' );
-
-			return ClassicTestEditor
-				.create( editorElement, {
-					plugins: [ Paragraph, Table, TableToolbar, FakeButton ],
-					table: {
-						toolbar: [ 'fake_button' ]
-					}
-				} )
-				.then( newEditor => {
-					editor = newEditor;
-
-					const widgetToolbarRepository = editor.plugins.get( WidgetToolbarRepository );
-					const toolbarView = widgetToolbarRepository._toolbars.get( 'tableContent' ).view;
-
-					expect( toolbarView.items ).to.have.length( 1 );
-					expect( toolbarView.items.get( 0 ).label ).to.equal( 'fake button' );
-
-					sinon.assert.calledWith(
-						warnMock,
-						'`config.table.toolbar` is deprecated and will be removed in the next major release.' +
-						' Use `config.table.contentToolbar` instead.'
-					);
-				} );
-		} );
-
-		it( 'table.contentToolbar should be used if both toolbars options are provided', () => {
-			editorElement = global.document.createElement( 'div' );
-			global.document.body.appendChild( editorElement );
-			warnMock = sinon.stub( window.console, 'warn' );
-
-			return ClassicTestEditor
-				.create( editorElement, {
-					plugins: [ Paragraph, Table, TableToolbar, FakeButton, FooButton ],
-					table: {
-						toolbar: [ 'fake_button' ],
-						contentToolbar: [ 'foo_button' ],
-					}
-				} )
-				.then( newEditor => {
-					editor = newEditor;
-
-					const widgetToolbarRepository = editor.plugins.get( WidgetToolbarRepository );
-					const toolbarView = widgetToolbarRepository._toolbars.get( 'tableContent' ).view;
-
-					expect( toolbarView.items ).to.have.length( 1 );
-					expect( toolbarView.items.get( 0 ).label ).to.equal( 'foo button' );
-				} );
-		} );
-
-		afterEach( () => {
-			editorElement.remove();
-
-			return editor.destroy();
-		} );
-	} );
-
 	describe( 'tableToolbar', () => {
 	describe( 'tableToolbar', () => {
 		let editor, element, widgetToolbarRepository, balloon, toolbar, model;
 		let editor, element, widgetToolbarRepository, balloon, toolbar, model;
 
 
@@ -280,7 +253,7 @@ describe( 'TableToolbar', () => {
 			} ).then( _editor => {
 			} ).then( _editor => {
 				editor = _editor;
 				editor = _editor;
 				widgetToolbarRepository = editor.plugins.get( WidgetToolbarRepository );
 				widgetToolbarRepository = editor.plugins.get( WidgetToolbarRepository );
-				toolbar = widgetToolbarRepository._toolbars.get( 'table' ).view;
+				toolbar = widgetToolbarRepository._toolbarDefinitions.get( 'table' ).view;
 				balloon = editor.plugins.get( 'ContextualBalloon' );
 				balloon = editor.plugins.get( 'ContextualBalloon' );
 				model = editor.model;
 				model = editor.model;
 			} );
 			} );
@@ -301,7 +274,7 @@ describe( 'TableToolbar', () => {
 				} )
 				} )
 					.then( editor => {
 					.then( editor => {
 						const widgetToolbarRepository = editor.plugins.get( WidgetToolbarRepository );
 						const widgetToolbarRepository = editor.plugins.get( WidgetToolbarRepository );
-						expect( widgetToolbarRepository._toolbars.get( 'table' ) ).to.be.undefined;
+						expect( widgetToolbarRepository._toolbarDefinitions.get( 'table' ) ).to.be.undefined;
 
 
 						editorElement.remove();
 						editorElement.remove();
 						return editor.destroy();
 						return editor.destroy();
@@ -446,18 +419,3 @@ class FakeButton extends Plugin {
 		} );
 		} );
 	}
 	}
 }
 }
-
-// Plugin that adds foo_button to editor's component factory.
-class FooButton extends Plugin {
-	init() {
-		this.editor.ui.componentFactory.add( 'foo_button', locale => {
-			const view = new ButtonView( locale );
-
-			view.set( {
-				label: 'foo button'
-			} );
-
-			return view;
-		} );
-	}
-}

+ 2 - 2
packages/ckeditor5-table/tests/tableui.js

@@ -1,6 +1,6 @@
 /**
 /**
- * @license Copyright (c) 2003-2018, CKSource - Frederico Knabben. All rights reserved.
- * For licensing, see LICENSE.md.
+ * @license Copyright (c) 2003-2019, CKSource - Frederico Knabben. All rights reserved.
+ * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license
  */
  */
 
 
 /* global document */
 /* global document */

+ 2 - 2
packages/ckeditor5-table/tests/tableutils.js

@@ -1,6 +1,6 @@
 /**
 /**
- * @license Copyright (c) 2003-2018, CKSource - Frederico Knabben. All rights reserved.
- * For licensing, see LICENSE.md.
+ * @license Copyright (c) 2003-2019, CKSource - Frederico Knabben. All rights reserved.
+ * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license
  */
  */
 
 
 import ModelTestEditor from '@ckeditor/ckeditor5-core/tests/_utils/modeltesteditor';
 import ModelTestEditor from '@ckeditor/ckeditor5-core/tests/_utils/modeltesteditor';

+ 2 - 2
packages/ckeditor5-table/tests/tablewalker.js

@@ -1,6 +1,6 @@
 /**
 /**
- * @license Copyright (c) 2003-2018, CKSource - Frederico Knabben. All rights reserved.
- * For licensing, see LICENSE.md.
+ * @license Copyright (c) 2003-2019, CKSource - Frederico Knabben. All rights reserved.
+ * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license
  */
  */
 
 
 import { setData } from '@ckeditor/ckeditor5-engine/src/dev-utils/model';
 import { setData } from '@ckeditor/ckeditor5-engine/src/dev-utils/model';

+ 2 - 2
packages/ckeditor5-table/tests/ui/inserttableview.js

@@ -1,6 +1,6 @@
 /**
 /**
- * @license Copyright (c) 2003-2018, CKSource - Frederico Knabben. All rights reserved.
- * For licensing, see LICENSE.md.
+ * @license Copyright (c) 2003-2019, CKSource - Frederico Knabben. All rights reserved.
+ * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license
  */
  */
 
 
 /* globals document, Event */
 /* globals document, Event */

+ 1 - 1
packages/ckeditor5-table/theme/icons/table-column.svg

@@ -1 +1 @@
-<svg viewBox="0 0 20 20" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.5 1h15A1.5 1.5 0 0 1 19 2.5v15a1.5 1.5 0 0 1-1.5 1.5h-15A1.5 1.5 0 0 1 1 17.5v-15A1.5 1.5 0 0 1 2.5 1zM2 2v16h16V2H2z" opacity=".6"/><path d="M18 7v1H2V7h16zm0 5v1H2v-1h16z" opacity=".6"/><path d="M14 1v18a1 1 0 0 1-1 1H7a1 1 0 0 1-1-1V1a1 1 0 0 1 1-1h6a1 1 0 0 1 1 1zm-2 1H8v4h4V2zm0 6H8v4h4V8zm0 6H8v4h4v-4z"/></g></svg>
+<svg viewBox="0 0 20 20" xmlns="http://www.w3.org/2000/svg"><path d="M2.5 1h15A1.5 1.5 0 0 1 19 2.5v15a1.5 1.5 0 0 1-1.5 1.5h-15A1.5 1.5 0 0 1 1 17.5v-15A1.5 1.5 0 0 1 2.5 1zM2 2v16h16V2H2z" opacity=".6"/><path d="M18 7v1H2V7h16zm0 5v1H2v-1h16z" opacity=".6"/><path d="M14 1v18a1 1 0 0 1-1 1H7a1 1 0 0 1-1-1V1a1 1 0 0 1 1-1h6a1 1 0 0 1 1 1zm-2 1H8v4h4V2zm0 6H8v4h4V8zm0 6H8v4h4v-4z"/></svg>

+ 1 - 1
packages/ckeditor5-table/theme/icons/table-merge-cell.svg

@@ -1 +1 @@
-<svg viewBox="0 0 20 20" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.5 1h15A1.5 1.5 0 0 1 19 2.5v15a1.5 1.5 0 0 1-1.5 1.5h-15A1.5 1.5 0 0 1 1 17.5v-15A1.5 1.5 0 0 1 2.5 1zM2 2v16h16V2H2z" opacity=".6"/><path d="M7 2h1v16H7V2zm5 0h1v7h-1V2zm6 5v1H2V7h16zM8 12v1H2v-1h6z" opacity=".6"/><path d="M7 7h12a1 1 0 0 1 1 1v11a1 1 0 0 1-1 1H7a1 1 0 0 1-1-1V8a1 1 0 0 1 1-1zm1 2v9h10V9H8z"/></g></svg>
+<svg viewBox="0 0 20 20" xmlns="http://www.w3.org/2000/svg"><path d="M2.5 1h15A1.5 1.5 0 0 1 19 2.5v15a1.5 1.5 0 0 1-1.5 1.5h-15A1.5 1.5 0 0 1 1 17.5v-15A1.5 1.5 0 0 1 2.5 1zM2 2v16h16V2H2z" opacity=".6"/><path d="M7 2h1v16H7V2zm5 0h1v7h-1V2zm6 5v1H2V7h16zM8 12v1H2v-1h6z" opacity=".6"/><path d="M7 7h12a1 1 0 0 1 1 1v11a1 1 0 0 1-1 1H7a1 1 0 0 1-1-1V8a1 1 0 0 1 1-1zm1 2v9h10V9H8z"/></svg>

+ 1 - 1
packages/ckeditor5-table/theme/icons/table-row.svg

@@ -1 +1 @@
-<svg viewBox="0 0 20 20" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.5 1h15A1.5 1.5 0 0 1 19 2.5v15a1.5 1.5 0 0 1-1.5 1.5h-15A1.5 1.5 0 0 1 1 17.5v-15A1.5 1.5 0 0 1 2.5 1zM2 2v16h16V2H2z" opacity=".6"/><path d="M7 2h1v16H7V2zm5 0h1v16h-1V2z" opacity=".6"/><path d="M1 6h18a1 1 0 0 1 1 1v6a1 1 0 0 1-1 1H1a1 1 0 0 1-1-1V7a1 1 0 0 1 1-1zm1 2v4h4V8H2zm6 0v4h4V8H8zm6 0v4h4V8h-4z"/></g></svg>
+<svg viewBox="0 0 20 20" xmlns="http://www.w3.org/2000/svg"><path d="M2.5 1h15A1.5 1.5 0 0 1 19 2.5v15a1.5 1.5 0 0 1-1.5 1.5h-15A1.5 1.5 0 0 1 1 17.5v-15A1.5 1.5 0 0 1 2.5 1zM2 2v16h16V2H2z" opacity=".6"/><path d="M7 2h1v16H7V2zm5 0h1v16h-1V2z" opacity=".6"/><path d="M1 6h18a1 1 0 0 1 1 1v6a1 1 0 0 1-1 1H1a1 1 0 0 1-1-1V7a1 1 0 0 1 1-1zm1 2v4h4V8H2zm6 0v4h4V8H8zm6 0v4h4V8h-4z"/></svg>

+ 2 - 2
packages/ckeditor5-table/theme/inserttable.css

@@ -1,6 +1,6 @@
 /*
 /*
- * Copyright (c) 2003-2018, CKSource - Frederico Knabben. All rights reserved.
- * For licensing, see LICENSE.md.
+ * Copyright (c) 2003-2019, CKSource - Frederico Knabben. All rights reserved.
+ * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license
  */
  */
 
 
 :root {
 :root {

Alguns ficheiros não foram mostrados porque muitos ficheiros mudaram neste diff