jodit-pro 4.2.43 → 4.2.50
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/es2015/889.fat.min.js +1 -1
- package/es2015/889.min.js +1 -1
- package/es2015/jodit.css +6 -9
- package/es2015/jodit.fat.min.css +1 -1
- package/es2015/jodit.fat.min.js +2 -2
- package/es2015/jodit.js +129 -49
- package/es2015/jodit.min.css +1 -1
- package/es2015/jodit.min.js +2 -2
- package/es2015/plugins/autocomplete/autocomplete.js +1 -1
- package/es2015/plugins/autocomplete/autocomplete.min.js +1 -1
- package/es2015/plugins/backup/backup.css +1 -1
- package/es2015/plugins/backup/backup.js +1 -1
- package/es2015/plugins/backup/backup.min.js +1 -1
- package/es2015/plugins/button-generator/button-generator.css +1 -1
- package/es2015/plugins/button-generator/button-generator.js +1 -1
- package/es2015/plugins/button-generator/button-generator.min.js +1 -1
- package/es2015/plugins/change-case/change-case.js +1 -1
- package/es2015/plugins/change-case/change-case.min.js +1 -1
- package/es2015/plugins/color-picker/color-picker.css +1 -1
- package/es2015/plugins/color-picker/color-picker.js +1 -1
- package/es2015/plugins/color-picker/color-picker.min.js +1 -1
- package/es2015/plugins/emoji/emoji.css +1 -1
- package/es2015/plugins/emoji/emoji.js +1 -1
- package/es2015/plugins/emoji/emoji.min.js +1 -1
- package/es2015/plugins/export-docs/export-docs.js +17 -15
- package/es2015/plugins/export-docs/export-docs.min.js +2 -2
- package/es2015/plugins/finder/finder.css +2 -3
- package/es2015/plugins/finder/finder.js +1 -1
- package/es2015/plugins/finder/finder.min.js +1 -1
- package/es2015/plugins/google-maps/google-maps.css +1 -1
- package/es2015/plugins/google-maps/google-maps.js +1 -1
- package/es2015/plugins/google-maps/google-maps.min.js +1 -1
- package/es2015/plugins/google-search/google-search.js +1 -1
- package/es2015/plugins/google-search/google-search.min.js +1 -1
- package/es2015/plugins/highlight-signature/highlight-signature.js +1 -1
- package/es2015/plugins/highlight-signature/highlight-signature.min.js +1 -1
- package/es2015/plugins/iframe-editor/iframe-editor.css +1 -1
- package/es2015/plugins/iframe-editor/iframe-editor.js +1 -1
- package/es2015/plugins/iframe-editor/iframe-editor.min.js +1 -1
- package/es2015/plugins/keyboard/keyboard.css +1 -1
- package/es2015/plugins/keyboard/keyboard.js +1 -1
- package/es2015/plugins/keyboard/keyboard.min.js +1 -1
- package/es2015/plugins/mobile-view/mobile-view.js +1 -1
- package/es2015/plugins/mobile-view/mobile-view.min.js +1 -1
- package/es2015/plugins/page-break/page-break.js +1 -1
- package/es2015/plugins/page-break/page-break.min.js +1 -1
- package/es2015/plugins/paste-code/paste-code.css +1 -1
- package/es2015/plugins/paste-code/paste-code.js +1 -1
- package/es2015/plugins/paste-code/paste-code.min.js +1 -1
- package/es2015/plugins/paste-from-word/paste-from-word.js +1 -1
- package/es2015/plugins/paste-from-word/paste-from-word.min.js +1 -1
- package/es2015/plugins/show-blocks/show-blocks.js +1 -1
- package/es2015/plugins/show-blocks/show-blocks.min.js +1 -1
- package/es2015/plugins/todo-list/todo-list.css +1 -1
- package/es2015/plugins/todo-list/todo-list.js +1 -1
- package/es2015/plugins/todo-list/todo-list.min.js +1 -1
- package/es2015/plugins/translate/translate.css +1 -1
- package/es2015/plugins/translate/translate.js +1 -1
- package/es2015/plugins/translate/translate.min.js +1 -1
- package/es2015/plugins/tune-block/tune-block.css +1 -1
- package/es2015/plugins/tune-block/tune-block.js +1 -1
- package/es2015/plugins/tune-block/tune-block.min.js +1 -1
- package/es2018/889.fat.min.js +1 -1
- package/es2018/889.min.js +1 -1
- package/es2018/jodit.css +6 -9
- package/es2018/jodit.fat.min.css +1 -1
- package/es2018/jodit.fat.min.js +2 -2
- package/es2018/jodit.js +129 -48
- package/es2018/jodit.min.css +1 -1
- package/es2018/jodit.min.js +2 -2
- package/es2018/plugins/autocomplete/autocomplete.js +1 -1
- package/es2018/plugins/autocomplete/autocomplete.min.js +1 -1
- package/es2018/plugins/backup/backup.css +1 -1
- package/es2018/plugins/backup/backup.js +1 -1
- package/es2018/plugins/backup/backup.min.js +1 -1
- package/es2018/plugins/button-generator/button-generator.css +1 -1
- package/es2018/plugins/button-generator/button-generator.js +1 -1
- package/es2018/plugins/button-generator/button-generator.min.js +1 -1
- package/es2018/plugins/change-case/change-case.js +1 -1
- package/es2018/plugins/change-case/change-case.min.js +1 -1
- package/es2018/plugins/color-picker/color-picker.css +1 -1
- package/es2018/plugins/color-picker/color-picker.js +1 -1
- package/es2018/plugins/color-picker/color-picker.min.js +1 -1
- package/es2018/plugins/emoji/emoji.css +1 -1
- package/es2018/plugins/emoji/emoji.js +1 -1
- package/es2018/plugins/emoji/emoji.min.js +1 -1
- package/es2018/plugins/export-docs/export-docs.js +15 -13
- package/es2018/plugins/export-docs/export-docs.min.js +2 -2
- package/es2018/plugins/finder/finder.css +2 -3
- package/es2018/plugins/finder/finder.js +1 -1
- package/es2018/plugins/finder/finder.min.js +1 -1
- package/es2018/plugins/google-maps/google-maps.css +1 -1
- package/es2018/plugins/google-maps/google-maps.js +1 -1
- package/es2018/plugins/google-maps/google-maps.min.js +1 -1
- package/es2018/plugins/google-search/google-search.js +1 -1
- package/es2018/plugins/google-search/google-search.min.js +1 -1
- package/es2018/plugins/highlight-signature/highlight-signature.js +1 -1
- package/es2018/plugins/highlight-signature/highlight-signature.min.js +1 -1
- package/es2018/plugins/iframe-editor/iframe-editor.css +1 -1
- package/es2018/plugins/iframe-editor/iframe-editor.js +1 -1
- package/es2018/plugins/iframe-editor/iframe-editor.min.js +1 -1
- package/es2018/plugins/keyboard/keyboard.css +1 -1
- package/es2018/plugins/keyboard/keyboard.js +1 -1
- package/es2018/plugins/keyboard/keyboard.min.js +1 -1
- package/es2018/plugins/mobile-view/mobile-view.js +1 -1
- package/es2018/plugins/mobile-view/mobile-view.min.js +1 -1
- package/es2018/plugins/page-break/page-break.js +1 -1
- package/es2018/plugins/page-break/page-break.min.js +1 -1
- package/es2018/plugins/paste-code/paste-code.css +1 -1
- package/es2018/plugins/paste-code/paste-code.js +1 -1
- package/es2018/plugins/paste-code/paste-code.min.js +1 -1
- package/es2018/plugins/paste-from-word/paste-from-word.js +1 -1
- package/es2018/plugins/paste-from-word/paste-from-word.min.js +1 -1
- package/es2018/plugins/show-blocks/show-blocks.js +1 -1
- package/es2018/plugins/show-blocks/show-blocks.min.js +1 -1
- package/es2018/plugins/todo-list/todo-list.css +1 -1
- package/es2018/plugins/todo-list/todo-list.js +1 -1
- package/es2018/plugins/todo-list/todo-list.min.js +1 -1
- package/es2018/plugins/translate/translate.css +1 -1
- package/es2018/plugins/translate/translate.js +1 -1
- package/es2018/plugins/translate/translate.min.js +1 -1
- package/es2018/plugins/tune-block/tune-block.css +1 -1
- package/es2018/plugins/tune-block/tune-block.js +1 -1
- package/es2018/plugins/tune-block/tune-block.min.js +1 -1
- package/es2021/889.fat.min.js +1 -1
- package/es2021/889.min.js +1 -1
- package/es2021/jodit.css +6 -9
- package/es2021/jodit.fat.min.css +1 -1
- package/es2021/jodit.fat.min.js +2 -2
- package/es2021/jodit.js +129 -48
- package/es2021/jodit.min.css +1 -1
- package/es2021/jodit.min.js +2 -2
- package/es2021/plugins/autocomplete/autocomplete.js +1 -1
- package/es2021/plugins/autocomplete/autocomplete.min.js +1 -1
- package/es2021/plugins/backup/backup.css +1 -1
- package/es2021/plugins/backup/backup.js +1 -1
- package/es2021/plugins/backup/backup.min.js +1 -1
- package/es2021/plugins/button-generator/button-generator.css +1 -1
- package/es2021/plugins/button-generator/button-generator.js +1 -1
- package/es2021/plugins/button-generator/button-generator.min.js +1 -1
- package/es2021/plugins/change-case/change-case.js +1 -1
- package/es2021/plugins/change-case/change-case.min.js +1 -1
- package/es2021/plugins/color-picker/color-picker.css +1 -1
- package/es2021/plugins/color-picker/color-picker.js +1 -1
- package/es2021/plugins/color-picker/color-picker.min.js +1 -1
- package/es2021/plugins/emoji/emoji.css +1 -1
- package/es2021/plugins/emoji/emoji.js +1 -1
- package/es2021/plugins/emoji/emoji.min.js +1 -1
- package/es2021/plugins/export-docs/export-docs.js +15 -13
- package/es2021/plugins/export-docs/export-docs.min.js +2 -2
- package/es2021/plugins/finder/finder.css +2 -3
- package/es2021/plugins/finder/finder.js +1 -1
- package/es2021/plugins/finder/finder.min.js +1 -1
- package/es2021/plugins/google-maps/google-maps.css +1 -1
- package/es2021/plugins/google-maps/google-maps.js +1 -1
- package/es2021/plugins/google-maps/google-maps.min.js +1 -1
- package/es2021/plugins/google-search/google-search.js +1 -1
- package/es2021/plugins/google-search/google-search.min.js +1 -1
- package/es2021/plugins/highlight-signature/highlight-signature.js +1 -1
- package/es2021/plugins/highlight-signature/highlight-signature.min.js +1 -1
- package/es2021/plugins/iframe-editor/iframe-editor.css +1 -1
- package/es2021/plugins/iframe-editor/iframe-editor.js +1 -1
- package/es2021/plugins/iframe-editor/iframe-editor.min.js +1 -1
- package/es2021/plugins/keyboard/keyboard.css +1 -1
- package/es2021/plugins/keyboard/keyboard.js +1 -1
- package/es2021/plugins/keyboard/keyboard.min.js +1 -1
- package/es2021/plugins/mobile-view/mobile-view.js +1 -1
- package/es2021/plugins/mobile-view/mobile-view.min.js +1 -1
- package/es2021/plugins/page-break/page-break.js +1 -1
- package/es2021/plugins/page-break/page-break.min.js +1 -1
- package/es2021/plugins/paste-code/paste-code.css +1 -1
- package/es2021/plugins/paste-code/paste-code.js +1 -1
- package/es2021/plugins/paste-code/paste-code.min.js +1 -1
- package/es2021/plugins/paste-from-word/paste-from-word.js +1 -1
- package/es2021/plugins/paste-from-word/paste-from-word.min.js +1 -1
- package/es2021/plugins/show-blocks/show-blocks.js +1 -1
- package/es2021/plugins/show-blocks/show-blocks.min.js +1 -1
- package/es2021/plugins/todo-list/todo-list.css +1 -1
- package/es2021/plugins/todo-list/todo-list.js +1 -1
- package/es2021/plugins/todo-list/todo-list.min.js +1 -1
- package/es2021/plugins/translate/translate.css +1 -1
- package/es2021/plugins/translate/translate.js +1 -1
- package/es2021/plugins/translate/translate.min.js +1 -1
- package/es2021/plugins/tune-block/tune-block.css +1 -1
- package/es2021/plugins/tune-block/tune-block.js +1 -1
- package/es2021/plugins/tune-block/tune-block.min.js +1 -1
- package/es2021.en/889.fat.min.js +1 -1
- package/es2021.en/889.min.js +1 -1
- package/es2021.en/jodit.css +6 -9
- package/es2021.en/jodit.fat.min.css +1 -1
- package/es2021.en/jodit.fat.min.js +2 -2
- package/es2021.en/jodit.js +129 -48
- package/es2021.en/jodit.min.css +1 -1
- package/es2021.en/jodit.min.js +2 -2
- package/es2021.en/plugins/autocomplete/autocomplete.js +1 -1
- package/es2021.en/plugins/autocomplete/autocomplete.min.js +1 -1
- package/es2021.en/plugins/backup/backup.css +1 -1
- package/es2021.en/plugins/backup/backup.js +1 -1
- package/es2021.en/plugins/backup/backup.min.js +1 -1
- package/es2021.en/plugins/button-generator/button-generator.css +1 -1
- package/es2021.en/plugins/button-generator/button-generator.js +1 -1
- package/es2021.en/plugins/button-generator/button-generator.min.js +1 -1
- package/es2021.en/plugins/change-case/change-case.js +1 -1
- package/es2021.en/plugins/change-case/change-case.min.js +1 -1
- package/es2021.en/plugins/color-picker/color-picker.css +1 -1
- package/es2021.en/plugins/color-picker/color-picker.js +1 -1
- package/es2021.en/plugins/color-picker/color-picker.min.js +1 -1
- package/es2021.en/plugins/emoji/emoji.css +1 -1
- package/es2021.en/plugins/emoji/emoji.js +1 -1
- package/es2021.en/plugins/emoji/emoji.min.js +1 -1
- package/es2021.en/plugins/export-docs/export-docs.js +15 -13
- package/es2021.en/plugins/export-docs/export-docs.min.js +2 -2
- package/es2021.en/plugins/finder/finder.css +2 -3
- package/es2021.en/plugins/finder/finder.js +1 -1
- package/es2021.en/plugins/finder/finder.min.js +1 -1
- package/es2021.en/plugins/google-maps/google-maps.css +1 -1
- package/es2021.en/plugins/google-maps/google-maps.js +1 -1
- package/es2021.en/plugins/google-maps/google-maps.min.js +1 -1
- package/es2021.en/plugins/google-search/google-search.js +1 -1
- package/es2021.en/plugins/google-search/google-search.min.js +1 -1
- package/es2021.en/plugins/highlight-signature/highlight-signature.js +1 -1
- package/es2021.en/plugins/highlight-signature/highlight-signature.min.js +1 -1
- package/es2021.en/plugins/iframe-editor/iframe-editor.css +1 -1
- package/es2021.en/plugins/iframe-editor/iframe-editor.js +1 -1
- package/es2021.en/plugins/iframe-editor/iframe-editor.min.js +1 -1
- package/es2021.en/plugins/keyboard/keyboard.css +1 -1
- package/es2021.en/plugins/keyboard/keyboard.js +1 -1
- package/es2021.en/plugins/keyboard/keyboard.min.js +1 -1
- package/es2021.en/plugins/mobile-view/mobile-view.js +1 -1
- package/es2021.en/plugins/mobile-view/mobile-view.min.js +1 -1
- package/es2021.en/plugins/page-break/page-break.js +1 -1
- package/es2021.en/plugins/page-break/page-break.min.js +1 -1
- package/es2021.en/plugins/paste-code/paste-code.css +1 -1
- package/es2021.en/plugins/paste-code/paste-code.js +1 -1
- package/es2021.en/plugins/paste-code/paste-code.min.js +1 -1
- package/es2021.en/plugins/paste-from-word/paste-from-word.js +1 -1
- package/es2021.en/plugins/paste-from-word/paste-from-word.min.js +1 -1
- package/es2021.en/plugins/show-blocks/show-blocks.js +1 -1
- package/es2021.en/plugins/show-blocks/show-blocks.min.js +1 -1
- package/es2021.en/plugins/todo-list/todo-list.css +1 -1
- package/es2021.en/plugins/todo-list/todo-list.js +1 -1
- package/es2021.en/plugins/todo-list/todo-list.min.js +1 -1
- package/es2021.en/plugins/translate/translate.css +1 -1
- package/es2021.en/plugins/translate/translate.js +1 -1
- package/es2021.en/plugins/translate/translate.min.js +1 -1
- package/es2021.en/plugins/tune-block/tune-block.css +1 -1
- package/es2021.en/plugins/tune-block/tune-block.js +1 -1
- package/es2021.en/plugins/tune-block/tune-block.min.js +1 -1
- package/es5/292.fat.min.js +1 -1
- package/es5/292.min.js +1 -1
- package/es5/889.fat.min.js +1 -1
- package/es5/889.min.js +1 -1
- package/es5/jodit.css +35 -66
- package/es5/jodit.fat.min.css +1 -1
- package/es5/jodit.fat.min.js +2 -2
- package/es5/jodit.js +129 -49
- package/es5/jodit.min.css +3 -3
- package/es5/jodit.min.js +2 -2
- package/es5/plugins/autocomplete/autocomplete.js +1 -1
- package/es5/plugins/autocomplete/autocomplete.min.js +1 -1
- package/es5/plugins/backup/backup.css +1 -1
- package/es5/plugins/backup/backup.js +1 -1
- package/es5/plugins/backup/backup.min.js +1 -1
- package/es5/plugins/button-generator/button-generator.css +1 -1
- package/es5/plugins/button-generator/button-generator.js +1 -1
- package/es5/plugins/button-generator/button-generator.min.js +1 -1
- package/es5/plugins/change-case/change-case.js +1 -1
- package/es5/plugins/change-case/change-case.min.js +1 -1
- package/es5/plugins/color-picker/color-picker.css +1 -1
- package/es5/plugins/color-picker/color-picker.js +1 -1
- package/es5/plugins/color-picker/color-picker.min.js +1 -1
- package/es5/plugins/emoji/emoji.css +1 -1
- package/es5/plugins/emoji/emoji.js +1 -1
- package/es5/plugins/emoji/emoji.min.js +1 -1
- package/es5/plugins/export-docs/export-docs.js +20 -18
- package/es5/plugins/export-docs/export-docs.min.js +2 -2
- package/es5/plugins/finder/finder.css +2 -3
- package/es5/plugins/finder/finder.js +1 -1
- package/es5/plugins/finder/finder.min.js +1 -1
- package/es5/plugins/google-maps/google-maps.css +1 -1
- package/es5/plugins/google-maps/google-maps.js +1 -1
- package/es5/plugins/google-maps/google-maps.min.js +1 -1
- package/es5/plugins/google-search/google-search.js +1 -1
- package/es5/plugins/google-search/google-search.min.js +1 -1
- package/es5/plugins/highlight-signature/highlight-signature.js +1 -1
- package/es5/plugins/highlight-signature/highlight-signature.min.js +1 -1
- package/es5/plugins/iframe-editor/iframe-editor.css +1 -1
- package/es5/plugins/iframe-editor/iframe-editor.js +1 -1
- package/es5/plugins/iframe-editor/iframe-editor.min.js +1 -1
- package/es5/plugins/keyboard/keyboard.css +1 -1
- package/es5/plugins/keyboard/keyboard.js +1 -1
- package/es5/plugins/keyboard/keyboard.min.js +1 -1
- package/es5/plugins/mobile-view/mobile-view.js +1 -1
- package/es5/plugins/mobile-view/mobile-view.min.js +1 -1
- package/es5/plugins/page-break/page-break.js +1 -1
- package/es5/plugins/page-break/page-break.min.js +1 -1
- package/es5/plugins/paste-code/paste-code.css +1 -1
- package/es5/plugins/paste-code/paste-code.js +1 -1
- package/es5/plugins/paste-code/paste-code.min.js +1 -1
- package/es5/plugins/paste-from-word/paste-from-word.js +1 -1
- package/es5/plugins/paste-from-word/paste-from-word.min.js +1 -1
- package/es5/plugins/show-blocks/show-blocks.js +1 -1
- package/es5/plugins/show-blocks/show-blocks.min.js +1 -1
- package/es5/plugins/todo-list/todo-list.css +1 -1
- package/es5/plugins/todo-list/todo-list.js +1 -1
- package/es5/plugins/todo-list/todo-list.min.js +1 -1
- package/es5/plugins/translate/translate.css +1 -1
- package/es5/plugins/translate/translate.js +1 -1
- package/es5/plugins/translate/translate.min.js +1 -1
- package/es5/plugins/tune-block/tune-block.css +1 -1
- package/es5/plugins/tune-block/tune-block.js +1 -1
- package/es5/plugins/tune-block/tune-block.min.js +1 -1
- package/esm/plugins/export-docs/config.d.ts +3 -0
- package/esm/plugins/export-docs/export-docs.js +1 -1
- package/package.json +1 -1
- package/types/plugins/export-docs/config.d.ts +3 -0
package/es2021.en/jodit.js
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
/*!
|
|
2
2
|
* jodit-pro - PRO Version of Jodit Editor
|
|
3
3
|
* Author: Chupurnov Valeriy <chupurnov@gmail.com>
|
|
4
|
-
* Version: v4.2.
|
|
4
|
+
* Version: v4.2.50
|
|
5
5
|
* Url: https://xdsoft.net/jodit/pro/
|
|
6
6
|
* License(s): SEE LICENSE IN LICENSE.md
|
|
7
7
|
*/
|
|
@@ -2303,7 +2303,7 @@ __webpack_require__.r(__webpack_exports__);
|
|
|
2303
2303
|
* Released under MIT see LICENSE.txt in the project root for license information.
|
|
2304
2304
|
* Copyright (c) 2013-2024 Valeriy Chupurnov. All rights reserved. https://xdsoft.net
|
|
2305
2305
|
*/
|
|
2306
|
-
const APP_VERSION = "4.2.
|
|
2306
|
+
const APP_VERSION = "4.2.50";
|
|
2307
2307
|
// prettier-ignore
|
|
2308
2308
|
const ES = "es2021";
|
|
2309
2309
|
const IS_ES_MODERN = true;
|
|
@@ -8100,10 +8100,10 @@ const buildQuery = (data, prefix) => {
|
|
|
8100
8100
|
* Released under MIT see LICENSE.txt in the project root for license information.
|
|
8101
8101
|
* Copyright (c) 2013-2024 Valeriy Chupurnov. All rights reserved. https://xdsoft.net
|
|
8102
8102
|
*/
|
|
8103
|
-
|
|
8104
8103
|
/**
|
|
8105
8104
|
* @module helpers/utils
|
|
8106
8105
|
*/
|
|
8106
|
+
|
|
8107
8107
|
const completeUrl = (url) => {
|
|
8108
8108
|
if (jodit_core_constants__WEBPACK_IMPORTED_MODULE_0__.globalWindow.location.protocol === 'file:' && /^\/\//.test(url)) {
|
|
8109
8109
|
url = 'https:' + url;
|
|
@@ -8119,8 +8119,9 @@ const completeUrl = (url) => {
|
|
|
8119
8119
|
|
|
8120
8120
|
"use strict";
|
|
8121
8121
|
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
|
|
8122
|
-
/* harmony export */
|
|
8123
|
-
/* harmony export */
|
|
8122
|
+
/* harmony export */ VL: function() { return /* binding */ ConfigFlatten; },
|
|
8123
|
+
/* harmony export */ pi: function() { return /* binding */ ConfigDeepFlatten; },
|
|
8124
|
+
/* harmony export */ tb: function() { return /* binding */ ConfigProto; }
|
|
8124
8125
|
/* harmony export */ });
|
|
8125
8126
|
/* harmony import */ var jodit_core_helpers_checker_is_array__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(55010);
|
|
8126
8127
|
/* harmony import */ var jodit_core_helpers_checker_is_plain_object__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(47903);
|
|
@@ -8211,6 +8212,31 @@ function ConfigFlatten(obj) {
|
|
|
8211
8212
|
return app;
|
|
8212
8213
|
}, {});
|
|
8213
8214
|
}
|
|
8215
|
+
/**
|
|
8216
|
+
* Returns a plain object from a prototype-based object.
|
|
8217
|
+
* ```typescript
|
|
8218
|
+
* const editor = Jodit.make('#editor', {
|
|
8219
|
+
* image: {
|
|
8220
|
+
* dialogWidth: 500
|
|
8221
|
+
* }
|
|
8222
|
+
* });
|
|
8223
|
+
*
|
|
8224
|
+
* console.log(editor.o.image.openOnDblClick) // true
|
|
8225
|
+
* // But you can't get all options in plain object
|
|
8226
|
+
* console.log(JSON.stringify(editor.o.image)); // {"dialogWidth":500}
|
|
8227
|
+
*
|
|
8228
|
+
* const plain = Jodit.modules.Helpers.ConfigDeepFlatten(editor.o.image);
|
|
8229
|
+
* console.log(JSON.stringify(plain)); // {"dialogWidth":500, "openOnDblClick": true, "editSrc": true, ...}
|
|
8230
|
+
* ```
|
|
8231
|
+
*/
|
|
8232
|
+
function ConfigDeepFlatten(obj) {
|
|
8233
|
+
return (0,_utils__WEBPACK_IMPORTED_MODULE_1__/* .keys */ .HP)(obj, false).reduce((app, key) => {
|
|
8234
|
+
app[key] = (0,jodit_core_helpers_checker_is_plain_object__WEBPACK_IMPORTED_MODULE_4__/* .isPlainObject */ .Q)(obj[key])
|
|
8235
|
+
? ConfigDeepFlatten(obj[key])
|
|
8236
|
+
: obj[key];
|
|
8237
|
+
return app;
|
|
8238
|
+
}, {});
|
|
8239
|
+
}
|
|
8214
8240
|
|
|
8215
8241
|
|
|
8216
8242
|
/***/ }),
|
|
@@ -8841,8 +8867,9 @@ const humanSizeToBytes = (human) => {
|
|
|
8841
8867
|
__webpack_require__.r(__webpack_exports__);
|
|
8842
8868
|
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
|
|
8843
8869
|
/* harmony export */ $$: function() { return /* reexport safe */ _selector__WEBPACK_IMPORTED_MODULE_23__.$$; },
|
|
8844
|
-
/* harmony export */
|
|
8845
|
-
/* harmony export */
|
|
8870
|
+
/* harmony export */ ConfigDeepFlatten: function() { return /* reexport safe */ _config_proto__WEBPACK_IMPORTED_MODULE_7__.pi; },
|
|
8871
|
+
/* harmony export */ ConfigFlatten: function() { return /* reexport safe */ _config_proto__WEBPACK_IMPORTED_MODULE_7__.VL; },
|
|
8872
|
+
/* harmony export */ ConfigProto: function() { return /* reexport safe */ _config_proto__WEBPACK_IMPORTED_MODULE_7__.tb; },
|
|
8846
8873
|
/* harmony export */ ConnectionError: function() { return /* reexport safe */ _error__WEBPACK_IMPORTED_MODULE_13__.Rc; },
|
|
8847
8874
|
/* harmony export */ LimitedStack: function() { return /* reexport safe */ _stack__WEBPACK_IMPORTED_MODULE_25__.d; },
|
|
8848
8875
|
/* harmony export */ OptionsError: function() { return /* reexport safe */ _error__WEBPACK_IMPORTED_MODULE_13__.ZW; },
|
|
@@ -11819,6 +11846,7 @@ function extractSelectedPart(wrapper, font, jodit) {
|
|
|
11819
11846
|
}
|
|
11820
11847
|
/**
|
|
11821
11848
|
* Retrieves content before after the selected area, clears it if it is empty, and inserts before after the framed selection
|
|
11849
|
+
* @private
|
|
11822
11850
|
*/
|
|
11823
11851
|
function extractAndMove(wrapper, range, left) {
|
|
11824
11852
|
const fragment = range.extractContents();
|
|
@@ -13424,6 +13452,7 @@ class Dlgs {
|
|
|
13424
13452
|
shadowRoot: this.o.shadowRoot,
|
|
13425
13453
|
ownerWindow: this.o.ownerWindow,
|
|
13426
13454
|
defaultTimeout: this.o.defaultTimeout,
|
|
13455
|
+
direction: this.o.direction,
|
|
13427
13456
|
theme: this.o.theme,
|
|
13428
13457
|
globalFullSize: this.o.globalFullSize,
|
|
13429
13458
|
...options
|
|
@@ -16781,11 +16810,11 @@ let View = View_1 = class View extends jodit_core_component_component__WEBPACK_I
|
|
|
16781
16810
|
super.destruct();
|
|
16782
16811
|
}
|
|
16783
16812
|
};
|
|
16784
|
-
// from webpack.config.
|
|
16813
|
+
// from webpack.config.ts
|
|
16785
16814
|
View.ES = jodit_core_constants__WEBPACK_IMPORTED_MODULE_3__.ES;
|
|
16786
16815
|
View.version = jodit_core_constants__WEBPACK_IMPORTED_MODULE_3__.APP_VERSION;
|
|
16787
|
-
View.esNext = jodit_core_constants__WEBPACK_IMPORTED_MODULE_3__.IS_ES_NEXT; // from webpack.config.
|
|
16788
|
-
View.esModern = jodit_core_constants__WEBPACK_IMPORTED_MODULE_3__.IS_ES_MODERN; // from webpack.config.
|
|
16816
|
+
View.esNext = jodit_core_constants__WEBPACK_IMPORTED_MODULE_3__.IS_ES_NEXT; // from webpack.config.ts
|
|
16817
|
+
View.esModern = jodit_core_constants__WEBPACK_IMPORTED_MODULE_3__.IS_ES_MODERN; // from webpack.config.ts
|
|
16789
16818
|
(0,tslib__WEBPACK_IMPORTED_MODULE_15__/* .__decorate */ .Cg)([
|
|
16790
16819
|
jodit_core_decorators_cache_cache__WEBPACK_IMPORTED_MODULE_5__/* .cache */ .PP
|
|
16791
16820
|
], View.prototype, "buffer", null);
|
|
@@ -17002,7 +17031,17 @@ let Jodit = Jodit_1 = class Jodit extends jodit_modules__WEBPACK_IMPORTED_MODULE
|
|
|
17002
17031
|
: jodit_config__WEBPACK_IMPORTED_MODULE_6__/* .Config */ .T.defaultOptions.defaultTimeout;
|
|
17003
17032
|
}
|
|
17004
17033
|
/**
|
|
17005
|
-
* Method wrap usual
|
|
17034
|
+
* Method wrap usual object in Object helper for prevent deep object merging in options*
|
|
17035
|
+
* ```js
|
|
17036
|
+
* const editor = Jodit.make('#editor', {
|
|
17037
|
+
* controls: {
|
|
17038
|
+
* fontsize: {
|
|
17039
|
+
* list: Jodit.atom([8, 9, 10])
|
|
17040
|
+
* }
|
|
17041
|
+
* }
|
|
17042
|
+
* });
|
|
17043
|
+
* ```
|
|
17044
|
+
* In this case, the array [8, 9, 10] will not be combined with other arrays, but will replace them
|
|
17006
17045
|
*/
|
|
17007
17046
|
static atom(object) {
|
|
17008
17047
|
return (0,jodit_core_helpers__WEBPACK_IMPORTED_MODULE_3__.markAsAtomic)(object);
|
|
@@ -18007,13 +18046,6 @@ let Jodit = Jodit_1 = class Jodit extends jodit_modules__WEBPACK_IMPORTED_MODULE
|
|
|
18007
18046
|
})
|
|
18008
18047
|
.on('blur', () => (this.editorIsActive = false));
|
|
18009
18048
|
this.__prepareWYSIWYGEditor();
|
|
18010
|
-
// direction
|
|
18011
|
-
if (this.o.direction) {
|
|
18012
|
-
const direction = this.o.direction.toLowerCase() === 'rtl' ? 'rtl' : 'ltr';
|
|
18013
|
-
this.container.style.direction = direction;
|
|
18014
|
-
this.container.setAttribute('dir', direction);
|
|
18015
|
-
this.toolbar.setDirection(direction);
|
|
18016
|
-
}
|
|
18017
18049
|
if (this.o.triggerChangeEvent) {
|
|
18018
18050
|
this.e.on('change', this.async.debounce(() => {
|
|
18019
18051
|
this.e && this.e.fire(this.element, 'change');
|
|
@@ -18031,6 +18063,9 @@ let Jodit = Jodit_1 = class Jodit extends jodit_modules__WEBPACK_IMPORTED_MODULE
|
|
|
18031
18063
|
const direction = this.o.direction.toLowerCase() === 'rtl' ? 'rtl' : 'ltr';
|
|
18032
18064
|
this.editor.style.direction = direction;
|
|
18033
18065
|
this.editor.setAttribute('dir', direction);
|
|
18066
|
+
this.container.style.direction = direction;
|
|
18067
|
+
this.container.setAttribute('dir', direction);
|
|
18068
|
+
this.toolbar.setDirection(direction);
|
|
18034
18069
|
}
|
|
18035
18070
|
// proxy events
|
|
18036
18071
|
this.e
|
|
@@ -19004,6 +19039,10 @@ let Dialog = Dialog_1 = class Dialog extends jodit_core_view_view_with_toolbar__
|
|
|
19004
19039
|
<div class="${n('resizer')}">${jodit_core_ui__WEBPACK_IMPORTED_MODULE_9__/* .Icon */ .In.get('resize_handler')}</div>
|
|
19005
19040
|
</div>
|
|
19006
19041
|
</div>`);
|
|
19042
|
+
if (self.options.direction === 'rtl') {
|
|
19043
|
+
self.container.style.direction = 'rtl';
|
|
19044
|
+
self.container.setAttribute('dir', 'rtl');
|
|
19045
|
+
}
|
|
19007
19046
|
if (this.o.zIndex) {
|
|
19008
19047
|
this.container.style.zIndex = this.o.zIndex.toString();
|
|
19009
19048
|
}
|
|
@@ -21535,6 +21574,7 @@ class Snapshot extends jodit_core_component__WEBPACK_IMPORTED_MODULE_0__/* .View
|
|
|
21535
21574
|
constructor() {
|
|
21536
21575
|
super(...arguments);
|
|
21537
21576
|
this.__isBlocked = false;
|
|
21577
|
+
this.__levelOfTransaction = 0;
|
|
21538
21578
|
}
|
|
21539
21579
|
/** @override */
|
|
21540
21580
|
className() {
|
|
@@ -21615,6 +21655,7 @@ class Snapshot extends jodit_core_component__WEBPACK_IMPORTED_MODULE_0__/* .View
|
|
|
21615
21655
|
}
|
|
21616
21656
|
transaction(changes) {
|
|
21617
21657
|
this.__block(true);
|
|
21658
|
+
this.__levelOfTransaction += 1;
|
|
21618
21659
|
try {
|
|
21619
21660
|
changes();
|
|
21620
21661
|
}
|
|
@@ -21623,7 +21664,12 @@ class Snapshot extends jodit_core_component__WEBPACK_IMPORTED_MODULE_0__/* .View
|
|
|
21623
21664
|
throw e;
|
|
21624
21665
|
}
|
|
21625
21666
|
}
|
|
21626
|
-
|
|
21667
|
+
finally {
|
|
21668
|
+
this.__levelOfTransaction -= 1;
|
|
21669
|
+
if (this.__levelOfTransaction === 0) {
|
|
21670
|
+
this.__block(false);
|
|
21671
|
+
}
|
|
21672
|
+
}
|
|
21627
21673
|
}
|
|
21628
21674
|
/**
|
|
21629
21675
|
* Creates object a snapshot of editor: html and the current selection. Current selection calculate by
|
|
@@ -23860,17 +23906,26 @@ let ToolbarButton = class ToolbarButton extends jodit_core_ui_button__WEBPACK_IM
|
|
|
23860
23906
|
if ((0,jodit_core_helpers__WEBPACK_IMPORTED_MODULE_3__.isFunction)(ctr.popup)) {
|
|
23861
23907
|
const popup = this.openPopup();
|
|
23862
23908
|
popup.parentElement = this;
|
|
23863
|
-
|
|
23864
|
-
|
|
23865
|
-
|
|
23866
|
-
|
|
23867
|
-
|
|
23868
|
-
|
|
23869
|
-
|
|
23870
|
-
|
|
23871
|
-
|
|
23909
|
+
try {
|
|
23910
|
+
if (this.j.e.fire((0,jodit_core_helpers__WEBPACK_IMPORTED_MODULE_3__.camelCase)(`before-${ctr.name}-open-popup`), this.target, ctr, popup) !== false) {
|
|
23911
|
+
const target = this.toolbar?.getTarget(this) ?? this.target ?? null;
|
|
23912
|
+
const elm = ctr.popup(this.j, target, this.__closePopup, this);
|
|
23913
|
+
if (elm) {
|
|
23914
|
+
popup
|
|
23915
|
+
.setContent((0,jodit_core_helpers__WEBPACK_IMPORTED_MODULE_3__.isString)(elm) ? this.j.c.fromHTML(elm) : elm)
|
|
23916
|
+
.open(() => (0,jodit_core_helpers__WEBPACK_IMPORTED_MODULE_3__.position)(this.container), false, this.j.o.allowTabNavigation
|
|
23917
|
+
? this.container
|
|
23918
|
+
: undefined);
|
|
23919
|
+
}
|
|
23920
|
+
else {
|
|
23921
|
+
this.__closePopup();
|
|
23922
|
+
}
|
|
23872
23923
|
}
|
|
23873
23924
|
}
|
|
23925
|
+
catch (e) {
|
|
23926
|
+
this.__closePopup();
|
|
23927
|
+
throw e;
|
|
23928
|
+
}
|
|
23874
23929
|
/**
|
|
23875
23930
|
* Fired after the popup was opened for some control button
|
|
23876
23931
|
*/
|
|
@@ -26209,6 +26264,9 @@ __webpack_require__.r(__webpack_exports__);
|
|
|
26209
26264
|
* Released under MIT see LICENSE.txt in the project root for license information.
|
|
26210
26265
|
* Copyright (c) 2013-2024 Valeriy Chupurnov. All rights reserved. https://xdsoft.net
|
|
26211
26266
|
*/
|
|
26267
|
+
/**
|
|
26268
|
+
* @module plugins/ai-assistant
|
|
26269
|
+
*/
|
|
26212
26270
|
|
|
26213
26271
|
|
|
26214
26272
|
|
|
@@ -31785,7 +31843,9 @@ jodit_core_global__WEBPACK_IMPORTED_MODULE_2__/* .pluginSystem */ .fg.add('image
|
|
|
31785
31843
|
* Copyright (c) 2013-2024 Valeriy Chupurnov. All rights reserved. https://xdsoft.net
|
|
31786
31844
|
*/
|
|
31787
31845
|
|
|
31788
|
-
/**
|
|
31846
|
+
/**
|
|
31847
|
+
* @private
|
|
31848
|
+
*/
|
|
31789
31849
|
function readAlign(image, values) {
|
|
31790
31850
|
// Align
|
|
31791
31851
|
if (image.style.cssFloat &&
|
|
@@ -31906,6 +31966,9 @@ function readLink(state, j, values) {
|
|
|
31906
31966
|
* Released under MIT see LICENSE.txt in the project root for license information.
|
|
31907
31967
|
* Copyright (c) 2013-2024 Valeriy Chupurnov. All rights reserved. https://xdsoft.net
|
|
31908
31968
|
*/
|
|
31969
|
+
/**
|
|
31970
|
+
* @module plugins/image-properties
|
|
31971
|
+
*/
|
|
31909
31972
|
|
|
31910
31973
|
/** @private */
|
|
31911
31974
|
function readMargins(image, values, state) {
|
|
@@ -31949,6 +32012,9 @@ function readMargins(image, values, state) {
|
|
|
31949
32012
|
* Released under MIT see LICENSE.txt in the project root for license information.
|
|
31950
32013
|
* Copyright (c) 2013-2024 Valeriy Chupurnov. All rights reserved. https://xdsoft.net
|
|
31951
32014
|
*/
|
|
32015
|
+
/**
|
|
32016
|
+
* @module plugins/image-properties
|
|
32017
|
+
*/
|
|
31952
32018
|
|
|
31953
32019
|
|
|
31954
32020
|
|
|
@@ -32762,6 +32828,9 @@ function openImagePopup(j, dialog, state, button) {
|
|
|
32762
32828
|
* Released under MIT see LICENSE.txt in the project root for license information.
|
|
32763
32829
|
* Copyright (c) 2013-2024 Valeriy Chupurnov. All rights reserved. https://xdsoft.net
|
|
32764
32830
|
*/
|
|
32831
|
+
/**
|
|
32832
|
+
* @module plugins/image-properties
|
|
32833
|
+
*/
|
|
32765
32834
|
|
|
32766
32835
|
|
|
32767
32836
|
/** @private */
|
|
@@ -32950,6 +33019,9 @@ function applyMargin(j, marginTop, marginRight, marginBottom, marginLeft, image,
|
|
|
32950
33019
|
* Released under MIT see LICENSE.txt in the project root for license information.
|
|
32951
33020
|
* Copyright (c) 2013-2024 Valeriy Chupurnov. All rights reserved. https://xdsoft.net
|
|
32952
33021
|
*/
|
|
33022
|
+
/**
|
|
33023
|
+
* @module plugins/image-properties
|
|
33024
|
+
*/
|
|
32953
33025
|
|
|
32954
33026
|
|
|
32955
33027
|
|
|
@@ -39505,6 +39577,10 @@ class AceEditor extends jodit_plugins_source_editor_sourceEditor__WEBPACK_IMPORT
|
|
|
39505
39577
|
this.container.appendChild(fakeMirror);
|
|
39506
39578
|
const ace = editor.ow.ace;
|
|
39507
39579
|
this.instance = ace.edit(fakeMirror);
|
|
39580
|
+
if (editor.o.direction === 'rtl') {
|
|
39581
|
+
this.instance.setOption('rtlText', true);
|
|
39582
|
+
this.instance.setOption('rtl', true);
|
|
39583
|
+
}
|
|
39508
39584
|
this.instance.setTheme(editor.o.sourceEditorNativeOptions.theme);
|
|
39509
39585
|
this.instance.renderer.setShowGutter(editor.o.sourceEditorNativeOptions.showGutter);
|
|
39510
39586
|
this.instance
|
|
@@ -39667,7 +39743,8 @@ class TextAreaEditor extends jodit_plugins_source_editor_sourceEditor__WEBPACK_I
|
|
|
39667
39743
|
}
|
|
39668
39744
|
init(editor) {
|
|
39669
39745
|
this.instance = editor.c.element('textarea', {
|
|
39670
|
-
class: 'jodit-source__mirror'
|
|
39746
|
+
class: 'jodit-source__mirror',
|
|
39747
|
+
dir: editor.o.direction === 'rtl' ? 'rtl' : undefined
|
|
39671
39748
|
});
|
|
39672
39749
|
this.container.appendChild(this.instance);
|
|
39673
39750
|
editor.e
|
|
@@ -40844,14 +40921,13 @@ jodit_config__WEBPACK_IMPORTED_MODULE_1__/* .Config */ .T.prototype.controls.sym
|
|
|
40844
40921
|
editor.e.on(container, 'close_dialog', close);
|
|
40845
40922
|
return box;
|
|
40846
40923
|
}
|
|
40847
|
-
|
|
40848
|
-
|
|
40849
|
-
|
|
40850
|
-
|
|
40851
|
-
|
|
40852
|
-
a && a.focus();
|
|
40853
|
-
}
|
|
40924
|
+
editor
|
|
40925
|
+
.alert(container, 'Select Special Character', undefined, 'jodit-symbols')
|
|
40926
|
+
.bindDestruct(editor);
|
|
40927
|
+
const a = container.querySelector('a');
|
|
40928
|
+
a && a.focus();
|
|
40854
40929
|
}
|
|
40930
|
+
return;
|
|
40855
40931
|
}
|
|
40856
40932
|
};
|
|
40857
40933
|
|
|
@@ -40952,17 +41028,15 @@ __webpack_require__.r(__webpack_exports__);
|
|
|
40952
41028
|
class symbols extends jodit_core_plugin_plugin__WEBPACK_IMPORTED_MODULE_4__/* .Plugin */ .k {
|
|
40953
41029
|
constructor(jodit) {
|
|
40954
41030
|
super(jodit);
|
|
40955
|
-
/** @override */
|
|
40956
41031
|
this.buttons = [
|
|
40957
41032
|
{
|
|
40958
41033
|
name: 'symbols',
|
|
40959
41034
|
group: 'insert'
|
|
40960
41035
|
}
|
|
40961
41036
|
];
|
|
40962
|
-
this.
|
|
41037
|
+
this.__countInRow = 17;
|
|
40963
41038
|
(0,jodit_core_global__WEBPACK_IMPORTED_MODULE_2__/* .extendLang */ .JW)(_langs__WEBPACK_IMPORTED_MODULE_6__);
|
|
40964
41039
|
}
|
|
40965
|
-
/** @override */
|
|
40966
41040
|
afterInit(jodit) {
|
|
40967
41041
|
jodit.e.on('generateSpecialCharactersTable.symbols', () => {
|
|
40968
41042
|
const container = jodit.c.fromHTML(`<div class="jodit-symbols__container">
|
|
@@ -40972,10 +41046,15 @@ class symbols extends jodit_core_plugin_plugin__WEBPACK_IMPORTED_MODULE_4__/* .P
|
|
|
40972
41046
|
<div class="jodit-symbols__container_preview">
|
|
40973
41047
|
<div class="jodit-symbols__preview"></div>
|
|
40974
41048
|
</div>
|
|
40975
|
-
</div>`)
|
|
41049
|
+
</div>`);
|
|
41050
|
+
const preview = container.querySelector('.jodit-symbols__preview');
|
|
41051
|
+
const table = container.querySelector('table');
|
|
41052
|
+
const body = table.tBodies[0];
|
|
41053
|
+
const chars = [];
|
|
40976
41054
|
for (let i = 0; i < jodit.o.specialCharacters.length;) {
|
|
40977
41055
|
const tr = jodit.c.element('tr');
|
|
40978
|
-
for (let j = 0; j < this.
|
|
41056
|
+
for (let j = 0; j < this.__countInRow &&
|
|
41057
|
+
i < jodit.o.specialCharacters.length; j += 1, i += 1) {
|
|
40979
41058
|
const td = jodit.c.element('td'), a = jodit.c.fromHTML(`<a
|
|
40980
41059
|
data-index="${i}"
|
|
40981
41060
|
data-index-j="${j}"
|
|
@@ -40997,7 +41076,9 @@ class symbols extends jodit_core_plugin_plugin__WEBPACK_IMPORTED_MODULE_4__/* .P
|
|
|
40997
41076
|
if (jodit_core_dom_dom__WEBPACK_IMPORTED_MODULE_1__/* .Dom */ .J.isTag(this, 'a')) {
|
|
40998
41077
|
jodit.s.focus();
|
|
40999
41078
|
jodit.s.insertHTML(this.innerHTML);
|
|
41000
|
-
|
|
41079
|
+
if (!e?.shiftKey) {
|
|
41080
|
+
jodit.e.fire(this, 'close_dialog');
|
|
41081
|
+
}
|
|
41001
41082
|
e && e.preventDefault();
|
|
41002
41083
|
e && e.stopImmediatePropagation();
|
|
41003
41084
|
}
|
|
@@ -41017,18 +41098,18 @@ class symbols extends jodit_core_plugin_plugin__WEBPACK_IMPORTED_MODULE_4__/* .P
|
|
|
41017
41098
|
case jodit_core_constants__WEBPACK_IMPORTED_MODULE_0__.KEY_DOWN:
|
|
41018
41099
|
newIndex =
|
|
41019
41100
|
e.key === jodit_core_constants__WEBPACK_IMPORTED_MODULE_0__.KEY_UP
|
|
41020
|
-
? index - self.
|
|
41021
|
-
: index + self.
|
|
41101
|
+
? index - self.__countInRow
|
|
41102
|
+
: index + self.__countInRow;
|
|
41022
41103
|
if (chars[newIndex] === undefined) {
|
|
41023
41104
|
newIndex =
|
|
41024
41105
|
e.key === jodit_core_constants__WEBPACK_IMPORTED_MODULE_0__.KEY_UP
|
|
41025
41106
|
? Math.floor(chars.length /
|
|
41026
|
-
self.
|
|
41027
|
-
self.
|
|
41107
|
+
self.__countInRow) *
|
|
41108
|
+
self.__countInRow +
|
|
41028
41109
|
jIndex
|
|
41029
41110
|
: jIndex;
|
|
41030
41111
|
if (newIndex > chars.length - 1) {
|
|
41031
|
-
newIndex -= self.
|
|
41112
|
+
newIndex -= self.__countInRow;
|
|
41032
41113
|
}
|
|
41033
41114
|
}
|
|
41034
41115
|
chars[newIndex] && chars[newIndex].focus();
|