update TinyMCE to 7.5.1

This commit is contained in:
Daniel Seifert 2024-12-02 15:07:09 +01:00
parent f8d7ebed0b
commit af82684a1b
162 changed files with 25000 additions and 10568 deletions

View File

View File

@ -29,7 +29,7 @@ $aModule = [
'title' => 'TinyMCE Editor',
'description' => 'TinyMCE 6 integration for O3-Shop, ported to OXID eShop',
'thumbnail' => 'logo.png',
'version' => '1.0.0',
'version' => '1.1.0',
'author' => 'D3 Data Development, O3-Shop, Marat Bedoev',
'url' => 'https://www.o3-shop.com/',
'extend' => [

View File

@ -2,15 +2,531 @@
All notable changes to this project will be documented in this file.
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html),
and is generated by [Changie](https://github.com/miniscruff/changie).
## Unreleased
## 7.5.0 - 2024-11-06
### Added
- Added support for using raw CSS in the list of possible colours, using the `color_map_raw` property. #GH-9788
### Improved
- Improved color picker aria support. #TINY-11291
### Fixed
- Autocompleter would not activate after applying an inline format like font size in some cases. #TINY-11273
- The `toolbar-sticky-offset` would still be applied after entering fullscreen mode. #TINY-11137
- Text and background color toolbar buttons would not be fully greyed out in readonly mode. #TINY-11313
- Closing a nested modal dialog would lose focus from the editor. #TINY-11153
- Inability to type '{' character on German keyboard layouts. #TINY-11395
## 7.4.1 - 2024-10-10
### Fixed
- Invalid HTML elements within SVG elements were not removed. #TINY-11332
## 7.4.0 - 2024-10-09
### Added
- New `context` property for all ui components. This allows buttons and menu items to be enabled or disabled based on whether their context matches a given predicate; status updates are checked on `init`, `NodeChange`, and `SwitchMode` events. #TINY-11211
- Tree component now allows the addition of a custom icon. #TINY-11131
- Added focus function to view button api. #TINY-11122
- New option `allow_mathml_annotation_encodings` to opt-in to keep math annotations with specific encodings. #TINY-11166
- Added global `color-active` LESS variable for use in editor skins. #TINY-11266
### Improved
- In read-only mode the editor now allows normal cursor movement and block element selection, including video playback. #TINY-11264
- Pasting a table now places the cursor after the table instead of into the last cell. #TINY-11082
- Dialog list dropdown menus now close when the browser window resizes. #TINY-11123
### Fixed
- Mouse hover on partially visible dialog collection elements no longer scrolls. #TINY-9915
- Caret would unexpectedly shift to the non-editable table row above when pressing Enter. #TINY-11077
- Deleting a selection in a list element would sometimes prevent the `input` event from being dispatched. #TINY-11100
- Placing the cursor after a table with a br after it would misplace added newlines before the table instead of after. #TINY-11110
- Sidebar could not be toggled until the skin was loaded. #TINY-11155
- The image dialog lost focus after closing an image upload error alert. #TINY-11159
- Copying tables to the clipboard did not correctly separate cells and rows for the "text/plain" MIME type. #TINY-10847
- The editor resize handle was incorrectly rendered when all components were removed from the status bar. #TINY-11257
## 7.3.0 - 2024-08-07
### Added
- Colorpicker number input fields now show an error tooltip and error icon when invalid text has been entered. #TINY-10799
- New `format-code` icon. #TINY-11018
### Improved
- When a full document was loaded as editor content the head elements were added to the body. #TINY-11053
### Fixed
- Unnecessary nbsp entities were inserted when typing at the edges of inline elements. #TINY-10854
- Fixed JavaScript error when inserting a table using the context menu by adjusting the event order in `renderInsertTableMenuItem`. #TINY-6887
- Notifications didn't position and resize properly when resizing the editor or toggling views. #TINY-10894
- The pattern commands would execute even if the command was not enabled. #TINY-10994
- Split button popups were incorrectly positioned when switching to fullscreen mode if the editor was inside a scrollable container. #TINY-10973
- Sequential html comments would in some cases generate unwanted elements. #TINY-10955
- The listbox component had a fixed width and was not a responsive ui element. #TINY-10884
- Prevent default mousedown on toolbar buttons was causing misplaced focus bugs. #TINY-10638
- Attempting to use focus commands on an editor where the cursor had last been in certain contentEditable="true" elements would fail. #TINY-11085
- Colorpicker's hex-based input field showed the wrong validation error message. #TINY-11115
## 7.2.1 - 2024-07-03
### Fixed
- Text content could move unexpectedly when deleting a paragraph. #TINY-10590
- Cursor would shift to the start of the editor body when focus was shifted to a noneditable cell of a table. #TINY-10127
- Long translations of the bottom help text would cause minor graphical issues. #TINY-10961
- Open Link button was disabled when selection partially covered a link or when multiple links were selected. #TINY-11009
## 7.2.0 - 2024-06-19
### Added
- Added `options.debug` API that logs the initial raw editor options to console. #TINY-10605
- Added `referrerpolicy` as a valid attribute for an iframe element. #TINY-10374
- New `onInit` and `stretched` properties to the `HtmlPanel` dialog component. #TINY-10900
- Added support for querying the state of the `mceTogglePlainTextPaste` command. #TINY-10938
- Added `for` option to dialog label components to improve accessibility. The value must be another component on the same dialog. #TINY-10971
### Improved
- Dialog slider components now emit an onChange event when using arrow keys. #TINY-10428
- Accessibility for element path buttons, added tooltip to describe the button and removed incorrect `aria-level` attribute. #TINY-10891
- Improve merging of inserted inline elements by removing nodes with redundant inheritable styles. #TINY-10869
- Improved Find & Replace dialog accessibility by changing placeholders to labels. #TINY-10871
### Changed
- Replaced tiny branding logo with `Build with TinyMCE` text and logo. #TINY-11001
### Fixed
- Deleting in a `div` with preceeding `br` elements would sometimes throw errors. #TINY-10840
- `autoresize_bottom_margin` was not reliably applied in some situations. #TINY-10793
- Fixed cases where adding a newline around a br, table or img would not move the cursor to a new line. #TINY-10384
- Focusing on `contenteditable="true"` element when using `editable_root: false` and inline mode causing selection to be shifted. #TINY-10820
- Corrected the `role` attribute on listbox dialog components to `combobox` when there are no nested menu items. #TINY-10807
- HTML entities that were double decoded in `noscript` elements caused an XSS vulnerability. #TINY-11019
- It was possible to inject XSS HTML that was not matching the regexp when using the `noneditable_regexp` option. #TINY-11022
## 7.1.2 - 2024-06-05
### Fixed
- CSS color values set to `transparent` were incorrectly converted to '#000000`. #TINY-10916
## 7.1.1 - 2024-05-22
### Fixed
- Insert/Edit image dialog lost focus after the image upload completed. #TINY-10885
- Deleting into a list from a paragraph that has an `img` tag could cause extra inline styles to be added. #TINY-10892
- Resolved an issue where emojis configured with the `emojiimages` database were not loading correctly due to a broken CDN. #TINY-10878
- Iframes in dialogs were not rendering rounded borders correctly. #TINY-10901
- Autocompleter possible values are no longer capped at a length of 10. #TINY-10942
## 7.1.0 - 2024-05-08
### Added
- Parser support for math elements. #TINY-10809
- New `math-equation` icon. #TINY-10804
### Improved
- Included `itemprop`, `itemscope` and `itemtype` as valid HTML5 attributes in the core schema. #TINY-9932
- Notification accessibility improvements: added tooltips, keyboard navigation and shortcut to focus on notifications. #TINY-6925
- Removed `aria-pressed` from the `More` button in sliding toolbar mode and replaced it with `aria-expanded`. #TINY-10795
- The editor UI now renders correctly in Windows High Contrast Mode. #TINY-10781
### Fixed
- Backspacing in certain html setups resulted in data moving around unexpectedly. #TINY-10590
- Dialog title markup changed to use an `h1` element instead of `div`. #TINY-10800
- Dialog title was not announced in macOS VoiceOver, dialogs now use `aria-label` instead of `aria-labelledby` on macOS. #TINY-10808
- Theme loader did not respect the suffix when it was loading skin CSS files. #TINY-10602
- Custom block elements with colon characters would throw errors. #TINY-10813
- Tab navigation in views didn't work. #TINY-10780
- Video and audio elements could not be played on Safari. #TINY-10774
- `ToggleToolbarDrawer` command did not toggle the toolbar in `sliding` mode when `{skipFocus: true}` parameter was passed. #TINY-10726
- The buttons in the custom view header were clipped on when overflowing. #TINY-10741
- In the custom view, the scrollbar of the container was not visible if its height was greater than the editor. #TINY-10741
- Fixed accessibility issue by removing duplicate `role="menu"` attribute from color swatches. #TINY-10806
- Fullscreen mode now prevents focus from leaving the editor. #TINY-10597
- Open link context menu action did not work with selection surrounding a link. #TINY-10391
- Styles were not retained when toggling a list on and off. #TINY-10837
- Caret and placeholder text were invisible in Windows High Contrast Mode. #TINY-9811
- Firefox did not announce the iframe title when `iframe_aria_text` was set. #TINY-10718
- Notification width was not constrained to the width of the editor. #TINY-10886
- Open link context menu action was not enabled for links on images. #TINY-10391
## 7.0.1 - 2024-04-10
### Fixed
- Toggle list behavior generated wrong html when the `forced_root_block` option was set to `div`. #TINY-10488
- Tapping inside a composed text on Firefox Android would not close the autocompleter. #TINY-10715
- An inline editor toolbar now behaves correctly in horizontally scrolled containers. #TINY-10684
- Tooltips unintended shrinking and incorrectly positioned when shown in horizontally scrollable container. #TINY-10797
- The status bar was invisible when the editor's height is short. #TINY-10705
## 7.0.0 - 2024-03-20
### Added
- New `license_key` option that must be set to `gpl` or a valid license key. #TINY-10681
- New custom tooltip functionality, tooltip will be shown when hovering with a mouse or with keyboard focus. #TINY-9275
- New `sandbox_iframes_exclusions` option that holds a list of URL host names to be excluded from iframe sandboxing when `sandbox_iframes` is set to `true`. #TINY-10350
- Added 'getAllEmojis' api function to the emoticons plugin. #TINY-10572
- Element preset support for the `valid_children` option and Schema.addValidChildren API. #TINY-9979
- A new `trigger` property for block text pattern configurations, allowing pattern activation with either Space or Enter keys. #TINY-10324
- onFocus callback for CustomEditor dialog component. #TINY-10596
- icons for the import from Word, export to Word and export to PDF premium plugins. #TINY-10612
- `data` is now a valid element in the Schema. #TINY-10611
- More advanced schema config for custom elements. #TINY-9980
- Custom tooltip for autocompleter, now visible on both mouse hover and keyboard focus, except single column cases. #TINY-9638
### Improved
- Included keyboard shortcut in custom tooltip for `ToolbarButton` and `ToolbarToggleButton`. #TINY-10487
- Improved showing which element has focus for keyboard navigation. #TINY-9176
- Custom tooltips will now show for items in `collection` which is rendered inside a dialog, on mouse hover and keyboard focus. #TINY-9637
- Autocompleter will now work with IMEs. #TINY-10637
- Make table ghost element better reflect height changes when resizing. #TINY-10658
### Changed
- TinyMCE is now licensed GPL Version 2 or later. #TINY-10578
- `convert_unsafe_embeds` editor option is now defaulted to `true`. #TINY-10351
- `sandbox_iframes` editor option is now defaulted to `true`. #TINY-10350
- The DOMUtils.isEmpty API function has been modified to consider nodes containing only comments as empty. #TINY-10459
- The `highlight_on_focus` option now defaults to true, adding a focus outline to every editor. #TINY-10574
- Delay before the tooltip to show up, from 800ms to 300ms. #TINY-10475
- Now `tox-view__pane` has `position: relative` instead of `static`. #TINY-10561
- Update outbound link for statusbar Tiny logo #TINY-10494
- Remove the height field from the `table` plugin cell dialog. The `table` plugin row dialog now controls the row height by setting the height on the `tr` element, not the `td` elements. #TINY-10617
- Change table height resizing handling to remove heights from `td`/`th` elements and only apply to `tr` elements. #TINY-10589
- Removed incorrect `aria-placeholder` attribute from editor body when `placeholder` option is set. #TINY-10452
- The `tooltip` property for dialog's footer `togglebutton` is now optional. #TINY-10672
- Changed the `media_url_resolver` option to use promises. #TINY-9154
- `Styles` bespoke toolbar button fallback changed to `Formats` if `Paragraph` is not configured in `style_formats` option. #TINY-10603
- Updated deprecation/removed console message. #TINY-10694
### Removed
- Deprecated `force_hex_color` option, with the default now being all colors are forced to hex format as lower case. #TINY-10436
- Deprecated `remove_trailing_brs` option from DomParser. #TINY-10454
- `title` attribute on buttons with visible label. #TINY-10453
- `InsertOrderedList` and `InsertUnorderedList` commands from core, these now only exist in the `lists` plugin. #TINY-10644
- `closeButton` from the notification API, close buttons in notifications are now required. #TINY-10646
- The autocompleter `ch` configuration property has been removed. Use the `trigger` property instead. #TINY-8929
- Deprecated `template` plugin. #TINY-10654
### Fixed
- When deleting the last row in a table, the cursor would jump to the first cell (top left), instead of moving to the next adjacent cell in some cases. #TINY-6309
- Heading formatting would be partially applied to the content within the `summary` element when the caret was positioned between words. #TINY-10312
- Moving focus to the outside of the editor after having clicked a menu would not fire a `blur` event as expected. #TINY-10310
- Autocomplete would sometimes cause corrupt data when starting during text composition. #TINY-10317
- Inline mode with persisted toolbar would show regardless of the skin being loaded, causing css issues. #TINY-10482
- Table classes couldn't be removed via setting an empty value in `table_class_list`. Also fixed being forced to pick the first class option. #TINY-6653
- Directly right clicking on a ol's li in FireFox didn't enable the button `List Properties...` in the context menu. #TINY-10490
- The `link_default_target` option wasn't considered when inserting a link via `quicklink` toolbar. #TINY-10439
- When inline editor toolbar wrapped to multiple lines the top wasn't always calculated correctly. #TINY-10580
- Removed manually dispatching dragend event on drop in Firefox. #TINY-10389
- Slovenian help dialog content had a dot in the wrong place. #TINY-10601
- Pressing Backspace at the start of an empty `summary` element within a `details` element nested in a list item no longer removes the `summary` element. #TINY-10303
- The toolbar width was miscalculated for the inline editor positioned inside a scrollable container. #TINY-10581
- Fixed incorrect object processor for `event_root` option. #TINY-10433
- Adding newline after using `selection.setContent` to insert a block element would throw an unhandled exception. #TINY-10560
- Floating toolbar buttons in inline editor incorrectly wrapped into multiple rows on window resizing or zooming. #TINY-10570
- When setting table border width and `table_style_by_css` is true, only the border attribute is set to 0 and border-width styling is no longer used. #TINY-10308
- Clicking to the left or right of a non-editable div in Firefox would show two cursors. #TINY-10314
## 6.8.3 - 2024-02-08
### Changed
- Update outbound TinyMCE website links. #TINY-10491
### Fixed
- The floating toolbar would not be fully visible when the editor was placed inside a scrollable container. #TINY-10335
- ShadowDOM skin was not loaded properly when used with js bundling feature. #TINY-10451
## 6.8.2 - 2023-12-11
### Fixed
- Bespoke select toolbar buttons including `fontfamily`, `fontsize`, `blocks`, and `styles` incorrectly used plural words in their accessible names. #TINY-10426
- The `align` bespoke select toolbar button had an accessible name that was misleading and grammatically incorrect in certain cases. #TINY-10435
- Accessible names of bespoke select toolbar buttons including `align`, `fontfamily`, `fontsize`, `blocks`, and `styles` were incorrectly translated. #TINY-10426 #TINY-10435
- Clicking inside table cells with heavily nested content could cause the browser to hang. #TINY-10380
- Toggling a list that contains an LI element having another list as its first child would remove the remaining content within that LI element. #TINY-10414
## 6.8.1 - 2023-11-29
### Improved
- Colorpicker now includes the Brightness/Saturation selector and hue slider in the keyboard navigable items. #TINY-9287
### Fixed
- Translation syntax for announcement text in the table grid was incorrectly formatted. #TINY-10141
- The functions `schema.isWrapper` and `schema.isInline` did not exclude node names that started with `#` which should not be considered as elements. #TINY-10385
## 6.8.0 - 2023-11-22
### Added
- CSS files are now also generated as separate JS files to improve bundling of all resources. #TINY-10352
- Added new `StylesheetLoader.loadRawCss` API that can be used to load CSS into a style element. #TINY-10352
- Added new `StylesheetLoader.unloadRawCss` API that can be used to unload CSS that was loaded into a style element. #TINY-10352
- Added `force_hex_color` editor option. Option `'always'` converts all RGB & RGBA colours to hex, `'rgb_only'` will only convert RGB and *not* RGBA colours to hex, `'off'` won't convert any colours to hex. #TINY-9819
- Added `default_font_stack` editor option that makes it possible to define what is considered a system font stack. #TINY-10290
- New `sandbox_iframes` option that controls whether iframe elements will be added a `sandbox=""` attribute to mitigate malicious intent. #TINY-10348
- New `convert_unsafe_embeds` option that controls whether `<object>` and `<embed>` elements will be converted to more restrictive alternatives, namely `<img>` for image MIME types, `<video>` for video MIME types, `<audio>` audio MIME types, or `<iframe>` for other or unspecified MIME types. #TINY-10349
### Improved
- Improved the tooltips of picker buttons for the urlinput components in the "Insert/Edit Image" and "Insert/Edit Link" dialogs. #TINY-10155
- Inline dialog will now respect `size: 'large'` argument in the dialog spec. #TINY-10209
- SVG elements and their children are now retained when configured as valid elements. #TINY-10237
- Bespoke select toolbar buttons including `align`, `fontfamily`, `fontsize`, `blocks`, and `styles` did not include their visible text labels in their accessible names. #TINY-10147
### Fixed
- Editor would convert urls that are not http/s or relative resulting in broken links. #TINY-10153
- Calling the `setProgressState` API would cause the window to be scrolled when the editor wasn't fully visible. #TINY-10172
- Applying heading formatting to the content of the `summary` element extended its application to the content of the parent `details` element. #TINY-10154
- Setting the content with an attribute that contains a self-closing HTML tag did not preserve the tag. #TINY-10088
- Screen readers now announce the selected color of `forecolor` and `backcolor` buttons. #TINY-9796
- Resize handles would not appear on editable images in a non-editable context. #TINY-10118
- Corrections and copy-edits to the `addIcon` API documentation. #TINY-10230
- The dialog size was not updated when the `size` argument was changed when redialling a dialog. #TINY-10209
- Toggling a list that contains an LI element having another list as its first child would remove the remaining content within that LI element. #TINY-10213
- Custom block element wasn't considered block element in some cases. #TINY-10139
- The editor no longer forcefully takes focus when a notification closes while the focus is outside of the editor. #TINY-10282
- An empty element with a `contenteditable="true"` attribute within a table cell would not be treated as content and get removed if backspace or delete was being pressed. #TINY-10010
- Removing an LI element containing a `details` element would incorrectly merge its content. #TINY-10133
- The function `getModifierState` did not work on events passed through the editor as expected. #TINY-10263
- Search and replace plugin would incorrectly find matching text inside non-editable root elements. #TINY-10162
- Removed use of `async` for editor rendering which caused visual blinking when reloading the editor in-place. #TINY-10249
- Toggling off one format on the caret when multiple formats was toggled on would toggle all of them off. #TINY-10132
- Merging an external `p` inside a `list` via delete or backspace would incorrectly try to move a parent element inside a child element. #TINY-10289
- Directionality would not be consistently applied to the entire `accordion` block. #TINY-10291
- The `fontsizeinput` toolbar item was causing console warnings when toolbar items were clicked. #TINY-10330
- Menubar buttons with more than one word would sometimes wrap into two lines. #TINY-10343
- Creating a new `li` via enter inside a nested list would not inherit styles from the source `li`. #TINY-10316
- Screen readers now announce the active autocompleter item. #TINY-9393
- Dialog collection items would not display any icons chosen from icon pack. #TINY-10174
## 6.7.3 - 2023-11-15
### Changed
- Zero width no-break space (U+FEFF) characters are removed from content passed to `setContent`, `insertContent`, and `resetContent` APIs. #TINY-10305
- Zero width no-break space (U+FEFF) characters in initial content are not loaded into the editor upon initialization. #TINY-10305
### Fixed
- Specific HTML content containing unescaped text nodes caused mXSS when using undo/redo. #TINY-10305
- Specific HTML content containing unescaped text nodes caused mXSS when using the `getContent` and `setContent` APIs with the `format: 'raw'` option, which also affected the `resetContent` API and the draft restoration feature of the Autosave plugin. #TINY-10305
## 6.7.2 - 2023-10-25
### Fixed
- The function `getModifierState` did not work on events passed through the editor as expected. #TINY-10263
- Removed use of `async` for editor rendering which caused visual blinking when reloading the editor in-place. #TINY-10249
- Toggling a list that contains an LI element having another list as its first child would remove the remaining content within that LI element. #TINY-10213
- List items containing a list element surrounded by non list nodes would cause some list operations to fail. #TINY-10268
- The `accordion` toggling with the Enter key press would behave incorrectly on Safari. #TINY-10177
- Deleting a range that included both text of a cell and a nested table in that cell removed the entire content of the cell. #TINY-10254
## 6.7.1 - 2023-10-19
### Fixed
- Specific HTML content caused mXSS when using undo/redo. #TINY-10180
- Specific HTML content caused mXSS when using the `getContent` and `setContent` APIs with the `format: 'raw'` option, which also affected the `resetContent` API and the draft restoration feature of the Autosave plugin. #TINY-10236
- Notification messages containing HTML were not properly XSS sanitized before being displayed. #TINY-10286
## 6.7.0 - 2023-08-30
### Added
- New `help_accessibility` option displays the keyboard shortcut to open the in-application help in the status bar. #TINY-9379
- Added a new `InsertNewBlockBefore` command which inserts an empty block before the block containing the current selection. #TINY-10022
- Added a new `InsertNewBlockAfter` command which inserts an empty block after the block containing the current selection. #TINY-10022
### Improved
- Adding a newline after a table would, in some specific cases, not work. #TINY-9863
- Menus now have a slight margin at the top and bottom to more clearly separate them from the frame edge. #TINY-9978
- Updated **More** toolbar button tooltip text from *More...* to *Reveal or hide additional toolbar items*. #TINY-9629
- Where multiple case sensitive variants of a translation key are provided, they will now all be preserved in the translation object instead of just the lowercase variant. #TINY-10115
- Improved screen reader announcements of the column and row selection in the grid presented by the **Table** menu and toolbar item. #TINY-10140
- Improved the keyboard focus visibility for links inside dialogs. #TINY-10124
### Changed
- Change `UndoLevelType` from `enum` to union type so that it is easier to use. #TINY-9764
- The pattern replacement removed spaces if they were contained within a tag that only contained a space and the text to replace. #TINY-9744
- If loading content CSS takes more than 500ms, the editor will be set to an *in progress* state until the CSS is ready. #TINY-10008
### Fixed
- Applying an ordered or unordered list to a selected checklist incorrectly turned the list into paragraphs. #TINY-9975
- Returning an empty string in a custom context menu update function resulted in a small white line appearing on right-click and the browser-native context menu would not present. #TINY-9842
- For sufficiently long URLs and sufficiently wide windows, URL autocompletion hid middle portions of the URL from view. #TINY-10017
- Numeric input in toolbar items did not disable when a switching from edit to read-only mode. #TINY-10129
- The Quick Toolbars plugin showed text alignment buttons on pagebreaks. #TINY-10054
- Creating lists in empty blocks sometimes, and incorrectly, converted adjacent block elements into list items. #TINY-10136
- Creating a list from multiple `<div>` elements only created a partial list. #TINY-9872
- Tab navigation incorrectly stopped around `iframe` dialog components. #TINY-9815
- It was possible to delete the sole empty block immediately before a `<details>` element if it was nested within another `<details>` element. #TINY-9965
- Deleting `<li>` elements that only contained `<br>` tags sometimes caused a crash. #TINY-6888
- It was possible to remove the `<summary>` element from a `<details>` element by dragging and dropping. #TINY-9960
- It was possible to break `<summary>` elements if content containing block elements was dragged-and-dropped inside them. #TINY-9960
- Contents were not removed from the drag start source if dragging and dropping internally into a transparent block element. #TINY-9960
- Using the Media plugin unexpectedly changed `<script>` tags in the editor body to `<image>` tags. #TINY-10007
- In some circumstances, pressing the **Enter** key scrolled the entire page. #TINY-9828
- The border styles of a table were incorrectly split into a longhand form after table dialog updates. #TINY-9843
- Links in **Help → Help → Plugins** and **Help → Help → Version** were not navigable by keyboard. #TINY-10071
- Fixed the inability to insert content next to the `<details>` element when it is the first or last content element. Pressing the **Up** or **Down** arrow key now inserts a block element before or after the `<details>` element. #TINY-9827
- An empty element with a `contenteditable="true"` attribute within a noneditable root was deleted when the Backspace key was pressed. #TINY-10011
- The `color_cols` option was not respected when set to the value 5 with a custom `color_map` specified. #TINY-10126
- In Safari on macOS, deleting backwards within a `<summary>` element removed the entire `<details>` element if it had no other content. #TINY-10123
## 6.6.2 - 2023-08-09
### Fixed
- An "Uncaught TypeError: Cannot read properties of null" error would sometimes be thrown when updating the content of a `streamContent: true` iframe dialog component. #TINY-10128
## 6.6.1 - 2023-08-02
### Added
- Restored filtering option, `pad_empty_with_br`. Set to `true` to pad empty block elements with `<br>` tags instead of the `&nbsp;` character entity. #TINY-9861
### Improved
- When Safari is the host browser, content updates for iframe dialog components with `streamContent: true` set are now throttled to 500ms intervals. #TINY-10097
### Changed
- API comments/documentation: a markup typo and run-on sentences both corrected. #TINY-10073
### Fixed
- On Safari and Firefox, scroll positions were not always maintained when updating the content of a `streamContent: true` iframe dialog component. #TINY-10078
- On Safari, iframe dialog components did not consistently autoscroll to the end of the scrollable area when `streamContent: true` was set. #TINY-10109
- Scrolling behavior was inconsistent when updating a `streamContent: true` iframe dialog component with content lacking an HTML document type declaration. #TINY-10110
- A warning message was sometimes printed to the browser console when closing a dialog that contained an iframe component. #TINY-10070
- Lists could not be created within editable areas nested inside non-editable areas. #TINY-10000
- On Safari and Firefox, the border around `iframe` dialog components did not highlight when focused. #TINY-10101
- Right-clicking on an image in a non-editable context opened the Image context menu. #TINY-10016
- The `color_cols` option was not respected when a custom `color_map` was defined. #TINY-10098
- The `color_cols` options were were not rounded to the nearest number when set to a decimal number. #TINY-9737
## 6.6.0 - 2023-07-12
### Added
- Added a new property value — `bottom` — for inline dialog configurations that anchors the dialog to the bottom of the editor. #TINY-9888
- Added a new property — `persistent` for inline dialog configurations that will stop the dialog closing when clicking away from it. #TINY-9991
- New `ai`, `ai-prompt` and `send` icons. #TINY-9942
- Added a new property — `streamContent` — for the `iframe` dialog component. This causes `setData()` to update content without reloading the frame, and end scroll positions will be maintained as new content streams in. #TINY-10032
- AI Assistant plugin toolbar items added to the default toolbar and AI Assistant plugin menu items added to the default menu bar. #TINY-9939
- Added a new property — `border` — for the `iframe` dialog component that allows a border to be added. #TINY-10049
- Added a new property — `align` for the label dialog component that controls text alignment. #TINY-10058
### Improved
- When defining a modal or inline dialog, if the buttons property is an empty array, or is not defined at all, the footer will now no longer be rendered. #TINY-9996
- The `iframe` dialog component now has a minimum height of 200px. #TINY-10059
- Improved detection of scrollable containers when the `ui_mode: 'split'` option is set. #TINY-9385
### Changed
- The icon in an `alertbanner` dialog component is no longer clickable if the _URL_ field is not specified. #TINY-10013
### Fixed
- Fixed an issue that caused the inline dialog `size` setting to have no effect. #TINY-10015
- Fixed an issue that prevented the close button from being clicked when the dialog was blocked. #TINY-10056
## 6.5.1 - 2023-06-19
### Fixed
- Fixed a regression where pasting an image url would result in the url being inserted as plain text instead of the image being inserted. #TINY-9997
- It was not possible to press space to insert a space character inside a summary element on Firefox. #TINY-9964
## 6.5.0 - 2023-06-12
### Added
- Support for the `h` hash parameter in Vimeo video URLs in the Media plugin. #TINY-9830
- New `table_merge_content_on_paste` option which disables the merging behaviour when pasting a table inside an existing table. #TINY-9808
- New optional `defaultExpandedIds` and `onToggleExpand` options to the `tree` component config. #TINY-9653
- New optional `defaultSelectedId` option to the `tree` component config. #TINY-9715
- New `accordion` plugin with the `InsertAccordion` command. #TINY-9730
- New `accordion` and `accordion-toggle` icons. #TINY-9789
- New `details_initial_state` and `details_serialized_state` options. #TINY-9732
- New `init_content_sync` option that initializes the editor iframe using `document.write` instead of `srcdoc`. #TINY-9818
- New `newdocument_content` option that sets the content presented in the editor on choosing *File -> New document* or pressing the *New document* toolbar button. #TINY-9839
- New `editable_root` option that can be set to `false` to prevent editing of the editors root element. #TINY-9839
- New `editor.setEditableRoot` API that sets the editable state of the editor root element. #TINY-9839
- New `editor.hasEditableRoot` API that returns `true` or `false` depending on the editable state of the editor root element. #TINY-9839
- New `EditableRootStateChange` event that gets dispatched when the state of the editable root is changed. #TINY-9839
- Added Oxide styles for `dl`, `dt`, `dd`, `ol`, and `strong` elements in dialog body content. #TINY-9919
### Improved
- Screen readers can now announce highlighted items listed in the Link dialogs link combobox. #TINY-9280
- The `icon` field for a dialogs footer `togglebutton` is no longer mandatory. #TINY-9757
- Toolbar buttons and menu items now present as disabled when they cannot be used because a selected element has a `contenteditable="false"` attribute. #TINY-9669
- Help text displayed at *Help -> Help -> Keyboard Navigation* re-written. #DOC-1936
- Translations added for Help text displayed at *Help > Help > Keyboard Navigation*. #TINY-9633
- For word count purposes these characters are now considered punctuation marks: *$*, *~*, *+*, *|*, *№*, and *`*. They no longer increase a documents word count. #TINY-8122
- Updated the `codesample` plugin dialog and the `template` plugin dialog to use the `listbox` component to match other dialogs. #TINY-9630
- If the selection contains more than one table cell, Quickbar toolbars are now positioned in the middle of the selection horizontally. #TINY-8297
- Exposed `dataTransfer` property of drag and drop events for elements with a `contenteditable="false"` attribute. #TINY-9601
- Screen readers now announce instructions for resizing the editor using arrow keys, when the resize handle is focused. #TINY-9793
- Dialog `tabpanel` tab labels are now allowed to word wrap for better readability with long labels. #TINY-9947
- Added newlines before and after `details` elements in the output HTML. #TINY-9959
- Added padding for empty `summary` elements so that they can be properly edited. #TINY-9959
### Changed
- The `caption`, `address` and `dt` elements no longer incorrectly allow non-inline child elements when the editor schema is set to _HTML 4_. #TINY-9768
- SVG icons for back and foreground colors now use `class` instead of `id` to identify SVG elements that should change color. #TINY-9844
- Anchor tag elements — `<a>` — no longer incorrectly allow non-inline child elements when the editor schema is set to _HTML 4_. #TINY-9805
- Help dialog was restored to `medium` width for better readability. #TINY-9947
### Fixed
- Right-clicking on a merge tag instance presented different highlighting depending on the host browser. #TINY-9848
- When macOS was the host operating system, pressing *Command+backspace* did not add an undo level. #TINY-8910
- *Ctrl+backspace* and *Ctrl+delete* did not restore the correct insertion point position after a redo operation. #TINY-8910
- In the `tree` component, a selected item in a directory would not stay selected after collapsing the directory. #TINY-9715
- Enabling or Disabling checkboxes would not set the correct classes and attributes. #TINY-4189
- Entering a newline would, in some setups, place the insertion point in the wrong paragraph. #TINY-9822
- Redial would, in some situations, cause select elements not to have an initial value selected when they should have. #TINY-9679
- The Table toolbar was visible even if the table was within a host element with a `contenteditable="false"` attribute set. #TINY-9664
- Quickbar toolbars were incorrectly shown for elements with a `contenteditable="false"` attribute set in a root with a `contenteditable="false"` attribute set. #TINY-9460
- When Chrome was the host browser, adding a newline when the insertion point was placed after a table could, in some specific situations, not generate the expected newline. #TINY-9813
- Show the calculated height and width of Media Embed elements in the `media` plugin dialog. #TINY-8714
- Removing an image that failed to upload from an empty paragraph left the paragraph without a padding `<br>` tag. #TINY-9696
- Allow a Media Embed element to be correctly resized when using the `media` plugin dialog by converting the Media Embed element to a standalone iframe. #TINY-8714
- In some circumstances, an inline alert in the _Search and Replace_ dialog persisted when it was not necessary. #TINY-9704
- Context toolbars displayed the incorrect status for the `advlist` plugin buttons. #TINY-9680
- In Safari running on iOS, Korean characters merged onto the previous line upon typing after inserting a newline by pressing Enter. #TINY-9746
- Initiating the editor with a table as the first element resulted in resize handles being displayed around the table even when the editor did not have focus. #TINY-9748
- If the insertion point was between two images, pressing the Backspace key would, in some situations, delete the image after the insertion point instead of the image before the insertion point. #TINY-9807
- Directionality commands could set the `dir` attribute on elements with a `contenteditable="false"` attribute set when these elements were within a root with a `contenteditable="false"` attribute set. #TINY-9662
- The content of the dialog body could not be scrolled. #TINY-9668
- Some toolbar items, when in a not-enabled state, did not render the `not-allowed` mouse pointer. #TINY-9758
- Formats were incorrectly applied to the closest editable element if the selection was in a `contenteditable="false"` context. #TINY-9678
- Formats were incorrectly removed from the closest editable element if the selection was in a `contenteditable="false"` context. #TINY-9678
- Formatter API, `canApply`, was not returning `false` when the selection was in a `contenteditable="false"` context. #TINY-9678
- When dragging image elements and dropping the image in the editor the `dragend` event would sometimes not fire when Firefox was the host browser. #TINY-9694
- It was possible to remove links in noneditable contents with the `unlink` editor command. #TINY-9739
- Direction was not visually changing when using the Directionality plugin on an element which had the `direction` CSS property set. #TINY-9314
- Whitespace between transparent elements was incorrectly converted into empty paragraphs. #TINY-9761
- Popups were not constrained within the scrollable container when in a shadow root. #TINY-9743
- Pressing arrow keys inside RTL elements would move the insertion point in an incorrect direction when moving over elements with the `contenteditable` attribute set to `false`. #TINY-9565
- Inserting two tables consecutively without focus in the editor resulted in the second table being inserted at the wrong position. #TINY-3909
- Pasting content into the editor did not fire `beforeinput` and `input` events. #TINY-9829
- In some cases, exiting a `blockquote` element could fail when the insertion point was positioned at the end of the `blockquote`. #TINY-9794
- Templates containing an `<html>` tag were not parsed before being rendered for preview. #TINY-9867
- Typing after deleting formatted content could remove a space at the start of the typing. #TINY-9310
- Invalid markup in Notification and Dialog close buttons. #TINY-9849
- In dialogs, an incorrect `aria-describedby` attribute caused the dialog body to be announced when using a screen reader. #TINY-9816
- The sticky toolbar did not render correctly when transitioning from the custom editor view to the main view. #TINY-9814
- Saving the Table Properties dialog after changing properties unrelated to cells would overwrite cell properties set by the Cell Properties dialog. #TINY-9837
- Fixed the constrained bounds calculation for dismissal of the toolbar when using `toolbar_location: 'bottom'`. #TINY-9718
- Pressing the Backspace or Delete key when the insertion point was within a `details` element resulted in broken markup. #TINY-9884
- Making the selection into a list did not work if the selection included a block element with a `contenteditable="false"` attribute. #TINY-9823
- Inserting elements in the middle of the summary caused two summaries to appear within `details` elements. #TINY-9885
## 6.4.2 - 2023-04-26
### Fixed
- The editor displayed a notification error when it failed to retrieve a blob image uri. #TINY-9604
- Tab navigation no longer incorrectly stops at menu buttons within toolbar groups. #TINY-9723
- The `urlinput` dialog component would not open the type-ahead dropdown when the input value was reset to an empty string. #TINY-9717
- Redial would, in some circumstances, cause elements to not have an initial value selected when they should have. #TINY-9679
- When hovering over tree dialog components the mouse pointer rendered incorrectly. #TINY-9692
- The `tox-button` and `tox-button-secondary` buttons now support the `hover`, `active`, `focus`, and `disabled` states. #TINY-9713
- Setting an invalid unit in the `fontsizeinput` changed it to the default value instead of reverting it to the previous, and valid, value. #TINY-9754
- Selection was not correctly scrolled horizontally into view when using the `selection.scrollIntoView` API. #TINY-9747
- The contextual toolbar displayed the status of Advanced List Premium plugin icons incorrectly. #TINY-9680
- The `quickimage` toolbar button failed to insert images selected from the local computer when running on Google Chrome for macOS. #TINY-9769
## 6.4.1 - 2023-03-29
### Fixed
- The `fontsizeinput` increase and decrease size buttons now work on TinyMCE mobile. #TINY-9725
- The TinyMCE editor toolbar is now accessible for all editor widths; it no longer collapses into an inaccessible vertical line at any presented editor width. #TINY-9646
- The TinyMCE editor toolbar is now accessible for all screen widths; it no longer collapses into an inaccessible vertical line when the screen is scrolled horizontally. #TINY-9646
- Reverted the changes made, in TinyMCE 6.4.0, to UI button colors in focus, active, and enabled states. #TINY-9176
## 6.4.0 - 2023-03-15
@ -97,6 +613,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
- Opening a menu button in the footer of a dialog after a redial threw an error. #TINY-9686
- After closing a view, the `more...` toolbar button disappeared if the editor had `toolbar_mode: 'sliding'` and the toolbar was opened. #TINY-9419
- Inline dialogs would open partially off screen when the toolbar had a small width. #TINY-9588
- The `autoresize` plugin would cause infinite resizing when `content_css` was set to `document`. #TINY-8872
## 6.3.2 - 2023-02-22
@ -151,7 +668,6 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
- A newline could not be inserted when the selection was restored from a bookmark after an inline element with a `contenteditable="false"` attribute. #TINY-9194
- The global `tinymce.dom.styleSheetLoader` was not affected by the `content_css_cors` option. #TINY-6037
- The caret was moved to the previous line when a text pattern executed a `mceInsertContent` command on Enter key when running on Firefox. #TINY-9193
- The `autoresize` plugin used to cause infinite resize when `content_css` is set to `document`. #TINY-8872
## 6.2.0 - 2022-09-08
@ -3147,3 +3663,4 @@ Npm version bump due to package not being fully updated.
- Fixed so images doesn't get a width/height applied if the image_dimensions option is set to false useful for responsive contents.
- Fixed so it's possible to pass in an optional arguments object for the nodeChanged function to be passed to all nodechange event listeners.
- Fixed bug where media plugin embed code didn't update correctly.

View File

@ -2,11 +2,13 @@
The world's #1 open source rich text editor.
**Using an old version of TinyMCE?** We recommend you to upgrade to TinyMCE 7 to continue receiving security updates, or consider [TinyMCE 5 LTS](https://www.tiny.cloud/long-term-support/) if you need more time to upgrade.
Used and trusted by millions of developers, TinyMCE is the worlds most customizable, scalable, and flexible rich text editor. Weve helped launch the likes of Atlassian, Medium, Evernote (and lots more that we cant tell you), by empowering them to create exceptional content and experiences for their users.
With more than 350M+ downloads every year, were also one of the most trusted enterprise-grade open source HTML editors on the internet. Theres currently more than 100M+ products worldwide, powered by Tiny. As a high powered WYSIWYG editor, TinyMCE is built to scale, designed to innovate, and thrives on delivering results to difficult edge-cases.
You can access a [full featured demo of TinyMCE](https://www.tiny.cloud/docs/tinymce/6/premium-full-featured/) in the docs on the TinyMCE website.
You can access a [full featured demo of TinyMCE](https://www.tiny.cloud/docs/tinymce/7/premium-full-featured/) in the docs on the TinyMCE website.
<p align="center">
<img alt="Screenshot of the TinyMCE Editor" src="https://www.tiny.cloud/storage/github-readme-images/tinymce-editor-6x.png"\>
@ -16,17 +18,17 @@ You can access a [full featured demo of TinyMCE](https://www.tiny.cloud/docs/tin
Getting started with the TinyMCE rich text editor is easy, and for simple configurations can be done in less than 5 minutes.
[TinyMCE Cloud Deployment Quick Start Guide](https://www.tiny.cloud/docs/tinymce/6/cloud-quick-start/)
[TinyMCE Cloud Deployment Quick Start Guide](https://www.tiny.cloud/docs/tinymce/7/cloud-quick-start/)
[TinyMCE Self-hosted Deployment Guide](https://www.tiny.cloud/docs/tinymce/6/npm-projects/)
[TinyMCE Self-hosted Deployment Guide](https://www.tiny.cloud/docs/tinymce/7/npm-projects/)
TinyMCE provides a range of configuration options that allow you to integrate it into your application. Start customizing with a [basic setup](https://www.tiny.cloud/docs/tinymce/6/basic-setup/).
TinyMCE provides a range of configuration options that allow you to integrate it into your application. Start customizing with a [basic setup](https://www.tiny.cloud/docs/tinymce/7/basic-setup/).
Configure it for one of three modes of editing:
- [TinyMCE classic editing mode](https://www.tiny.cloud/docs/tinymce/6/use-tinymce-classic/).
- [TinyMCE inline editing mode](https://www.tiny.cloud/docs/tinymce/6/use-tinymce-inline/).
- [TinyMCE distraction-free editing mode](https://www.tiny.cloud/docs/tinymce/6/use-tinymce-distraction-free/).
- [TinyMCE classic editing mode](https://www.tiny.cloud/docs/tinymce/7/use-tinymce-classic/).
- [TinyMCE inline editing mode](https://www.tiny.cloud/docs/tinymce/7/use-tinymce-inline/).
- [TinyMCE distraction-free editing mode](https://www.tiny.cloud/docs/tinymce/7/use-tinymce-distraction-free/).
## Features
@ -38,11 +40,11 @@ TinyMCE is easily integrated into your projects with the help of components such
- [tinymce-vue](https://github.com/tinymce/tinymce-vue)
- [tinymce-angular](https://github.com/tinymce/tinymce-angular)
With over 29 integrations, and 400+ APIs, see the TinyMCE docs for a full list of editor [integrations](https://www.tiny.cloud/docs/tinymce/6/integrations/).
With over 29 integrations, and 400+ APIs, see the TinyMCE docs for a full list of editor [integrations](https://www.tiny.cloud/docs/tinymce/7/integrations/).
### Customization
It is easy to [configure the UI](https://www.tiny.cloud/docs/tinymce/6/customize-ui/) of your rich text editor to match the design of your site, product or application. Due to its flexibility, you can [configure the editor](https://www.tiny.cloud/docs/tinymce/6/basic-setup/) with as much or as little functionality as you like, depending on your requirements.
It is easy to [configure the UI](https://www.tiny.cloud/docs/tinymce/7/customize-ui/) of your rich text editor to match the design of your site, product or application. Due to its flexibility, you can [configure the editor](https://www.tiny.cloud/docs/tinymce/7/basic-setup/) with as much or as little functionality as you like, depending on your requirements.
With [50+ powerful plugins available](https://www.tiny.cloud/tinymce/features/), and content editable as the basis of TinyMCE, adding additional functionality is as simple as including a single line of code.
@ -52,7 +54,7 @@ Realizing the full power of most plugins requires only a few lines more.
Sometimes your editor requirements can be quite unique, and you need the freedom and flexibility to innovate. Thanks to TinyMCE being open source, you can view the source code and develop your own extensions for custom functionality to meet your own requirements.
The TinyMCE [API](https://www.tiny.cloud/docs/tinymce/6/apis/tinymce.root/) is exposed to make it easier for you to write custom functionality that fits within the existing framework of TinyMCE [UI components](https://www.tiny.cloud/docs/tinymce/6/custom-ui-components/).
The TinyMCE [API](https://www.tiny.cloud/docs/tinymce/7/apis/tinymce.root/) is exposed to make it easier for you to write custom functionality that fits within the existing framework of TinyMCE [UI components](https://www.tiny.cloud/docs/tinymce/7/custom-ui-components/).
### Extended Features and Support
@ -69,3 +71,7 @@ As an open source product, we encourage and support the active development of ou
## Want more information?
Visit the [TinyMCE website](https://tiny.cloud/) and check out the [TinyMCE documentation](https://www.tiny.cloud/docs/).
## License
Licensed under the terms of GNU General Public License Version 2 or later. For full details about the license, please check the LICENSE.md file.

View File

@ -1,7 +1,7 @@
{
"name": "tinymce",
"description": "Web based JavaScript HTML WYSIWYG editor control.",
"license": "MIT",
"license": "GPL-2.0-or-later",
"keywords": [
"wysiwyg",
"tinymce",

View File

@ -1,9 +1,9 @@
{
"name": "tinymce/tinymce",
"version": "6.4.1",
"version": "7.5.1",
"description": "Web based JavaScript HTML WYSIWYG editor control.",
"license": [
"MIT-only"
"GPL-2.0-or-later"
],
"keywords": [
"wysiwyg",

View File

@ -1,9 +1,13 @@
tinymce.IconManager.add('default', {
icons: {
'accessibility-check': '<svg width="24" height="24"><path d="M12 2a2 2 0 0 1 2 2 2 2 0 0 1-2 2 2 2 0 0 1-2-2c0-1.1.9-2 2-2Zm8 7h-5v12c0 .6-.4 1-1 1a1 1 0 0 1-1-1v-5c0-.6-.4-1-1-1a1 1 0 0 0-1 1v5c0 .6-.4 1-1 1a1 1 0 0 1-1-1V9H4a1 1 0 1 1 0-2h16c.6 0 1 .4 1 1s-.4 1-1 1Z" fill-rule="nonzero"/></svg>',
'accordion-toggle': '<svg width="24" height="24"><path fill-rule="evenodd" clip-rule="evenodd" d="M12 15c0-.6.4-1 1-1h6c.6 0 1 .4 1 1s-.4 1-1 1h-6a1 1 0 0 1-1-1Z"/><path opacity=".2" fill-rule="evenodd" clip-rule="evenodd" d="M4 15c0-.6.4-1 1-1h6c.6 0 1 .4 1 1s-.4 1-1 1H5a1 1 0 0 1-1-1Z"/><path fill-rule="evenodd" clip-rule="evenodd" d="M12 19c0-.6.4-1 1-1h6c.6 0 1 .4 1 1s-.4 1-1 1h-6a1 1 0 0 1-1-1Z"/><path opacity=".2" fill-rule="evenodd" clip-rule="evenodd" d="M4 19c0-.6.4-1 1-1h6c.6 0 1 .4 1 1s-.4 1-1 1H5a1 1 0 0 1-1-1Z"/><path fill-rule="evenodd" clip-rule="evenodd" d="M12.3 7.3a1 1 0 0 1 1.4 0L16 9.6l2.3-2.3a1 1 0 1 1 1.4 1.4L16 12.4l-3.7-3.7a1 1 0 0 1 0-1.4ZM4.3 11.7a1 1 0 0 1 0-1.4L6.6 8 4.3 5.7a1 1 0 0 1 1.4-1.4L9.4 8l-3.7 3.7a1 1 0 0 1-1.4 0Z"/></svg>',
'accordion': '<svg width="24" height="24"><rect x="12" y="7" width="10" height="2" rx="1"/><rect x="12" y="11" width="10" height="2" rx="1"/><rect x="12" y="15" width="6" height="2" rx="1"/><path fill-rule="evenodd" clip-rule="evenodd" d="M2.3 7.3a1 1 0 0 1 1.4 0L6 9.6l2.3-2.3a1 1 0 0 1 1.4 1.4L6 12.4 2.3 8.7a1 1 0 0 1 0-1.4Z"/></svg>',
'action-next': '<svg width="24" height="24"><path fill-rule="nonzero" d="M5.7 7.3a1 1 0 0 0-1.4 1.4l7.7 7.7 7.7-7.7a1 1 0 1 0-1.4-1.4L12 13.6 5.7 7.3Z"/></svg>',
'action-prev': '<svg width="24" height="24"><path fill-rule="nonzero" d="M18.3 15.7a1 1 0 0 0 1.4-1.4L12 6.6l-7.7 7.7a1 1 0 0 0 1.4 1.4L12 9.4l6.3 6.3Z"/></svg>',
'addtag': '<svg width="24" height="24"><path fill-rule="evenodd" clip-rule="evenodd" d="M15 5a2 2 0 0 1 1.6.8L21 12l-4.4 6.2a2 2 0 0 1-1.6.8h-3v-2h3l3.5-5L15 7H5v3H3V7c0-1.1.9-2 2-2h10Z"/><path fill-rule="evenodd" clip-rule="evenodd" d="M6 12a1 1 0 0 0-1 1v2H3a1 1 0 1 0 0 2h2v2a1 1 0 1 0 2 0v-2h2a1 1 0 1 0 0-2H7v-2c0-.6-.4-1-1-1Z"/></svg>',
'ai-prompt': '<svg width="24" height="24"><g clip-path="url(#a)"><path fill-rule="evenodd" clip-rule="evenodd" d="M15 6.7a1 1 0 0 0-1.4 0l-9.9 10a1 1 0 0 0 0 1.3l2.1 2.1c.4.4 1 .4 1.4 0l10-9.9c.3-.3.3-1 0-1.4l-2.2-2Zm1.4 2.8-2-2-3 2.7 2.2 2.2 2.8-2.9Z"/><path d="m18.5 7.3-.7-1.5-1.5-.8 1.5-.7.7-1.5.7 1.5 1.5.7-1.5.8-.7 1.5ZM18.5 16.5l-.7-1.6-1.5-.7 1.5-.7.7-1.6.7 1.6 1.5.7-1.5.7-.7 1.6ZM9.7 7.3 9 5.8 7.5 5 9 4.3l.7-1.5.7 1.5L12 5l-1.5.8-.7 1.5Z"/></g><defs><clipPath id="a"><path d="M0 0h24v24H0z"/></clipPath></defs></svg>',
'ai': '<svg width="24" height="24"><path fill-rule="evenodd" clip-rule="evenodd" d="M5 3a3 3 0 0 0-3 3v12a3 3 0 0 0 3 3h14a3 3 0 0 0 3-3V6a3 3 0 0 0-3-3H5Zm6.8 11.5.5 1.2a68.3 68.3 0 0 0 .7 1.1l.4.1c.3 0 .5 0 .7-.3.2-.1.3-.3.3-.6l-.3-1-2.6-6.2a20.4 20.4 0 0 0-.5-1.3l-.5-.4-.7-.2c-.2 0-.5 0-.6.2-.2 0-.4.2-.5.4l-.3.6-.3.7L5.7 15l-.2.6-.1.4c0 .3 0 .5.3.7l.6.2c.3 0 .5 0 .7-.2l.4-1 .5-1.2h3.9ZM9.8 9l1.5 4h-3l1.5-4Zm5.6-.9v7.6c0 .4 0 .7.2 1l.7.2c.3 0 .6 0 .8-.3l.2-.9V8.1c0-.4 0-.7-.2-.9a1 1 0 0 0-.8-.3c-.2 0-.5.1-.7.3l-.2 1Z"/></svg>',
'align-center': '<svg width="24" height="24"><path d="M5 5h14c.6 0 1 .4 1 1s-.4 1-1 1H5a1 1 0 1 1 0-2Zm3 4h8c.6 0 1 .4 1 1s-.4 1-1 1H8a1 1 0 1 1 0-2Zm0 8h8c.6 0 1 .4 1 1s-.4 1-1 1H8a1 1 0 0 1 0-2Zm-3-4h14c.6 0 1 .4 1 1s-.4 1-1 1H5a1 1 0 0 1 0-2Z" fill-rule="evenodd"/></svg>',
'align-justify': '<svg width="24" height="24"><path d="M5 5h14c.6 0 1 .4 1 1s-.4 1-1 1H5a1 1 0 1 1 0-2Zm0 4h14c.6 0 1 .4 1 1s-.4 1-1 1H5a1 1 0 1 1 0-2Zm0 4h14c.6 0 1 .4 1 1s-.4 1-1 1H5a1 1 0 0 1 0-2Zm0 4h14c.6 0 1 .4 1 1s-.4 1-1 1H5a1 1 0 0 1 0-2Z" fill-rule="evenodd"/></svg>',
'align-left': '<svg width="24" height="24"><path d="M5 5h14c.6 0 1 .4 1 1s-.4 1-1 1H5a1 1 0 1 1 0-2Zm0 4h8c.6 0 1 .4 1 1s-.4 1-1 1H5a1 1 0 1 1 0-2Zm0 8h8c.6 0 1 .4 1 1s-.4 1-1 1H5a1 1 0 0 1 0-2Zm0-4h14c.6 0 1 .4 1 1s-.4 1-1 1H5a1 1 0 0 1 0-2Z" fill-rule="evenodd"/></svg>',
@ -58,13 +62,14 @@ tinymce.IconManager.add('default', {
'flip-horizontally': '<svg width="24" height="24"><path d="M14 19h2v-2h-2v2Zm4-8h2V9h-2v2ZM4 7v10c0 1.1.9 2 2 2h3v-2H6V7h3V5H6a2 2 0 0 0-2 2Zm14-2v2h2a2 2 0 0 0-2-2Zm-7 16h2V3h-2v18Zm7-6h2v-2h-2v2Zm-4-8h2V5h-2v2Zm4 12a2 2 0 0 0 2-2h-2v2Z" fill-rule="nonzero"/></svg>',
'flip-vertically': '<svg width="24" height="24"><path d="M5 14v2h2v-2H5Zm8 4v2h2v-2h-2Zm4-14H7a2 2 0 0 0-2 2v3h2V6h10v3h2V6a2 2 0 0 0-2-2Zm2 14h-2v2a2 2 0 0 0 2-2ZM3 11v2h18v-2H3Zm6 7v2h2v-2H9Zm8-4v2h2v-2h-2ZM5 18c0 1.1.9 2 2 2v-2H5Z" fill-rule="nonzero"/></svg>',
'footnote': '<svg width="24" height="24"><path d="M19 13c.6 0 1 .4 1 1s-.4 1-1 1H5a1 1 0 1 1 0-2h14Z"/><path fill-rule="evenodd" clip-rule="evenodd" d="M19 4v6h-1V5h-1.5V4h2.6Z"/><path d="M12 18c.6 0 1 .4 1 1s-.4 1-1 1H5a1 1 0 1 1 0-2h7ZM14 8c.6 0 1 .4 1 1s-.4 1-1 1H5a1 1 0 0 1 0-2h9Z"/></svg>',
'format-code': '<svg width="24" height="24"><path d="m10 22 2-7H6l9-13h2l-2 8h7L12 22h-2ZM6 2h7l-1.4 2H6V2Zm4.2 4H4v2h4.8l1.4-2Zm-2.7 4H2v2h4l1.5-2Z"/></svg>',
'format-painter': '<svg width="24" height="24"><path d="M18 5V4c0-.5-.4-1-1-1H5a1 1 0 0 0-1 1v4c0 .6.5 1 1 1h12c.6 0 1-.4 1-1V7h1v4H9v9c0 .6.4 1 1 1h2c.6 0 1-.4 1-1v-7h8V5h-3Z" fill-rule="nonzero"/></svg>',
'format': '<svg width="24" height="24"><path fill-rule="evenodd" d="M17 5a1 1 0 0 1 0 2h-4v11a1 1 0 0 1-2 0V7H7a1 1 0 1 1 0-2h10Z"/></svg>',
'fullscreen': '<svg width="24" height="24"><path d="m15.3 10-1.2-1.3 2.9-3h-2.3a.9.9 0 1 1 0-1.7H19c.5 0 .9.4.9.9v4.4a.9.9 0 1 1-1.8 0V7l-2.9 3Zm0 4 3 3v-2.3a.9.9 0 1 1 1.7 0V19c0 .5-.4.9-.9.9h-4.4a.9.9 0 1 1 0-1.8H17l-3-2.9 1.3-1.2ZM10 15.4l-2.9 3h2.3a.9.9 0 1 1 0 1.7H5a.9.9 0 0 1-.9-.9v-4.4a.9.9 0 1 1 1.8 0V17l2.9-3 1.2 1.3ZM8.7 10 5.7 7v2.3a.9.9 0 0 1-1.7 0V5c0-.5.4-.9.9-.9h4.4a.9.9 0 0 1 0 1.8H7l3 2.9-1.3 1.2Z" fill-rule="nonzero"/></svg>',
'gallery': '<svg width="24" height="24"><path fill-rule="nonzero" d="m5 15.7 2.3-2.2c.3-.3.7-.3 1 0L11 16l5.1-5c.3-.4.8-.4 1 0l2 1.9V8H5v7.7ZM5 18V19h3l1.8-1.9-2-2L5 17.9Zm14-3-2.5-2.4-6.4 6.5H19v-4ZM4 6h16c.6 0 1 .4 1 1v13c0 .6-.4 1-1 1H4a1 1 0 0 1-1-1V7c0-.6.4-1 1-1Zm6 7a2 2 0 1 1 0-4 2 2 0 0 1 0 4ZM4.5 4h15a.5.5 0 1 1 0 1h-15a.5.5 0 0 1 0-1Zm2-2h11a.5.5 0 1 1 0 1h-11a.5.5 0 0 1 0-1Z"/></svg>',
'gamma': '<svg width="24" height="24"><path d="M4 3h16c.6 0 1 .4 1 1v16c0 .6-.4 1-1 1H4a1 1 0 0 1-1-1V4c0-.6.4-1 1-1Zm1 2v14h14V5H5Zm6.5 11.8V14L9.2 8.7a5.1 5.1 0 0 0-.4-.8l-.1-.2H8v-1l.3-.1.3-.1h.7a1 1 0 0 1 .6.5l.1.3a8.5 8.5 0 0 1 .3.6l1.9 4.6 2-5.2a1 1 0 0 1 1-.6.5.5 0 0 1 .5.6L13 14v2.8a.7.7 0 0 1-1.4 0Z" fill-rule="nonzero"/></svg>',
'help': '<svg width="24" height="24"><g fill-rule="evenodd"><path d="M12 5.5a6.5 6.5 0 0 0-6 9 6.3 6.3 0 0 0 1.4 2l1 1a6.3 6.3 0 0 0 3.6 1 6.5 6.5 0 0 0 6-9 6.3 6.3 0 0 0-1.4-2l-1-1a6.3 6.3 0 0 0-3.6-1ZM12 4a7.8 7.8 0 0 1 5.7 2.3A8 8 0 1 1 12 4Z"/><path d="M9.6 9.7a.7.7 0 0 1-.7-.8c0-1.1 1.5-1.8 3.2-1.8 1.8 0 3.2.8 3.2 2.4 0 1.4-.4 2.1-1.5 2.8-.2 0-.3.1-.3.2a2 2 0 0 0-.8.8.8.8 0 0 1-1.4-.6c.3-.7.8-1 1.3-1.5l.4-.2c.7-.4.8-.6.8-1.5 0-.5-.6-.9-1.7-.9-.5 0-1 .1-1.4.3-.2 0-.3.1-.3.2v-.2c0 .4-.4.8-.8.8Z" fill-rule="nonzero"/><circle cx="12" cy="16" r="1"/></g></svg>',
'highlight-bg-color': '<svg width="24" height="24"><g fill-rule="evenodd"><path id="tox-icon-highlight-bg-color__color" d="M3 18h18v3H3z"/><path fill-rule="nonzero" d="M7.7 16.7H3l3.3-3.3-.7-.8L10.2 8l4 4.1-4 4.2c-.2.2-.6.2-.8 0l-.6-.7-1.1 1.1zm5-7.5L11 7.4l3-2.9a2 2 0 0 1 2.6 0L18 6c.7.7.7 2 0 2.7l-2.9 2.9-1.8-1.8-.5-.6"/></g></svg>',
'highlight-bg-color': '<svg width="24" height="24"><g fill-rule="evenodd"><path class="tox-icon-highlight-bg-color__color" d="M3 18h18v3H3z"/><path fill-rule="nonzero" d="M7.7 16.7H3l3.3-3.3-.7-.8L10.2 8l4 4.1-4 4.2c-.2.2-.6.2-.8 0l-.6-.7-1.1 1.1zm5-7.5L11 7.4l3-2.9a2 2 0 0 1 2.6 0L18 6c.7.7.7 2 0 2.7l-2.9 2.9-1.8-1.8-.5-.6"/></g></svg>',
'home': '<svg width="24" height="24"><path fill-rule="nonzero" d="M10 20v-6h4v6h5v-8h3L12 3 2 12h3v8z"/></svg>',
'horizontal-rule': '<svg width="24" height="24"><path d="M4 11h16v2H4z" fill-rule="evenodd"/></svg>',
'image-options': '<svg width="24" height="24"><path d="M6 10a2 2 0 0 0-2 2c0 1.1.9 2 2 2a2 2 0 0 0 2-2 2 2 0 0 0-2-2Zm12 0a2 2 0 0 0-2 2c0 1.1.9 2 2 2a2 2 0 0 0 2-2 2 2 0 0 0-2-2Zm-6 0a2 2 0 0 0-2 2c0 1.1.9 2 2 2a2 2 0 0 0 2-2 2 2 0 0 0-2-2Z" fill-rule="nonzero"/></svg>',
@ -96,6 +101,8 @@ tinymce.IconManager.add('default', {
'list-num-upper-roman': '<svg width="48" height="48"><g fill-rule="evenodd"><path opacity=".2" d="M18 12h22v4H18zM18 22h22v4H18zM18 32h22v4H18z"/><path d="M15.1 17v-1.2h1.3V17H15Zm0 10v-1.2h1.3V27H15Zm0 10v-1.2h1.3V37H15Z"/><path fill-rule="nonzero" d="M12 20h1.5v7H12zM12 30h1.5v7H12zM9 20h1.5v7H9zM9 30h1.5v7H9zM6 30h1.5v7H6zM12 10h1.5v7H12z"/></g></svg>',
'lock': '<svg width="24" height="24"><path d="M16.3 11c.2 0 .3 0 .5.2l.2.6v7.4c0 .3 0 .4-.2.6l-.6.2H7.8c-.3 0-.4 0-.6-.2a.7.7 0 0 1-.2-.6v-7.4c0-.3 0-.4.2-.6l.5-.2H8V8c0-.8.3-1.5.9-2.1.6-.6 1.3-.9 2.1-.9h2c.8 0 1.5.3 2.1.9.6.6.9 1.3.9 2.1v3h.3ZM10 8v3h4V8a1 1 0 0 0-.3-.7A1 1 0 0 0 13 7h-2a1 1 0 0 0-.7.3 1 1 0 0 0-.3.7Z" fill-rule="evenodd"/></svg>',
'ltr': '<svg width="24" height="24"><path d="M11 5h7a1 1 0 0 1 0 2h-1v11a1 1 0 0 1-2 0V7h-2v11a1 1 0 0 1-2 0v-6c-.5 0-1 0-1.4-.3A3.4 3.4 0 0 1 7.8 10a3.3 3.3 0 0 1 0-2.8 3.4 3.4 0 0 1 1.8-1.8L11 5ZM4.4 16.2 6.2 15l-1.8-1.2a1 1 0 0 1 1.2-1.6l3 2a1 1 0 0 1 0 1.6l-3 2a1 1 0 1 1-1.2-1.6Z" fill-rule="evenodd"/></svg>',
'math-equation': '<svg width="24" height="24"><path fill-rule="evenodd" clip-rule="evenodd" d="M9 4.8c.1-.5.5-.8 1-.8h10a1 1 0 1 1 0 2h-9.2L8.3 19.2a1 1 0 0 1-1.7.4l-3.4-4.2a1 1 0 0 1 1.6-1.2l2 2.5L9 4.8Zm9.7 5.5c.4.4.4 1 0 1.4L17 13.5l1.8 1.8a1 1 0 1 1-1.4 1.4L15.5 15l-1.8 1.8a1 1 0 0 1-1.4-1.4l1.8-1.8-1.8-1.8a1 1 0 0 1 1.4-1.4l1.8 1.8 1.8-1.8a1 1 0 0 1 1.4 0Z"/></svg>',
'mentions': '<svg height="24" width="24"><path d="M12 21a8.8 8.8 0 0 1-3.5-.7 9 9 0 0 1-2.9-2 9 9 0 0 1-1.9-2.8A8.8 8.8 0 0 1 3 12c0-1.3.2-2.4.7-3.5a9 9 0 0 1 4.8-4.8A8.8 8.8 0 0 1 12 3c1.3 0 2.4.2 3.5.7a9.1 9.1 0 0 1 4.8 4.8A8.7 8.7 0 0 1 21 12v1.4a3 3 0 0 1-.9 2.2 3 3 0 0 1-2.2.9c-.5 0-1-.1-1.5-.4a3.8 3.8 0 0 1-1.1-1 4.8 4.8 0 0 1-1.5 1 4.3 4.3 0 0 1-1.8.4c-1.2 0-2.3-.4-3.2-1.3-.9-.9-1.3-2-1.3-3.2s.4-2.3 1.3-3.2c.9-.9 2-1.3 3.2-1.3s2.3.4 3.2 1.3c.9.9 1.3 2 1.3 3.2v1.4c0 .4.1.7.4 1 .3.3.6.4 1 .4s.7-.1 1-.4c.3-.3.4-.6.4-1V12c0-2-.7-3.8-2.1-5.2S14 4.7 12 4.7s-3.8.7-5.2 2.1S4.7 10 4.7 12s.7 3.8 2.1 5.2 3.2 2.1 5.2 2.1h4.5V21zm0-6.2c.8 0 1.4-.3 2-.8a2.7 2.7 0 0 0 .8-2c0-.8-.3-1.4-.8-2a2.7 2.7 0 0 0-2-.8c-.8 0-1.4.3-2 .8a2.7 2.7 0 0 0-.8 2c0 .8.3 1.4.8 2a2.7 2.7 0 0 0 2 .8z"/></svg>',
'minus': '<svg width="24" height="24"><path d="M19 11a1 1 0 0 1 .1 2H5a1 1 0 0 1-.1-2H19Z"/></svg>',
'more-drawer': '<svg width="24" height="24"><path d="M6 10a2 2 0 0 0-2 2c0 1.1.9 2 2 2a2 2 0 0 0 2-2 2 2 0 0 0-2-2Zm12 0a2 2 0 0 0-2 2c0 1.1.9 2 2 2a2 2 0 0 0 2-2 2 2 0 0 0-2-2Zm-6 0a2 2 0 0 0-2 2c0 1.1.9 2 2 2a2 2 0 0 0 2-2 2 2 0 0 0-2-2Z" fill-rule="nonzero"/></svg>',
'new-document': '<svg width="24" height="24"><path d="M14.4 3H7a2 2 0 0 0-2 2v14c0 1.1.9 2 2 2h10a2 2 0 0 0 2-2V7.6L14.4 3ZM17 19H7V5h6v4h4v10Z" fill-rule="nonzero"/></svg>',
@ -106,6 +113,9 @@ tinymce.IconManager.add('default', {
'ordered-list': '<svg width="24" height="24"><path d="M10 17h8c.6 0 1 .4 1 1s-.4 1-1 1h-8a1 1 0 0 1 0-2Zm0-6h8c.6 0 1 .4 1 1s-.4 1-1 1h-8a1 1 0 0 1 0-2Zm0-6h8c.6 0 1 .4 1 1s-.4 1-1 1h-8a1 1 0 1 1 0-2ZM6 4v3.5c0 .3-.2.5-.5.5a.5.5 0 0 1-.5-.5V5h-.5a.5.5 0 0 1 0-1H6Zm-1 8.8.2.2h1.3c.3 0 .5.2.5.5s-.2.5-.5.5H4.9a1 1 0 0 1-.9-1V13c0-.4.3-.8.6-1l1.2-.4.2-.3a.2.2 0 0 0-.2-.2H4.5a.5.5 0 0 1-.5-.5c0-.3.2-.5.5-.5h1.6c.5 0 .9.4.9 1v.1c0 .4-.3.8-.6 1l-1.2.4-.2.3ZM7 17v2c0 .6-.4 1-1 1H4.5a.5.5 0 0 1 0-1h1.2c.2 0 .3-.1.3-.3 0-.2-.1-.3-.3-.3H4.4a.4.4 0 1 1 0-.8h1.3c.2 0 .3-.1.3-.3 0-.2-.1-.3-.3-.3H4.5a.5.5 0 1 1 0-1H6c.6 0 1 .4 1 1Z" fill-rule="evenodd"/></svg>',
'orientation': '<svg width="24" height="24"><path d="M7.3 6.4 1 13l6.4 6.5 6.5-6.5-6.5-6.5ZM3.7 13l3.6-3.7L11 13l-3.7 3.7-3.6-3.7ZM12 6l2.8 2.7c.3.3.3.8 0 1-.3.4-.9.4-1.2 0L9.2 5.7a.8.8 0 0 1 0-1.2L13.6.2c.3-.3.9-.3 1.2 0 .3.3.3.8 0 1.1L12 4h1a9 9 0 1 1-4.3 16.9l1.5-1.5A7 7 0 1 0 13 6h-1Z" fill-rule="nonzero"/></svg>',
'outdent': '<svg width="24" height="24"><path d="M7 5h12c.6 0 1 .4 1 1s-.4 1-1 1H7a1 1 0 1 1 0-2Zm5 4h7c.6 0 1 .4 1 1s-.4 1-1 1h-7a1 1 0 0 1 0-2Zm0 4h7c.6 0 1 .4 1 1s-.4 1-1 1h-7a1 1 0 0 1 0-2Zm-5 4h12a1 1 0 0 1 0 2H7a1 1 0 0 1 0-2Zm1.6-3.8a1 1 0 0 1-1.2 1.6l-3-2a1 1 0 0 1 0-1.6l3-2a1 1 0 0 1 1.2 1.6L6.8 12l1.8 1.2Z" fill-rule="evenodd"/></svg>',
'export-pdf': '<svg width="24" height="24"><path fill-rule="evenodd" clip-rule="evenodd" d="M7 3h7.4L19 7.6V17h-2V9h-4V5H7v3H5V5c0-1.1.9-2 2-2Z"/><path d="M2.6 15.2v-1.9h1c.6 0 1-.2 1.4-.5.3-.3.5-.7.5-1.2s-.2-.9-.5-1.2a2 2 0 0 0-1.3-.4H1v5.2h1.6Zm.4-3h-.4v-1.1h.5l.6.1.2.5c0 .1 0 .3-.2.4l-.7.1Zm5.7 3 1-.1c.3 0 .5-.2.7-.4l.5-.8c.2-.3.2-.7.2-1.3v-1l-.5-.8c-.2-.3-.4-.5-.7-.6L8.7 10H6.3v5.2h2.4Zm-.4-1.1H8v-3h.4c.5 0 .8.2 1 .4l.2 1.1-.1 1-.3.3-.8.2Zm5.3 1.2V13h2v-1h-2v-1H16V10h-4v5.2h1.6Z"/><path fill-rule="evenodd" clip-rule="evenodd" d="M15 17a1 1 0 1 0-2 0v3.1l-1.4-1a1 1 0 1 0-1.2 1.7l3.6 2.4 3.6-2.4a1 1 0 0 0-1.2-1.6l-1.4 1V17Z"/></svg>',
'export-word': '<svg width="24" height="24"><path d="M9.5 7A1.5 1.5 0 0 1 11 8.4v7.1A1.5 1.5 0 0 1 9.6 17H2.5A1.5 1.5 0 0 1 1 15.6V8.5A1.5 1.5 0 0 1 2.4 7h7.1Zm-1 2.8-1 2.6-1-2.5v-.1a.6.6 0 0 0-1 0l-.1.1-.9 2.5-1-2.5v-.1a.6.6 0 0 0-1 .4v.1l1.5 4v.1a.6.6 0 0 0 1 0v-.1l1-2.5.9 2.5v.1a.6.6 0 0 0 1 0H8l1.6-4v-.2a.6.6 0 0 0-1.1-.4Z"/><path fill-rule="evenodd" clip-rule="evenodd" d="M7 3h7.4L19 7.6V17h-2V9h-4V5H5c0-1.1.9-2 2-2ZM15 17a1 1 0 1 0-2 0v3.1l-1.4-1a1 1 0 1 0-1.2 1.7l3.6 2.4 3.6-2.4a1 1 0 0 0-1.2-1.6l-1.4 1V17Z"/></svg>',
'import-word': '<svg width="24" height="24"><path fill-rule="evenodd" clip-rule="evenodd" d="M7 3h7.4L19 7.6V15h-2V9h-4V5H5c0-1.1.9-2 2-2Z"/><path d="M9.5 7A1.5 1.5 0 0 1 11 8.4v7.1A1.5 1.5 0 0 1 9.6 17H2.5A1.5 1.5 0 0 1 1 15.6V8.5A1.5 1.5 0 0 1 2.4 7h7.1Zm-1 2.8-1 2.6-1-2.5v-.1a.6.6 0 0 0-1 0l-.1.1-.9 2.5-1-2.5v-.1a.6.6 0 0 0-1 .4v.1l1.5 4v.1a.6.6 0 0 0 1 0v-.1l1-2.5.9 2.5v.1a.6.6 0 0 0 1 0H8l1.6-4v-.2a.6.6 0 0 0-1.1-.4Z"/><path fill-rule="evenodd" clip-rule="evenodd" d="M11.4 18.2a1 1 0 0 0 1.2 1.6l1.4-1V22a1 1 0 1 0 2 0v-3.1l1.4 1a1 1 0 0 0 1.2-1.7L15 15.8l-3.6 2.4Z"/></svg>',
'page-break': '<svg width="24" height="24"><g fill-rule="evenodd"><path d="M5 11c.6 0 1 .4 1 1s-.4 1-1 1a1 1 0 0 1 0-2Zm3 0h1c.6 0 1 .4 1 1s-.4 1-1 1H8a1 1 0 0 1 0-2Zm4 0c.6 0 1 .4 1 1s-.4 1-1 1a1 1 0 0 1 0-2Zm3 0h1c.6 0 1 .4 1 1s-.4 1-1 1h-1a1 1 0 0 1 0-2Zm4 0c.6 0 1 .4 1 1s-.4 1-1 1a1 1 0 0 1 0-2ZM7 3v5h10V3c0-.6.4-1 1-1s1 .4 1 1v7H5V3c0-.6.4-1 1-1s1 .4 1 1ZM6 22a1 1 0 0 1-1-1v-7h14v7c0 .6-.4 1-1 1a1 1 0 0 1-1-1v-5H7v5c0 .6-.4 1-1 1Z"/></g></svg>',
'paragraph': '<svg width="24" height="24"><path fill-rule="evenodd" d="M10 5h7a1 1 0 0 1 0 2h-1v11a1 1 0 0 1-2 0V7h-2v11a1 1 0 0 1-2 0v-6c-.5 0-1 0-1.4-.3A3.4 3.4 0 0 1 6.8 10a3.3 3.3 0 0 1 0-2.8 3.4 3.4 0 0 1 1.8-1.8L10 5Z"/></svg>',
'paste-column-after': '<svg width="24" height="24"><path fill-rule="evenodd" d="M12 1a3 3 0 0 1 2.8 2H18c1 0 2 .8 2 1.9V7h-2V5h-2v1c0 .6-.4 1-1 1H9a1 1 0 0 1-1-1V5H6v13h7v2H6c-1 0-2-.8-2-1.9V5c0-1 .8-2 1.9-2H9.2A3 3 0 0 1 12 1Zm8 7v12h-6V8h6Zm-1.5 1.5h-3v9h3v-9ZM12 3a1 1 0 1 0 0 2 1 1 0 0 0 0-2Z"/></svg>',
@ -127,6 +137,7 @@ tinymce.IconManager.add('default', {
'resize-handle': '<svg width="10" height="10"><g fill-rule="nonzero"><path d="M8.1 1.1A.5.5 0 1 1 9 2l-7 7A.5.5 0 1 1 1 8l7-7ZM8.1 5.1A.5.5 0 1 1 9 6l-3 3A.5.5 0 1 1 5 8l3-3Z"/></g></svg>',
'resize': '<svg width="24" height="24"><path d="M4 5c0-.3.1-.5.3-.7.2-.2.4-.3.7-.3h6c.3 0 .5.1.7.3.2.2.3.4.3.7 0 .3-.1.5-.3.7a1 1 0 0 1-.7.3H7.4L18 16.6V13c0-.3.1-.5.3-.7.2-.2.4-.3.7-.3.3 0 .5.1.7.3.2.2.3.4.3.7v6c0 .3-.1.5-.3.7a1 1 0 0 1-.7.3h-6a1 1 0 0 1-.7-.3 1 1 0 0 1-.3-.7c0-.3.1-.5.3-.7.2-.2.4-.3.7-.3h3.6L6 7.4V11c0 .3-.1.5-.3.7a1 1 0 0 1-.7.3 1 1 0 0 1-.7-.3A1 1 0 0 1 4 11V5Z" fill-rule="evenodd"/></svg>',
'restore-draft': '<svg width="24" height="24"><g fill-rule="evenodd"><path d="M17 13c0 .6-.4 1-1 1h-4V8c0-.6.4-1 1-1s1 .4 1 1v4h2c.6 0 1 .4 1 1Z"/><path d="M4.7 10H9a1 1 0 0 1 0 2H3a1 1 0 0 1-1-1V5a1 1 0 1 1 2 0v3l2.5-2.4a9.2 9.2 0 0 1 10.8-1.5A9 9 0 0 1 13.4 21c-2.4.1-4.7-.7-6.5-2.2a1 1 0 1 1 1.3-1.5 7.2 7.2 0 0 0 11.6-3.7 7 7 0 0 0-3.5-7.7A7.2 7.2 0 0 0 8 7L4.7 10Z" fill-rule="nonzero"/></g></svg>',
'revision-history': '<svg width="24" height="24"><g fill-rule="evenodd"><path d="M17 13c0 .6-.4 1-1 1h-4V8c0-.6.4-1 1-1s1 .4 1 1v4h2c.6 0 1 .4 1 1Z"/><path d="M4.7 10H9a1 1 0 0 1 0 2H3a1 1 0 0 1-1-1V5a1 1 0 1 1 2 0v3l2.5-2.4a9.2 9.2 0 0 1 10.8-1.5A9 9 0 0 1 13.4 21c-2.4.1-4.7-.7-6.5-2.2a1 1 0 1 1 1.3-1.5 7.2 7.2 0 0 0 11.6-3.7 7 7 0 0 0-3.5-7.7A7.2 7.2 0 0 0 8 7L4.7 10Z" fill-rule="nonzero"/></g></svg>',
'rotate-left': '<svg width="24" height="24"><path d="M4.7 10H9a1 1 0 0 1 0 2H3a1 1 0 0 1-1-1V5a1 1 0 1 1 2 0v3l2.5-2.4a9.2 9.2 0 0 1 10.8-1.5A9 9 0 0 1 13.4 21c-2.4.1-4.7-.7-6.5-2.2a1 1 0 1 1 1.3-1.5 7.2 7.2 0 0 0 11.6-3.7 7 7 0 0 0-3.5-7.7A7.2 7.2 0 0 0 8 7L4.7 10Z" fill-rule="nonzero"/></svg>',
'rotate-right': '<svg width="24" height="24"><path d="M20 8V5a1 1 0 0 1 2 0v6c0 .6-.4 1-1 1h-6a1 1 0 0 1 0-2h4.3L16 7A7.2 7.2 0 0 0 7.7 6a7 7 0 0 0 3 13.1c1.9.1 3.7-.5 5-1.7a1 1 0 0 1 1.4 1.5A9.2 9.2 0 0 1 2.2 14c-.9-3.9 1-8 4.5-9.9 3.5-1.9 8-1.3 10.8 1.5L20 8Z" fill-rule="nonzero"/></svg>',
'rtl': '<svg width="24" height="24"><path d="M8 5h8v2h-2v12h-2V7h-2v12H8v-7c-.5 0-1 0-1.4-.3A3.4 3.4 0 0 1 4.8 10a3.3 3.3 0 0 1 0-2.8 3.4 3.4 0 0 1 1.8-1.8L8 5Zm12 11.2a1 1 0 1 1-1 1.6l-3-2a1 1 0 0 1 0-1.6l3-2a1 1 0 1 1 1 1.6L18.4 15l1.8 1.2Z" fill-rule="evenodd"/></svg>',
@ -134,6 +145,7 @@ tinymce.IconManager.add('default', {
'search': '<svg width="24" height="24"><path d="M16 17.3a8 8 0 1 1 1.4-1.4l4.3 4.4a1 1 0 0 1-1.4 1.4l-4.4-4.3Zm-5-.3a6 6 0 1 0 0-12 6 6 0 0 0 0 12Z" fill-rule="nonzero"/></svg>',
'select-all': '<svg width="24" height="24"><path d="M3 5h2V3a2 2 0 0 0-2 2Zm0 8h2v-2H3v2Zm4 8h2v-2H7v2ZM3 9h2V7H3v2Zm10-6h-2v2h2V3Zm6 0v2h2a2 2 0 0 0-2-2ZM5 21v-2H3c0 1.1.9 2 2 2Zm-2-4h2v-2H3v2ZM9 3H7v2h2V3Zm2 18h2v-2h-2v2Zm8-8h2v-2h-2v2Zm0 8a2 2 0 0 0 2-2h-2v2Zm0-12h2V7h-2v2Zm0 8h2v-2h-2v2Zm-4 4h2v-2h-2v2Zm0-16h2V3h-2v2ZM7 17h10V7H7v10Zm2-8h6v6H9V9Z" fill-rule="nonzero"/></svg>',
'selected': '<svg width="24" height="24"><path fill-rule="nonzero" d="M6 4h12a2 2 0 0 1 2 2v12a2 2 0 0 1-2 2H6a2 2 0 0 1-2-2V6c0-1.1.9-2 2-2Zm3.6 10.9L7 12.3a.7.7 0 0 0-1 1L9.6 17 18 8.6a.7.7 0 0 0 0-1 .7.7 0 0 0-1 0l-7.4 7.3Z"/></svg>',
'send': '<svg width="24" height="24"><path fill-rule="evenodd" clip-rule="evenodd" d="m13.3 22 7-18.3-18.3 7L9 15l4.3 7ZM18 6.8l-.7-.7L9.4 14l.7.7L18 6.8Z"/></svg>',
'settings': '<svg width="24" height="24"><path d="M11 6h8c.6 0 1 .4 1 1s-.4 1-1 1h-8v.3c0 .2 0 .3-.2.5l-.6.2H7.8c-.3 0-.4 0-.6-.2a.7.7 0 0 1-.2-.6V8H5a1 1 0 1 1 0-2h2v-.3c0-.2 0-.3.2-.5l.5-.2h2.5c.3 0 .4 0 .6.2l.2.5V6ZM8 8h2V6H8v2Zm9 2.8v.2h2c.6 0 1 .4 1 1s-.4 1-1 1h-2v.3c0 .2 0 .3-.2.5l-.6.2h-2.4c-.3 0-.4 0-.6-.2a.7.7 0 0 1-.2-.6V13H5a1 1 0 0 1 0-2h8v-.3c0-.2 0-.3.2-.5l.6-.2h2.4c.3 0 .4 0 .6.2l.2.6ZM14 13h2v-2h-2v2Zm-3 2.8v.2h8c.6 0 1 .4 1 1s-.4 1-1 1h-8v.3c0 .2 0 .3-.2.5l-.6.2H7.8c-.3 0-.4 0-.6-.2a.7.7 0 0 1-.2-.6V18H5a1 1 0 0 1 0-2h2v-.3c0-.2 0-.3.2-.5l.5-.2h2.5c.3 0 .4 0 .6.2l.2.6ZM8 18h2v-2H8v2Z" fill-rule="evenodd"/></svg>',
'sharpen': '<svg width="24" height="24"><path d="m16 6 4 4-8 9-8-9 4-4h8Zm-4 10.2 5.5-6.2-.1-.1H12v-.3h5.1l-.2-.2H12V9h4.6l-.2-.2H12v-.3h4.1l-.2-.2H12V8h3.6l-.2-.2H8.7L6.5 10l.1.1H12v.3H6.9l.2.2H12v.3H7.3l.2.2H12v.3H7.7l.3.2h4v.3H8.2l.2.2H12v.3H8.6l.3.2H12v.3H9l.3.2H12v.3H9.5l.2.2H12v.3h-2l.2.2H12v.3h-1.6l.2.2H12v.3h-1.1l.2.2h.9v.3h-.7l.2.2h.5v.3h-.3l.3.2Z" fill-rule="evenodd"/></svg>',
'sourcecode': '<svg width="24" height="24"><g fill-rule="nonzero"><path d="M9.8 15.7c.3.3.3.8 0 1-.3.4-.9.4-1.2 0l-4.4-4.1a.8.8 0 0 1 0-1.2l4.4-4.2c.3-.3.9-.3 1.2 0 .3.3.3.8 0 1.1L6 12l3.8 3.7ZM14.2 15.7c-.3.3-.3.8 0 1 .4.4.9.4 1.2 0l4.4-4.1c.3-.3.3-.9 0-1.2l-4.4-4.2a.8.8 0 0 0-1.2 0c-.3.3-.3.8 0 1.1L18 12l-3.8 3.7Z"/></g></svg>',
@ -165,7 +177,7 @@ tinymce.IconManager.add('default', {
'template-add': '<svg width="24" height="24"><path fill-rule="evenodd" clip-rule="evenodd" d="M9 12v4H5a2 2 0 0 0-2 2v3h9.3a6 6 0 0 1-.3-2H5v-1h7a6 6 0 0 1 .8-2H11v-5l-.8-.6a3 3 0 1 1 3.6 0l-.8.6v4.7a6 6 0 0 1 2-1.9V12a5 5 0 1 0-6 0Z"/><path d="M18 15c.5 0 1 .4 1 .9V18h2a1 1 0 0 1 .1 2H19v2a1 1 0 0 1-2 .1V20h-2a1 1 0 0 1-.1-2H17v-2c0-.6.4-1 1-1Z"/></svg>',
'template': '<svg width="24" height="24"><path d="M19 19v-1H5v1h14ZM9 16v-4a5 5 0 1 1 6 0v4h4a2 2 0 0 1 2 2v3H3v-3c0-1.1.9-2 2-2h4Zm4 0v-5l.8-.6a3 3 0 1 0-3.6 0l.8.6v5h2Z" fill-rule="nonzero"/></svg>',
'temporary-placeholder': '<svg width="24" height="24"><g fill-rule="evenodd"><path d="M9 7.6V6h2.5V4.5a.5.5 0 1 1 1 0V6H15v1.6a8 8 0 1 1-6 0Zm-2.6 5.3a.5.5 0 0 0 .3.6c.3 0 .6 0 .6-.3l.1-.2a5 5 0 0 1 3.3-2.8c.3-.1.4-.4.4-.6-.1-.3-.4-.5-.6-.4a6 6 0 0 0-4.1 3.7Z"/><circle cx="14" cy="4" r="1"/><circle cx="12" cy="2" r="1"/><circle cx="10" cy="4" r="1"/></g></svg>',
'text-color': '<svg width="24" height="24"><g fill-rule="evenodd"><path id="tox-icon-text-color__color" d="M3 18h18v3H3z"/><path d="M8.7 16h-.8a.5.5 0 0 1-.5-.6l2.7-9c.1-.3.3-.4.5-.4h2.8c.2 0 .4.1.5.4l2.7 9a.5.5 0 0 1-.5.6h-.8a.5.5 0 0 1-.4-.4l-.7-2.2c0-.3-.3-.4-.5-.4h-3.4c-.2 0-.4.1-.5.4l-.7 2.2c0 .3-.2.4-.4.4Zm2.6-7.6-.6 2a.5.5 0 0 0 .5.6h1.6a.5.5 0 0 0 .5-.6l-.6-2c0-.3-.3-.4-.5-.4h-.4c-.2 0-.4.1-.5.4Z"/></g></svg>',
'text-color': '<svg width="24" height="24"><g fill-rule="evenodd"><path class="tox-icon-text-color__color" d="M3 18h18v3H3z"/><path d="M8.7 16h-.8a.5.5 0 0 1-.5-.6l2.7-9c.1-.3.3-.4.5-.4h2.8c.2 0 .4.1.5.4l2.7 9a.5.5 0 0 1-.5.6h-.8a.5.5 0 0 1-.4-.4l-.7-2.2c0-.3-.3-.4-.5-.4h-3.4c-.2 0-.4.1-.5.4l-.7 2.2c0 .3-.2.4-.4.4Zm2.6-7.6-.6 2a.5.5 0 0 0 .5.6h1.6a.5.5 0 0 0 .5-.6l-.6-2c0-.3-.3-.4-.5-.4h-.4c-.2 0-.4.1-.5.4Z"/></g></svg>',
'text-size-decrease': '<svg width="24" height="24"><path fill-rule="evenodd" clip-rule="evenodd" d="M14 5a1 1 0 1 1 0 2h-4v11a1 1 0 1 1-2 0V7H4a1 1 0 0 1 0-2h10ZM14 12a1 1 0 1 0 0 2h6a1 1 0 1 0 0-2h-6Z"/></svg>',
'text-size-increase': '<svg width="24" height="24"><path fill-rule="evenodd" clip-rule="evenodd" d="M14 5a1 1 0 1 1 0 2h-4v11a1 1 0 1 1-2 0V7H4a1 1 0 0 1 0-2h10ZM17 9a1 1 0 0 0-1 1v2h-2a1 1 0 1 0 0 2h2v2a1 1 0 1 0 2 0v-2h2a1 1 0 1 0 0-2h-2v-2c0-.6-.4-1-1-1Z"/></svg>',
'toc': '<svg width="24" height="24"><path d="M5 5c.6 0 1 .4 1 1s-.4 1-1 1a1 1 0 1 1 0-2Zm3 0h11c.6 0 1 .4 1 1s-.4 1-1 1H8a1 1 0 1 1 0-2Zm-3 8c.6 0 1 .4 1 1s-.4 1-1 1a1 1 0 0 1 0-2Zm3 0h11c.6 0 1 .4 1 1s-.4 1-1 1H8a1 1 0 0 1 0-2Zm0-4c.6 0 1 .4 1 1s-.4 1-1 1a1 1 0 1 1 0-2Zm3 0h8c.6 0 1 .4 1 1s-.4 1-1 1h-8a1 1 0 0 1 0-2Zm-3 8c.6 0 1 .4 1 1s-.4 1-1 1a1 1 0 0 1 0-2Zm3 0h8c.6 0 1 .4 1 1s-.4 1-1 1h-8a1 1 0 0 1 0-2Z" fill-rule="evenodd"/></svg>',

File diff suppressed because one or more lines are too long

6
out/tinymce/license.md Normal file
View File

@ -0,0 +1,6 @@
# Software License Agreement
**TinyMCE** [<https://github.com/tinymce/tinymce>](https://github.com/tinymce/tinymce)
Copyright (c) 2024, Ephox Corporation DBA Tiny Technologies, Inc.
Licensed under the terms of [GNU General Public License Version 2 or later](http://www.gnu.org/licenses/gpl.html).

View File

@ -1,21 +0,0 @@
MIT License
Copyright (c) 2022 Ephox Corporation DBA Tiny Technologies, Inc.
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.

View File

@ -1,5 +1,5 @@
/**
* TinyMCE version 6.4.1 (2023-03-29)
* TinyMCE version 7.5.1 (TBD)
*/
(function () {
@ -749,16 +749,15 @@
});
const isShadowRoot = dos => isDocumentFragment(dos) && isNonNullable(dos.dom.host);
const supported = isFunction(Element.prototype.attachShadow) && isFunction(Node.prototype.getRootNode);
const isSupported$1 = constant(supported);
const getRootNode = supported ? e => SugarElement.fromDom(e.dom.getRootNode()) : documentOrOwner;
const getRootNode = e => SugarElement.fromDom(e.dom.getRootNode());
const getContentContainer = dos => isShadowRoot(dos) ? dos : SugarElement.fromDom(documentOrOwner(dos).dom.body);
const getShadowRoot = e => {
const r = getRootNode(e);
return isShadowRoot(r) ? Optional.some(r) : Optional.none();
};
const getShadowHost = e => SugarElement.fromDom(e.dom.host);
const getOriginalEventTarget = event => {
if (isSupported$1() && isNonNullable(event.target)) {
if (isNonNullable(event.target)) {
const el = SugarElement.fromDom(event.target);
if (isElement(el) && isOpenShadowHost(el)) {
if (event.composed && event.composedPath) {
@ -879,7 +878,14 @@
const bindFrom = (a, f) => a !== undefined && a !== null ? f(a) : Optional.none();
const someIf = (b, a) => b ? Optional.some(a) : Optional.none();
const removeFromStart = (str, numChars) => {
return str.substring(numChars);
};
const checkRange = (str, substr, start) => substr === '' || str.length >= substr.length && str.substr(start, start + substr.length) === substr;
const removeLeading = (str, prefix) => {
return startsWith(str, prefix) ? removeFromStart(str, prefix.length) : str;
};
const contains = (str, substr, start = 0, end) => {
const idx = str.indexOf(substr, start);
if (idx !== -1) {
@ -1364,7 +1370,7 @@
const PlatformDetection = { detect: detect$3 };
const mediaMatch = query => window.matchMedia(query).matches;
let platform = cached(() => PlatformDetection.detect(navigator.userAgent, Optional.from(navigator.userAgentData), mediaMatch));
let platform = cached(() => PlatformDetection.detect(window.navigator.userAgent, Optional.from(window.navigator.userAgentData), mediaMatch));
const detect$2 = () => platform();
const Dimension = (name, getOffset) => {
@ -1835,6 +1841,7 @@
const rPercentageBasedSizeRegex = /(\d+(\.\d+)?)%/;
const rPixelBasedSizeRegex = /(\d+(\.\d+)?)px|em/;
const isCol$2 = isTag('col');
const isRow$2 = isTag('tr');
const getPercentSize = (elm, outerGetter, innerGetter) => {
const relativeParent = parentElement(elm).getOrThunk(() => getBody$1(owner(elm)));
return outerGetter(elm) / innerGetter(relativeParent) * 100;
@ -1848,6 +1855,9 @@
const setHeight = (cell, amount) => {
set$1(cell, 'height', amount + 'px');
};
const removeHeight = cell => {
remove$5(cell, 'height');
};
const getHeightValue = cell => getRuntime(cell) + 'px';
const convert = (cell, number, getter, setter) => {
const newSize = table(cell).map(table => {
@ -1879,11 +1889,11 @@
});
};
const getRawWidth$1 = element => getRaw$1(element, 'width');
const getRawHeight = element => getRaw$1(element, 'height');
const getRawHeight$1 = element => getRaw$1(element, 'height');
const getPercentageWidth = cell => getPercentSize(cell, get$9, getInner);
const getPixelWidth$1 = cell => isCol$2(cell) ? get$9(cell) : getRuntime$1(cell);
const getHeight = cell => {
return get$7(cell, 'rowspan', getTotalHeight);
return isRow$2(cell) ? get$8(cell) : get$7(cell, 'rowspan', getTotalHeight);
};
const getGenericWidth = cell => {
const width = getRawWidth$1(cell);
@ -1897,6 +1907,7 @@
set$1(cell, 'width', amount + unit);
};
const getPixelTableWidth = table => get$9(table) + 'px';
const getPixelTableHeight = table => get$8(table) + 'px';
const getPercentTableWidth = table => getPercentSize(table, get$9, getInner) + '%';
const isPercentSizing$1 = table => getRawWidth$1(table).exists(size => rPercentageBasedSizeRegex.test(size));
const isPixelSizing$1 = table => getRawWidth$1(table).exists(size => rPixelBasedSizeRegex.test(size));
@ -1908,7 +1919,7 @@
return getRawWidth$1(cell).getOrThunk(() => getPixelWidth$1(cell) + 'px');
};
const getRawH = cell => {
return getRawHeight(cell).getOrThunk(() => getHeight(cell) + 'px');
return getRawHeight$1(cell).getOrThunk(() => getHeight(cell) + 'px');
};
const justCols = warehouse => map$1(Warehouse.justColumns(warehouse), column => Optional.from(column.element));
const isValidColumn = cell => {
@ -1955,20 +1966,19 @@
return deduced.getOrThunk(tableSize.minCellWidth);
});
};
const getHeightFrom = (warehouse, table, direction, getHeight, fallback) => {
const rows$1 = rows(warehouse);
const backups = [Optional.some(direction.edge(table))].concat(map$1(direction.positions(rows$1, table), pos => pos.map(p => p.y)));
return map$1(rows$1, (cellOption, c) => {
return getDimension(cellOption, c, backups, not(hasRowspan), getHeight, fallback);
});
const getHeightFrom = (warehouse, table, getHeight, fallback) => {
const rowCells = rows(warehouse);
const rows$1 = map$1(warehouse.all, r => Optional.some(r.element));
const backups = [Optional.some(height.edge(table))].concat(map$1(height.positions(rowCells, table), pos => pos.map(p => p.y)));
return map$1(rows$1, (row, i) => getDimension(row, i, backups, always, getHeight, fallback));
};
const getPixelHeights = (warehouse, table, direction) => {
return getHeightFrom(warehouse, table, direction, getHeight, deduced => {
const getPixelHeights = (warehouse, table) => {
return getHeightFrom(warehouse, table, getHeight, deduced => {
return deduced.getOrThunk(minHeight);
});
};
const getRawHeights = (warehouse, table, direction) => {
return getHeightFrom(warehouse, table, direction, getRawH, getDeduced);
const getRawHeights = (warehouse, table) => {
return getHeightFrom(warehouse, table, getRawH, getDeduced);
};
const widthLookup = (table, getter) => () => {
@ -2356,6 +2366,140 @@
};
const fromDom = nodes => map$1(nodes, SugarElement.fromDom);
const option = name => editor => editor.options.get(name);
const defaultWidth = '100%';
const getPixelForcedWidth = editor => {
var _a;
const dom = editor.dom;
const parentBlock = (_a = dom.getParent(editor.selection.getStart(), dom.isBlock)) !== null && _a !== void 0 ? _a : editor.getBody();
return getInner(SugarElement.fromDom(parentBlock)) + 'px';
};
const determineDefaultTableStyles = (editor, defaultStyles) => {
if (isTableResponsiveForced(editor) || !shouldStyleWithCss(editor)) {
return defaultStyles;
} else if (isTablePixelsForced(editor)) {
return {
...defaultStyles,
width: getPixelForcedWidth(editor)
};
} else {
return {
...defaultStyles,
width: defaultWidth
};
}
};
const determineDefaultTableAttributes = (editor, defaultAttributes) => {
if (isTableResponsiveForced(editor) || shouldStyleWithCss(editor)) {
return defaultAttributes;
} else if (isTablePixelsForced(editor)) {
return {
...defaultAttributes,
width: getPixelForcedWidth(editor)
};
} else {
return {
...defaultAttributes,
width: defaultWidth
};
}
};
const register = editor => {
const registerOption = editor.options.register;
registerOption('table_clone_elements', { processor: 'string[]' });
registerOption('table_use_colgroups', {
processor: 'boolean',
default: true
});
registerOption('table_header_type', {
processor: value => {
const valid = contains$2([
'section',
'cells',
'sectionCells',
'auto'
], value);
return valid ? {
value,
valid
} : {
valid: false,
message: 'Must be one of: section, cells, sectionCells or auto.'
};
},
default: 'section'
});
registerOption('table_sizing_mode', {
processor: 'string',
default: 'auto'
});
registerOption('table_default_attributes', {
processor: 'object',
default: { border: '1' }
});
registerOption('table_default_styles', {
processor: 'object',
default: { 'border-collapse': 'collapse' }
});
registerOption('table_column_resizing', {
processor: value => {
const valid = contains$2([
'preservetable',
'resizetable'
], value);
return valid ? {
value,
valid
} : {
valid: false,
message: 'Must be preservetable, or resizetable.'
};
},
default: 'preservetable'
});
registerOption('table_resize_bars', {
processor: 'boolean',
default: true
});
registerOption('table_style_by_css', {
processor: 'boolean',
default: true
});
registerOption('table_merge_content_on_paste', {
processor: 'boolean',
default: true
});
};
const getTableCloneElements = editor => {
return Optional.from(editor.options.get('table_clone_elements'));
};
const hasTableObjectResizing = editor => {
const objectResizing = editor.options.get('object_resizing');
return contains$2(objectResizing.split(','), 'table');
};
const getTableHeaderType = option('table_header_type');
const getTableColumnResizingBehaviour = option('table_column_resizing');
const isPreserveTableColumnResizing = editor => getTableColumnResizingBehaviour(editor) === 'preservetable';
const isResizeTableColumnResizing = editor => getTableColumnResizingBehaviour(editor) === 'resizetable';
const getTableSizingMode = option('table_sizing_mode');
const isTablePercentagesForced = editor => getTableSizingMode(editor) === 'relative';
const isTablePixelsForced = editor => getTableSizingMode(editor) === 'fixed';
const isTableResponsiveForced = editor => getTableSizingMode(editor) === 'responsive';
const hasTableResizeBars = option('table_resize_bars');
const shouldStyleWithCss = option('table_style_by_css');
const shouldMergeContentOnPaste = option('table_merge_content_on_paste');
const getTableDefaultAttributes = editor => {
const options = editor.options;
const defaultAttributes = options.get('table_default_attributes');
return options.isSet('table_default_attributes') ? defaultAttributes : determineDefaultTableAttributes(editor, defaultAttributes);
};
const getTableDefaultStyles = editor => {
const options = editor.options;
const defaultStyles = options.get('table_default_styles');
return options.isSet('table_default_styles') ? defaultStyles : determineDefaultTableStyles(editor, defaultStyles);
};
const tableUseColumnGroup = option('table_use_colgroups');
const closest = target => closest$1(target, '[contenteditable]');
const isEditable$1 = (element, assumeEditable = false) => {
if (inBody(element)) {
@ -2378,10 +2522,12 @@
const getSelectionStart = editor => SugarElement.fromDom(editor.selection.getStart());
const getPixelWidth = elm => elm.getBoundingClientRect().width;
const getPixelHeight = elm => elm.getBoundingClientRect().height;
const getRawWidth = (editor, elm) => {
const raw = editor.dom.getStyle(elm, 'width') || editor.dom.getAttrib(elm, 'width');
const getRawValue = prop => (editor, elm) => {
const raw = editor.dom.getStyle(elm, prop) || editor.dom.getAttrib(elm, prop);
return Optional.from(raw).filter(isNotEmpty);
};
const getRawWidth = getRawValue('width');
const getRawHeight = getRawValue('height');
const isPercentage$1 = value => /^(\d+(\.\d+)?)%$/.test(value);
const isPixel = value => /^(\d+(\.\d+)?)px$/.test(value);
const isInEditableContext$1 = cell => closest$2(cell, isTag('table')).exists(isEditable$1);
@ -2879,13 +3025,32 @@
});
};
const serializeElements = (editor, elements) => map$1(elements, elm => editor.selection.serializer.serialize(elm.dom, {})).join('');
const getTextContent = elements => map$1(elements, element => element.dom.innerText).join('');
const getTextContent = (editor, replicaElements) => {
const doc = editor.getDoc();
const dos = getRootNode(SugarElement.fromDom(editor.getBody()));
const offscreenDiv = SugarElement.fromTag('div', doc);
set$2(offscreenDiv, 'data-mce-bogus', 'all');
setAll(offscreenDiv, {
position: 'fixed',
left: '-9999999px',
top: '0',
overflow: 'hidden',
opacity: '0'
});
const root = getContentContainer(dos);
append(offscreenDiv, replicaElements);
append$1(root, offscreenDiv);
const textContent = offscreenDiv.dom.innerText;
remove$6(offscreenDiv);
return textContent;
};
const registerEvents = (editor, actions) => {
editor.on('BeforeGetContent', e => {
const multiCellContext = cells => {
e.preventDefault();
extractSelected(cells).each(elements => {
e.content = e.format === 'text' ? getTextContent(elements) : serializeElements(editor, elements);
extractSelected(cells).each(replicaElements => {
const content = e.format === 'text' ? getTextContent(editor, replicaElements) : serializeElements(editor, replicaElements);
e.content = content;
});
};
if (e.selection === true) {
@ -2904,7 +3069,7 @@
return name(content) !== 'meta';
});
const isTable = isTag('table');
if (elements.length === 1 && isTable(elements[0])) {
if (shouldMergeContentOnPaste(editor) && elements.length === 1 && isTable(elements[0])) {
e.preventDefault();
const doc = SugarElement.fromDom(editor.getDoc());
const generators = paste$1(doc);
@ -4023,17 +4188,6 @@
colspan: column.colspan
}));
};
const recalculateHeightForCells = (warehouse, heights) => {
const all = Warehouse.justCells(warehouse);
return map$1(all, cell => {
const height = total(cell.row, cell.row + cell.rowspan, heights);
return {
element: cell.element,
height,
rowspan: cell.rowspan
};
});
};
const matchRowHeight = (warehouse, heights) => {
return map$1(warehouse.all, (row, i) => {
return {
@ -4068,17 +4222,16 @@
recalculateAndApply(warehouse, newWidths, tableSize);
resizing.resizeTable(tableSize.adjustTableWidth, clampedStep, isLastColumn);
};
const adjustHeight = (table, delta, index, direction) => {
const adjustHeight = (table, delta, index) => {
const warehouse = Warehouse.fromTable(table);
const heights = getPixelHeights(warehouse, table, direction);
const heights = getPixelHeights(warehouse, table);
const newHeights = map$1(heights, (dy, i) => index === i ? Math.max(delta + dy, minHeight()) : dy);
const newCellSizes = recalculateHeightForCells(warehouse, newHeights);
const newRowSizes = matchRowHeight(warehouse, newHeights);
each$2(newRowSizes, row => {
setHeight(row.element, row.height);
});
each$2(newCellSizes, cell => {
setHeight(cell.element, cell.height);
each$2(Warehouse.justCells(warehouse), cell => {
removeHeight(cell.element);
});
const total = sumUp(newHeights);
setHeight(table, total);
@ -4447,7 +4600,7 @@
const opEraseRows = (grid, details, _comparator, _genWrappers) => {
const rows = uniqueRows(details);
const newGrid = deleteRowsAt(grid, rows[0].row, rows[rows.length - 1].row);
const maxRowIndex = newGrid.length > 0 ? newGrid.length - 1 : 0;
const maxRowIndex = Math.max(extractGridDetails(newGrid).rows.length - 1, 0);
return bundle(newGrid, Math.min(details[0].row, maxRowIndex), details[0].column);
};
const opMergeCells = (grid, mergable, comparator, genWrappers) => {
@ -4492,7 +4645,7 @@
const context = rows[pasteDetails.cells[0].row];
const gridB = gridifyRows(pasteDetails.clipboard, pasteDetails.generators, context);
const mergedGrid = insertCols(index, grid, gridB, pasteDetails.generators, comparator);
return bundle(mergedGrid, pasteDetails.cells[0].row, pasteDetails.cells[0].column);
return bundle(mergedGrid, pasteDetails.cells[0].row, index);
};
const opPasteRowsBefore = (grid, pasteDetails, comparator, _genWrappers) => {
const rows = extractGridDetails(grid).rows;
@ -4508,7 +4661,7 @@
const context = rows[pasteDetails.cells[0].row];
const gridB = gridifyRows(pasteDetails.clipboard, pasteDetails.generators, context);
const mergedGrid = insertRows(index, grid, gridB, pasteDetails.generators, comparator);
return bundle(mergedGrid, pasteDetails.cells[0].row, pasteDetails.cells[0].column);
return bundle(mergedGrid, index, pasteDetails.cells[0].column);
};
const opGetColumnsType = (table, target) => {
const house = Warehouse.fromTable(table);
@ -4639,135 +4792,6 @@
style: true
};
const option = name => editor => editor.options.get(name);
const defaultWidth = '100%';
const getPixelForcedWidth = editor => {
var _a;
const dom = editor.dom;
const parentBlock = (_a = dom.getParent(editor.selection.getStart(), dom.isBlock)) !== null && _a !== void 0 ? _a : editor.getBody();
return getInner(SugarElement.fromDom(parentBlock)) + 'px';
};
const determineDefaultTableStyles = (editor, defaultStyles) => {
if (isTableResponsiveForced(editor) || !shouldStyleWithCss(editor)) {
return defaultStyles;
} else if (isTablePixelsForced(editor)) {
return {
...defaultStyles,
width: getPixelForcedWidth(editor)
};
} else {
return {
...defaultStyles,
width: defaultWidth
};
}
};
const determineDefaultTableAttributes = (editor, defaultAttributes) => {
if (isTableResponsiveForced(editor) || shouldStyleWithCss(editor)) {
return defaultAttributes;
} else if (isTablePixelsForced(editor)) {
return {
...defaultAttributes,
width: getPixelForcedWidth(editor)
};
} else {
return {
...defaultAttributes,
width: defaultWidth
};
}
};
const register = editor => {
const registerOption = editor.options.register;
registerOption('table_clone_elements', { processor: 'string[]' });
registerOption('table_use_colgroups', {
processor: 'boolean',
default: true
});
registerOption('table_header_type', {
processor: value => {
const valid = contains$2([
'section',
'cells',
'sectionCells',
'auto'
], value);
return valid ? {
value,
valid
} : {
valid: false,
message: 'Must be one of: section, cells, sectionCells or auto.'
};
},
default: 'section'
});
registerOption('table_sizing_mode', {
processor: 'string',
default: 'auto'
});
registerOption('table_default_attributes', {
processor: 'object',
default: { border: '1' }
});
registerOption('table_default_styles', {
processor: 'object',
default: { 'border-collapse': 'collapse' }
});
registerOption('table_column_resizing', {
processor: value => {
const valid = contains$2([
'preservetable',
'resizetable'
], value);
return valid ? {
value,
valid
} : {
valid: false,
message: 'Must be preservetable, or resizetable.'
};
},
default: 'preservetable'
});
registerOption('table_resize_bars', {
processor: 'boolean',
default: true
});
registerOption('table_style_by_css', {
processor: 'boolean',
default: true
});
};
const getTableCloneElements = editor => {
return Optional.from(editor.options.get('table_clone_elements'));
};
const hasTableObjectResizing = editor => {
const objectResizing = editor.options.get('object_resizing');
return contains$2(objectResizing.split(','), 'table');
};
const getTableHeaderType = option('table_header_type');
const getTableColumnResizingBehaviour = option('table_column_resizing');
const isPreserveTableColumnResizing = editor => getTableColumnResizingBehaviour(editor) === 'preservetable';
const isResizeTableColumnResizing = editor => getTableColumnResizingBehaviour(editor) === 'resizetable';
const getTableSizingMode = option('table_sizing_mode');
const isTablePercentagesForced = editor => getTableSizingMode(editor) === 'relative';
const isTablePixelsForced = editor => getTableSizingMode(editor) === 'fixed';
const isTableResponsiveForced = editor => getTableSizingMode(editor) === 'responsive';
const hasTableResizeBars = option('table_resize_bars');
const shouldStyleWithCss = option('table_style_by_css');
const getTableDefaultAttributes = editor => {
const options = editor.options;
const defaultAttributes = options.get('table_default_attributes');
return options.isSet('table_default_attributes') ? defaultAttributes : determineDefaultTableAttributes(editor, defaultAttributes);
};
const getTableDefaultStyles = editor => {
const options = editor.options;
const defaultStyles = options.get('table_default_styles');
return options.isSet('table_default_styles') ? defaultStyles : determineDefaultTableStyles(editor, defaultStyles);
};
const tableUseColumnGroup = option('table_use_colgroups');
const get$5 = (editor, table) => {
if (isTablePercentagesForced(editor)) {
return TableSize.percentageSize(table);
@ -5105,11 +5129,9 @@
set$1(column.element, 'width', width + unit);
});
};
const redistributeToH = (newHeights, rows, cells, unit) => {
const redistributeToH = (newHeights, rows, cells) => {
each$2(cells, cell => {
const heights = newHeights.slice(cell.row, cell.rowspan + cell.row);
const h = sum(heights, minHeight());
set$1(cell.element, 'height', h + unit);
remove$5(cell.element, 'height');
});
each$2(rows, (row, i) => {
set$1(row.element, 'height', newHeights[i]);
@ -5136,11 +5158,10 @@
set$1(table, 'width', newWidth);
});
optHeight.each(newHeight => {
const hUnit = getUnit(newHeight);
const totalHeight = get$8(table);
const oldHeights = getRawHeights(warehouse, table, height);
const oldHeights = getRawHeights(warehouse, table);
const nuHeights = redistribute$1(oldHeights, totalHeight, newHeight);
redistributeToH(nuHeights, rows, cells, hUnit);
redistributeToH(nuHeights, rows, cells);
set$1(table, 'height', newHeight);
});
};
@ -5150,18 +5171,24 @@
const cleanupLegacyAttributes = element => {
remove$7(element, 'width');
remove$7(element, 'height');
};
const convertToPercentSize = table => {
const convertToPercentSizeWidth = table => {
const newWidth = getPercentTableWidth(table);
redistribute(table, Optional.some(newWidth), Optional.none());
cleanupLegacyAttributes(table);
};
const convertToPixelSize = table => {
const convertToPixelSizeWidth = table => {
const newWidth = getPixelTableWidth(table);
redistribute(table, Optional.some(newWidth), Optional.none());
cleanupLegacyAttributes(table);
};
const convertToNoneSize = table => {
const convertToPixelSizeHeight = table => {
const newHeight = getPixelTableHeight(table);
redistribute(table, Optional.none(), Optional.some(newHeight));
cleanupLegacyAttributes(table);
};
const convertToNoneSizeWidth = table => {
remove$5(table, 'width');
const columns = columns$1(table);
const rowElements = columns.length > 0 ? columns : cells$1(table);
@ -5269,11 +5296,11 @@
});
return descendant(getBody(editor), 'table[data-mce-id="__mce"]').map(table => {
if (isTablePixelsForced(editor)) {
convertToPixelSize(table);
convertToPixelSizeWidth(table);
} else if (isTableResponsiveForced(editor)) {
convertToNoneSize(table);
convertToNoneSizeWidth(table);
} else if (isTablePercentagesForced(editor) || isPercentage(defaultStyles.width)) {
convertToPercentSize(table);
convertToPercentSizeWidth(table);
}
removeDataStyle(table);
remove$7(table, 'data-mce-id');
@ -5350,11 +5377,11 @@
if (!isForcedSizing) {
table(cellOrCaption, isRoot).each(table => {
if (sizing === 'relative' && !isPercentSizing(table)) {
convertToPercentSize(table);
convertToPercentSizeWidth(table);
} else if (sizing === 'fixed' && !isPixelSizing(table)) {
convertToPixelSize(table);
convertToPixelSizeWidth(table);
} else if (sizing === 'responsive' && !isNoneSizing(table)) {
convertToNoneSize(table);
convertToNoneSizeWidth(table);
}
removeDataStyle(table);
fireTableModified(editor, table.dom, structureModified);
@ -6309,7 +6336,6 @@
const isCellClosestContentEditable = is(closest(event.target), singleCell, eq$1);
if (isNonEditableCell && isCellClosestContentEditable) {
annotations.selectRange(container, boxes, singleCell, singleCell);
bridge.selectContents(singleCell);
}
} else if (boxes.length > 1) {
annotations.selectRange(container, boxes, cellSel.start, cellSel.finish);
@ -6427,32 +6453,32 @@
};
const caretPositionFromPoint = (doc, x, y) => {
var _a, _b;
return Optional.from((_b = (_a = doc.dom).caretPositionFromPoint) === null || _b === void 0 ? void 0 : _b.call(_a, x, y)).bind(pos => {
var _a;
return Optional.from((_a = doc.caretPositionFromPoint) === null || _a === void 0 ? void 0 : _a.call(doc, x, y)).bind(pos => {
if (pos.offsetNode === null) {
return Optional.none();
}
const r = doc.dom.createRange();
const r = doc.createRange();
r.setStart(pos.offsetNode, pos.offset);
r.collapse();
return Optional.some(r);
});
};
const caretRangeFromPoint = (doc, x, y) => {
var _a, _b;
return Optional.from((_b = (_a = doc.dom).caretRangeFromPoint) === null || _b === void 0 ? void 0 : _b.call(_a, x, y));
var _a;
return Optional.from((_a = doc.caretRangeFromPoint) === null || _a === void 0 ? void 0 : _a.call(doc, x, y));
};
const availableSearch = (() => {
if (document.caretPositionFromPoint) {
return caretPositionFromPoint;
} else if (document.caretRangeFromPoint) {
return caretRangeFromPoint;
const availableSearch = (doc, x, y) => {
if (doc.caretPositionFromPoint) {
return caretPositionFromPoint(doc, x, y);
} else if (doc.caretRangeFromPoint) {
return caretRangeFromPoint(doc, x, y);
} else {
return Optional.none;
return Optional.none();
}
})();
};
const fromPoint = (win, x, y) => {
const doc = SugarElement.fromDom(win.document);
const doc = win.document;
return availableSearch(doc, x, y).map(rng => SimRange.create(SugarElement.fromDom(rng.startContainer), rng.startOffset, SugarElement.fromDom(rng.endContainer), rng.endOffset));
};
@ -6990,11 +7016,12 @@
const onSelection = (cells, start, finish) => {
const tableOpt = table(start);
tableOpt.each(table => {
const cellsDom = map$1(cells, cell => cell.dom);
const cloneFormats = getTableCloneElements(editor);
const generators = cellOperations(noop, SugarElement.fromDom(editor.getDoc()), cloneFormats);
const selectedCells = getCellsFromSelection(editor);
const otherCells = getOtherCells(table, { selection: selectedCells }, generators);
fireTableSelectionChange(editor, cells, start, finish, otherCells);
const otherCellsDom = getOtherCells(table, { selection: selectedCells }, generators).map(otherCells => map(otherCells, cellArr => map$1(cellArr, cell => cell.dom))).getOrUndefined();
fireTableSelectionChange(editor, cellsDom, start.dom, finish.dom, otherCellsDom);
});
};
const onClear = () => fireTableSelectionClear(editor);
@ -7780,7 +7807,7 @@
const table = event.table;
events.trigger.beforeResize(table, 'row');
const delta = hdirection.delta(event.delta, table);
adjustHeight(table, delta, event.row, hdirection);
adjustHeight(table, delta, event.row);
events.trigger.afterResize(table, 'row');
});
manager.events.startAdjust.bind(_event => {
@ -7863,7 +7890,7 @@
const isTable = node => isNonNullable(node) && node.nodeName === 'TABLE';
const barResizerPrefix = 'bar-';
const isResizable = elm => get$b(elm, 'data-mce-resize') !== 'false';
const syncPixels = table => {
const syncTableCellPixels = table => {
const warehouse = Warehouse.fromTable(table);
if (!Warehouse.hasColumns(warehouse)) {
each$2(cells$1(table), cell => {
@ -7873,19 +7900,29 @@
});
}
};
const isCornerResize = origin => startsWith(origin, 'corner-');
const getCornerLocation = origin => removeLeading(origin, 'corner-');
const TableResizeHandler = editor => {
const selectionRng = value();
const tableResize = value();
const resizeWire = value();
let startW;
let startRawW;
let startH;
let startRawH;
const lazySizing = table => get$5(editor, table);
const lazyResizingBehaviour = () => isPreserveTableColumnResizing(editor) ? preserveTable() : resizeTable();
const getNumColumns = table => getGridSize(table).columns;
const afterCornerResize = (table, origin, width) => {
const isRightEdgeResize = endsWith(origin, 'e');
const getNumRows = table => getGridSize(table).rows;
const afterCornerResize = (table, origin, width, height) => {
const location = getCornerLocation(origin);
const isRightEdgeResize = endsWith(location, 'e');
const isNorthEdgeResize = startsWith(location, 'n');
if (startRawW === '') {
convertToPercentSize(table);
convertToPercentSizeWidth(table);
}
if (startRawH === '') {
convertToPixelSizeHeight(table);
}
if (width !== startW && startRawW !== '') {
set$1(table, 'width', startRawW);
@ -7899,7 +7936,12 @@
set$1(table, 'width', targetPercentW + '%');
}
if (isPixel(startRawW)) {
syncPixels(table);
syncTableCellPixels(table);
}
if (height !== startH && startRawH !== '') {
set$1(table, 'height', startRawH);
const idx = isNorthEdgeResize ? 0 : getNumRows(table) - 1;
adjustHeight(table, height - startH, idx);
}
};
const destroy = () => {
@ -7916,7 +7958,9 @@
if (hasTableObjectResizing(editor) && hasTableResizeBars(editor)) {
const resizing = lazyResizingBehaviour();
const sz = TableResize.create(rawWire, resizing, lazySizing);
sz.on();
if (!editor.mode.isReadOnly()) {
sz.on();
}
sz.events.startDrag.bind(_event => {
selectionRng.set(editor.selection.getRng());
});
@ -7940,21 +7984,23 @@
});
editor.on('ObjectResizeStart', e => {
const targetElm = e.target;
if (isTable(targetElm)) {
if (isTable(targetElm) && !editor.mode.isReadOnly()) {
const table = SugarElement.fromDom(targetElm);
each$2(editor.dom.select('.mce-clonedresizable'), clone => {
editor.dom.addClass(clone, 'mce-' + getTableColumnResizingBehaviour(editor) + '-columns');
});
if (!isPixelSizing(table) && isTablePixelsForced(editor)) {
convertToPixelSize(table);
convertToPixelSizeWidth(table);
} else if (!isPercentSizing(table) && isTablePercentagesForced(editor)) {
convertToPercentSize(table);
convertToPercentSizeWidth(table);
}
if (isNoneSizing(table) && startsWith(e.origin, barResizerPrefix)) {
convertToPercentSize(table);
convertToPercentSizeWidth(table);
}
startW = e.width;
startRawW = isTableResponsiveForced(editor) ? '' : getRawWidth(editor, targetElm).getOr('');
startH = e.height;
startRawH = getRawHeight(editor, targetElm).getOr('');
}
});
editor.on('ObjectResized', e => {
@ -7962,8 +8008,8 @@
if (isTable(targetElm)) {
const table = SugarElement.fromDom(targetElm);
const origin = e.origin;
if (startsWith(origin, 'corner-')) {
afterCornerResize(table, origin, e.width);
if (isCornerResize(origin)) {
afterCornerResize(table, origin, e.width, e.height);
}
removeDataStyle(table);
fireTableModified(editor, table.dom, styleModified);
@ -7972,8 +8018,10 @@
editor.on('SwitchMode', () => {
tableResize.on(resize => {
if (editor.mode.isReadOnly()) {
resize.off();
resize.hideBars();
} else {
resize.on();
resize.showBars();
}
});

File diff suppressed because one or more lines are too long

View File

@ -1,6 +1,6 @@
{
"name": "tinymce",
"version": "6.4.1",
"version": "7.5.1",
"repository": {
"type": "git",
"url": "https://github.com/tinymce/tinymce.git",
@ -10,7 +10,7 @@
"author": "Ephox Corporation DBA Tiny Technologies, Inc",
"main": "tinymce.js",
"types": "tinymce.d.ts",
"license": "MIT",
"license": "GPL-2.0-or-later",
"keywords": [
"wysiwyg",
"tinymce",

View File

@ -0,0 +1,7 @@
// Exports the "accordion" plugin for usage with module loaders
// Usage:
// CommonJS:
// require('tinymce/plugins/accordion')
// ES2015:
// import 'tinymce/plugins/accordion'
require('./plugin.js');

File diff suppressed because it is too large Load Diff

File diff suppressed because one or more lines are too long

View File

@ -1,5 +1,5 @@
/**
* TinyMCE version 6.4.1 (2023-03-29)
* TinyMCE version 7.5.1 (TBD)
*/
(function () {
@ -162,7 +162,16 @@
const isWithinNonEditable = (editor, element) => element !== null && !editor.dom.isEditable(element);
const isWithinNonEditableList = (editor, element) => {
const parentList = editor.dom.getParent(element, 'ol,ul,dl');
return isWithinNonEditable(editor, parentList);
return isWithinNonEditable(editor, parentList) || !editor.selection.isEditable();
};
const setNodeChangeHandler = (editor, nodeChangeHandler) => {
const initialNode = editor.selection.getNode();
nodeChangeHandler({
parents: editor.dom.getParents(initialNode),
element: initialNode
});
editor.on('NodeChange', nodeChangeHandler);
return () => editor.off('NodeChange', nodeChangeHandler);
};
const styleValueToText = styleValue => {
@ -172,12 +181,13 @@
};
const normalizeStyleValue = styleValue => isNullable(styleValue) || styleValue === 'default' ? '' : styleValue;
const makeSetupHandler = (editor, nodeName) => api => {
const nodeChangeHandler = e => {
api.setActive(inList(editor, e.parents, nodeName));
api.setEnabled(!isWithinNonEditableList(editor, e.element));
const updateButtonState = (editor, parents) => {
const element = editor.selection.getStart(true);
api.setActive(inList(editor, parents, nodeName));
api.setEnabled(!isWithinNonEditableList(editor, element));
};
editor.on('NodeChange', nodeChangeHandler);
return () => editor.off('NodeChange', nodeChangeHandler);
const nodeChangeHandler = e => updateButtonState(editor, e.parents);
return setNodeChangeHandler(editor, nodeChangeHandler);
};
const addSplitButton = (editor, id, tooltip, cmd, nodeName, styles) => {
editor.ui.registry.addSplitButton(id, {
@ -239,7 +249,7 @@
register(editor);
register$2(editor);
} else {
console.error('Please use the Lists plugin together with the Advanced List plugin.');
console.error('Please use the Lists plugin together with the List Styles plugin.');
}
});
};

View File

@ -1,4 +1,4 @@
/**
* TinyMCE version 6.4.1 (2023-03-29)
* TinyMCE version 7.5.1 (TBD)
*/
!function(){"use strict";var t=tinymce.util.Tools.resolve("tinymce.PluginManager");const e=(t,e,s)=>{const r="UL"===e?"InsertUnorderedList":"InsertOrderedList";t.execCommand(r,!1,!1===s?null:{"list-style-type":s})},s=t=>e=>e.options.get(t),r=s("advlist_number_styles"),n=s("advlist_bullet_styles"),l=t=>null==t,i=t=>!l(t);var o=tinymce.util.Tools.resolve("tinymce.util.Tools");class a{constructor(t,e){this.tag=t,this.value=e}static some(t){return new a(!0,t)}static none(){return a.singletonNone}fold(t,e){return this.tag?e(this.value):t()}isSome(){return this.tag}isNone(){return!this.tag}map(t){return this.tag?a.some(t(this.value)):a.none()}bind(t){return this.tag?t(this.value):a.none()}exists(t){return this.tag&&t(this.value)}forall(t){return!this.tag||t(this.value)}filter(t){return!this.tag||t(this.value)?this:a.none()}getOr(t){return this.tag?this.value:t}or(t){return this.tag?this:t}getOrThunk(t){return this.tag?this.value:t()}orThunk(t){return this.tag?this:t()}getOrDie(t){if(this.tag)return this.value;throw new Error(null!=t?t:"Called getOrDie on None")}static from(t){return i(t)?a.some(t):a.none()}getOrNull(){return this.tag?this.value:null}getOrUndefined(){return this.value}each(t){this.tag&&t(this.value)}toArray(){return this.tag?[this.value]:[]}toString(){return this.tag?`some(${this.value})`:"none()"}}a.singletonNone=new a(!1);const u=t=>e=>i(e)&&t.test(e.nodeName),d=u(/^(OL|UL|DL)$/),g=u(/^(TH|TD)$/),h=t=>l(t)||"default"===t?"":t,c=(t,e)=>s=>{const r=r=>{s.setActive(((t,e,s)=>((t,e,s)=>{for(let e=0,n=t.length;e<n;e++){const n=t[e];if(d(r=n)&&!/\btox\-/.test(r.className))return a.some(n);if(s(n,e))break}var r;return a.none()})(e,0,g).exists((e=>e.nodeName===s&&((t,e)=>t.dom.isChildOf(e,t.getBody()))(t,e))))(t,r.parents,e)),s.setEnabled(!((t,e)=>{const s=t.dom.getParent(e,"ol,ul,dl");return((t,e)=>null!==e&&!t.dom.isEditable(e))(t,s)})(t,r.element))};return t.on("NodeChange",r),()=>t.off("NodeChange",r)},m=(t,s,r,n,l,i)=>{i.length>1?((t,s,r,n,l,i)=>{t.ui.registry.addSplitButton(s,{tooltip:r,icon:"OL"===l?"ordered-list":"unordered-list",presets:"listpreview",columns:3,fetch:t=>{t(o.map(i,(t=>{const e="OL"===l?"num":"bull",s="disc"===t||"decimal"===t?"default":t,r=h(t),n=(t=>t.replace(/\-/g," ").replace(/\b\w/g,(t=>t.toUpperCase())))(t);return{type:"choiceitem",value:r,icon:"list-"+e+"-"+s,text:n}})))},onAction:()=>t.execCommand(n),onItemAction:(s,r)=>{e(t,l,r)},select:e=>{const s=(t=>{const e=t.dom.getParent(t.selection.getNode(),"ol,ul"),s=t.dom.getStyle(e,"listStyleType");return a.from(s)})(t);return s.map((t=>e===t)).getOr(!1)},onSetup:c(t,l)})})(t,s,r,n,l,i):((t,s,r,n,l,i)=>{t.ui.registry.addToggleButton(s,{active:!1,tooltip:r,icon:"OL"===l?"ordered-list":"unordered-list",onSetup:c(t,l),onAction:()=>t.queryCommandState(n)||""===i?t.execCommand(n):e(t,l,i)})})(t,s,r,n,l,h(i[0]))};t.add("advlist",(t=>{t.hasPlugin("lists")?((t=>{const e=t.options.register;e("advlist_number_styles",{processor:"string[]",default:"default,lower-alpha,lower-greek,lower-roman,upper-alpha,upper-roman".split(",")}),e("advlist_bullet_styles",{processor:"string[]",default:"default,circle,square".split(",")})})(t),(t=>{m(t,"numlist","Numbered list","InsertOrderedList","OL",r(t)),m(t,"bullist","Bullet list","InsertUnorderedList","UL",n(t))})(t),(t=>{t.addCommand("ApplyUnorderedListStyle",((s,r)=>{e(t,"UL",r["list-style-type"])})),t.addCommand("ApplyOrderedListStyle",((s,r)=>{e(t,"OL",r["list-style-type"])}))})(t)):console.error("Please use the Lists plugin together with the Advanced List plugin.")}))}();
!function(){"use strict";var t=tinymce.util.Tools.resolve("tinymce.PluginManager");const e=(t,e,s)=>{const r="UL"===e?"InsertUnorderedList":"InsertOrderedList";t.execCommand(r,!1,!1===s?null:{"list-style-type":s})},s=t=>e=>e.options.get(t),r=s("advlist_number_styles"),n=s("advlist_bullet_styles"),l=t=>null==t,i=t=>!l(t);var o=tinymce.util.Tools.resolve("tinymce.util.Tools");class a{constructor(t,e){this.tag=t,this.value=e}static some(t){return new a(!0,t)}static none(){return a.singletonNone}fold(t,e){return this.tag?e(this.value):t()}isSome(){return this.tag}isNone(){return!this.tag}map(t){return this.tag?a.some(t(this.value)):a.none()}bind(t){return this.tag?t(this.value):a.none()}exists(t){return this.tag&&t(this.value)}forall(t){return!this.tag||t(this.value)}filter(t){return!this.tag||t(this.value)?this:a.none()}getOr(t){return this.tag?this.value:t}or(t){return this.tag?this:t}getOrThunk(t){return this.tag?this.value:t()}orThunk(t){return this.tag?this:t()}getOrDie(t){if(this.tag)return this.value;throw new Error(null!=t?t:"Called getOrDie on None")}static from(t){return i(t)?a.some(t):a.none()}getOrNull(){return this.tag?this.value:null}getOrUndefined(){return this.value}each(t){this.tag&&t(this.value)}toArray(){return this.tag?[this.value]:[]}toString(){return this.tag?`some(${this.value})`:"none()"}}a.singletonNone=new a(!1);const u=t=>e=>i(e)&&t.test(e.nodeName),d=u(/^(OL|UL|DL)$/),g=u(/^(TH|TD)$/),c=t=>l(t)||"default"===t?"":t,h=(t,e)=>s=>((t,e)=>{const s=t.selection.getNode();return e({parents:t.dom.getParents(s),element:s}),t.on("NodeChange",e),()=>t.off("NodeChange",e)})(t,(r=>((t,r)=>{const n=t.selection.getStart(!0);s.setActive(((t,e,s)=>((t,e,s)=>{for(let e=0,n=t.length;e<n;e++){const n=t[e];if(d(r=n)&&!/\btox\-/.test(r.className))return a.some(n);if(s(n,e))break}var r;return a.none()})(e,0,g).exists((e=>e.nodeName===s&&((t,e)=>t.dom.isChildOf(e,t.getBody()))(t,e))))(t,r,e)),s.setEnabled(!((t,e)=>{const s=t.dom.getParent(e,"ol,ul,dl");return((t,e)=>null!==e&&!t.dom.isEditable(e))(t,s)||!t.selection.isEditable()})(t,n))})(t,r.parents))),m=(t,s,r,n,l,i)=>{i.length>1?((t,s,r,n,l,i)=>{t.ui.registry.addSplitButton(s,{tooltip:r,icon:"OL"===l?"ordered-list":"unordered-list",presets:"listpreview",columns:3,fetch:t=>{t(o.map(i,(t=>{const e="OL"===l?"num":"bull",s="disc"===t||"decimal"===t?"default":t,r=c(t),n=(t=>t.replace(/\-/g," ").replace(/\b\w/g,(t=>t.toUpperCase())))(t);return{type:"choiceitem",value:r,icon:"list-"+e+"-"+s,text:n}})))},onAction:()=>t.execCommand(n),onItemAction:(s,r)=>{e(t,l,r)},select:e=>{const s=(t=>{const e=t.dom.getParent(t.selection.getNode(),"ol,ul"),s=t.dom.getStyle(e,"listStyleType");return a.from(s)})(t);return s.map((t=>e===t)).getOr(!1)},onSetup:h(t,l)})})(t,s,r,n,l,i):((t,s,r,n,l,i)=>{t.ui.registry.addToggleButton(s,{active:!1,tooltip:r,icon:"OL"===l?"ordered-list":"unordered-list",onSetup:h(t,l),onAction:()=>t.queryCommandState(n)||""===i?t.execCommand(n):e(t,l,i)})})(t,s,r,n,l,c(i[0]))};t.add("advlist",(t=>{t.hasPlugin("lists")?((t=>{const e=t.options.register;e("advlist_number_styles",{processor:"string[]",default:"default,lower-alpha,lower-greek,lower-roman,upper-alpha,upper-roman".split(",")}),e("advlist_bullet_styles",{processor:"string[]",default:"default,circle,square".split(",")})})(t),(t=>{m(t,"numlist","Numbered list","InsertOrderedList","OL",r(t)),m(t,"bullist","Bullet list","InsertUnorderedList","UL",n(t))})(t),(t=>{t.addCommand("ApplyUnorderedListStyle",((s,r)=>{e(t,"UL",r["list-style-type"])})),t.addCommand("ApplyOrderedListStyle",((s,r)=>{e(t,"OL",r["list-style-type"])}))})(t)):console.error("Please use the Lists plugin together with the List Styles plugin.")}))}();

View File

@ -1,5 +1,5 @@
/**
* TinyMCE version 6.4.1 (2023-03-29)
* TinyMCE version 7.5.1 (TBD)
*/
(function () {
@ -164,18 +164,36 @@
});
};
const onSetupEditable = editor => api => {
const nodeChanged = () => {
api.setEnabled(editor.selection.isEditable());
};
editor.on('NodeChange', nodeChanged);
nodeChanged();
return () => {
editor.off('NodeChange', nodeChanged);
};
};
const register = editor => {
const onAction = () => editor.execCommand('mceAnchor');
editor.ui.registry.addToggleButton('anchor', {
icon: 'bookmark',
tooltip: 'Anchor',
onAction,
onSetup: buttonApi => editor.selection.selectorChangedWithUnbind('a:not([href])', buttonApi.setActive).unbind
onSetup: buttonApi => {
const unbindSelectorChanged = editor.selection.selectorChangedWithUnbind('a:not([href])', buttonApi.setActive).unbind;
const unbindEditableChanged = onSetupEditable(editor)(buttonApi);
return () => {
unbindSelectorChanged();
unbindEditableChanged();
};
}
});
editor.ui.registry.addMenuItem('anchor', {
icon: 'bookmark',
text: 'Anchor...',
onAction
onAction,
onSetup: onSetupEditable(editor)
});
};

View File

@ -1,4 +1,4 @@
/**
* TinyMCE version 6.4.1 (2023-03-29)
* TinyMCE version 7.5.1 (TBD)
*/
!function(){"use strict";var e=tinymce.util.Tools.resolve("tinymce.PluginManager"),t=tinymce.util.Tools.resolve("tinymce.dom.RangeUtils"),o=tinymce.util.Tools.resolve("tinymce.util.Tools");const n=("allow_html_in_named_anchor",e=>e.options.get("allow_html_in_named_anchor"));const a="a:not([href])",r=e=>!e,i=e=>e.getAttribute("id")||e.getAttribute("name")||"",l=e=>(e=>"a"===e.nodeName.toLowerCase())(e)&&!e.getAttribute("href")&&""!==i(e),s=e=>e.dom.getParent(e.selection.getStart(),a),d=(e,a)=>{const r=s(e);r?((e,t,o)=>{o.removeAttribute("name"),o.id=t,e.addVisual(),e.undoManager.add()})(e,a,r):((e,a)=>{e.undoManager.transact((()=>{n(e)||e.selection.collapse(!0),e.selection.isCollapsed()?e.insertContent(e.dom.createHTML("a",{id:a})):((e=>{const n=e.dom;t(n).walk(e.selection.getRng(),(e=>{o.each(e,(e=>{var t;l(t=e)&&!t.firstChild&&n.remove(e,!1)}))}))})(e),e.formatter.remove("namedAnchor",void 0,void 0,!0),e.formatter.apply("namedAnchor",{value:a}),e.addVisual())}))})(e,a),e.focus()},c=e=>(e=>r(e.attr("href"))&&!r(e.attr("id")||e.attr("name")))(e)&&!e.firstChild,m=e=>t=>{for(let o=0;o<t.length;o++){const n=t[o];c(n)&&n.attr("contenteditable",e)}};e.add("anchor",(e=>{(e=>{(0,e.options.register)("allow_html_in_named_anchor",{processor:"boolean",default:!1})})(e),(e=>{e.on("PreInit",(()=>{e.parser.addNodeFilter("a",m("false")),e.serializer.addNodeFilter("a",m(null))}))})(e),(e=>{e.addCommand("mceAnchor",(()=>{(e=>{const t=(e=>{const t=s(e);return t?i(t):""})(e);e.windowManager.open({title:"Anchor",size:"normal",body:{type:"panel",items:[{name:"id",type:"input",label:"ID",placeholder:"example"}]},buttons:[{type:"cancel",name:"cancel",text:"Cancel"},{type:"submit",name:"save",text:"Save",primary:!0}],initialData:{id:t},onSubmit:t=>{((e,t)=>/^[A-Za-z][A-Za-z0-9\-:._]*$/.test(t)?(d(e,t),!0):(e.windowManager.alert("ID should start with a letter, followed only by letters, numbers, dashes, dots, colons or underscores."),!1))(e,t.getData().id)&&t.close()}})})(e)}))})(e),(e=>{const t=()=>e.execCommand("mceAnchor");e.ui.registry.addToggleButton("anchor",{icon:"bookmark",tooltip:"Anchor",onAction:t,onSetup:t=>e.selection.selectorChangedWithUnbind("a:not([href])",t.setActive).unbind}),e.ui.registry.addMenuItem("anchor",{icon:"bookmark",text:"Anchor...",onAction:t})})(e),e.on("PreInit",(()=>{(e=>{e.formatter.register("namedAnchor",{inline:"a",selector:a,remove:"all",split:!0,deep:!0,attributes:{id:"%value"},onmatch:(e,t,o)=>l(e)})})(e)}))}))}();
!function(){"use strict";var e=tinymce.util.Tools.resolve("tinymce.PluginManager"),t=tinymce.util.Tools.resolve("tinymce.dom.RangeUtils"),o=tinymce.util.Tools.resolve("tinymce.util.Tools");const n=("allow_html_in_named_anchor",e=>e.options.get("allow_html_in_named_anchor"));const a="a:not([href])",r=e=>!e,i=e=>e.getAttribute("id")||e.getAttribute("name")||"",l=e=>(e=>"a"===e.nodeName.toLowerCase())(e)&&!e.getAttribute("href")&&""!==i(e),s=e=>e.dom.getParent(e.selection.getStart(),a),d=(e,a)=>{const r=s(e);r?((e,t,o)=>{o.removeAttribute("name"),o.id=t,e.addVisual(),e.undoManager.add()})(e,a,r):((e,a)=>{e.undoManager.transact((()=>{n(e)||e.selection.collapse(!0),e.selection.isCollapsed()?e.insertContent(e.dom.createHTML("a",{id:a})):((e=>{const n=e.dom;t(n).walk(e.selection.getRng(),(e=>{o.each(e,(e=>{var t;l(t=e)&&!t.firstChild&&n.remove(e,!1)}))}))})(e),e.formatter.remove("namedAnchor",void 0,void 0,!0),e.formatter.apply("namedAnchor",{value:a}),e.addVisual())}))})(e,a),e.focus()},c=e=>(e=>r(e.attr("href"))&&!r(e.attr("id")||e.attr("name")))(e)&&!e.firstChild,m=e=>t=>{for(let o=0;o<t.length;o++){const n=t[o];c(n)&&n.attr("contenteditable",e)}},u=e=>t=>{const o=()=>{t.setEnabled(e.selection.isEditable())};return e.on("NodeChange",o),o(),()=>{e.off("NodeChange",o)}};e.add("anchor",(e=>{(e=>{(0,e.options.register)("allow_html_in_named_anchor",{processor:"boolean",default:!1})})(e),(e=>{e.on("PreInit",(()=>{e.parser.addNodeFilter("a",m("false")),e.serializer.addNodeFilter("a",m(null))}))})(e),(e=>{e.addCommand("mceAnchor",(()=>{(e=>{const t=(e=>{const t=s(e);return t?i(t):""})(e);e.windowManager.open({title:"Anchor",size:"normal",body:{type:"panel",items:[{name:"id",type:"input",label:"ID",placeholder:"example"}]},buttons:[{type:"cancel",name:"cancel",text:"Cancel"},{type:"submit",name:"save",text:"Save",primary:!0}],initialData:{id:t},onSubmit:t=>{((e,t)=>/^[A-Za-z][A-Za-z0-9\-:._]*$/.test(t)?(d(e,t),!0):(e.windowManager.alert("ID should start with a letter, followed only by letters, numbers, dashes, dots, colons or underscores."),!1))(e,t.getData().id)&&t.close()}})})(e)}))})(e),(e=>{const t=()=>e.execCommand("mceAnchor");e.ui.registry.addToggleButton("anchor",{icon:"bookmark",tooltip:"Anchor",onAction:t,onSetup:t=>{const o=e.selection.selectorChangedWithUnbind("a:not([href])",t.setActive).unbind,n=u(e)(t);return()=>{o(),n()}}}),e.ui.registry.addMenuItem("anchor",{icon:"bookmark",text:"Anchor...",onAction:t,onSetup:u(e)})})(e),e.on("PreInit",(()=>{(e=>{e.formatter.register("namedAnchor",{inline:"a",selector:a,remove:"all",split:!0,deep:!0,attributes:{id:"%value"},onmatch:(e,t,o)=>l(e)})})(e)}))}))}();

View File

@ -1,5 +1,5 @@
/**
* TinyMCE version 6.4.1 (2023-03-29)
* TinyMCE version 7.5.1 (TBD)
*/
(function () {
@ -110,7 +110,7 @@
const voidElements = editor.schema.getVoidElements();
const autoLinkPattern = getAutoLinkPattern(editor);
const {dom, selection} = editor;
if (dom.getParent(selection.getNode(), 'a[href]') !== null) {
if (dom.getParent(selection.getNode(), 'a[href]') !== null || editor.mode.isReadOnly()) {
return null;
}
const rng = selection.getRng();

View File

@ -1,4 +1,4 @@
/**
* TinyMCE version 6.4.1 (2023-03-29)
* TinyMCE version 7.5.1 (TBD)
*/
!function(){"use strict";var e=tinymce.util.Tools.resolve("tinymce.PluginManager");const t=e=>t=>t.options.get(e),n=t("autolink_pattern"),o=t("link_default_target"),r=t("link_default_protocol"),a=t("allow_unsafe_link_target"),s=("string",e=>"string"===(e=>{const t=typeof e;return null===e?"null":"object"===t&&Array.isArray(e)?"array":"object"===t&&(n=o=e,(r=String).prototype.isPrototypeOf(n)||(null===(a=o.constructor)||void 0===a?void 0:a.name)===r.name)?"string":t;var n,o,r,a})(e));const l=(void 0,e=>undefined===e);const i=e=>!(e=>null==e)(e),c=Object.hasOwnProperty,d=e=>"\ufeff"===e;var u=tinymce.util.Tools.resolve("tinymce.dom.TextSeeker");const f=e=>/^[(\[{ \u00a0]$/.test(e),g=(e,t,n)=>{for(let o=t-1;o>=0;o--){const t=e.charAt(o);if(!d(t)&&n(t))return o}return-1},m=(e,t)=>{var o;const a=e.schema.getVoidElements(),s=n(e),{dom:i,selection:d}=e;if(null!==i.getParent(d.getNode(),"a[href]"))return null;const m=d.getRng(),k=u(i,(e=>{return i.isBlock(e)||(t=a,n=e.nodeName.toLowerCase(),c.call(t,n))||"false"===i.getContentEditable(e);var t,n})),{container:p,offset:y}=((e,t)=>{let n=e,o=t;for(;1===n.nodeType&&n.childNodes[o];)n=n.childNodes[o],o=3===n.nodeType?n.data.length:n.childNodes.length;return{container:n,offset:o}})(m.endContainer,m.endOffset),h=null!==(o=i.getParent(p,i.isBlock))&&void 0!==o?o:i.getRoot(),w=k.backwards(p,y+t,((e,t)=>{const n=e.data,o=g(n,t,(r=f,e=>!r(e)));var r,a;return-1===o||(a=n[o],/[?!,.;:]/.test(a))?o:o+1}),h);if(!w)return null;let v=w.container;const _=k.backwards(w.container,w.offset,((e,t)=>{v=e;const n=g(e.data,t,f);return-1===n?n:n+1}),h),A=i.createRng();_?A.setStart(_.container,_.offset):A.setStart(v,0),A.setEnd(w.container,w.offset);const C=A.toString().replace(/\uFEFF/g,"").match(s);if(C){let t=C[0];return $="www.",(b=t).length>=$.length&&b.substr(0,0+$.length)===$?t=r(e)+"://"+t:((e,t,n=0,o)=>{const r=e.indexOf(t,n);return-1!==r&&(!!l(o)||r+t.length<=o)})(t,"@")&&!(e=>/^([A-Za-z][A-Za-z\d.+-]*:\/\/)|mailto:/.test(e))(t)&&(t="mailto:"+t),{rng:A,url:t}}var b,$;return null},k=(e,t)=>{const{dom:n,selection:r}=e,{rng:l,url:i}=t,c=r.getBookmark();r.setRng(l);const d="createlink",u={command:d,ui:!1,value:i};if(!e.dispatch("BeforeExecCommand",u).isDefaultPrevented()){e.getDoc().execCommand(d,!1,i),e.dispatch("ExecCommand",u);const t=o(e);if(s(t)){const o=r.getNode();n.setAttrib(o,"target",t),"_blank"!==t||a(e)||n.setAttrib(o,"rel","noopener")}}r.moveToBookmark(c),e.nodeChanged()},p=e=>{const t=m(e,-1);i(t)&&k(e,t)},y=p;e.add("autolink",(e=>{(e=>{const t=e.options.register;t("autolink_pattern",{processor:"regexp",default:new RegExp("^"+/(?:[A-Za-z][A-Za-z\d.+-]{0,14}:\/\/(?:[-.~*+=!&;:'%@?^${}(),\w]+@)?|www\.|[-;:&=+$,.\w]+@)[A-Za-z\d-]+(?:\.[A-Za-z\d-]+)*(?::\d+)?(?:\/(?:[-.~*+=!;:'%@$(),\/\w]*[-~*+=%@$()\/\w])?)?(?:\?(?:[-.~*+=!&;:'%@?^${}(),\/\w]+))?(?:#(?:[-.~*+=!&;:'%@?^${}(),\/\w]+))?/g.source+"$","i")}),t("link_default_target",{processor:"string"}),t("link_default_protocol",{processor:"string",default:"https"})})(e),(e=>{e.on("keydown",(t=>{13!==t.keyCode||t.isDefaultPrevented()||(e=>{const t=m(e,0);i(t)&&k(e,t)})(e)})),e.on("keyup",(t=>{32===t.keyCode?p(e):(48===t.keyCode&&t.shiftKey||221===t.keyCode)&&y(e)}))})(e)}))}();
!function(){"use strict";var e=tinymce.util.Tools.resolve("tinymce.PluginManager");const t=e=>t=>t.options.get(e),n=t("autolink_pattern"),o=t("link_default_target"),r=t("link_default_protocol"),a=t("allow_unsafe_link_target"),s=("string",e=>"string"===(e=>{const t=typeof e;return null===e?"null":"object"===t&&Array.isArray(e)?"array":"object"===t&&(n=o=e,(r=String).prototype.isPrototypeOf(n)||(null===(a=o.constructor)||void 0===a?void 0:a.name)===r.name)?"string":t;var n,o,r,a})(e));const l=(void 0,e=>undefined===e);const i=e=>!(e=>null==e)(e),c=Object.hasOwnProperty,d=e=>"\ufeff"===e;var u=tinymce.util.Tools.resolve("tinymce.dom.TextSeeker");const f=e=>/^[(\[{ \u00a0]$/.test(e),g=(e,t,n)=>{for(let o=t-1;o>=0;o--){const t=e.charAt(o);if(!d(t)&&n(t))return o}return-1},m=(e,t)=>{var o;const a=e.schema.getVoidElements(),s=n(e),{dom:i,selection:d}=e;if(null!==i.getParent(d.getNode(),"a[href]")||e.mode.isReadOnly())return null;const m=d.getRng(),k=u(i,(e=>{return i.isBlock(e)||(t=a,n=e.nodeName.toLowerCase(),c.call(t,n))||"false"===i.getContentEditable(e);var t,n})),{container:p,offset:y}=((e,t)=>{let n=e,o=t;for(;1===n.nodeType&&n.childNodes[o];)n=n.childNodes[o],o=3===n.nodeType?n.data.length:n.childNodes.length;return{container:n,offset:o}})(m.endContainer,m.endOffset),w=null!==(o=i.getParent(p,i.isBlock))&&void 0!==o?o:i.getRoot(),h=k.backwards(p,y+t,((e,t)=>{const n=e.data,o=g(n,t,(r=f,e=>!r(e)));var r,a;return-1===o||(a=n[o],/[?!,.;:]/.test(a))?o:o+1}),w);if(!h)return null;let v=h.container;const _=k.backwards(h.container,h.offset,((e,t)=>{v=e;const n=g(e.data,t,f);return-1===n?n:n+1}),w),A=i.createRng();_?A.setStart(_.container,_.offset):A.setStart(v,0),A.setEnd(h.container,h.offset);const C=A.toString().replace(/\uFEFF/g,"").match(s);if(C){let t=C[0];return $="www.",(b=t).length>=4&&b.substr(0,4)===$?t=r(e)+"://"+t:((e,t,n=0,o)=>{const r=e.indexOf(t,n);return-1!==r&&(!!l(o)||r+t.length<=o)})(t,"@")&&!(e=>/^([A-Za-z][A-Za-z\d.+-]*:\/\/)|mailto:/.test(e))(t)&&(t="mailto:"+t),{rng:A,url:t}}var b,$;return null},k=(e,t)=>{const{dom:n,selection:r}=e,{rng:l,url:i}=t,c=r.getBookmark();r.setRng(l);const d="createlink",u={command:d,ui:!1,value:i};if(!e.dispatch("BeforeExecCommand",u).isDefaultPrevented()){e.getDoc().execCommand(d,!1,i),e.dispatch("ExecCommand",u);const t=o(e);if(s(t)){const o=r.getNode();n.setAttrib(o,"target",t),"_blank"!==t||a(e)||n.setAttrib(o,"rel","noopener")}}r.moveToBookmark(c),e.nodeChanged()},p=e=>{const t=m(e,-1);i(t)&&k(e,t)},y=p;e.add("autolink",(e=>{(e=>{const t=e.options.register;t("autolink_pattern",{processor:"regexp",default:new RegExp("^"+/(?:[A-Za-z][A-Za-z\d.+-]{0,14}:\/\/(?:[-.~*+=!&;:'%@?^${}(),\w]+@)?|www\.|[-;:&=+$,.\w]+@)[A-Za-z\d-]+(?:\.[A-Za-z\d-]+)*(?::\d+)?(?:\/(?:[-.~*+=!;:'%@$(),\/\w]*[-~*+=%@$()\/\w])?)?(?:\?(?:[-.~*+=!&;:'%@?^${}(),\/\w]+))?(?:#(?:[-.~*+=!&;:'%@?^${}(),\/\w]+))?/g.source+"$","i")}),t("link_default_target",{processor:"string"}),t("link_default_protocol",{processor:"string",default:"https"})})(e),(e=>{e.on("keydown",(t=>{13!==t.keyCode||t.isDefaultPrevented()||(e=>{const t=m(e,0);i(t)&&k(e,t)})(e)})),e.on("keyup",(t=>{32===t.keyCode?p(e):(48===t.keyCode&&t.shiftKey||221===t.keyCode)&&y(e)}))})(e)}))}();

View File

@ -1,5 +1,5 @@
/**
* TinyMCE version 6.4.1 (2023-03-29)
* TinyMCE version 7.5.1 (TBD)
*/
(function () {
@ -21,12 +21,6 @@
var global$1 = tinymce.util.Tools.resolve('tinymce.PluginManager');
const constant = value => {
return () => {
return value;
};
};
var global = tinymce.util.Tools.resolve('tinymce.Env');
const fireResizeEditor = editor => editor.dispatch('ResizeEditor');
@ -105,10 +99,19 @@
} else {
toggleScrolling(editor, false);
}
if (resizeHeight !== oldSize.get()) {
const deltaSize = resizeHeight - oldSize.get();
const old = oldSize.get();
if (old.set) {
editor.dom.setStyles(editor.getDoc().documentElement, { 'min-height': 0 });
editor.dom.setStyles(editor.getBody(), { 'min-height': 'inherit' });
}
if (resizeHeight !== old.totalHeight && (contentHeight - resizeBottomMargin !== old.contentHeight || !old.set)) {
const deltaSize = resizeHeight - old.totalHeight;
dom.setStyle(editor.getContainer(), 'height', resizeHeight + 'px');
oldSize.set(resizeHeight);
oldSize.set({
totalHeight: resizeHeight,
contentHeight,
set: true
});
fireResizeEditor(editor);
if (global.browser.isSafari() && (global.os.isMacOS() || global.os.isiOS())) {
const win = editor.getWin();
@ -123,11 +126,8 @@
}
};
const setup = (editor, oldSize) => {
let getExtraMarginBottom = () => getAutoResizeBottomMargin(editor);
let resizeCounter;
let sizeAfterFirstResize;
const getExtraMarginBottom = () => getAutoResizeBottomMargin(editor);
editor.on('init', e => {
resizeCounter = 0;
const overflowPadding = getAutoResizeOverflowPadding(editor);
const dom = editor.dom;
dom.setStyles(editor.getDoc().documentElement, { height: 'auto' });
@ -144,26 +144,9 @@
});
}
resize(editor, oldSize, e, getExtraMarginBottom);
resizeCounter += 1;
});
editor.on('NodeChange SetContent keyup FullscreenStateChanged ResizeContent', e => {
if (resizeCounter === 1) {
sizeAfterFirstResize = editor.getContainer().offsetHeight;
resize(editor, oldSize, e, getExtraMarginBottom);
resizeCounter += 1;
} else if (resizeCounter === 2) {
const isLooping = sizeAfterFirstResize < editor.getContainer().offsetHeight;
if (isLooping) {
const dom = editor.dom;
const doc = editor.getDoc();
dom.setStyles(doc.documentElement, { 'min-height': 0 });
dom.setStyles(editor.getBody(), { 'min-height': 'inherit' });
}
getExtraMarginBottom = isLooping ? constant(0) : getExtraMarginBottom;
resizeCounter += 1;
} else {
resize(editor, oldSize, e, getExtraMarginBottom);
}
resize(editor, oldSize, e, getExtraMarginBottom);
});
};
@ -180,7 +163,11 @@
editor.options.set('resize', false);
}
if (!editor.inline) {
const oldSize = Cell(0);
const oldSize = Cell({
totalHeight: 0,
contentHeight: 0,
set: false
});
register(editor, oldSize);
setup(editor, oldSize);
}

View File

@ -1,4 +1,4 @@
/**
* TinyMCE version 6.4.1 (2023-03-29)
* TinyMCE version 7.5.1 (TBD)
*/
!function(){"use strict";var e=tinymce.util.Tools.resolve("tinymce.PluginManager"),t=tinymce.util.Tools.resolve("tinymce.Env");const o=e=>t=>t.options.get(e),s=o("min_height"),i=o("max_height"),n=o("autoresize_overflow_padding"),r=o("autoresize_bottom_margin"),l=(e,t)=>{const o=e.getBody();o&&(o.style.overflowY=t?"":"hidden",t||(o.scrollTop=0))},g=(e,t,o,s)=>{var i;const n=parseInt(null!==(i=e.getStyle(t,o,s))&&void 0!==i?i:"",10);return isNaN(n)?0:n},a=(e,o,r,c)=>{var d;const f=e.dom,u=e.getDoc();if(!u)return;if((e=>e.plugins.fullscreen&&e.plugins.fullscreen.isFullscreen())(e))return void l(e,!0);const m=u.documentElement,h=c?c():n(e),p=null!==(d=s(e))&&void 0!==d?d:e.getElement().offsetHeight;let y=p;const S=g(f,m,"margin-top",!0),v=g(f,m,"margin-bottom",!0);let C=m.offsetHeight+S+v+h;C<0&&(C=0);const b=e.getContainer().offsetHeight-e.getContentAreaContainer().offsetHeight;C+b>p&&(y=C+b);const w=i(e);if(w&&y>w?(y=w,l(e,!0)):l(e,!1),y!==o.get()){const s=y-o.get();if(f.setStyle(e.getContainer(),"height",y+"px"),o.set(y),(e=>{e.dispatch("ResizeEditor")})(e),t.browser.isSafari()&&(t.os.isMacOS()||t.os.isiOS())){const t=e.getWin();t.scrollTo(t.pageXOffset,t.pageYOffset)}e.hasFocus()&&(e=>{if("setcontent"===(null==e?void 0:e.type.toLowerCase())){const t=e;return!0===t.selection||!0===t.paste}return!1})(r)&&e.selection.scrollIntoView(),(t.browser.isSafari()||t.browser.isChromium())&&s<0&&a(e,o,r,c)}};e.add("autoresize",(e=>{if((e=>{const t=e.options.register;t("autoresize_overflow_padding",{processor:"number",default:1}),t("autoresize_bottom_margin",{processor:"number",default:50})})(e),e.options.isSet("resize")||e.options.set("resize",!1),!e.inline){const o=(e=>{let t=0;return{get:()=>t,set:e=>{t=e}}})();((e,t)=>{e.addCommand("mceAutoResize",(()=>{a(e,t)}))})(e,o),((e,o)=>{let s,i,l=()=>r(e);e.on("init",(i=>{s=0;const r=n(e),g=e.dom;g.setStyles(e.getDoc().documentElement,{height:"auto"}),t.browser.isEdge()||t.browser.isIE()?g.setStyles(e.getBody(),{paddingLeft:r,paddingRight:r,"min-height":0}):g.setStyles(e.getBody(),{paddingLeft:r,paddingRight:r}),a(e,o,i,l),s+=1})),e.on("NodeChange SetContent keyup FullscreenStateChanged ResizeContent",(t=>{if(1===s)i=e.getContainer().offsetHeight,a(e,o,t,l),s+=1;else if(2===s){const t=i<e.getContainer().offsetHeight;if(t){const t=e.dom,o=e.getDoc();t.setStyles(o.documentElement,{"min-height":0}),t.setStyles(e.getBody(),{"min-height":"inherit"})}l=t?(0,()=>0):l,s+=1}else a(e,o,t,l)}))})(e,o)}}))}();
!function(){"use strict";var e=tinymce.util.Tools.resolve("tinymce.PluginManager"),t=tinymce.util.Tools.resolve("tinymce.Env");const o=e=>t=>t.options.get(e),n=o("min_height"),s=o("max_height"),i=o("autoresize_overflow_padding"),r=o("autoresize_bottom_margin"),g=(e,t)=>{const o=e.getBody();o&&(o.style.overflowY=t?"":"hidden",t||(o.scrollTop=0))},l=(e,t,o,n)=>{var s;const i=parseInt(null!==(s=e.getStyle(t,o,n))&&void 0!==s?s:"",10);return isNaN(i)?0:i},a=(e,o,r,c)=>{var d;const u=e.dom,h=e.getDoc();if(!h)return;if((e=>e.plugins.fullscreen&&e.plugins.fullscreen.isFullscreen())(e))return void g(e,!0);const m=h.documentElement,f=c?c():i(e),p=null!==(d=n(e))&&void 0!==d?d:e.getElement().offsetHeight;let y=p;const S=l(u,m,"margin-top",!0),v=l(u,m,"margin-bottom",!0);let C=m.offsetHeight+S+v+f;C<0&&(C=0);const H=e.getContainer().offsetHeight-e.getContentAreaContainer().offsetHeight;C+H>p&&(y=C+H);const b=s(e);b&&y>b?(y=b,g(e,!0)):g(e,!1);const w=o.get();if(w.set&&(e.dom.setStyles(e.getDoc().documentElement,{"min-height":0}),e.dom.setStyles(e.getBody(),{"min-height":"inherit"})),y!==w.totalHeight&&(C-f!==w.contentHeight||!w.set)){const n=y-w.totalHeight;if(u.setStyle(e.getContainer(),"height",y+"px"),o.set({totalHeight:y,contentHeight:C,set:!0}),(e=>{e.dispatch("ResizeEditor")})(e),t.browser.isSafari()&&(t.os.isMacOS()||t.os.isiOS())){const t=e.getWin();t.scrollTo(t.pageXOffset,t.pageYOffset)}e.hasFocus()&&(e=>{if("setcontent"===(null==e?void 0:e.type.toLowerCase())){const t=e;return!0===t.selection||!0===t.paste}return!1})(r)&&e.selection.scrollIntoView(),(t.browser.isSafari()||t.browser.isChromium())&&n<0&&a(e,o,r,c)}};e.add("autoresize",(e=>{if((e=>{const t=e.options.register;t("autoresize_overflow_padding",{processor:"number",default:1}),t("autoresize_bottom_margin",{processor:"number",default:50})})(e),e.options.isSet("resize")||e.options.set("resize",!1),!e.inline){const o=(e=>{let t={totalHeight:0,contentHeight:0,set:!1};return{get:()=>t,set:e=>{t=e}}})();((e,t)=>{e.addCommand("mceAutoResize",(()=>{a(e,t)}))})(e,o),((e,o)=>{const n=()=>r(e);e.on("init",(s=>{const r=i(e),g=e.dom;g.setStyles(e.getDoc().documentElement,{height:"auto"}),t.browser.isEdge()||t.browser.isIE()?g.setStyles(e.getBody(),{paddingLeft:r,paddingRight:r,"min-height":0}):g.setStyles(e.getBody(),{paddingLeft:r,paddingRight:r}),a(e,o,s,n)})),e.on("NodeChange SetContent keyup FullscreenStateChanged ResizeContent",(t=>{a(e,o,t,n)}))})(e,o)}}))}();

View File

@ -1,5 +1,5 @@
/**
* TinyMCE version 6.4.1 (2023-03-29)
* TinyMCE version 7.5.1 (TBD)
*/
(function () {
@ -190,8 +190,9 @@
};
const makeSetupHandler = editor => api => {
api.setEnabled(hasDraft(editor));
const editorEventCallback = () => api.setEnabled(hasDraft(editor));
const shouldEnable = () => hasDraft(editor) && !editor.mode.isReadOnly();
api.setEnabled(shouldEnable());
const editorEventCallback = () => api.setEnabled(shouldEnable());
editor.on('StoreDraft RestoreDraft RemoveDraft', editorEventCallback);
return () => editor.off('StoreDraft RestoreDraft RemoveDraft', editorEventCallback);
};

View File

@ -1,4 +1,4 @@
/**
* TinyMCE version 6.4.1 (2023-03-29)
* TinyMCE version 7.5.1 (TBD)
*/
!function(){"use strict";var t=tinymce.util.Tools.resolve("tinymce.PluginManager");const e=("string",t=>"string"===(t=>{const e=typeof t;return null===t?"null":"object"===e&&Array.isArray(t)?"array":"object"===e&&(r=o=t,(a=String).prototype.isPrototypeOf(r)||(null===(s=o.constructor)||void 0===s?void 0:s.name)===a.name)?"string":e;var r,o,a,s})(t));const r=(void 0,t=>undefined===t);var o=tinymce.util.Tools.resolve("tinymce.util.Delay"),a=tinymce.util.Tools.resolve("tinymce.util.LocalStorage"),s=tinymce.util.Tools.resolve("tinymce.util.Tools");const n=t=>{const e=/^(\d+)([ms]?)$/.exec(t);return(e&&e[2]?{s:1e3,m:6e4}[e[2]]:1)*parseInt(t,10)},i=t=>e=>e.options.get(t),u=i("autosave_ask_before_unload"),l=i("autosave_restore_when_empty"),c=i("autosave_interval"),d=i("autosave_retention"),m=t=>{const e=document.location;return t.options.get("autosave_prefix").replace(/{path}/g,e.pathname).replace(/{query}/g,e.search).replace(/{hash}/g,e.hash).replace(/{id}/g,t.id)},v=(t,e)=>{if(r(e))return t.dom.isEmpty(t.getBody());{const r=s.trim(e);if(""===r)return!0;{const e=(new DOMParser).parseFromString(r,"text/html");return t.dom.isEmpty(e)}}},f=t=>{var e;const r=parseInt(null!==(e=a.getItem(m(t)+"time"))&&void 0!==e?e:"0",10)||0;return!((new Date).getTime()-r>d(t)&&(p(t,!1),1))},p=(t,e)=>{const r=m(t);a.removeItem(r+"draft"),a.removeItem(r+"time"),!1!==e&&(t=>{t.dispatch("RemoveDraft")})(t)},g=t=>{const e=m(t);!v(t)&&t.isDirty()&&(a.setItem(e+"draft",t.getContent({format:"raw",no_events:!0})),a.setItem(e+"time",(new Date).getTime().toString()),(t=>{t.dispatch("StoreDraft")})(t))},y=t=>{var e;const r=m(t);f(t)&&(t.setContent(null!==(e=a.getItem(r+"draft"))&&void 0!==e?e:"",{format:"raw"}),(t=>{t.dispatch("RestoreDraft")})(t))};var D=tinymce.util.Tools.resolve("tinymce.EditorManager");const h=t=>e=>{e.setEnabled(f(t));const r=()=>e.setEnabled(f(t));return t.on("StoreDraft RestoreDraft RemoveDraft",r),()=>t.off("StoreDraft RestoreDraft RemoveDraft",r)};t.add("autosave",(t=>((t=>{const r=t.options.register,o=t=>{const r=e(t);return r?{value:n(t),valid:r}:{valid:!1,message:"Must be a string."}};r("autosave_ask_before_unload",{processor:"boolean",default:!0}),r("autosave_prefix",{processor:"string",default:"tinymce-autosave-{path}{query}{hash}-{id}-"}),r("autosave_restore_when_empty",{processor:"boolean",default:!1}),r("autosave_interval",{processor:o,default:"30s"}),r("autosave_retention",{processor:o,default:"20m"})})(t),(t=>{t.editorManager.on("BeforeUnload",(t=>{let e;s.each(D.get(),(t=>{t.plugins.autosave&&t.plugins.autosave.storeDraft(),!e&&t.isDirty()&&u(t)&&(e=t.translate("You have unsaved changes are you sure you want to navigate away?"))})),e&&(t.preventDefault(),t.returnValue=e)}))})(t),(t=>{(t=>{const e=c(t);o.setEditorInterval(t,(()=>{g(t)}),e)})(t);const e=()=>{(t=>{t.undoManager.transact((()=>{y(t),p(t)})),t.focus()})(t)};t.ui.registry.addButton("restoredraft",{tooltip:"Restore last draft",icon:"restore-draft",onAction:e,onSetup:h(t)}),t.ui.registry.addMenuItem("restoredraft",{text:"Restore last draft",icon:"restore-draft",onAction:e,onSetup:h(t)})})(t),t.on("init",(()=>{l(t)&&t.dom.isEmpty(t.getBody())&&y(t)})),(t=>({hasDraft:()=>f(t),storeDraft:()=>g(t),restoreDraft:()=>y(t),removeDraft:e=>p(t,e),isEmpty:e=>v(t,e)}))(t))))}();
!function(){"use strict";var t=tinymce.util.Tools.resolve("tinymce.PluginManager");const e=("string",t=>"string"===(t=>{const e=typeof t;return null===t?"null":"object"===e&&Array.isArray(t)?"array":"object"===e&&(r=o=t,(a=String).prototype.isPrototypeOf(r)||(null===(s=o.constructor)||void 0===s?void 0:s.name)===a.name)?"string":e;var r,o,a,s})(t));const r=(void 0,t=>undefined===t);var o=tinymce.util.Tools.resolve("tinymce.util.Delay"),a=tinymce.util.Tools.resolve("tinymce.util.LocalStorage"),s=tinymce.util.Tools.resolve("tinymce.util.Tools");const n=t=>{const e=/^(\d+)([ms]?)$/.exec(t);return(e&&e[2]?{s:1e3,m:6e4}[e[2]]:1)*parseInt(t,10)},i=t=>e=>e.options.get(t),u=i("autosave_ask_before_unload"),l=i("autosave_restore_when_empty"),c=i("autosave_interval"),d=i("autosave_retention"),m=t=>{const e=document.location;return t.options.get("autosave_prefix").replace(/{path}/g,e.pathname).replace(/{query}/g,e.search).replace(/{hash}/g,e.hash).replace(/{id}/g,t.id)},v=(t,e)=>{if(r(e))return t.dom.isEmpty(t.getBody());{const r=s.trim(e);if(""===r)return!0;{const e=(new DOMParser).parseFromString(r,"text/html");return t.dom.isEmpty(e)}}},f=t=>{var e;const r=parseInt(null!==(e=a.getItem(m(t)+"time"))&&void 0!==e?e:"0",10)||0;return!((new Date).getTime()-r>d(t)&&(p(t,!1),1))},p=(t,e)=>{const r=m(t);a.removeItem(r+"draft"),a.removeItem(r+"time"),!1!==e&&(t=>{t.dispatch("RemoveDraft")})(t)},g=t=>{const e=m(t);!v(t)&&t.isDirty()&&(a.setItem(e+"draft",t.getContent({format:"raw",no_events:!0})),a.setItem(e+"time",(new Date).getTime().toString()),(t=>{t.dispatch("StoreDraft")})(t))},y=t=>{var e;const r=m(t);f(t)&&(t.setContent(null!==(e=a.getItem(r+"draft"))&&void 0!==e?e:"",{format:"raw"}),(t=>{t.dispatch("RestoreDraft")})(t))};var D=tinymce.util.Tools.resolve("tinymce.EditorManager");const h=t=>e=>{const r=()=>f(t)&&!t.mode.isReadOnly();e.setEnabled(r());const o=()=>e.setEnabled(r());return t.on("StoreDraft RestoreDraft RemoveDraft",o),()=>t.off("StoreDraft RestoreDraft RemoveDraft",o)};t.add("autosave",(t=>((t=>{const r=t.options.register,o=t=>{const r=e(t);return r?{value:n(t),valid:r}:{valid:!1,message:"Must be a string."}};r("autosave_ask_before_unload",{processor:"boolean",default:!0}),r("autosave_prefix",{processor:"string",default:"tinymce-autosave-{path}{query}{hash}-{id}-"}),r("autosave_restore_when_empty",{processor:"boolean",default:!1}),r("autosave_interval",{processor:o,default:"30s"}),r("autosave_retention",{processor:o,default:"20m"})})(t),(t=>{t.editorManager.on("BeforeUnload",(t=>{let e;s.each(D.get(),(t=>{t.plugins.autosave&&t.plugins.autosave.storeDraft(),!e&&t.isDirty()&&u(t)&&(e=t.translate("You have unsaved changes are you sure you want to navigate away?"))})),e&&(t.preventDefault(),t.returnValue=e)}))})(t),(t=>{(t=>{const e=c(t);o.setEditorInterval(t,(()=>{g(t)}),e)})(t);const e=()=>{(t=>{t.undoManager.transact((()=>{y(t),p(t)})),t.focus()})(t)};t.ui.registry.addButton("restoredraft",{tooltip:"Restore last draft",icon:"restore-draft",onAction:e,onSetup:h(t)}),t.ui.registry.addMenuItem("restoredraft",{text:"Restore last draft",icon:"restore-draft",onAction:e,onSetup:h(t)})})(t),t.on("init",(()=>{l(t)&&t.dom.isEmpty(t.getBody())&&y(t)})),(t=>({hasDraft:()=>f(t),storeDraft:()=>g(t),restoreDraft:()=>y(t),removeDraft:e=>p(t,e),isEmpty:e=>v(t,e)}))(t))))}();

View File

@ -1,5 +1,5 @@
/**
* TinyMCE version 6.4.1 (2023-03-29)
* TinyMCE version 7.5.1 (TBD)
*/
(function () {
@ -1616,17 +1616,29 @@
});
};
const onSetupEditable = editor => api => {
const nodeChanged = () => {
api.setEnabled(editor.selection.isEditable());
};
editor.on('NodeChange', nodeChanged);
nodeChanged();
return () => {
editor.off('NodeChange', nodeChanged);
};
};
const register = editor => {
const onAction = () => editor.execCommand('mceShowCharmap');
editor.ui.registry.addButton('charmap', {
icon: 'insert-character',
tooltip: 'Special character',
onAction
onAction,
onSetup: onSetupEditable(editor)
});
editor.ui.registry.addMenuItem('charmap', {
icon: 'insert-character',
text: 'Special character...',
onAction
onAction,
onSetup: onSetupEditable(editor)
});
};

File diff suppressed because one or more lines are too long

View File

@ -1,5 +1,5 @@
/**
* TinyMCE version 6.4.1 (2023-03-29)
* TinyMCE version 7.5.1 (TBD)
*/
(function () {

View File

@ -1,4 +1,4 @@
/**
* TinyMCE version 6.4.1 (2023-03-29)
* TinyMCE version 7.5.1 (TBD)
*/
!function(){"use strict";tinymce.util.Tools.resolve("tinymce.PluginManager").add("code",(e=>((e=>{e.addCommand("mceCodeEditor",(()=>{(e=>{const o=(e=>e.getContent({source_view:!0}))(e);e.windowManager.open({title:"Source Code",size:"large",body:{type:"panel",items:[{type:"textarea",name:"code"}]},buttons:[{type:"cancel",name:"cancel",text:"Cancel"},{type:"submit",name:"save",text:"Save",primary:!0}],initialData:{code:o},onSubmit:o=>{((e,o)=>{e.focus(),e.undoManager.transact((()=>{e.setContent(o)})),e.selection.setCursorLocation(),e.nodeChanged()})(e,o.getData().code),o.close()}})})(e)}))})(e),(e=>{const o=()=>e.execCommand("mceCodeEditor");e.ui.registry.addButton("code",{icon:"sourcecode",tooltip:"Source code",onAction:o}),e.ui.registry.addMenuItem("code",{icon:"sourcecode",text:"Source code",onAction:o})})(e),{})))}();

View File

@ -1,5 +1,5 @@
/**
* TinyMCE version 6.4.1 (2023-03-29)
* TinyMCE version 7.5.1 (TBD)
*/
(function () {
@ -10,6 +10,8 @@
const isNullable = a => a === null || a === undefined;
const isNonNullable = a => !isNullable(a);
const noop = () => {
};
const constant = value => {
return () => {
return value;
@ -1222,7 +1224,7 @@
Prism.languages.css = {
'comment': /\/\*[\s\S]*?\*\//,
'atrule': {
pattern: /@[\w-](?:[^;{\s]|\s+(?![\s{]))*(?:;|(?=\s*\{))/,
pattern: RegExp('@[\\w-](?:' + /[^;{\s"']|\s+(?!\s)/.source + '|' + string.source + ')*?' + /(?:;|(?=\s*\{))/.source),
inside: {
'rule': /^@[\w-]+/,
'selector-function-argument': {
@ -1319,7 +1321,8 @@
'operator': {
pattern: /(^|[^.])(?:<<=?|>>>?=?|->|--|\+\+|&&|\|\||::|[?:~]|[-+*/%&|^!=<>]=?)/m,
lookbehind: true
}
},
'constant': /\b[A-Z][A-Z_\d]+\b/
});
Prism.languages.insertBefore('java', 'string', {
'triple-quoted-string': {
@ -1549,7 +1552,10 @@
pattern: /^=/,
alias: 'attr-equals'
},
/"|'/
{
pattern: /^(\s*)["']|["']$/,
lookbehind: true
}
]
}
},
@ -2300,7 +2306,7 @@
type: 'panel',
items: [
{
type: 'selectbox',
type: 'listbox',
name: 'language',
label: 'Language',
items: languages
@ -2405,6 +2411,17 @@
});
};
const onSetupEditable = (editor, onChanged = noop) => api => {
const nodeChanged = () => {
api.setEnabled(editor.selection.isEditable());
onChanged(api);
};
editor.on('NodeChange', nodeChanged);
nodeChanged();
return () => {
editor.off('NodeChange', nodeChanged);
};
};
const isCodeSampleSelection = editor => {
const node = editor.selection.getStart();
return editor.dom.is(node, 'pre[class*="language-"]');
@ -2415,18 +2432,15 @@
icon: 'code-sample',
tooltip: 'Insert/edit code sample',
onAction,
onSetup: api => {
const nodeChangeHandler = () => {
api.setActive(isCodeSampleSelection(editor));
};
editor.on('NodeChange', nodeChangeHandler);
return () => editor.off('NodeChange', nodeChangeHandler);
}
onSetup: onSetupEditable(editor, api => {
api.setActive(isCodeSampleSelection(editor));
})
});
editor.ui.registry.addMenuItem('codesample', {
text: 'Code sample...',
icon: 'code-sample',
onAction
onAction,
onSetup: onSetupEditable(editor)
});
};

File diff suppressed because one or more lines are too long

View File

@ -1,5 +1,5 @@
/**
* TinyMCE version 6.4.1 (2023-03-29)
* TinyMCE version 7.5.1 (TBD)
*/
(function () {
@ -163,7 +163,6 @@
return r;
};
const DOCUMENT = 9;
const DOCUMENT_FRAGMENT = 11;
const ELEMENT = 1;
const TEXT = 3;
@ -234,12 +233,9 @@
const isType = t => element => type(element) === t;
const isElement = isType(ELEMENT);
const isText = isType(TEXT);
const isDocument = isType(DOCUMENT);
const isDocumentFragment = isType(DOCUMENT_FRAGMENT);
const isTag = tag => e => isElement(e) && name(e) === tag;
const owner = element => SugarElement.fromDom(element.dom.ownerDocument);
const documentOrOwner = dos => isDocument(dos) ? dos : owner(dos);
const parent = element => Optional.from(element.dom.parentNode).map(SugarElement.fromDom);
const children$2 = element => map(element.dom.childNodes, SugarElement.fromDom);
@ -259,8 +255,7 @@
};
const isShadowRoot = dos => isDocumentFragment(dos) && isNonNullable(dos.dom.host);
const supported = isFunction(Element.prototype.attachShadow) && isFunction(Node.prototype.getRootNode);
const getRootNode = supported ? e => SugarElement.fromDom(e.dom.getRootNode()) : documentOrOwner;
const getRootNode = e => SugarElement.fromDom(e.dom.getRootNode());
const getShadowRoot = e => {
const r = getRootNode(e);
return isShadowRoot(r) ? Optional.some(r) : Optional.none();
@ -315,27 +310,36 @@
return normalizedElement.getOr(element);
};
const isListItem = isTag('li');
const setDir = (editor, dir) => {
const selectedBlocks = editor.selection.getSelectedBlocks();
if (selectedBlocks.length > 0) {
each(selectedBlocks, block => {
const blockElement = SugarElement.fromDom(block);
const isBlockElementListItem = isListItem(blockElement);
const normalizedBlock = getNormalizedBlock(blockElement, isBlockElementListItem);
const normalizedBlockParent = getParentElement(normalizedBlock);
normalizedBlockParent.each(parent => {
const parentDirection = getDirection(parent);
if (parentDirection !== dir) {
set(normalizedBlock, 'dir', dir);
} else if (getDirection(normalizedBlock) !== dir) {
remove(normalizedBlock, 'dir');
}
if (isBlockElementListItem) {
const listItems = children(normalizedBlock, 'li[dir]');
each(listItems, listItem => remove(listItem, 'dir'));
}
});
const setDirOnElements = (dom, blocks, dir) => {
each(blocks, block => {
const blockElement = SugarElement.fromDom(block);
const isBlockElementListItem = isListItem(blockElement);
const normalizedBlock = getNormalizedBlock(blockElement, isBlockElementListItem);
const normalizedBlockParent = getParentElement(normalizedBlock);
normalizedBlockParent.each(parent => {
dom.setStyle(normalizedBlock.dom, 'direction', null);
const parentDirection = getDirection(parent);
if (parentDirection === dir) {
remove(normalizedBlock, 'dir');
} else {
set(normalizedBlock, 'dir', dir);
}
if (getDirection(normalizedBlock) !== dir) {
dom.setStyle(normalizedBlock.dom, 'direction', dir);
}
if (isBlockElementListItem) {
const listItems = children(normalizedBlock, 'li[dir],li[style]');
each(listItems, listItem => {
remove(listItem, 'dir');
dom.setStyle(listItem.dom, 'direction', null);
});
}
});
});
};
const setDir = (editor, dir) => {
if (editor.selection.isEditable()) {
setDirOnElements(editor.dom, editor.selection.getSelectedBlocks(), dir);
editor.nodeChanged();
}
};
@ -353,8 +357,10 @@
const nodeChangeHandler = e => {
const element = SugarElement.fromDom(e.element);
api.setActive(getDirection(element) === dir);
api.setEnabled(editor.selection.isEditable());
};
editor.on('NodeChange', nodeChangeHandler);
api.setEnabled(editor.selection.isEditable());
return () => editor.off('NodeChange', nodeChangeHandler);
};
const register = editor => {

View File

@ -1,4 +1,4 @@
/**
* TinyMCE version 6.4.1 (2023-03-29)
* TinyMCE version 7.5.1 (TBD)
*/
!function(){"use strict";var t=tinymce.util.Tools.resolve("tinymce.PluginManager");const e=t=>e=>typeof e===t,o=t=>"string"===(t=>{const e=typeof t;return null===t?"null":"object"===e&&Array.isArray(t)?"array":"object"===e&&(o=r=t,(n=String).prototype.isPrototypeOf(o)||(null===(i=r.constructor)||void 0===i?void 0:i.name)===n.name)?"string":e;var o,r,n,i})(t),r=e("boolean"),n=t=>!(t=>null==t)(t),i=e("function"),s=e("number"),l=(!1,()=>false);class a{constructor(t,e){this.tag=t,this.value=e}static some(t){return new a(!0,t)}static none(){return a.singletonNone}fold(t,e){return this.tag?e(this.value):t()}isSome(){return this.tag}isNone(){return!this.tag}map(t){return this.tag?a.some(t(this.value)):a.none()}bind(t){return this.tag?t(this.value):a.none()}exists(t){return this.tag&&t(this.value)}forall(t){return!this.tag||t(this.value)}filter(t){return!this.tag||t(this.value)?this:a.none()}getOr(t){return this.tag?this.value:t}or(t){return this.tag?this:t}getOrThunk(t){return this.tag?this.value:t()}orThunk(t){return this.tag?this:t()}getOrDie(t){if(this.tag)return this.value;throw new Error(null!=t?t:"Called getOrDie on None")}static from(t){return n(t)?a.some(t):a.none()}getOrNull(){return this.tag?this.value:null}getOrUndefined(){return this.value}each(t){this.tag&&t(this.value)}toArray(){return this.tag?[this.value]:[]}toString(){return this.tag?`some(${this.value})`:"none()"}}a.singletonNone=new a(!1);const u=(t,e)=>{for(let o=0,r=t.length;o<r;o++)e(t[o],o)},c=t=>{if(null==t)throw new Error("Node cannot be null or undefined");return{dom:t}},d=c,h=(t,e)=>{const o=t.dom;if(1!==o.nodeType)return!1;{const t=o;if(void 0!==t.matches)return t.matches(e);if(void 0!==t.msMatchesSelector)return t.msMatchesSelector(e);if(void 0!==t.webkitMatchesSelector)return t.webkitMatchesSelector(e);if(void 0!==t.mozMatchesSelector)return t.mozMatchesSelector(e);throw new Error("Browser lacks native selectors")}};"undefined"!=typeof window?window:Function("return this;")();const m=t=>e=>(t=>t.dom.nodeType)(e)===t,g=m(1),f=m(3),v=m(9),p=m(11),y=(t,e)=>{t.dom.removeAttribute(e)},w=i(Element.prototype.attachShadow)&&i(Node.prototype.getRootNode)?t=>d(t.dom.getRootNode()):t=>v(t)?t:d(t.dom.ownerDocument),N=t=>d(t.dom.host),b=t=>{const e=f(t)?t.dom.parentNode:t.dom;if(null==e||null===e.ownerDocument)return!1;const o=e.ownerDocument;return(t=>{const e=w(t);return p(o=e)&&n(o.dom.host)?a.some(e):a.none();var o})(d(e)).fold((()=>o.body.contains(e)),(r=b,i=N,t=>r(i(t))));var r,i},S=t=>"rtl"===((t,e)=>{const o=t.dom,r=window.getComputedStyle(o).getPropertyValue(e);return""!==r||b(t)?r:((t,e)=>(t=>void 0!==t.style&&i(t.style.getPropertyValue))(t)?t.style.getPropertyValue(e):"")(o,e)})(t,"direction")?"rtl":"ltr",A=(t,e)=>((t,o)=>((t,e)=>{const o=[];for(let r=0,n=t.length;r<n;r++){const n=t[r];e(n,r)&&o.push(n)}return o})(((t,e)=>{const o=t.length,r=new Array(o);for(let n=0;n<o;n++){const o=t[n];r[n]=e(o,n)}return r})(t.dom.childNodes,d),(t=>h(t,e))))(t),T=("li",t=>g(t)&&"li"===t.dom.nodeName.toLowerCase());const C=(t,e)=>{const n=t.selection.getSelectedBlocks();n.length>0&&(u(n,(t=>{const n=d(t),c=T(n),m=((t,e)=>{return(e?(o=t,r="ol,ul",((t,e,o)=>{let n=t.dom;const s=i(o)?o:l;for(;n.parentNode;){n=n.parentNode;const t=d(n);if(h(t,r))return a.some(t);if(s(t))break}return a.none()})(o,0,n)):a.some(t)).getOr(t);var o,r,n})(n,c);var f;(f=m,(t=>a.from(t.dom.parentNode).map(d))(f).filter(g)).each((t=>{if(S(t)!==e?((t,e,n)=>{((t,e,n)=>{if(!(o(n)||r(n)||s(n)))throw console.error("Invalid call to Attribute.set. Key ",e,":: Value ",n,":: Element ",t),new Error("Attribute value was not simple");t.setAttribute(e,n+"")})(t.dom,e,n)})(m,"dir",e):S(m)!==e&&y(m,"dir"),c){const t=A(m,"li[dir]");u(t,(t=>y(t,"dir")))}}))})),t.nodeChanged())},D=(t,e)=>o=>{const r=t=>{const r=d(t.element);o.setActive(S(r)===e)};return t.on("NodeChange",r),()=>t.off("NodeChange",r)};t.add("directionality",(t=>{(t=>{t.addCommand("mceDirectionLTR",(()=>{C(t,"ltr")})),t.addCommand("mceDirectionRTL",(()=>{C(t,"rtl")}))})(t),(t=>{t.ui.registry.addToggleButton("ltr",{tooltip:"Left to right",icon:"ltr",onAction:()=>t.execCommand("mceDirectionLTR"),onSetup:D(t,"ltr")}),t.ui.registry.addToggleButton("rtl",{tooltip:"Right to left",icon:"rtl",onAction:()=>t.execCommand("mceDirectionRTL"),onSetup:D(t,"rtl")})})(t)}))}();
!function(){"use strict";var t=tinymce.util.Tools.resolve("tinymce.PluginManager");const e=t=>e=>typeof e===t,o=t=>"string"===(t=>{const e=typeof t;return null===t?"null":"object"===e&&Array.isArray(t)?"array":"object"===e&&(o=r=t,(n=String).prototype.isPrototypeOf(o)||(null===(i=r.constructor)||void 0===i?void 0:i.name)===n.name)?"string":e;var o,r,n,i})(t),r=e("boolean"),n=t=>!(t=>null==t)(t),i=e("function"),s=e("number"),l=(!1,()=>false);class a{constructor(t,e){this.tag=t,this.value=e}static some(t){return new a(!0,t)}static none(){return a.singletonNone}fold(t,e){return this.tag?e(this.value):t()}isSome(){return this.tag}isNone(){return!this.tag}map(t){return this.tag?a.some(t(this.value)):a.none()}bind(t){return this.tag?t(this.value):a.none()}exists(t){return this.tag&&t(this.value)}forall(t){return!this.tag||t(this.value)}filter(t){return!this.tag||t(this.value)?this:a.none()}getOr(t){return this.tag?this.value:t}or(t){return this.tag?this:t}getOrThunk(t){return this.tag?this.value:t()}orThunk(t){return this.tag?this:t()}getOrDie(t){if(this.tag)return this.value;throw new Error(null!=t?t:"Called getOrDie on None")}static from(t){return n(t)?a.some(t):a.none()}getOrNull(){return this.tag?this.value:null}getOrUndefined(){return this.value}each(t){this.tag&&t(this.value)}toArray(){return this.tag?[this.value]:[]}toString(){return this.tag?`some(${this.value})`:"none()"}}a.singletonNone=new a(!1);const u=(t,e)=>{for(let o=0,r=t.length;o<r;o++)e(t[o],o)},c=t=>{if(null==t)throw new Error("Node cannot be null or undefined");return{dom:t}},d=c,h=(t,e)=>{const o=t.dom;if(1!==o.nodeType)return!1;{const t=o;if(void 0!==t.matches)return t.matches(e);if(void 0!==t.msMatchesSelector)return t.msMatchesSelector(e);if(void 0!==t.webkitMatchesSelector)return t.webkitMatchesSelector(e);if(void 0!==t.mozMatchesSelector)return t.mozMatchesSelector(e);throw new Error("Browser lacks native selectors")}};"undefined"!=typeof window?window:Function("return this;")();const m=t=>e=>(t=>t.dom.nodeType)(e)===t,g=m(1),f=m(3),v=m(11),y=(t,e)=>{t.dom.removeAttribute(e)},p=t=>d(t.dom.host),w=t=>{const e=f(t)?t.dom.parentNode:t.dom;if(null==e||null===e.ownerDocument)return!1;const o=e.ownerDocument;return(t=>{const e=(t=>d(t.dom.getRootNode()))(t);return v(o=e)&&n(o.dom.host)?a.some(e):a.none();var o})(d(e)).fold((()=>o.body.contains(e)),(r=w,i=p,t=>r(i(t))));var r,i},b=t=>"rtl"===((t,e)=>{const o=t.dom,r=window.getComputedStyle(o).getPropertyValue(e);return""!==r||w(t)?r:((t,e)=>(t=>void 0!==t.style&&i(t.style.getPropertyValue))(t)?t.style.getPropertyValue(e):"")(o,e)})(t,"direction")?"rtl":"ltr",S=(t,e)=>((t,o)=>((t,e)=>{const o=[];for(let r=0,n=t.length;r<n;r++){const n=t[r];e(n,r)&&o.push(n)}return o})(((t,e)=>{const o=t.length,r=new Array(o);for(let n=0;n<o;n++){const o=t[n];r[n]=e(o,n)}return r})(t.dom.childNodes,d),(t=>h(t,e))))(t),N=("li",t=>g(t)&&"li"===t.dom.nodeName.toLowerCase());const A=(t,e,n)=>{u(e,(e=>{const c=d(e),m=N(c),f=((t,e)=>{return(e?(o=t,r="ol,ul",((t,e,o)=>{let n=t.dom;const s=i(o)?o:l;for(;n.parentNode;){n=n.parentNode;const t=d(n);if(h(t,r))return a.some(t);if(s(t))break}return a.none()})(o,0,n)):a.some(t)).getOr(t);var o,r,n})(c,m);var v;(v=f,(t=>a.from(t.dom.parentNode).map(d))(v).filter(g)).each((e=>{if(t.setStyle(f.dom,"direction",null),b(e)===n?y(f,"dir"):((t,e,n)=>{((t,e,n)=>{if(!(o(n)||r(n)||s(n)))throw console.error("Invalid call to Attribute.set. Key ",e,":: Value ",n,":: Element ",t),new Error("Attribute value was not simple");t.setAttribute(e,n+"")})(t.dom,e,n)})(f,"dir",n),b(f)!==n&&t.setStyle(f.dom,"direction",n),m){const e=S(f,"li[dir],li[style]");u(e,(e=>{y(e,"dir"),t.setStyle(e.dom,"direction",null)}))}}))}))},T=(t,e)=>{t.selection.isEditable()&&(A(t.dom,t.selection.getSelectedBlocks(),e),t.nodeChanged())},C=(t,e)=>o=>{const r=r=>{const n=d(r.element);o.setActive(b(n)===e),o.setEnabled(t.selection.isEditable())};return t.on("NodeChange",r),o.setEnabled(t.selection.isEditable()),()=>t.off("NodeChange",r)};t.add("directionality",(t=>{(t=>{t.addCommand("mceDirectionLTR",(()=>{T(t,"ltr")})),t.addCommand("mceDirectionRTL",(()=>{T(t,"rtl")}))})(t),(t=>{t.ui.registry.addToggleButton("ltr",{tooltip:"Left to right",icon:"ltr",onAction:()=>t.execCommand("mceDirectionLTR"),onSetup:C(t,"ltr")}),t.ui.registry.addToggleButton("rtl",{tooltip:"Right to left",icon:"rtl",onAction:()=>t.execCommand("mceDirectionRTL"),onSetup:C(t,"rtl")})})(t)}))}();

View File

@ -1,5 +1,5 @@
/**
* TinyMCE version 6.4.1 (2023-03-29)
* TinyMCE version 7.5.1 (TBD)
*/
(function () {
@ -293,7 +293,7 @@
});
registerOption('emoticons_images_url', {
processor: 'string',
default: 'https://twemoji.maxcdn.com/v/13.0.1/72x72/'
default: 'https://cdnjs.cloudflare.com/ajax/libs/twemoji/15.1.0/72x72/'
});
};
const getEmojiDatabase = option('emoticons_database');
@ -551,17 +551,29 @@
});
};
const onSetupEditable = editor => api => {
const nodeChanged = () => {
api.setEnabled(editor.selection.isEditable());
};
editor.on('NodeChange', nodeChanged);
nodeChanged();
return () => {
editor.off('NodeChange', nodeChanged);
};
};
const register = editor => {
const onAction = () => editor.execCommand('mceEmoticons');
editor.ui.registry.addButton('emoticons', {
tooltip: 'Emojis',
icon: 'emoji',
onAction
onAction,
onSetup: onSetupEditable(editor)
});
editor.ui.registry.addMenuItem('emoticons', {
text: 'Emojis...',
icon: 'emoji',
onAction
onAction,
onSetup: onSetupEditable(editor)
});
};
@ -575,6 +587,7 @@
register(editor);
init(editor, database);
setup(editor);
return { getAllEmojis: () => database.waitForLoad().then(() => database.listAll()) };
});
};

File diff suppressed because one or more lines are too long

View File

@ -1,5 +1,5 @@
/**
* TinyMCE version 6.4.1 (2023-03-29)
* TinyMCE version 7.5.1 (TBD)
*/
(function () {
@ -19,7 +19,7 @@
};
};
var global$2 = tinymce.util.Tools.resolve('tinymce.PluginManager');
var global$3 = tinymce.util.Tools.resolve('tinymce.PluginManager');
const get$5 = fullscreenState => ({ isFullscreen: () => fullscreenState.get() !== null });
@ -47,6 +47,7 @@
const isSimpleType = type => value => typeof value === type;
const eq$1 = t => a => t === a;
const isString = isType$1('string');
const isObject = isType$1('object');
const isArray = isType$1('array');
const isNull = eq$1(null);
const isBoolean = isSimpleType('boolean');
@ -171,58 +172,6 @@
}
Optional.singletonNone = new Optional(false);
const singleton = doRevoke => {
const subject = Cell(Optional.none());
const revoke = () => subject.get().each(doRevoke);
const clear = () => {
revoke();
subject.set(Optional.none());
};
const isSet = () => subject.get().isSome();
const get = () => subject.get();
const set = s => {
revoke();
subject.set(Optional.some(s));
};
return {
clear,
isSet,
get,
set
};
};
const unbindable = () => singleton(s => s.unbind());
const value = () => {
const subject = singleton(noop);
const on = f => subject.get().each(f);
return {
...subject,
on
};
};
const first = (fn, rate) => {
let timer = null;
const cancel = () => {
if (!isNull(timer)) {
clearTimeout(timer);
timer = null;
}
};
const throttle = (...args) => {
if (isNull(timer)) {
timer = setTimeout(() => {
timer = null;
fn.apply(null, args);
}, rate);
}
};
return {
cancel,
throttle
};
};
const nativePush = Array.prototype.push;
const map = (xs, f) => {
const len = xs.length;
@ -286,6 +235,60 @@
return Optional.none();
};
const lift2 = (oa, ob, f) => oa.isSome() && ob.isSome() ? Optional.some(f(oa.getOrDie(), ob.getOrDie())) : Optional.none();
const singleton = doRevoke => {
const subject = Cell(Optional.none());
const revoke = () => subject.get().each(doRevoke);
const clear = () => {
revoke();
subject.set(Optional.none());
};
const isSet = () => subject.get().isSome();
const get = () => subject.get();
const set = s => {
revoke();
subject.set(Optional.some(s));
};
return {
clear,
isSet,
get,
set
};
};
const unbindable = () => singleton(s => s.unbind());
const value = () => {
const subject = singleton(noop);
const on = f => subject.get().each(f);
return {
...subject,
on
};
};
const first = (fn, rate) => {
let timer = null;
const cancel = () => {
if (!isNull(timer)) {
clearTimeout(timer);
timer = null;
}
};
const throttle = (...args) => {
if (isNull(timer)) {
timer = setTimeout(() => {
timer = null;
fn.apply(null, args);
}, rate);
}
};
return {
cancel,
throttle
};
};
const keys = Object.keys;
const each = (obj, f) => {
const props = keys(obj);
@ -296,6 +299,75 @@
}
};
const Global = typeof window !== 'undefined' ? window : Function('return this;')();
const path = (parts, scope) => {
let o = scope !== undefined && scope !== null ? scope : Global;
for (let i = 0; i < parts.length && o !== undefined && o !== null; ++i) {
o = o[parts[i]];
}
return o;
};
const resolve = (p, scope) => {
const parts = p.split('.');
return path(parts, scope);
};
const unsafe = (name, scope) => {
return resolve(name, scope);
};
const getOrDie = (name, scope) => {
const actual = unsafe(name, scope);
if (actual === undefined || actual === null) {
throw new Error(name + ' not available on this browser');
}
return actual;
};
const getPrototypeOf = Object.getPrototypeOf;
const sandHTMLElement = scope => {
return getOrDie('HTMLElement', scope);
};
const isPrototypeOf = x => {
const scope = resolve('ownerDocument.defaultView', x);
return isObject(x) && (sandHTMLElement(scope).prototype.isPrototypeOf(x) || /^HTML\w*Element$/.test(getPrototypeOf(x).constructor.name));
};
const DOCUMENT = 9;
const DOCUMENT_FRAGMENT = 11;
const ELEMENT = 1;
const TEXT = 3;
const type = element => element.dom.nodeType;
const isType = t => element => type(element) === t;
const isHTMLElement = element => isElement(element) && isPrototypeOf(element.dom);
const isElement = isType(ELEMENT);
const isText = isType(TEXT);
const isDocumentFragment = isType(DOCUMENT_FRAGMENT);
const rawSet = (dom, key, value) => {
if (isString(value) || isBoolean(value) || isNumber(value)) {
dom.setAttribute(key, value + '');
} else {
console.error('Invalid call to Attribute.set. Key ', key, ':: Value ', value, ':: Element ', dom);
throw new Error('Attribute value was not simple');
}
};
const set$1 = (element, key, value) => {
rawSet(element.dom, key, value);
};
const get$3 = (element, key) => {
const v = element.dom.getAttribute(key);
return v === null ? undefined : v;
};
const remove = (element, key) => {
element.dom.removeAttribute(key);
};
const supports = element => element.dom.classList !== undefined;
const has = (element, clazz) => supports(element) && element.dom.classList.contains(clazz);
const contains = (str, substr, start = 0, end) => {
const idx = str.indexOf(substr, start);
if (idx !== -1) {
@ -305,7 +377,7 @@
}
};
const isSupported$1 = dom => dom.style !== undefined && isFunction(dom.style.getPropertyValue);
const isSupported = dom => dom.style !== undefined && isFunction(dom.style.getPropertyValue);
const fromHtml = (html, scope) => {
const doc = scope || document;
@ -343,20 +415,6 @@
fromPoint
};
typeof window !== 'undefined' ? window : Function('return this;')();
const DOCUMENT = 9;
const DOCUMENT_FRAGMENT = 11;
const ELEMENT = 1;
const TEXT = 3;
const type = element => element.dom.nodeType;
const isType = t => element => type(element) === t;
const isElement = isType(ELEMENT);
const isText = isType(TEXT);
const isDocument = isType(DOCUMENT);
const isDocumentFragment = isType(DOCUMENT_FRAGMENT);
const is = (element, selector) => {
const dom = element.dom;
if (dom.nodeType !== ELEMENT) {
@ -385,7 +443,6 @@
const eq = (e1, e2) => e1.dom === e2.dom;
const owner = element => SugarElement.fromDom(element.dom.ownerDocument);
const documentOrOwner = dos => isDocument(dos) ? dos : owner(dos);
const parent = element => Optional.from(element.dom.parentNode).map(SugarElement.fromDom);
const parents = (element, isRoot) => {
const stop = isFunction(isRoot) ? isRoot : never;
@ -407,19 +464,18 @@
const filterSelf = elements => filter$1(elements, x => !eq(element, x));
return parent(element).map(children).map(filterSelf).getOr([]);
};
const nextSibling = element => Optional.from(element.dom.nextSibling).map(SugarElement.fromDom);
const children = element => map(element.dom.childNodes, SugarElement.fromDom);
const isShadowRoot = dos => isDocumentFragment(dos) && isNonNullable(dos.dom.host);
const supported = isFunction(Element.prototype.attachShadow) && isFunction(Node.prototype.getRootNode);
const isSupported = constant(supported);
const getRootNode = supported ? e => SugarElement.fromDom(e.dom.getRootNode()) : documentOrOwner;
const getRootNode = e => SugarElement.fromDom(e.dom.getRootNode());
const getShadowRoot = e => {
const r = getRootNode(e);
return isShadowRoot(r) ? Optional.some(r) : Optional.none();
};
const getShadowHost = e => SugarElement.fromDom(e.dom.host);
const getOriginalEventTarget = event => {
if (isSupported() && isNonNullable(event.target)) {
if (isNonNullable(event.target)) {
const el = SugarElement.fromDom(event.target);
if (isElement(el) && isOpenShadowHost(el)) {
if (event.composed && event.composedPath) {
@ -450,34 +506,19 @@
return SugarElement.fromDom(b);
};
const rawSet = (dom, key, value) => {
if (isString(value) || isBoolean(value) || isNumber(value)) {
dom.setAttribute(key, value + '');
} else {
console.error('Invalid call to Attribute.set. Key ', key, ':: Value ', value, ':: Element ', dom);
throw new Error('Attribute value was not simple');
}
};
const set = (element, key, value) => {
rawSet(element.dom, key, value);
};
const get$3 = (element, key) => {
const v = element.dom.getAttribute(key);
return v === null ? undefined : v;
};
const remove = (element, key) => {
element.dom.removeAttribute(key);
};
const internalSet = (dom, property, value) => {
if (!isString(value)) {
console.error('Invalid call to CSS.set. Property ', property, ':: Value ', value, ':: Element ', dom);
throw new Error('CSS value must be a string: ' + value);
}
if (isSupported$1(dom)) {
if (isSupported(dom)) {
dom.style.setProperty(property, value);
}
};
const set = (element, property, value) => {
const dom = element.dom;
internalSet(dom, property, value);
};
const setAll = (element, css) => {
const dom = element.dom;
each(css, (v, k) => {
@ -490,7 +531,7 @@
const r = styles.getPropertyValue(property);
return r === '' && !inBody(element) ? getUnsafeProperty(dom, property) : r;
};
const getUnsafeProperty = (dom, property) => isSupported$1(dom) ? dom.style.getPropertyValue(property) : '';
const getUnsafeProperty = (dom, property) => isSupported(dom) ? dom.style.getPropertyValue(property) : '';
const mkEvent = (target, x, y, stop, prevent, kill, raw) => ({
target,
@ -851,7 +892,7 @@
const PlatformDetection = { detect: detect$1 };
const mediaMatch = query => window.matchMedia(query).matches;
let platform = cached(() => PlatformDetection.detect(navigator.userAgent, Optional.from(navigator.userAgentData), mediaMatch));
let platform = cached(() => PlatformDetection.detect(window.navigator.userAgent, Optional.from(window.navigator.userAgentData), mediaMatch));
const detect = () => platform();
const r = (left, top) => {
@ -904,9 +945,9 @@
return { unbind: () => visualViewport.removeEventListener(name, handler) };
}).getOrThunk(() => ({ unbind: noop }));
var global$1 = tinymce.util.Tools.resolve('tinymce.dom.DOMUtils');
var global$2 = tinymce.util.Tools.resolve('tinymce.dom.DOMUtils');
var global = tinymce.util.Tools.resolve('tinymce.Env');
var global$1 = tinymce.util.Tools.resolve('tinymce.Env');
const fireFullscreenStateChanged = (editor, state) => {
editor.dispatch('FullscreenStateChanged', { state });
@ -983,7 +1024,7 @@
const ancestorPosition = 'position:absolute!important;';
const ancestorStyles = 'top:0!important;left:0!important;margin:0!important;padding:0!important;width:100%!important;height:100%!important;overflow:visible!important;';
const bgFallback = 'background-color:rgb(255,255,255)!important;';
const isAndroid = global.os.isAndroid();
const isAndroid = global$1.os.isAndroid();
const matchColor = editorBody => {
const color = get$2(editorBody, 'background-color');
return color !== undefined && color !== '' ? 'background-color:' + color + '!important' : bgFallback;
@ -998,7 +1039,7 @@
if (backup === clobberStyle) {
return;
} else {
set(element, attr, backup);
set$1(element, attr, backup);
setAll(element, dom.parseStyle(clobberStyle));
}
};
@ -1023,7 +1064,7 @@
});
};
const DOM = global$1.DOM;
const DOM = global$2.DOM;
const getScrollPos = () => getBounds(window);
const setScrollPos = pos => window.scrollTo(pos.x, pos.y);
const viewportUpdate = get().fold(() => ({
@ -1074,10 +1115,11 @@
const documentElement = document.documentElement;
const editorContainer = editor.getContainer();
const editorContainerS = SugarElement.fromDom(editorContainer);
const sinkContainerS = nextSibling(editorContainerS).filter(elm => isHTMLElement(elm) && has(elm, 'tox-silver-sink'));
const fullscreenRoot = getFullscreenRoot(editor);
const fullscreenInfo = fullscreenState.get();
const editorBody = SugarElement.fromDom(editor.getBody());
const isTouch = global.deviceType.isTouch();
const isTouch = global$1.deviceType.isTouch();
const editorContainerStyle = editorContainer.style;
const iframe = editor.iframeElement;
const iframeStyle = iframe === null || iframe === void 0 ? void 0 : iframe.style;
@ -1114,7 +1156,8 @@
containerLeft: editorContainerStyle.left,
iframeWidth: iframeStyle.width,
iframeHeight: iframeStyle.height,
fullscreenChangeHandler
fullscreenChangeHandler,
sinkCssPosition: sinkContainerS.map(elm => get$2(elm, 'position'))
};
if (isTouch) {
clobberStyles(editor.dom, editorContainerS, editorBody);
@ -1122,6 +1165,9 @@
iframeStyle.width = iframeStyle.height = '100%';
editorContainerStyle.width = editorContainerStyle.height = '';
handleClasses(DOM.addClass);
sinkContainerS.each(elm => {
set(elm, 'position', 'fixed');
});
viewportUpdate.bind(editorContainerS);
editor.on('remove', cleanup);
fullscreenState.set(newFullScreenInfo);
@ -1140,6 +1186,9 @@
editorContainerStyle.height = fullscreenInfo.containerHeight;
editorContainerStyle.top = fullscreenInfo.containerTop;
editorContainerStyle.left = fullscreenInfo.containerLeft;
lift2(sinkContainerS, fullscreenInfo.sinkCssPosition, (elm, val) => {
set(elm, 'position', val);
});
cleanup();
setScrollPos(fullscreenInfo.scrollPos);
fullscreenState.set(null);
@ -1154,6 +1203,18 @@
});
};
var global = tinymce.util.Tools.resolve('tinymce.util.VK');
const setup = (editor, fullscreenState) => {
editor.on('init', () => {
editor.on('keydown', e => {
if (e.keyCode === global.TAB && !(e.metaKey || e.ctrlKey) && fullscreenState.get()) {
e.preventDefault();
}
});
});
};
const makeSetupHandler = (editor, fullscreenState) => api => {
api.setActive(fullscreenState.get() !== null);
const editorEventCallback = e => api.setActive(e.state);
@ -1167,18 +1228,21 @@
icon: 'fullscreen',
shortcut: 'Meta+Shift+F',
onAction,
onSetup: makeSetupHandler(editor, fullscreenState)
onSetup: makeSetupHandler(editor, fullscreenState),
context: 'any'
});
editor.ui.registry.addToggleButton('fullscreen', {
tooltip: 'Fullscreen',
icon: 'fullscreen',
onAction,
onSetup: makeSetupHandler(editor, fullscreenState)
onSetup: makeSetupHandler(editor, fullscreenState),
shortcut: 'Meta+Shift+F',
context: 'any'
});
};
var Plugin = () => {
global$2.add('fullscreen', editor => {
global$3.add('fullscreen', editor => {
const fullscreenState = Cell(null);
if (editor.inline) {
return get$5(fullscreenState);
@ -1186,6 +1250,7 @@
register$2(editor);
register$1(editor, fullscreenState);
register(editor, fullscreenState);
setup(editor, fullscreenState);
editor.addShortcut('Meta+Shift+F', '', 'mceFullScreen');
return get$5(fullscreenState);
});

File diff suppressed because one or more lines are too long

View File

@ -0,0 +1,93 @@
tinymce.Resource.add('tinymce.html-i18n.help-keynav.ar',
'<h1>بدء التنقل بواسطة لوحة المفاتيح</h1>\n' +
'\n' +
'<dl>\n' +
' <dt>التركيز على شريط القوائم</dt>\n' +
' <dd>نظاما التشغيل Windows أو Linux: Alt + F9</dd>\n' +
' <dd>نظام التشغيل macOS: &#x2325;F9</dd>\n' +
' <dt>التركيز على شريط الأدوات</dt>\n' +
' <dd>نظاما التشغيل Windows أو Linux: Alt + F10</dd>\n' +
' <dd>نظام التشغيل macOS: &#x2325;F10</dd>\n' +
' <dt>التركيز على التذييل</dt>\n' +
' <dd>نظاما التشغيل Windows أو Linux: Alt + F11</dd>\n' +
' <dd>نظام التشغيل macOS: &#x2325;F11</dd>\n' +
' <dt>تركيز الإشعارات</dt>\n' +
' <dd>نظاما التشغيل Windows أو Linux: Alt + F12</dd>\n' +
' <dd>نظام التشغيل macOS: &#x2325;F12</dd>\n' +
' <dt>التركيز على شريط أدوات السياق</dt>\n' +
' <dd>أنظمة التشغيل Windows أو Linux أو macOS: Ctrl+F9</dd>\n' +
'</dl>\n' +
'\n' +
'<p>سيبدأ التنقل عند عنصر واجهة المستخدم الأول، والذي سيتم تمييزه أو تسطيره في حالة العنصر الأول في\n' +
' مسار عنصر التذييل.</p>\n' +
'\n' +
'<h1>التنقل بين أقسام واجهة المستخدم</h1>\n' +
'\n' +
'<p>للانتقال من أحد أقسام واجهة المستخدم إلى القسم التالي، اضغط على <strong>Tab</strong>.</p>\n' +
'\n' +
'<p>للانتقال من أحد أقسام واجهة المستخدم إلى القسم السابق، اضغط على <strong>Shift+Tab</strong>.</p>\n' +
'\n' +
'<p>ترتيب علامات <strong>Tab</strong> لأقسام واجهة المستخدم هذه هو:</p>\n' +
'\n' +
'<ol>\n' +
' <li>شريط القوائم</li>\n' +
' <li>كل مجموعة شريط الأدوات</li>\n' +
' <li>الشريط الجانبي</li>\n' +
' <li>مسار العنصر في التذييل</li>\n' +
' <li>زر تبديل عدد الكلمات في التذييل</li>\n' +
' <li>رابط إدراج العلامة التجارية في التذييل</li>\n' +
' <li>مؤشر تغيير حجم المحرر في التذييل</li>\n' +
'</ol>\n' +
'\n' +
'<p>إذا لم يكن قسم واجهة المستخدم موجودًا، فسيتم تخطيه.</p>\n' +
'\n' +
'<p>إذا كان التذييل يحتوي على التركيز على ‏‫التنقل بواسطة لوحة المفاتيح، ولا يوجد شريط جانبي مرئي، فإن الضغط على <strong>Shift+Tab</strong>\n' +
' ينقل التركيز إلى مجموعة شريط الأدوات الأولى، وليس الأخيرة.</p>\n' +
'\n' +
'<h1>التنقل بين أقسام واجهة المستخدم</h1>\n' +
'\n' +
'<p>للانتقال من أحد عناصر واجهة المستخدم إلى العنصر التالي، اضغط على مفتاح <strong>السهم</strong> المناسب.</p>\n' +
'\n' +
'<p>مفتاحا السهمين <strong>اليسار‎</strong> و<strong>اليمين‎</strong></p>\n' +
'\n' +
'<ul>\n' +
' <li>التنقل بين القوائم في شريط القوائم.</li>\n' +
' <li>فتح قائمة فرعية في القائمة.</li>\n' +
' <li>التنقل بين الأزرار في مجموعة شريط الأدوات.</li>\n' +
' <li>التنقل بين العناصر في مسار عنصر التذييل.</li>\n' +
'</ul>\n' +
'\n' +
'<p>مفتاحا السهمين <strong>لأسفل‎</strong> و<strong>لأعلى‎</strong></p>\n' +
'\n' +
'<ul>\n' +
' <li>التنقل بين عناصر القائمة في القائمة.</li>\n' +
' <li>التنقل بين العناصر في قائمة شريط الأدوات المنبثقة.</li>\n' +
'</ul>\n' +
'\n' +
'<p>دورة مفاتيح <strong>الأسهم‎</strong> داخل قسم واجهة المستخدم التي تم التركيز عليها.</p>\n' +
'\n' +
'<p>لإغلاق قائمة مفتوحة أو قائمة فرعية مفتوحة أو قائمة منبثقة مفتوحة، اضغط على مفتاح <strong>Esc</strong>.</p>\n' +
'\n' +
'<p>إذا كان التركيز الحالي على "الجزء العلوي" من قسم معين لواجهة المستخدم، فإن الضغط على مفتاح <strong>Esc</strong> يؤدي أيضًا إلى الخروج\n' +
' من التنقل بواسطة لوحة المفاتيح بالكامل.</p>\n' +
'\n' +
'<h1>تنفيذ عنصر قائمة أو زر شريط أدوات</h1>\n' +
'\n' +
'<p>عندما يتم تمييز عنصر القائمة المطلوب أو زر شريط الأدوات، اضغط على زر <strong>Return</strong>، أو <strong>Enter</strong>،\n' +
' أو <strong>مفتاح المسافة</strong> لتنفيذ العنصر.</p>\n' +
'\n' +
'<h1>التنقل في مربعات الحوار غير المبوبة</h1>\n' +
'\n' +
'<p>في مربعات الحوار غير المبوبة، يتم التركيز على المكون التفاعلي الأول عند فتح مربع الحوار.</p>\n' +
'\n' +
'<p>التنقل بين مكونات الحوار التفاعلي بالضغط على زر <strong>Tab</strong> أو <strong>Shift+Tab</strong>.</p>\n' +
'\n' +
'<h1>التنقل في مربعات الحوار المبوبة</h1>\n' +
'\n' +
'<p>في مربعات الحوار المبوبة، يتم التركيز على الزر الأول في قائمة علامات التبويب عند فتح مربع الحوار.</p>\n' +
'\n' +
'<p>التنقل بين المكونات التفاعلية لعلامة التبويب لمربع الحوار هذه بالضغط على زر <strong>Tab</strong> أو\n' +
' <strong>Shift+Tab</strong>.</p>\n' +
'\n' +
'<p>التبديل إلى علامة تبويب أخرى لمربع الحوار من خلال التركيز على قائمة علامة التبويب ثم الضغط على زر <strong>السهم</strong> المناسب\n' +
' مفتاح للتنقل بين علامات التبويب المتاحة.</p>\n');

View File

@ -0,0 +1,93 @@
tinymce.Resource.add('tinymce.html-i18n.help-keynav.bg_BG',
'<h1>Начало на навигацията с клавиатурата</h1>\n' +
'\n' +
'<dl>\n' +
' <dt>Фокусиране върху лентата с менюта</dt>\n' +
' <dd>Windows или Linux: Alt+F9</dd>\n' +
' <dd>macOS: &#x2325;F9</dd>\n' +
' <dt>Фокусиране върху лентата с инструменти</dt>\n' +
' <dd>Windows или Linux: Alt+F10</dd>\n' +
' <dd>macOS: &#x2325;F10</dd>\n' +
' <dt>Фокусиране върху долния колонтитул</dt>\n' +
' <dd>Windows или Linux: Alt+F11</dd>\n' +
' <dd>macOS: &#x2325;F11</dd>\n' +
' <dt>Фокусиране на известието</dt>\n' +
' <dd>Windows или Linux: Alt+F12</dd>\n' +
' <dd>macOS: &#x2325;F12</dd>\n' +
' <dt>Фокусиране върху контекстуалната лента с инструменти</dt>\n' +
' <dd>Windows, Linux или macOS: Ctrl+F9</dd>\n' +
'</dl>\n' +
'\n' +
'<p>Навигацията ще започне с първия елемент на ПИ, който ще бъде маркиран или подчертан в случая на първия елемент в\n' +
' пътя до елемента в долния колонтитул.</p>\n' +
'\n' +
'<h1>Навигиране между раздели на ПИ</h1>\n' +
'\n' +
'<p>За да преминете от един раздел на ПИ към следващия, натиснете <strong>Tab</strong>.</p>\n' +
'\n' +
'<p>За да преминете от един раздел на ПИ към предишния, натиснете <strong>Shift+Tab</strong>.</p>\n' +
'\n' +
'<p>Редът за <strong>обхождане с табулация</strong> на тези раздели на ПИ е:</p>\n' +
'\n' +
'<ol>\n' +
' <li>Лентата с менюта</li>\n' +
' <li>Всяка група на лентата с инструменти</li>\n' +
' <li>Страничната лента</li>\n' +
' <li>Пътят до елемента в долния колонтитул</li>\n' +
' <li>Бутонът за превключване на броя на думите в долния колонтитул</li>\n' +
' <li>Връзката за търговска марка в долния колонтитул</li>\n' +
' <li>Манипулаторът за преоразмеряване на редактора в долния колонтитул</li>\n' +
'</ol>\n' +
'\n' +
'<p>Ако някой раздел на ПИ липсва, той се пропуска.</p>\n' +
'\n' +
'<p>Ако долният колонтитул има фокус за навигация с клавиатурата и няма странична лента, натискането на <strong>Shift+Tab</strong>\n' +
' премества фокуса към първата група на лентата с инструменти, а не към последната.</p>\n' +
'\n' +
'<h1>Навигиране в разделите на ПИ</h1>\n' +
'\n' +
'<p>За да преминете от един елемент на ПИ към следващия, натиснете съответния клавиш със <strong>стрелка</strong>.</p>\n' +
'\n' +
'<p>С клавишите със стрелка <strong>наляво</strong> и <strong>надясно</strong></p>\n' +
'\n' +
'<ul>\n' +
' <li>се придвижвате между менютата в лентата с менюто;</li>\n' +
' <li>отваряте подменю в меню;</li>\n' +
' <li>се придвижвате между бутоните в група на лентата с инструменти;</li>\n' +
' <li>се придвижвате между елементи в пътя до елемент в долния колонтитул.</li>\n' +
'</ul>\n' +
'\n' +
'<p>С клавишите със стрелка <strong>надолу</strong> и <strong>нагоре</strong></p>\n' +
'\n' +
'<ul>\n' +
' <li>се придвижвате между елементите от менюто в дадено меню;</li>\n' +
' <li>се придвижвате между елементите в изскачащо меню на лентата с инструменти.</li>\n' +
'</ul>\n' +
'\n' +
'<p>Клавишите със <strong>стрелки</strong> се придвижват в рамките на фокусирания раздел на ПИ.</p>\n' +
'\n' +
'<p>За да затворите отворено меню, подменю или изскачащо меню, натиснете клавиша <strong>Esc</strong>.</p>\n' +
'\n' +
'<p>Ако текущият фокус е върху „горната част“ на конкретен раздел на ПИ, натискането на клавиша <strong>Esc</strong> също излиза\n' +
' напълно от навигацията с клавиатурата.</p>\n' +
'\n' +
'<h1>Изпълнение на елемент от менюто или бутон от лентата с инструменти</h1>\n' +
'\n' +
'<p>Когато желаният елемент от менюто или бутон от лентата с инструменти е маркиран, натиснете <strong>Return</strong>, <strong>Enter</strong>\n' +
' или <strong>клавиша за интервал</strong>, за да изпълните елемента.</p>\n' +
'\n' +
'<h1>Навигиране в диалогови прозорци без раздели</h1>\n' +
'\n' +
'<p>В диалоговите прозорци без раздели първият интерактивен компонент се фокусира, когато се отвори диалоговият прозорец.</p>\n' +
'\n' +
'<p>Навигирайте между интерактивните компоненти на диалоговия прозорец, като натиснете <strong>Tab</strong> или <strong>Shift+Tab</strong>.</p>\n' +
'\n' +
'<h1>Навигиране в диалогови прозорци с раздели</h1>\n' +
'\n' +
'<p>В диалоговите прозорци с раздели първият бутон в менюто с раздели се фокусира, когато се отвори диалоговият прозорец.</p>\n' +
'\n' +
'<p>Навигирайте между интерактивните компоненти на този диалогов раздел, като натиснете <strong>Tab</strong> или\n' +
' <strong>Shift+Tab</strong>.</p>\n' +
'\n' +
'<p>Превключете към друг диалогов раздел, като фокусирате върху менюто с раздели и след това натиснете съответния клавиш със <strong>стрелка</strong>,\n' +
' за да преминете през наличните раздели.</p>\n');

View File

@ -0,0 +1,93 @@
tinymce.Resource.add('tinymce.html-i18n.help-keynav.ca',
'<h1>Inici de la navegació amb el teclat</h1>\n' +
'\n' +
'<dl>\n' +
' <dt>Enfocar la barra de menús</dt>\n' +
' <dd>Windows o Linux: Alt+F9</dd>\n' +
' <dd>macOS: &#x2325;F9</dd>\n' +
" <dt>Enfocar la barra d'eines</dt>\n" +
' <dd>Windows o Linux: Alt+F10</dd>\n' +
' <dd>macOS: &#x2325;F10</dd>\n' +
' <dt>Enfocar el peu de pàgina</dt>\n' +
' <dd>Windows o Linux: Alt+F11</dd>\n' +
' <dd>macOS: &#x2325;F11</dd>\n' +
' <dt>Enfocar la notificació</dt>\n' +
' <dd>Windows o Linux: Alt+F12</dd>\n' +
' <dd>macOS: &#x2325;F12</dd>\n' +
" <dt>Enfocar una barra d'eines contextual</dt>\n" +
' <dd>Windows, Linux o macOS: Ctrl+F9</dd>\n' +
'</dl>\n' +
'\n' +
"<p>La navegació començarà en el primer element de la interfície d'usuari, que es ressaltarà o subratllarà per al primer element a\n" +
" la ruta de l'element de peu de pàgina.</p>\n" +
'\n' +
"<h1>Navegació entre seccions de la interfície d'usuari</h1>\n" +
'\n' +
"<p>Per desplaçar-vos des d'una secció de la interfície d'usuari a la següent, premeu la tecla <strong>Tab</strong>.</p>\n" +
'\n' +
"<p>Per desplaçar-vos des d'una secció de la interfície d'usuari a l'anterior, premeu les tecles <strong>Maj+Tab</strong>.</p>\n" +
'\n' +
"<p>L'ordre en prémer la tecla <strong>Tab</strong> d'aquestes secciones de la interfície d'usuari és:</p>\n" +
'\n' +
'<ol>\n' +
' <li>Barra de menús</li>\n' +
" <li>Cada grup de la barra d'eines</li>\n" +
' <li>Barra lateral</li>\n' +
" <li>Ruta de l'element del peu de pàgina</li>\n" +
' <li>Botó de commutació de recompte de paraules al peu de pàgina</li>\n' +
' <li>Enllaç de marca del peu de pàgina</li>\n' +
" <li>Control de canvi de mida de l'editor al peu de pàgina</li>\n" +
'</ol>\n' +
'\n' +
"<p>Si no hi ha una secció de la interfície d'usuari, s'ometrà.</p>\n" +
'\n' +
'<p>Si el peu de pàgina té el focus de navegació del teclat i no hi ha cap barra lateral visible, en prémer <strong>Maj+Tab</strong>\n' +
" el focus es mou al primer grup de la barra d'eines, no l'últim.</p>\n" +
'\n' +
"<h1>Navegació dins de les seccions de la interfície d'usuari</h1>\n" +
'\n' +
"<p>Per desplaçar-vos des d'un element de la interfície d'usuari al següent, premeu la tecla de <strong>Fletxa</strong> adequada.</p>\n" +
'\n' +
'<p>Les tecles de fletxa <strong>Esquerra</strong> i <strong>Dreta</strong></p>\n' +
'\n' +
'<ul>\n' +
' <li>us permeten desplaçar-vos entre menús de la barra de menús.</li>\n' +
' <li>obren un submenú en un menú.</li>\n' +
" <li>us permeten desplaçar-vos entre botons d'un grup de la barra d'eines.</li>\n" +
" <li>us permeten desplaçar-vos entre elements de la ruta d'elements del peu de pàgina.</li>\n" +
'</ul>\n' +
'\n' +
'<p>Les tecles de fletxa <strong>Avall</strong> i <strong>Amunt</strong></p>\n' +
'\n' +
'<ul>\n' +
" <li>us permeten desplaçar-vos entre elements de menú d'un menú.</li>\n" +
" <li>us permeten desplaçar-vos entre elements d'un menú emergent de la barra d'eines.</li>\n" +
'</ul>\n' +
'\n' +
"<p>Les tecles de <strong>Fletxa</strong> us permeten desplaçar-vos dins de la secció de la interfície d'usuari que té el focus.</p>\n" +
'\n' +
'<p>Per tancar un menú, un submenú o un menú emergent oberts, premeu la tecla <strong>Esc</strong>.</p>\n' +
'\n' +
"<p>Si el focus actual es troba a la part superior d'una secció específica de la interfície d'usuari, en prémer la tecla <strong>Esc</strong> també es tanca\n" +
' completament la navegació amb el teclat.</p>\n' +
'\n' +
"<h1>Execució d'un element de menú o d'un botó de la barra d'eines</h1>\n" +
'\n' +
"<p>Quan l'element del menú o el botó de la barra d'eines que desitgeu estigui ressaltat, premeu <strong>Retorn</strong>, <strong>Intro</strong>\n" +
" o la <strong>barra d'espai</strong> per executar l'element.</p>\n" +
'\n' +
'<h1>Navegació per quadres de diàleg sense pestanyes</h1>\n' +
'\n' +
"<p>En els quadres de diàleg sense pestanyes, el primer component interactiu pren el focus quan s'obre el quadre diàleg.</p>\n" +
'\n' +
'<p>Premeu la tecla <strong>Tab</strong> o les tecles <strong>Maj+Tab</strong> per desplaçar-vos entre components interactius del quadre de diàleg.</p>\n' +
'\n' +
'<h1>Navegació per quadres de diàleg amb pestanyes</h1>\n' +
'\n' +
"<p>En els quadres de diàleg amb pestanyes, el primer botó del menú de la pestanya pren el focus quan s'obre el quadre diàleg.</p>\n" +
'\n' +
"<p>Per desplaçar-vos entre components interactius d'aquest quadre de diàleg, premeu la tecla <strong>Tab</strong> o\n" +
' les tecles <strong>Maj+Tab</strong>.</p>\n' +
'\n' +
"<p>Canvieu a la pestanya d'un altre quadre de diàleg, tot enfocant el menú de la pestanya, i després premeu la tecla <strong>Fletxa</strong> adequada\n" +
' per canviar entre les pestanyes disponibles.</p>\n');

View File

@ -0,0 +1,93 @@
tinymce.Resource.add('tinymce.html-i18n.help-keynav.cs',
'<h1>Začínáme navigovat pomocí klávesnice</h1>\n' +
'\n' +
'<dl>\n' +
' <dt>Přejít na řádek nabídek</dt>\n' +
' <dd>Windows nebo Linux: Alt+F9</dd>\n' +
' <dd>macOS: &#x2325;F9</dd>\n' +
' <dt>Přejít na panel nástrojů</dt>\n' +
' <dd>Windows nebo Linux: Alt+F10</dd>\n' +
' <dd>macOS: &#x2325;F10</dd>\n' +
' <dt>Přejít na zápatí</dt>\n' +
' <dd>Windows nebo Linux: Alt+F11</dd>\n' +
' <dd>macOS: &#x2325;F11</dd>\n' +
' <dt>Přejít na oznámení</dt>\n' +
' <dd>Windows nebo Linux: Alt+F12</dd>\n' +
' <dd>macOS: &#x2325;F12</dd>\n' +
' <dt>Přejít na kontextový panel nástrojů</dt>\n' +
' <dd>Windows, Linux nebo macOS: Ctrl+F9</dd>\n' +
'</dl>\n' +
'\n' +
'<p>Navigace začne u první položky uživatelského rozhraní, která bude zvýrazněna nebo v případě první položky\n' +
' cesty k prvku zápatí podtržena.</p>\n' +
'\n' +
'<h1>Navigace mezi oddíly uživatelského rozhraní</h1>\n' +
'\n' +
'<p>Stisknutím klávesy <strong>Tab</strong> se posunete z jednoho oddílu uživatelského rozhraní na další.</p>\n' +
'\n' +
'<p>Stisknutím kláves <strong>Shift+Tab</strong> se posunete z jednoho oddílu uživatelského rozhraní na předchozí.</p>\n' +
'\n' +
'<p>Pořadí přepínání mezi oddíly uživatelského rozhraní pomocí klávesy <strong>Tab</strong>:</p>\n' +
'\n' +
'<ol>\n' +
' <li>Řádek nabídek</li>\n' +
' <li>Každá skupina panelu nástrojů</li>\n' +
' <li>Boční panel</li>\n' +
' <li>Cesta k prvku v zápatí.</li>\n' +
' <li>Tlačítko přepínače počtu slov v zápatí</li>\n' +
' <li>Odkaz na informace o značce v zápatí</li>\n' +
' <li>Úchyt pro změnu velikosti editoru v zápatí</li>\n' +
'</ol>\n' +
'\n' +
'<p>Pokud nějaký oddíl uživatelského rozhraní není přítomen, je přeskočen.</p>\n' +
'\n' +
'<p>Pokud je zápatí vybrané pro navigaci pomocí klávesnice a není zobrazen žádný boční panel, stisknutím kláves <strong>Shift+Tab</strong>\n' +
' přejdete na první skupinu panelu nástrojů, nikoli na poslední.</p>\n' +
'\n' +
'<h1>Navigace v rámci oddílů uživatelského rozhraní</h1>\n' +
'\n' +
'<p>Chcete-li se přesunout z jednoho prvku uživatelského rozhraní na další, stiskněte příslušnou klávesu s <strong>šipkou</strong>.</p>\n' +
'\n' +
'<p>Klávesy s šipkou <strong>vlevo</strong> a <strong>vpravo</strong></p>\n' +
'\n' +
'<ul>\n' +
' <li>umožňují přesun mezi nabídkami na řádku nabídek;</li>\n' +
' <li>otevírají podnabídku nabídky;</li>\n' +
' <li>umožňují přesun mezi tlačítky ve skupině panelu nástrojů;</li>\n' +
' <li>umožňují přesun mezi položkami cesty prvku v zápatí.</li>\n' +
'</ul>\n' +
'\n' +
'<p>Klávesy se šipkou <strong>dolů</strong> a <strong>nahoru</strong></p>\n' +
'\n' +
'<ul>\n' +
' <li>umožňují přesun mezi položkami nabídky;</li>\n' +
' <li>umožňují přesun mezi položkami místní nabídky panelu nástrojů.</li>\n' +
'</ul>\n' +
'\n' +
'<p><strong>Šipky</strong> provádí přepínání v rámci vybraného oddílu uživatelského rozhraní.</p>\n' +
'\n' +
'<p>Chcete-li zavřít otevřenou nabídku, podnabídku nebo místní nabídku, stiskněte klávesu <strong>Esc</strong>.</p>\n' +
'\n' +
'<p>Pokud je aktuálně vybrána horní část oddílu uživatelského rozhraní, stisknutím klávesy <strong>Esc</strong> zcela ukončíte také\n' +
' navigaci pomocí klávesnice.</p>\n' +
'\n' +
'<h1>Provedení příkazu položky nabídky nebo tlačítka panelu nástrojů</h1>\n' +
'\n' +
'<p>Pokud je zvýrazněna požadovaná položka nabídky nebo tlačítko panelu nástrojů, stisknutím klávesy <strong>Return</strong>, <strong>Enter</strong>\n' +
' nebo <strong>mezerníku</strong> provedete příslušný příkaz.</p>\n' +
'\n' +
'<h1>Navigace v dialogových oknech bez záložek</h1>\n' +
'\n' +
'<p>Při otevření dialogových oken bez záložek přejdete na první interaktivní komponentu.</p>\n' +
'\n' +
'<p>Přecházet mezi interaktivními komponentami dialogového okna můžete stisknutím klávesy <strong>Tab</strong> nebo kombinace <strong>Shift+Tab</strong>.</p>\n' +
'\n' +
'<h1>Navigace v dialogových oknech se záložkami</h1>\n' +
'\n' +
'<p>Při otevření dialogových oken se záložkami přejdete na první tlačítko v nabídce záložek.</p>\n' +
'\n' +
'<p>Přecházet mezi interaktivními komponentami této záložky dialogového okna můžete stisknutím klávesy <strong>Tab</strong> nebo\n' +
' kombinace <strong>Shift+Tab</strong>.</p>\n' +
'\n' +
'<p>Chcete-li přepnout na další záložku dialogového okna, přejděte na nabídku záložek a poté můžete stisknutím požadované <strong>šipky</strong>\n' +
' přepínat mezi dostupnými záložkami.</p>\n');

View File

@ -0,0 +1,93 @@
tinymce.Resource.add('tinymce.html-i18n.help-keynav.da',
'<h1>Start tastaturnavigation</h1>\n' +
'\n' +
'<dl>\n' +
' <dt>Fokuser på menulinjen</dt>\n' +
' <dd>Windows eller Linux: Alt+F9</dd>\n' +
' <dd>macOS: &#x2325;F9</dd>\n' +
' <dt>Fokuser på værktøjslinjen</dt>\n' +
' <dd>Windows eller Linux: Alt+F10</dd>\n' +
' <dd>macOS: &#x2325;F10</dd>\n' +
' <dt>Fokuser på sidefoden</dt>\n' +
' <dd>Windows eller Linux: Alt+F11</dd>\n' +
' <dd>macOS: &#x2325;F11</dd>\n' +
' <dt>Fokuser på meddelelsen</dt>\n' +
' <dd>Windows eller Linux: Alt+F12</dd>\n' +
' <dd>macOS: &#x2325;F12</dd>\n' +
' <dt>Fokuser på kontekstuel værktøjslinje</dt>\n' +
' <dd>Windows, Linux eller macOS: Ctrl+F9</dd>\n' +
'</dl>\n' +
'\n' +
'<p>Navigationen starter ved det første UI-element, som fremhæves eller understreges hvad angår det første element i\n' +
' sidefodens sti til elementet.</p>\n' +
'\n' +
'<h1>Naviger mellem UI-sektioner</h1>\n' +
'\n' +
'<p>Gå fra én UI-sektion til den næste ved at trykke på <strong>Tab</strong>.</p>\n' +
'\n' +
'<p>Gå fra én UI-sektion til den forrige ved at trykke på <strong>Shift+Tab</strong>.</p>\n' +
'\n' +
'<p><strong>Tab</strong>-rækkefølgen af disse UI-sektioner er:</p>\n' +
'\n' +
'<ol>\n' +
' <li>Menulinje</li>\n' +
' <li>Hver værktøjsgruppe</li>\n' +
' <li>Sidepanel</li>\n' +
' <li>Sti til elementet i sidefoden</li>\n' +
' <li>Til/fra-knap for ordoptælling i sidefoden</li>\n' +
' <li>Brandinglink i sidefoden</li>\n' +
' <li>Tilpasningshåndtag for editor i sidefoden</li>\n' +
'</ol>\n' +
'\n' +
'<p>Hvis en UI-sektion ikke er til stede, springes den over.</p>\n' +
'\n' +
'<p>Hvis sidefoden har fokus til tastaturnavigation, og der ikke er noget synligt sidepanel, kan der trykkes på <strong>Shift+Tab</strong>\n' +
' for at flytte fokus til den første værktøjsgruppe, ikke den sidste.</p>\n' +
'\n' +
'<h1>Naviger inden for UI-sektioner</h1>\n' +
'\n' +
'<p>Gå fra ét UI-element til det næste ved at trykke på den relevante <strong>piletast</strong>.</p>\n' +
'\n' +
'<p><strong>Venstre</strong> og <strong>højre</strong> piletast</p>\n' +
'\n' +
'<ul>\n' +
' <li>flytter mellem menuerne i menulinjen.</li>\n' +
' <li>åbner en undermenu i en menu.</li>\n' +
' <li>flytter mellem knapperne i en værktøjsgruppe.</li>\n' +
' <li>flytter mellem elementer i sidefodens sti til elementet.</li>\n' +
'</ul>\n' +
'\n' +
'<p>Pil <strong>ned</strong> og <strong>op</strong></p>\n' +
'\n' +
'<ul>\n' +
' <li>flytter mellem menupunkterne i en menu.</li>\n' +
' <li>flytter mellem punkterne i en genvejsmenu i værktøjslinjen.</li>\n' +
'</ul>\n' +
'\n' +
'<p><strong>Piletasterne</strong> kører rundt inden for UI-sektionen, der fokuseres på.</p>\n' +
'\n' +
'<p>For at lukke en åben menu, en åben undermenu eller en åben genvejsmenu trykkes der på <strong>Esc</strong>-tasten.</p>\n' +
'\n' +
"<p>Hvis det aktuelle fokus er i 'toppen' af en bestemt UI-sektion, vil tryk på <strong>Esc</strong>-tasten også afslutte\n" +
' tastaturnavigationen helt.</p>\n' +
'\n' +
'<h1>Udfør et menupunkt eller en værktøjslinjeknap</h1>\n' +
'\n' +
'<p>Når det ønskede menupunkt eller den ønskede værktøjslinjeknap er fremhævet, trykkes der på <strong>Retur</strong>, <strong>Enter</strong>\n' +
' eller <strong>mellemrumstasten</strong> for at udføre elementet.</p>\n' +
'\n' +
'<h1>Naviger i ikke-faneopdelte dialogbokse</h1>\n' +
'\n' +
'<p>I ikke-faneopdelte dialogbokse får den første interaktive komponent fokus, når dialogboksen åbnes.</p>\n' +
'\n' +
'<p>Naviger mellem interaktive dialogbokskomponenter ved at trykke på <strong>Tab</strong> eller <strong>Shift+Tab</strong>.</p>\n' +
'\n' +
'<h1>Naviger i faneopdelte dialogbokse</h1>\n' +
'\n' +
'<p>I faneopdelte dialogbokse får den første knap i fanemenuen fokus, når dialogboksen åbnes.</p>\n' +
'\n' +
'<p>Naviger mellem interaktive komponenter i denne dialogboksfane ved at trykke på <strong>Tab</strong> eller\n' +
' <strong>Shift+Tab</strong>.</p>\n' +
'\n' +
'<p>Skift til en anden dialogboksfane ved at fokusere på fanemenuen og derefter trykke på den relevante <strong>piletast</strong>\n' +
' for at køre igennem de tilgængelige faner.</p>\n');

View File

@ -0,0 +1,93 @@
tinymce.Resource.add('tinymce.html-i18n.help-keynav.de',
'<h1>Grundlagen der Tastaturnavigation</h1>\n' +
'\n' +
'<dl>\n' +
' <dt>Fokus auf Menüleiste</dt>\n' +
' <dd>Windows oder Linux: ALT+F9</dd>\n' +
' <dd>macOS: &#x2325;F9</dd>\n' +
' <dt>Fokus auf Symbolleiste</dt>\n' +
' <dd>Windows oder Linux: ALT+F10</dd>\n' +
' <dd>macOS: &#x2325;F10</dd>\n' +
' <dt>Fokus auf Fußzeile</dt>\n' +
' <dd>Windows oder Linux: ALT+F11</dd>\n' +
' <dd>macOS: &#x2325;F11</dd>\n' +
' <dt>Benachrichtigung fokussieren</dt>\n' +
' <dd>Windows oder Linux: ALT+F12</dd>\n' +
' <dd>macOS: &#x2325;F12</dd>\n' +
' <dt>Fokus auf kontextbezogene Symbolleiste</dt>\n' +
' <dd>Windows, Linux oder macOS: STRG+F9</dd>\n' +
'</dl>\n' +
'\n' +
'<p>Die Navigation beginnt beim ersten Benutzeroberflächenelement, welches hervorgehoben ist. Falls sich das erste Element im Pfad der Fußzeile befindet,\n' +
' ist es unterstrichen.</p>\n' +
'\n' +
'<h1>Zwischen Abschnitten der Benutzeroberfläche navigieren</h1>\n' +
'\n' +
'<p>Um von einem Abschnitt der Benutzeroberfläche zum nächsten zu wechseln, drücken Sie <strong>TAB</strong>.</p>\n' +
'\n' +
'<p>Um von einem Abschnitt der Benutzeroberfläche zum vorherigen zu wechseln, drücken Sie <strong>UMSCHALT+TAB</strong>.</p>\n' +
'\n' +
'<p>Die Abschnitte der Benutzeroberfläche haben folgende <strong>TAB</strong>-Reihenfolge:</p>\n' +
'\n' +
'<ol>\n' +
' <li>Menüleiste</li>\n' +
' <li>Einzelne Gruppen der Symbolleiste</li>\n' +
' <li>Randleiste</li>\n' +
' <li>Elementpfad in der Fußzeile</li>\n' +
' <li>Umschaltfläche „Wörter zählen“ in der Fußzeile</li>\n' +
' <li>Branding-Link in der Fußzeile</li>\n' +
' <li>Editor-Ziehpunkt zur Größenänderung in der Fußzeile</li>\n' +
'</ol>\n' +
'\n' +
'<p>Falls ein Abschnitt der Benutzeroberflächen nicht vorhanden ist, wird er übersprungen.</p>\n' +
'\n' +
'<p>Wenn in der Fußzeile die Tastaturnavigation fokussiert ist und keine Randleiste angezeigt wird, wechselt der Fokus durch Drücken von <strong>UMSCHALT+TAB</strong>\n' +
' zur ersten Gruppe der Symbolleiste, nicht zur letzten.</p>\n' +
'\n' +
'<h1>Innerhalb von Abschnitten der Benutzeroberfläche navigieren</h1>\n' +
'\n' +
'<p>Um von einem Element der Benutzeroberfläche zum nächsten zu wechseln, drücken Sie die entsprechende <strong>Pfeiltaste</strong>.</p>\n' +
'\n' +
'<p>Die Pfeiltasten <strong>Links</strong> und <strong>Rechts</strong></p>\n' +
'\n' +
'<ul>\n' +
' <li>wechseln zwischen Menüs in der Menüleiste.</li>\n' +
' <li>öffnen das Untermenü eines Menüs.</li>\n' +
' <li>wechseln zwischen Schaltflächen in einer Gruppe der Symbolleiste.</li>\n' +
' <li>wechseln zwischen Elementen im Elementpfad der Fußzeile.</li>\n' +
'</ul>\n' +
'\n' +
'<p>Die Pfeiltasten <strong>Abwärts</strong> und <strong>Aufwärts</strong></p>\n' +
'\n' +
'<ul>\n' +
' <li>wechseln zwischen Menüelementen in einem Menü.</li>\n' +
' <li>wechseln zwischen Elementen in einem Popupmenü der Symbolleiste.</li>\n' +
'</ul>\n' +
'\n' +
'<p>Die <strong>Pfeiltasten</strong> rotieren innerhalb des fokussierten Abschnitts der Benutzeroberfläche.</p>\n' +
'\n' +
'<p>Um ein geöffnetes Menü, ein geöffnetes Untermenü oder ein geöffnetes Popupmenü zu schließen, drücken Sie die <strong>ESC</strong>-Taste.</p>\n' +
'\n' +
'<p>Wenn sich der aktuelle Fokus ganz oben in einem bestimmten Abschnitt der Benutzeroberfläche befindet, wird durch Drücken der <strong>ESC</strong>-Taste auch\n' +
' die Tastaturnavigation beendet.</p>\n' +
'\n' +
'<h1>Ein Menüelement oder eine Symbolleistenschaltfläche ausführen</h1>\n' +
'\n' +
'<p>Wenn das gewünschte Menüelement oder die gewünschte Symbolleistenschaltfläche hervorgehoben ist, drücken Sie <strong>Zurück</strong>, <strong>Eingabe</strong>\n' +
' oder die <strong>Leertaste</strong>, um das Element auszuführen.</p>\n' +
'\n' +
'<h1>In Dialogfeldern ohne Registerkarten navigieren</h1>\n' +
'\n' +
'<p>In Dialogfeldern ohne Registerkarten ist beim Öffnen eines Dialogfelds die erste interaktive Komponente fokussiert.</p>\n' +
'\n' +
'<p>Navigieren Sie zwischen den interaktiven Komponenten eines Dialogfelds, indem Sie <strong>TAB</strong> oder <strong>UMSCHALT+TAB</strong> drücken.</p>\n' +
'\n' +
'<h1>In Dialogfeldern mit Registerkarten navigieren</h1>\n' +
'\n' +
'<p>In Dialogfeldern mit Registerkarten ist beim Öffnen eines Dialogfelds die erste Schaltfläche eines Registerkartenmenüs fokussiert.</p>\n' +
'\n' +
'<p>Navigieren Sie zwischen den interaktiven Komponenten auf dieser Registerkarte des Dialogfelds, indem Sie <strong>TAB</strong> oder\n' +
' <strong>UMSCHALT+TAB</strong> drücken.</p>\n' +
'\n' +
'<p>Wechseln Sie zu einer anderen Registerkarte des Dialogfelds, indem Sie den Fokus auf das Registerkartenmenü legen und dann die entsprechende <strong>Pfeiltaste</strong>\n' +
' drücken, um durch die verfügbaren Registerkarten zu rotieren.</p>\n');

View File

@ -0,0 +1,93 @@
tinymce.Resource.add('tinymce.html-i18n.help-keynav.el',
'<h1>Έναρξη πλοήγησης μέσω πληκτρολογίου</h1>\n' +
'\n' +
'<dl>\n' +
' <dt>Εστίαση στη γραμμή μενού</dt>\n' +
' <dd>Windows ή Linux: Alt+F9</dd>\n' +
' <dd>macOS: &#x2325;F9</dd>\n' +
' <dt>Εστίαση στη γραμμή εργαλείων</dt>\n' +
' <dd>Windows ή Linux: Alt+F10</dd>\n' +
' <dd>macOS: &#x2325;F10</dd>\n' +
' <dt>Εστίαση στο υποσέλιδο</dt>\n' +
' <dd>Windows ή Linux: Alt+F11</dd>\n' +
' <dd>macOS: &#x2325;F11</dd>\n' +
' <dt>Εστίαση στην ειδοποίηση</dt>\n' +
' <dd>Windows ή Linux: Alt+F12</dd>\n' +
' <dd>macOS: &#x2325;F12</dd>\n' +
' <dt>Εστίαση σε γραμμή εργαλείων βάσει περιεχομένου</dt>\n' +
' <dd>Windows, Linux ή macOS: Ctrl+F9</dd>\n' +
'</dl>\n' +
'\n' +
'<p>Η πλοήγηση θα ξεκινήσει από το πρώτο στοιχείο περιβάλλοντος χρήστη, που θα επισημαίνεται ή θα είναι υπογραμμισμένο,\n' +
' όπως στην περίπτωση της διαδρομής του στοιχείου Υποσέλιδου.</p>\n' +
'\n' +
'<h1>Πλοήγηση μεταξύ ενοτήτων του περιβάλλοντος χρήστη</h1>\n' +
'\n' +
'<p>Για να μετακινηθείτε από μια ενότητα περιβάλλοντος χρήστη στην επόμενη, πιέστε το πλήκτρο <strong>Tab</strong>.</p>\n' +
'\n' +
'<p>Για να μετακινηθείτε από μια ενότητα περιβάλλοντος χρήστη στην προηγούμενη, πιέστε τα πλήκτρα <strong>Shift+Tab</strong>.</p>\n' +
'\n' +
'<p>Η σειρά <strong>Tab</strong> αυτών των ενοτήτων περιβάλλοντος χρήστη είναι η εξής:</p>\n' +
'\n' +
'<ol>\n' +
' <li>Γραμμή μενού</li>\n' +
' <li>Κάθε ομάδα γραμμής εργαλείων</li>\n' +
' <li>Πλαϊνή γραμμή</li>\n' +
' <li>Διαδρομή στοιχείου στο υποσέλιδο</li>\n' +
' <li>Κουμπί εναλλαγής μέτρησης λέξεων στο υποσέλιδο</li>\n' +
' <li>Σύνδεσμος επωνυμίας στο υποσέλιδο</li>\n' +
' <li>Λαβή αλλαγής μεγέθους προγράμματος επεξεργασίας στο υποσέλιδο</li>\n' +
'</ol>\n' +
'\n' +
'<p>Εάν δεν εμφανίζεται ενότητα περιβάλλοντος χρήστη, παραλείπεται.</p>\n' +
'\n' +
'<p>Εάν η εστίαση πλοήγησης βρίσκεται στο πληκτρολόγιο και δεν υπάρχει εμφανής πλαϊνή γραμμή, εάν πιέσετε <strong>Shift+Tab</strong>\n' +
' η εστίαση μετακινείται στην πρώτη ομάδα γραμμής εργαλείων, όχι στην τελευταία.</p>\n' +
'\n' +
'<h1>Πλοήγηση εντός των ενοτήτων του περιβάλλοντος χρήστη</h1>\n' +
'\n' +
'<p>Για να μετακινηθείτε από ένα στοιχείο περιβάλλοντος χρήστη στο επόμενο, πιέστε το αντίστοιχο πλήκτρο <strong>βέλους</strong>.</p>\n' +
'\n' +
'<p>Με τα πλήκτρα <strong>αριστερού</strong> και <strong>δεξιού</strong> βέλους</p>\n' +
'\n' +
'<ul>\n' +
' <li>γίνεται μετακίνηση μεταξύ των μενού στη γραμμή μενού.</li>\n' +
' <li>ανοίγει ένα υπομενού σε ένα μενού.</li>\n' +
' <li>γίνεται μετακίνηση μεταξύ κουμπιών σε μια ομάδα γραμμής εργαλείων.</li>\n' +
' <li>γίνεται μετακίνηση μεταξύ στοιχείων στη διαδρομή στοιχείου στο υποσέλιδο.</li>\n' +
'</ul>\n' +
'\n' +
'<p>Με τα πλήκτρα <strong>επάνω</strong> και <strong>κάτω</strong> βέλους</p>\n' +
'\n' +
'<ul>\n' +
' <li>γίνεται μετακίνηση μεταξύ των στοιχείων μενού σε ένα μενού.</li>\n' +
' <li>γίνεται μετακίνηση μεταξύ των στοιχείων μενού σε ένα αναδυόμενο μενού γραμμής εργαλείων.</li>\n' +
'</ul>\n' +
'\n' +
'<p>Με τα πλήκτρα <strong>βέλους</strong> γίνεται κυκλική μετακίνηση εντός της εστιασμένης ενότητας περιβάλλοντος χρήστη.</p>\n' +
'\n' +
'<p>Για να κλείσετε ένα ανοιχτό μενού, ένα ανοιχτό υπομενού ή ένα ανοιχτό αναδυόμενο μενού, πιέστε το πλήκτρο <strong>Esc</strong>.</p>\n' +
'\n' +
'<p>Εάν η τρέχουσα εστίαση βρίσκεται στην κορυφή μιας ενότητας περιβάλλοντος χρήστη, πιέζοντας το πλήκτρο <strong>Esc</strong>,\n' +
' γίνεται επίσης πλήρης έξοδος από την πλοήγηση μέσω πληκτρολογίου.</p>\n' +
'\n' +
'<h1>Εκτέλεση ενός στοιχείου μενού ή κουμπιού γραμμής εργαλείων</h1>\n' +
'\n' +
'<p>Όταν το επιθυμητό στοιχείο μενού ή κουμπί γραμμής εργαλείων είναι επισημασμένο, πιέστε τα πλήκτρα <strong>Return</strong>, <strong>Enter</strong>,\n' +
' ή το <strong>πλήκτρο διαστήματος</strong> για να εκτελέσετε το στοιχείο.</p>\n' +
'\n' +
'<h1>Πλοήγηση σε παράθυρα διαλόγου χωρίς καρτέλες</h1>\n' +
'\n' +
'<p>Σε παράθυρα διαλόγου χωρίς καρτέλες, το πρώτο αλληλεπιδραστικό στοιχείο λαμβάνει την εστίαση όταν ανοίγει το παράθυρο διαλόγου.</p>\n' +
'\n' +
'<p>Μπορείτε να πλοηγηθείτε μεταξύ των αλληλεπιδραστικών στοιχείων παραθύρων διαλόγων πιέζοντας τα πλήκτρα <strong>Tab</strong> ή <strong>Shift+Tab</strong>.</p>\n' +
'\n' +
'<h1>Πλοήγηση σε παράθυρα διαλόγου με καρτέλες</h1>\n' +
'\n' +
'<p>Σε παράθυρα διαλόγου με καρτέλες, το πρώτο κουμπί στο μενού καρτέλας λαμβάνει την εστίαση όταν ανοίγει το παράθυρο διαλόγου.</p>\n' +
'\n' +
'<p>Μπορείτε να πλοηγηθείτε μεταξύ των αλληλεπιδραστικών στοιχείων αυτής της καρτέλα διαλόγου πιέζοντας τα πλήκτρα <strong>Tab</strong> ή\n' +
' <strong>Shift+Tab</strong>.</p>\n' +
'\n' +
'<p>Μπορείτε να κάνετε εναλλαγή σε άλλη καρτέλα του παραθύρου διαλόγου, μεταφέροντας την εστίαση στο μενού καρτέλας και πιέζοντας το κατάλληλο πλήκτρο <strong>βέλους</strong>\n' +
' για να μετακινηθείτε κυκλικά στις διαθέσιμες καρτέλες.</p>\n');

View File

@ -0,0 +1,93 @@
tinymce.Resource.add('tinymce.html-i18n.help-keynav.en',
'<h1>Begin keyboard navigation</h1>\n' +
'\n' +
'<dl>\n' +
' <dt>Focus the Menu bar</dt>\n' +
' <dd>Windows or Linux: Alt+F9</dd>\n' +
' <dd>macOS: &#x2325;F9</dd>\n' +
' <dt>Focus the Toolbar</dt>\n' +
' <dd>Windows or Linux: Alt+F10</dd>\n' +
' <dd>macOS: &#x2325;F10</dd>\n' +
' <dt>Focus the footer</dt>\n' +
' <dd>Windows or Linux: Alt+F11</dd>\n' +
' <dd>macOS: &#x2325;F11</dd>\n' +
' <dt>Focus the notification</dt>\n' +
' <dd>Windows or Linux: Alt+F12</dd>\n' +
' <dd>macOS: &#x2325;F12</dd>\n' +
' <dt>Focus a contextual toolbar</dt>\n' +
' <dd>Windows, Linux or macOS: Ctrl+F9</dd>\n' +
'</dl>\n' +
'\n' +
'<p>Navigation will start at the first UI item, which will be highlighted, or underlined in the case of the first item in\n' +
' the Footer element path.</p>\n' +
'\n' +
'<h1>Navigate between UI sections</h1>\n' +
'\n' +
'<p>To move from one UI section to the next, press <strong>Tab</strong>.</p>\n' +
'\n' +
'<p>To move from one UI section to the previous, press <strong>Shift+Tab</strong>.</p>\n' +
'\n' +
'<p>The <strong>Tab</strong> order of these UI sections is:</p>\n' +
'\n' +
'<ol>\n' +
' <li>Menu bar</li>\n' +
' <li>Each toolbar group</li>\n' +
' <li>Sidebar</li>\n' +
' <li>Element path in the footer</li>\n' +
' <li>Word count toggle button in the footer</li>\n' +
' <li>Branding link in the footer</li>\n' +
' <li>Editor resize handle in the footer</li>\n' +
'</ol>\n' +
'\n' +
'<p>If a UI section is not present, it is skipped.</p>\n' +
'\n' +
'<p>If the footer has keyboard navigation focus, and there is no visible sidebar, pressing <strong>Shift+Tab</strong>\n' +
' moves focus to the first toolbar group, not the last.</p>\n' +
'\n' +
'<h1>Navigate within UI sections</h1>\n' +
'\n' +
'<p>To move from one UI element to the next, press the appropriate <strong>Arrow</strong> key.</p>\n' +
'\n' +
'<p>The <strong>Left</strong> and <strong>Right</strong> arrow keys</p>\n' +
'\n' +
'<ul>\n' +
' <li>move between menus in the menu bar.</li>\n' +
' <li>open a sub-menu in a menu.</li>\n' +
' <li>move between buttons in a toolbar group.</li>\n' +
' <li>move between items in the footers element path.</li>\n' +
'</ul>\n' +
'\n' +
'<p>The <strong>Down</strong> and <strong>Up</strong> arrow keys</p>\n' +
'\n' +
'<ul>\n' +
' <li>move between menu items in a menu.</li>\n' +
' <li>move between items in a toolbar pop-up menu.</li>\n' +
'</ul>\n' +
'\n' +
'<p><strong>Arrow</strong> keys cycle within the focused UI section.</p>\n' +
'\n' +
'<p>To close an open menu, an open sub-menu, or an open pop-up menu, press the <strong>Esc</strong> key.</p>\n' +
'\n' +
'<p>If the current focus is at the top of a particular UI section, pressing the <strong>Esc</strong> key also exits\n' +
' keyboard navigation entirely.</p>\n' +
'\n' +
'<h1>Execute a menu item or toolbar button</h1>\n' +
'\n' +
'<p>When the desired menu item or toolbar button is highlighted, press <strong>Return</strong>, <strong>Enter</strong>,\n' +
' or the <strong>Space bar</strong> to execute the item.</p>\n' +
'\n' +
'<h1>Navigate non-tabbed dialogs</h1>\n' +
'\n' +
'<p>In non-tabbed dialogs, the first interactive component takes focus when the dialog opens.</p>\n' +
'\n' +
'<p>Navigate between interactive dialog components by pressing <strong>Tab</strong> or <strong>Shift+Tab</strong>.</p>\n' +
'\n' +
'<h1>Navigate tabbed dialogs</h1>\n' +
'\n' +
'<p>In tabbed dialogs, the first button in the tab menu takes focus when the dialog opens.</p>\n' +
'\n' +
'<p>Navigate between interactive components of this dialog tab by pressing <strong>Tab</strong> or\n' +
' <strong>Shift+Tab</strong>.</p>\n' +
'\n' +
'<p>Switch to another dialog tab by giving the tab menu focus and then pressing the appropriate <strong>Arrow</strong>\n' +
' key to cycle through the available tabs.</p>\n');

View File

@ -0,0 +1,93 @@
tinymce.Resource.add('tinymce.html-i18n.help-keynav.es',
'<h1>Iniciar la navegación con el teclado</h1>\n' +
'\n' +
'<dl>\n' +
' <dt>Enfocar la barra de menús</dt>\n' +
' <dd>Windows o Linux: Alt+F9</dd>\n' +
' <dd>macOS: &#x2325;F9</dd>\n' +
' <dt>Enfocar la barra de herramientas</dt>\n' +
' <dd>Windows o Linux: Alt+F10</dd>\n' +
' <dd>macOS: &#x2325;F10</dd>\n' +
' <dt>Enfocar el pie de página</dt>\n' +
' <dd>Windows o Linux: Alt+F11</dd>\n' +
' <dd>macOS: &#x2325;F11</dd>\n' +
' <dt>Enfocar la notificación</dt>\n' +
' <dd>Windows o Linux: Alt+F12</dd>\n' +
' <dd>macOS: &#x2325;F12</dd>\n' +
' <dt>Enfocar una barra de herramientas contextual</dt>\n' +
' <dd>Windows, Linux o macOS: Ctrl+F9</dd>\n' +
'</dl>\n' +
'\n' +
'<p>La navegación comenzará por el primer elemento de la interfaz de usuario (IU), de tal manera que se resaltará, o bien se subrayará si se trata del primer elemento de\n' +
' la ruta de elemento del pie de página.</p>\n' +
'\n' +
'<h1>Navegar entre las secciones de la IU</h1>\n' +
'\n' +
'<p>Para pasar de una sección de la IU a la siguiente, pulse la tecla <strong>Tab</strong>.</p>\n' +
'\n' +
'<p>Para pasar de una sección de la IU a la anterior, pulse <strong>Mayús+Tab</strong>.</p>\n' +
'\n' +
'<p>El orden de <strong>tabulación</strong> de estas secciones de la IU es:</p>\n' +
'\n' +
'<ol>\n' +
' <li>Barra de menús</li>\n' +
' <li>Cada grupo de barra de herramientas</li>\n' +
' <li>Barra lateral</li>\n' +
' <li>Ruta del elemento en el pie de página</li>\n' +
' <li>Botón de alternancia de recuento de palabras en el pie de página</li>\n' +
' <li>Enlace de personalización de marca en el pie de página</li>\n' +
' <li>Controlador de cambio de tamaño en el pie de página</li>\n' +
'</ol>\n' +
'\n' +
'<p>Si una sección de la IU no está presente, esta se omite.</p>\n' +
'\n' +
'<p>Si el pie de página tiene un enfoque de navegación con el teclado y no hay ninguna barra lateral visible, al pulsar <strong>Mayús+Tab</strong>,\n' +
' el enfoque se moverá al primer grupo de barra de herramientas, en lugar de al último.</p>\n' +
'\n' +
'<h1>Navegar dentro de las secciones de la IU</h1>\n' +
'\n' +
'<p>Para pasar de un elemento de la IU al siguiente, pulse la tecla de <strong>flecha</strong> correspondiente.</p>\n' +
'\n' +
'<p>Las teclas de flecha <strong>izquierda</strong> y <strong>derecha</strong> permiten</p>\n' +
'\n' +
'<ul>\n' +
' <li>desplazarse entre los menús de la barra de menús.</li>\n' +
' <li>abrir el submenú de un menú.</li>\n' +
' <li>desplazarse entre los botones de un grupo de barra de herramientas.</li>\n' +
' <li>desplazarse entre los elementos de la ruta de elemento del pie de página.</li>\n' +
'</ul>\n' +
'\n' +
'<p>Las teclas de flecha <strong>abajo</strong> y <strong>arriba</strong> permiten</p>\n' +
'\n' +
'<ul>\n' +
' <li>desplazarse entre los elementos de menú de un menú.</li>\n' +
' <li>desplazarse entre los elementos de un menú emergente de una barra de herramientas.</li>\n' +
'</ul>\n' +
'\n' +
'<p>Las teclas de <strong>flecha</strong> van cambiando dentro de la sección de la IU enfocada.</p>\n' +
'\n' +
'<p>Para cerrar un menú, un submenú o un menú emergente que estén abiertos, pulse la tecla <strong>Esc</strong>.</p>\n' +
'\n' +
'<p>Si el enfoque actual se encuentra en la parte superior de una sección de la IU determinada, al pulsar la tecla <strong>Esc</strong> saldrá\n' +
' de la navegación con el teclado por completo.</p>\n' +
'\n' +
'<h1>Ejecutar un elemento de menú o un botón de barra de herramientas</h1>\n' +
'\n' +
'<p>Si el elemento de menú o el botón de barra de herramientas deseado está resaltado, pulse la tecla <strong>Retorno</strong> o <strong>Entrar</strong>,\n' +
' o la <strong>barra espaciadora</strong> para ejecutar el elemento.</p>\n' +
'\n' +
'<h1>Navegar por cuadros de diálogo sin pestañas</h1>\n' +
'\n' +
'<p>En los cuadros de diálogo sin pestañas, el primer componente interactivo se enfoca al abrirse el cuadro de diálogo.</p>\n' +
'\n' +
'<p>Para navegar entre los componentes interactivos del cuadro de diálogo, pulse las teclas <strong>Tab</strong> o <strong>Mayús+Tab</strong>.</p>\n' +
'\n' +
'<h1>Navegar por cuadros de diálogo con pestañas</h1>\n' +
'\n' +
'<p>En los cuadros de diálogo con pestañas, el primer botón del menú de pestaña se enfoca al abrirse el cuadro de diálogo.</p>\n' +
'\n' +
'<p>Para navegar entre componentes interactivos de esta pestaña del cuadro de diálogo, pulse las teclas <strong>Tab</strong> o\n' +
' <strong>Mayús+Tab</strong>.</p>\n' +
'\n' +
'<p>Si desea cambiar a otra pestaña del cuadro de diálogo, enfoque el menú de pestañas y, a continuación, pulse la tecla de <strong>flecha</strong>\n' +
' correspondiente para moverse por las pestañas disponibles.</p>\n');

View File

@ -0,0 +1,93 @@
tinymce.Resource.add('tinymce.html-i18n.help-keynav.eu',
'<h1>Hasi teklatuaren nabigazioa</h1>\n' +
'\n' +
'<dl>\n' +
' <dt>Fokuratu menu-barra</dt>\n' +
' <dd>Windows edo Linux: Alt+F9</dd>\n' +
' <dd>macOS: &#x2325;F9</dd>\n' +
' <dt>Fokuratu tresna-barra</dt>\n' +
' <dd>Windows edo Linux: Alt+F10</dd>\n' +
' <dd>macOS: &#x2325;F10</dd>\n' +
' <dt>Fokuratu orri-oina</dt>\n' +
' <dd>Windows edo Linux: Alt+F11</dd>\n' +
' <dd>macOS: &#x2325;F11</dd>\n' +
' <dt>Fokuratu jakinarazpena</dt>\n' +
' <dd>Windows edo Linux: Alt+F12</dd>\n' +
' <dd>macOS: &#x2325;F12</dd>\n' +
' <dt>Fokuratu testuinguruaren tresna-barra</dt>\n' +
' <dd>Windows, Linux edo macOS: Ktrl+F9</dd>\n' +
'</dl>\n' +
'\n' +
'<p>Nabigazioa EIko lehen elementuan hasiko da: elementu hori nabarmendu egingo da, edo azpimarratu lehen elementua bada\n' +
' orri-oineko elementuaren bidea.</p>\n' +
'\n' +
'<h1>Nabigatu EIko atalen artean</h1>\n' +
'\n' +
'<p>EIko atal batetik hurrengora mugitzeko, sakatu <strong>Tabuladorea</strong>.</p>\n' +
'\n' +
'<p>EIko atal batetik aurrekora mugitzeko, sakatu <strong>Maius+Tabuladorea</strong>.</p>\n' +
'\n' +
'<p>EIko atal hauen <strong>Tabuladorea</strong> da:</p>\n' +
'\n' +
'<ol>\n' +
' <li>Menu-barra</li>\n' +
' <li>Tresna-barraren talde bakoitza</li>\n' +
' <li>Alboko barra</li>\n' +
' <li>Orri-oineko elementuaren bidea</li>\n' +
' <li>Orri-oneko urrats-kontaketa txandakatzeko botoia</li>\n' +
' <li>Orri-oineko marken esteka</li>\n' +
' <li>Orri-oineko editorearen tamaina aldatzeko heldulekua</li>\n' +
'</ol>\n' +
'\n' +
'<p>EIko atal bat ez badago, saltatu egin da.</p>\n' +
'\n' +
'<p>Orri-oinak teklatuaren nabigazioa fokuratuta badago, eta alboko barra ikusgai ez badago, <strong>Maius+Tabuladorea</strong> sakatuz gero,\n' +
' fokua tresna-barrako lehen taldera eramaten da, ez azkenera.</p>\n' +
'\n' +
'<h1>Nabigatu EIko atalen barruan</h1>\n' +
'\n' +
'<p>EIko elementu batetik hurrengora mugitzeko, sakatu dagokion <strong>Gezia</strong> tekla.</p>\n' +
'\n' +
'<p><strong>Ezkerrera</strong> eta <strong>Eskuinera</strong> gezi-teklak</p>\n' +
'\n' +
'<ul>\n' +
' <li>menu-barrako menuen artean mugitzen da.</li>\n' +
' <li>ireki azpimenu bat menuan.</li>\n' +
' <li>mugitu botoi batetik bestera tresna-barren talde batean.</li>\n' +
' <li>mugitu orri-oineko elementuaren bideko elementu batetik bestera.</li>\n' +
'</ul>\n' +
'\n' +
'<p><strong>Gora</strong> eta <strong>Behera</strong> gezi-teklak</p>\n' +
'\n' +
'<ul>\n' +
' <li>mugitu menu bateko menu-elementuen artean.</li>\n' +
' <li>mugitu tresna-barrako menu gainerakor bateko menu-elementuen artean.</li>\n' +
'</ul>\n' +
'\n' +
'<p><strong>Gezia</strong> teklen zikloa nabarmendutako EI atalen barruan.</p>\n' +
'\n' +
'<p>Irekitako menu bat ixteko, ireki azpimenua, edo ireki menu gainerakorra, sakatu <strong>Ihes</strong> tekla.</p>\n' +
'\n' +
'<p>Une horretan fokuratzea EIko atal jakin baten "goialdean" badago, <strong>Ihes</strong> tekla sakatuz gero\n' +
' teklatuaren nabigaziotik irtengo zara.</p>\n' +
'\n' +
'<h1>Exekutatu menuko elementu bat edo tresna-barrako botoi bat</h1>\n' +
'\n' +
'<p>Nahi den menuaren elementua edo tresna-barraren botoia nabarmenduta dagoenean, sakatu <strong>Itzuli</strong>, <strong>Sartu</strong>\n' +
' edo <strong>Zuriune-barra</strong> elementua exekutatzeko.</p>\n' +
'\n' +
'<h1>Nabigatu fitxarik gabeko elkarrizketak</h1>\n' +
'\n' +
'<p>Fitxarik gabeko elkarrizketetan, lehen osagai interaktiboa fokuratzen da elkarrizketa irekitzen denean.</p>\n' +
'\n' +
'<p>Nabigatu elkarrizketa interaktiboko osagai batetik bestera <strong>Tabuladorea</strong> edo <strong>Maius+Tabuladorea</strong> sakatuta.</p>\n' +
'\n' +
'<h1>Nabigatu fitxadun elkarrizketak</h1>\n' +
'\n' +
'<p>Fitxadun elkarrizketetan, fitxa-menuko lehen botoia fokuratzen da elkarrizketa irekitzen denean.</p>\n' +
'\n' +
'<p>Nabigatu elkarrizketa-fitxa honen interaktiboko osagai batetik bestera <strong>Tabuladorea</strong> edo\n' +
' <strong>Maius+Tabuladorea</strong> sakatuta.</p>\n' +
'\n' +
'<p>Aldatu beste elkarrizketa-fitxa batera fitxa-menua fokuratu eta dagokion <strong>Gezia</strong>\n' +
' tekla sakatzeko, erabilgarri dauden fitxa batetik bestera txandakatzeko.</p>\n');

View File

@ -0,0 +1,93 @@
tinymce.Resource.add('tinymce.html-i18n.help-keynav.fa',
'<h1>شروع پیمایش صفحه‌کلید</h1>\n' +
'\n' +
'<dl>\n' +
' <dt>تمرکز بر نوار منو</dt>\n' +
' <dd>Windows یا Linux:: Alt+F9</dd>\n' +
' <dd>macOS: &#x2325;F9</dd>\n' +
' <dt>تمرکز بر نوار ابزار</dt>\n' +
' <dd>Windows یا Linux: Alt+F10</dd>\n' +
' <dd>macOS: &#x2325;F10</dd>\n' +
' <dt>تمرکز بر پانویس</dt>\n' +
' <dd>Windows یا Linux: Alt+F11</dd>\n' +
' <dd>macOS: &#x2325;F11</dd>\n' +
' <dt>تمرکز اعلان</dt>\n' +
' <dd>ویندوز یا لینوکس: Alt+F12</dd>\n' +
' <dd>macOS: &#x2325;F12</dd>\n' +
' <dt>تمرکز بر نوار ابزار بافتاری</dt>\n' +
' <dd>Windows ،Linux یا macOS: Ctrl+F9</dd>\n' +
'</dl>\n' +
'\n' +
'<p>پیمایش در اولین مورد رابط کاربری شروع می‌شود و درخصوص اولین مورد در\n' +
' مسیر عنصر پانویس، برجسته یا زیرخط‌دار می‌شود.</p>\n' +
'\n' +
'<h1>پیمایش بین بخش‌های رابط کاربری</h1>\n' +
'\n' +
'<p>برای جابجایی از یک بخش رابط کاربری به بخش بعدی، <strong>Tab</strong> را فشار دهید.</p>\n' +
'\n' +
'<p>برای جابجایی از یک بخش رابط کاربری به بخش قبلی، <strong>Shift+Tab</strong> را فشار دهید.</p>\n' +
'\n' +
'<p>ترتیب <strong>Tab</strong> این بخش‌های رابط کاربری عبارتند از:</p>\n' +
'\n' +
'<ol>\n' +
' <li>نوار منو</li>\n' +
' <li>هر گروه نوار ابزار</li>\n' +
' <li>نوار کناری</li>\n' +
' <li>مسیر عنصر در پانویس</li>\n' +
' <li>دکمه تغییر وضعیت تعداد کلمات در پانویس</li>\n' +
' <li>پیوند نمانام‌سازی در پانویس</li>\n' +
' <li>دسته تغییر اندازه ویرایشگر در پانویس</li>\n' +
'</ol>\n' +
'\n' +
'<p>اگر بخشی از رابط کاربری موجود نباشد، رد می‌شود.</p>\n' +
'\n' +
'<p>اگر پانویس دارای تمرکز بر پیمایش صفحه‌کلید باشد،‌ و نوار کناری قابل‌مشاهده وجود ندارد، فشردن <strong>Shift+Tab</strong>\n' +
' تمرکز را به گروه نوار ابزار اول می‌برد، نه آخر.</p>\n' +
'\n' +
'<h1>پیمایش در بخش‌های رابط کاربری</h1>\n' +
'\n' +
'<p>برای جابجایی از یک عنصر رابط کاربری به بعدی، کلید <strong>جهت‌نمای</strong> مناسب را فشار دهید.</p>\n' +
'\n' +
'<p>کلیدهای جهت‌نمای <strong>چپ</strong> و <strong>راست</strong></p>\n' +
'\n' +
'<ul>\n' +
' <li>جابجایی بین منوها در نوار منو.</li>\n' +
' <li>باز کردن منوی فرعی در یک منو.</li>\n' +
' <li>جابجایی بین دکمه‌ها در یک گروه نوار ابزار.</li>\n' +
' <li>جابجایی بین موارد در مسیر عنصر پانویس.</li>\n' +
'</ul>\n' +
'\n' +
'<p>کلیدهای جهت‌نمای <strong>پایین</strong> و <strong>بالا</strong></p>\n' +
'\n' +
'<ul>\n' +
' <li>جابجایی بین موارد منو در یک منو.</li>\n' +
' <li>جابجایی بین موارد در یک منوی بازشوی نوار ابزار.</li>\n' +
'</ul>\n' +
'\n' +
'<p>کلیدهای<strong>جهت‌نما</strong> در بخش رابط کاربری متمرکز می‌چرخند.</p>\n' +
'\n' +
'<p>برای بستن یک منوی باز، یک منوی فرعی باز، یا یک منوی بازشوی باز، کلید <strong>Esc</strong> را فشار دهید.</p>\n' +
'\n' +
'<p>اگر تمرکز فعلی در «بالای» یک بخش رابط کاربری خاص است، فشردن کلید <strong>Esc</strong> نیز موجب\n' +
' خروج کامل از پیمایش صفحه‌کلید می‌شود.</p>\n' +
'\n' +
'<h1>اجرای یک مورد منو یا دکمه نوار ابزار</h1>\n' +
'\n' +
'<p>وقتی مورد منو یا دکمه نوار ابزار مورد نظر هایلایت شد، دکمه <strong>بازگشت</strong>، <strong>Enter</strong>،\n' +
' یا <strong>نوار Space</strong> را فشار دهید تا مورد را اجرا کنید.</p>\n' +
'\n' +
'<h1>پیمایش در کادرهای گفتگوی بدون زبانه</h1>\n' +
'\n' +
'<p>در کادرهای گفتگوی بدون زبانه، وقتی کادر گفتگو باز می‌شود، اولین جزء تعاملی متمرکز می‌شود.</p>\n' +
'\n' +
'<p>با فشردن <strong>Tab</strong> یا <strong>Shift+Tab</strong>، بین اجزای کادر گفتگوی تعاملی پیمایش کنید.</p>\n' +
'\n' +
'<h1>پیمایش کادرهای گفتگوی زبانه‌دار</h1>\n' +
'\n' +
'<p>در کادرهای گفتگوی زبانه‌دار، وقتی کادر گفتگو باز می‌شود، اولین دکمه در منوی زبانه متمرکز می‌شود.</p>\n' +
'\n' +
'<p>با فشردن <strong>Tab</strong> یا\n' +
' <strong>Shift+Tab</strong>، بین اجزای تعاملی این زبانه کادر گفتگو پیمایش کنید.</p>\n' +
'\n' +
'<p>با دادن تمرکز به منوی زبانه و سپس فشار دادن کلید <strong>جهت‌نمای</strong>\n' +
' مناسب برای چرخش میان زبانه‌های موجود، به زبانه کادر گفتگوی دیگری بروید.</p>\n');

View File

@ -0,0 +1,93 @@
tinymce.Resource.add('tinymce.html-i18n.help-keynav.fi',
'<h1>Näppäimistönavigoinnin aloittaminen</h1>\n' +
'\n' +
'<dl>\n' +
' <dt>Siirrä kohdistus valikkopalkkiin</dt>\n' +
' <dd>Windows tai Linux: Alt+F9</dd>\n' +
' <dd>macOS: &#x2325;F9</dd>\n' +
' <dt>Siirrä kohdistus työkalupalkkiin</dt>\n' +
' <dd>Windows tai Linux: Alt+F10</dd>\n' +
' <dd>macOS: &#x2325;F10</dd>\n' +
' <dt>Siirrä kohdistus alatunnisteeseen</dt>\n' +
' <dd>Windows tai Linux: Alt+F11</dd>\n' +
' <dd>macOS: &#x2325;F11</dd>\n' +
' <dt>Keskitä ilmoitukseen</dt>\n' +
' <dd>Windows ja Linux: Alt + F12</dd>\n' +
' <dd>macOS: &#x2325;F12</dd>\n' +
' <dt>Siirrä kohdistus kontekstuaaliseen työkalupalkkiin</dt>\n' +
' <dd>Windows, Linux tai macOS: Ctrl+F9</dd>\n' +
'</dl>\n' +
'\n' +
'<p>Navigointi aloitetaan ensimmäisestä käyttöliittymän kohteesta, joka joko korostetaan tai alleviivataan, jos\n' +
' kyseessä on Alatunniste-elementin polun ensimmäinen kohde.</p>\n' +
'\n' +
'<h1>Käyttöliittymän eri osien välillä navigointi</h1>\n' +
'\n' +
'<p>Paina <strong>sarkainnäppäintä</strong> siirtyäksesi käyttöliittymän osasta seuraavaan.</p>\n' +
'\n' +
'<p>Jos haluat siirtyä edelliseen käyttöliittymän osaan, paina <strong>Shift+sarkainnäppäin</strong>.</p>\n' +
'\n' +
'<p><strong>Sarkainnäppäin</strong> siirtää sinua näissä käyttöliittymän osissa tässä järjestyksessä:</p>\n' +
'\n' +
'<ol>\n' +
' <li>Valikkopalkki</li>\n' +
' <li>Työkalupalkin ryhmät</li>\n' +
' <li>Sivupalkki</li>\n' +
' <li>Elementin polku alatunnisteessa</li>\n' +
' <li>Sanalaskurin vaihtopainike alatunnisteessa</li>\n' +
' <li>Brändäyslinkki alatunnisteessa</li>\n' +
' <li>Editorin koon muuttamisen kahva alatunnisteessa</li>\n' +
'</ol>\n' +
'\n' +
'<p>Jos jotakin käyttöliittymän osaa ei ole, se ohitetaan.</p>\n' +
'\n' +
'<p>Jos kohdistus on siirretty alatunnisteeseen näppäimistönavigoinnilla eikä sivupalkkia ole näkyvissä, <strong>Shift+sarkainnäppäin</strong>\n' +
' siirtää kohdistuksen työkalupalkin ensimmäiseen ryhmään, eikä viimeiseen.</p>\n' +
'\n' +
'<h1>Käyttöliittymän eri osien sisällä navigointi</h1>\n' +
'\n' +
'<p>Paina <strong>nuolinäppäimiä</strong> siirtyäksesi käyttöliittymäelementistä seuraavaan.</p>\n' +
'\n' +
'<p><strong>Vasen</strong>- ja <strong>Oikea</strong>-nuolinäppäimet</p>\n' +
'\n' +
'<ul>\n' +
' <li>siirtävät sinua valikkopalkin valikoiden välillä.</li>\n' +
' <li>avaavat valikon alavalikon.</li>\n' +
' <li>siirtävät sinua työkalupalkin ryhmän painikkeiden välillä.</li>\n' +
' <li>siirtävät sinua kohteiden välillä alatunnisteen elementin polussa.</li>\n' +
'</ul>\n' +
'\n' +
'<p><strong>Alas</strong>- ja <strong>Ylös</strong>-nuolinäppäimet</p>\n' +
'\n' +
'<ul>\n' +
' <li>siirtävät sinua valikon valikkokohteiden välillä.</li>\n' +
' <li>siirtävät sinua työkalupalkin ponnahdusvalikon kohteiden välillä.</li>\n' +
'</ul>\n' +
'\n' +
'<p><strong>Nuolinäppäimet</strong> siirtävät sinua käyttöliittymän korostetun osan sisällä syklissä.</p>\n' +
'\n' +
'<p>Paina <strong>Esc</strong>-näppäintä sulkeaksesi avoimen valikon, avataksesi alavalikon tai avataksesi ponnahdusvalikon.</p>\n' +
'\n' +
'<p>Jos kohdistus on käyttöliittymän tietyn osion ylälaidassa, <strong>Esc</strong>-näppäimen painaminen\n' +
' poistuu myös näppäimistönavigoinnista kokonaan.</p>\n' +
'\n' +
'<h1>Suorita valikkokohde tai työkalupalkin painike</h1>\n' +
'\n' +
'<p>Kun haluamasi valikkokohde tai työkalupalkin painike on korostettuna, paina <strong>Return</strong>-, <strong>Enter</strong>-\n' +
' tai <strong>välilyöntinäppäintä</strong> suorittaaksesi kohteen.</p>\n' +
'\n' +
'<h1>Välilehdittömissä valintaikkunoissa navigointi</h1>\n' +
'\n' +
'<p>Kun välilehdetön valintaikkuna avautuu, kohdistus siirtyy sen ensimmäiseen interaktiiviseen komponenttiin.</p>\n' +
'\n' +
'<p>Voit siirtyä valintaikkunan interaktiivisten komponenttien välillä painamalla <strong>sarkainnäppäintä</strong> tai <strong>Shift+sarkainnäppäin</strong>.</p>\n' +
'\n' +
'<h1>Välilehdellisissä valintaikkunoissa navigointi</h1>\n' +
'\n' +
'<p>Kun välilehdellinen valintaikkuna avautuu, kohdistus siirtyy välilehtivalikon ensimmäiseen painikkeeseen.</p>\n' +
'\n' +
'<p>Voit siirtyä valintaikkunan välilehden interaktiivisen komponenttien välillä painamalla <strong>sarkainnäppäintä</strong> tai\n' +
' <strong>Shift+sarkainnäppäin</strong>.</p>\n' +
'\n' +
'<p>Voit siirtyä valintaikkunan toiseen välilehteen siirtämällä kohdistuksen välilehtivalikkoon ja painamalla sopivaa <strong>nuolinäppäintä</strong>\n' +
' siirtyäksesi käytettävissä olevien välilehtien välillä syklissä.</p>\n');

View File

@ -0,0 +1,93 @@
tinymce.Resource.add('tinymce.html-i18n.help-keynav.fr_FR',
'<h1>Débuter la navigation au clavier</h1>\n' +
'\n' +
'<dl>\n' +
' <dt>Cibler la barre du menu</dt>\n' +
' <dd>Windows ou Linux : Alt+F9</dd>\n' +
' <dd>macOS : &#x2325;F9</dd>\n' +
" <dt>Cibler la barre d'outils</dt>\n" +
' <dd>Windows ou Linux : Alt+F10</dd>\n' +
' <dd>macOS : &#x2325;F10</dd>\n' +
' <dt>Cibler le pied de page</dt>\n' +
' <dd>Windows ou Linux : Alt+F11</dd>\n' +
' <dd>macOS : &#x2325;F11</dd>\n' +
' <dt>Cibler la notification</dt>\n' +
' <dd>Windows ou Linux : Alt+F12</dd>\n' +
' <dd>macOS : &#x2325;F12</dd>\n' +
" <dt>Cibler une barre d'outils contextuelle</dt>\n" +
' <dd>Windows, Linux ou macOS : Ctrl+F9</dd>\n' +
'</dl>\n' +
'\n' +
"<p>La navigation débutera sur le premier élément de l'interface utilisateur, qui sera mis en surbrillance ou bien souligné dans le cas du premier élément du\n" +
" chemin d'éléments du pied de page.</p>\n" +
'\n' +
"<h1>Naviguer entre les sections de l'interface utilisateur</h1>\n" +
'\n' +
"<p>Pour passer d'une section de l'interface utilisateur à la suivante, appuyez sur <strong>Tabulation</strong>.</p>\n" +
'\n' +
"<p>Pour passer d'une section de l'interface utilisateur à la précédente, appuyez sur <strong>Maj+Tabulation</strong>.</p>\n" +
'\n' +
"<p>L'ordre de <strong>Tabulation</strong> de ces sections de l'interface utilisateur est le suivant :</p>\n" +
'\n' +
'<ol>\n' +
' <li>Barre du menu</li>\n' +
" <li>Chaque groupe de barres d'outils</li>\n" +
' <li>Barre latérale</li>\n' +
" <li>Chemin d'éléments du pied de page</li>\n" +
" <li>Bouton d'activation du compteur de mots dans le pied de page</li>\n" +
' <li>Lien de marque dans le pied de page</li>\n' +
" <li>Poignée de redimensionnement de l'éditeur dans le pied de page</li>\n" +
'</ol>\n' +
'\n' +
"<p>Si une section de l'interface utilisateur n'est pas présente, elle sera ignorée.</p>\n" +
'\n' +
"<p>Si le pied de page comporte un ciblage par navigation au clavier et qu'il n'y a aucune barre latérale visible, appuyer sur <strong>Maj+Tabulation</strong>\n" +
" déplace le ciblage vers le premier groupe de barres d'outils et non le dernier.</p>\n" +
'\n' +
"<h1>Naviguer au sein des sections de l'interface utilisateur</h1>\n" +
'\n' +
"<p>Pour passer d'un élément de l'interface utilisateur au suivant, appuyez sur la <strong>Flèche</strong> appropriée.</p>\n" +
'\n' +
'<p>Les touches fléchées <strong>Gauche</strong> et <strong>Droite</strong></p>\n' +
'\n' +
'<ul>\n' +
' <li>se déplacent entre les menus de la barre des menus.</li>\n' +
" <li>ouvrent un sous-menu au sein d'un menu.</li>\n" +
" <li>se déplacent entre les boutons d'un groupe de barres d'outils.</li>\n" +
" <li>se déplacent entre les éléments du chemin d'éléments du pied de page.</li>\n" +
'</ul>\n' +
'\n' +
'<p>Les touches fléchées <strong>Bas</strong> et <strong>Haut</strong></p>\n' +
'\n' +
'<ul>\n' +
" <li>se déplacent entre les éléments de menu au sein d'un menu.</li>\n" +
" <li>se déplacent entre les éléments au sein d'un menu contextuel de barre d'outils.</li>\n" +
'</ul>\n' +
'\n' +
"<p>Les <strong>Flèches</strong> parcourent la section de l'interface utilisateur ciblée.</p>\n" +
'\n' +
'<p>Pour fermer un menu ouvert, un sous-menu ouvert ou un menu contextuel ouvert, appuyez sur <strong>Echap</strong>.</p>\n' +
'\n' +
"<p>Si l'actuel ciblage se trouve en « haut » d'une section spécifique de l'interface utilisateur, appuyer sur <strong>Echap</strong> permet également de quitter\n" +
' entièrement la navigation au clavier.</p>\n' +
'\n' +
"<h1>Exécuter un élément de menu ou un bouton de barre d'outils</h1>\n" +
'\n' +
"<p>Lorsque l'élément de menu ou le bouton de barre d'outils désiré est mis en surbrillance, appuyez sur la touche <strong>Retour arrière</strong>, <strong>Entrée</strong>\n" +
" ou la <strong>Barre d'espace</strong> pour exécuter l'élément.</p>\n" +
'\n' +
'<h1>Naviguer au sein de dialogues sans onglets</h1>\n' +
'\n' +
"<p>Dans les dialogues sans onglets, le premier composant interactif est ciblé lorsque le dialogue s'ouvre.</p>\n" +
'\n' +
'<p>Naviguez entre les composants du dialogue interactif en appuyant sur <strong>Tabulation</strong> ou <strong>Maj+Tabulation</strong>.</p>\n' +
'\n' +
'<h1>Naviguer au sein de dialogues avec onglets</h1>\n' +
'\n' +
"<p>Dans les dialogues avec onglets, le premier bouton du menu de l'onglet est ciblé lorsque le dialogue s'ouvre.</p>\n" +
'\n' +
'<p>Naviguez entre les composants interactifs de cet onglet de dialogue en appuyant sur <strong>Tabulation</strong> ou\n' +
' <strong>Maj+Tabulation</strong>.</p>\n' +
'\n' +
"<p>Passez à un autre onglet de dialogue en ciblant le menu de l'onglet et en appuyant sur la <strong>Flèche</strong>\n" +
' appropriée pour parcourir les onglets disponibles.</p>\n');

View File

@ -0,0 +1,93 @@
tinymce.Resource.add('tinymce.html-i18n.help-keynav.he_IL',
'<h1>התחל ניווט במקלדת</h1>\n' +
'\n' +
'<dl>\n' +
' <dt>התמקד בשורת התפריטים</dt>\n' +
' <dd>Windows או Linux: Alt+F9</dd>\n' +
' <dd>macOS: &#x2325;F9</dd>\n' +
' <dt>העבר מיקוד לסרגל הכלים</dt>\n' +
' <dd>Windows או Linux: Alt+F10</dd>\n' +
' <dd>macOS: &#x2325;F10</dd>\n' +
' <dt>העבר מיקוד לכותרת התחתונה</dt>\n' +
' <dd>Windows או Linux: Alt+F11</dd>\n' +
' <dd>macOS: &#x2325;F11</dd>\n' +
' <dt>העבר מיקוד להודעה</dt>\n' +
' <dd>Windows או Linux: Alt+F12</dd>\n' +
' <dd>macOS: &#x2325;F12</dd>\n' +
' <dt>העבר מיקוד לסרגל כלים הקשרי</dt>\n' +
' <dd>Windows, Linux או macOS: Ctrl+F9</dd>\n' +
'</dl>\n' +
'\n' +
'<p>הניווט יתחיל ברכיב הראשון במשך, שיודגש או שיהיה מתחתיו קו תחתון במקרה של הפריט הראשון\n' +
' הנתיב של רכיב הכותרת התחתונה.</p>\n' +
'\n' +
'<h1>עבור בין מקטעים במסך</h1>\n' +
'\n' +
'<p>כדי לעבור בין המקטעים במסך, הקש <strong>Tab</strong>.</p>\n' +
'\n' +
'<p>כדי לעבור למקטע הקודם במסך, הקש <strong>Shift+Tab</strong>.</p>\n' +
'\n' +
'<p>הסדר מבחינת מקש <strong>Tab</strong> של הרכיבים במסך:</p>\n' +
'\n' +
'<ol>\n' +
' <li>שורת התפריטים</li>\n' +
' <li>כל קבוצה בסרגל הכלים</li>\n' +
' <li>הסרגל הצידי</li>\n' +
' <li>נתיב של רכיב בכותרת התחתונה</li>\n' +
' <li>לחצן לספירת מילים בכותרת התחתונה</li>\n' +
' <li>קישור של המותג בכותרת התחתונה</li>\n' +
' <li>ידית לשינוי גודל עבור העורך בכותרת התחתונה</li>\n' +
'</ol>\n' +
'\n' +
'<p>אם רכיב כלשהו במסך לא מופיע, המערכת תדלג עליו.</p>\n' +
'\n' +
'<p>אם בכותרת התחתונה יש מיקוד של ניווט במקלדת, ולא מופיע סרגל בצד, יש להקיש <strong>Shift+Tab</strong>\n' +
' מעביר את המיקוד לקבוצה הראשונה בסרגל הכלים, לא האחרונה.</p>\n' +
'\n' +
'<h1>עבור בתוך מקטעים במסך</h1>\n' +
'\n' +
'<p>כדי לעבור מרכיב אחד לרכיב אחר במסך, הקש על מקש <strong>החץ</strong> המתאים.</p>\n' +
'\n' +
'<p>מקשי החיצים <strong>שמאלה</strong> ו<strong>ימינה</strong></p>\n' +
'\n' +
'<ul>\n' +
' <li>עבור בין תפריטים בשורת התפריטים.</li>\n' +
' <li>פתח תפריט משני בתפריט.</li>\n' +
' <li>עבור בין לחצנים בקבוצה בסרגל הכלים.</li>\n' +
' <li>עבור בין פריטים ברכיב בכותרת התחתונה.</li>\n' +
'</ul>\n' +
'\n' +
'<p>מקשי החיצים <strong>למטה</strong> ו<strong>למעלה</strong></p>\n' +
'\n' +
'<ul>\n' +
' <li>עבור בין פריטים בתפריט.</li>\n' +
' <li>עבור בין פריטים בחלון הקובץ של סרגל הכלים.</li>\n' +
'</ul>\n' +
'\n' +
'<p>מקשי <strong>החצים</strong> משתנים בתוך המקטע במסך שעליו נמצא המיקוד.</p>\n' +
'\n' +
'<p>כדי לסגור תפריט פתוח, תפריט משני פתוח או חלון קופץ, הקש על <strong>Esc</strong>.</p>\n' +
'\n' +
"<p>אם המיקוד הוא על החלק 'העליון' של מקטע מסוים במסך, הקשה על <strong>Esc</strong> מביאה גם ליציאה\n" +
' מהניווט במקלדת לחלוטין.</p>\n' +
'\n' +
'<h1>הפעל פריט בתפריט או לחצן בסרגל הכלים</h1>\n' +
'\n' +
'<p>כאשר הפריט הרצוי בתפריט או הלחצן בסרגל הכלים מודגשים, הקש על <strong>Return</strong>, <strong>Enter</strong>,\n' +
' או על <strong>מקש הרווח</strong> כדי להפעיל את הפריט.</p>\n' +
'\n' +
'<h1>ניווט בחלונות דו-שיח בלי כרטיסיות</h1>\n' +
'\n' +
'<p>בחלונות דו-שיח בלי כרטיסיות, הרכיב האינטראקטיבי הראשון מקבל את המיקוד כאשר החלון נפתח.</p>\n' +
'\n' +
'<p>עבור בין רכיבים אינטראקטיביים בחלון על ידי הקשה על <strong>Tab</strong> או <strong>Shift+Tab</strong>.</p>\n' +
'\n' +
'<h1>ניווט בחלונות דו-שיח עם כרטיסיות</h1>\n' +
'\n' +
'<p>בחלונות דו-שיח עם כרטיסיות, הלחצן הראשון בתפריט מקבל את המיקוד כאשר החלון נפתח.</p>\n' +
'\n' +
'<p>עבור בין רכיבים אינטראקטיביים בחלון על ידי הקשה על <strong>Tab</strong> או\n' +
' <strong>Shift+Tab</strong>.</p>\n' +
'\n' +
'<p>עבור לכרטיסיה אחרת בחלון על ידי העברת המיקוד לתפריט הכרטיסיות והקשה על <strong>החץ</strong>המתאים\n' +
' כדי לעבור בין הכרטיסיות הזמינות.</p>\n');

View File

@ -0,0 +1,93 @@
tinymce.Resource.add('tinymce.html-i18n.help-keynav.hi',
'<h1>कीबोर्ड नेविगेशन शुरू करें</h1>\n' +
'\n' +
'<dl>\n' +
' <dt>मेन्यू बार पर फ़ोकस करें</dt>\n' +
' <dd>Windows या Linux: Alt+F9</dd>\n' +
' <dd>macOS: &#x2325;F9</dd>\n' +
' <dt>टूलबार पर फ़ोकस करें</dt>\n' +
' <dd>Windows या Linux: Alt+F10</dd>\n' +
' <dd>macOS: &#x2325;F10</dd>\n' +
' <dt>फ़ुटर पर फ़ोकस करें</dt>\n' +
' <dd>Windows या Linux: Alt+F11</dd>\n' +
' <dd>macOS: &#x2325;F11</dd>\n' +
' <dt>नोटिफ़िकेशन फ़ोकस</dt>\n' +
' <dd>Windows या Linux: Alt+F12</dd>\n' +
' <dd>macOS: &#x2325;F12</dd>\n' +
' <dt>प्रासंगिक टूलबार पर फ़ोकस करें</dt>\n' +
' <dd>Windows, Linux या macOS: Ctrl+F9</dd>\n' +
'</dl>\n' +
'\n' +
'<p>नेविगेशन पहले UI आइटम पर शुरू होगा, जिसे हाइलाइट किया जाएगा या पहले आइटम के मामले में फ़ुटर तत्व पथ में\n' +
' रेखांकित किया जाएगा।</p>\n' +
'\n' +
'<h1>UI सेक्शन के बीच नेविगेट करें</h1>\n' +
'\n' +
'<p>एक UI सेक्शन से दूसरे सेक्शन में जाने के लिए, <strong>Tab</strong> दबाएं।</p>\n' +
'\n' +
'<p>एक UI सेक्शन से पिछले सेक्शन में जाने के लिए, <strong>Shift+Tab</strong> दबाएं।</p>\n' +
'\n' +
'<p>इन UI सेक्शन का <strong>Tab</strong> क्रम नीचे दिया गया है:</p>\n' +
'\n' +
'<ol>\n' +
' <li>मेन्यू बार</li>\n' +
' <li>प्रत्येक टूलबार समूह</li>\n' +
' <li>साइडबार</li>\n' +
' <li>फ़ुटर में तत्व पथ</li>\n' +
' <li>फ़ुटर में शब्द गणना टॉगल बटन</li>\n' +
' <li>फ़ुटर में ब्रांडिंग लिंक</li>\n' +
' <li>फ़ुटर में संपादक का आकार बदलने का हैंडल</li>\n' +
'</ol>\n' +
'\n' +
'<p>अगर कोई UI सेक्शन मौजूद नहीं है, तो उसे छोड़ दिया जाता है।</p>\n' +
'\n' +
'<p>अगर फ़ुटर में कीबोर्ड नेविगेशन फ़ोकस है, और कोई दिखा देने वाला साइडबार नहीं है, तो <strong>Shift+Tab</strong> दबाने से\n' +
' फ़ोकस पहले टूलबार समूह पर चला जाता है, पिछले पर नहीं।</p>\n' +
'\n' +
'<h1>UI सेक्शन के भीतर नेविगेट करें</h1>\n' +
'\n' +
'<p>एक UI तत्व से दूसरे में जाने के लिए उपयुक्त <strong>ऐरो</strong> कुंजी दबाएं।</p>\n' +
'\n' +
'<p><strong>बाएं</strong> और <strong>दाएं</strong> ऐरो कुंजियां</p>\n' +
'\n' +
'<ul>\n' +
' <li>मेन्यू बार में मेन्यू के बीच ले जाती हैं।</li>\n' +
' <li>मेन्यू में एक सब-मेन्यू खोलें।</li>\n' +
' <li>टूलबार समूह में बटनों के बीच ले जाएं।</li>\n' +
' <li>फ़ुटर के तत्व पथ में आइटम के बीच ले जाएं।</li>\n' +
'</ul>\n' +
'\n' +
'<p><strong>नीचे</strong> और <strong>ऊपर</strong> ऐरो कुंजियां</p>\n' +
'\n' +
'<ul>\n' +
' <li>मेन्यू में मेन्यू आइटम के बीच ले जाती हैं।</li>\n' +
' <li>टूलबार पॉप-अप मेन्यू में आइटम के बीच ले जाएं।</li>\n' +
'</ul>\n' +
'\n' +
'<p>फ़ोकस वाले UI सेक्शन के भीतर <strong>ऐरो</strong> कुंजियां चलाती रहती हैं।</p>\n' +
'\n' +
'<p>कोई खुला मेन्यू, कोई खुला सब-मेन्यू या कोई खुला पॉप-अप मेन्यू बंद करने के लिए <strong>Esc</strong> कुंजी दबाएं।</p>\n' +
'\n' +
"<p>अगर मौजूदा फ़ोकस किसी विशेष UI सेक्शन के 'शीर्ष' पर है, तो <strong>Esc</strong> कुंजी दबाने से भी\n" +
' कीबोर्ड नेविगेशन पूरी तरह से बाहर हो जाता है।</p>\n' +
'\n' +
'<h1>मेन्यू आइटम या टूलबार बटन निष्पादित करें</h1>\n' +
'\n' +
'<p>जब वांछित मेन्यू आइटम या टूलबार बटन हाइलाइट किया जाता है, तो आइटम को निष्पादित करने के लिए <strong>Return</strong>, <strong>Enter</strong>,\n' +
' या <strong>Space bar</strong> दबाएं।</p>\n' +
'\n' +
'<h1>गैर-टैब वाले डायलॉग पर नेविगेट करें</h1>\n' +
'\n' +
'<p>गैर-टैब वाले डायलॉग में, डायलॉग खुलने पर पहला इंटरैक्टिव घटक फ़ोकस लेता है।</p>\n' +
'\n' +
'<p><strong>Tab</strong> or <strong>Shift+Tab</strong> दबाकर इंटरैक्टिव डायलॉग घटकों के बीच नेविगेट करें।</p>\n' +
'\n' +
'<h1>टैब किए गए डायलॉग पर नेविगेट करें</h1>\n' +
'\n' +
'<p>टैब किए गए डायलॉग में, डायलॉग खुलने पर टैब मेन्यू में पहला बटन फ़ोकस लेता है।</p>\n' +
'\n' +
'<p>इस डायलॉग टैब के इंटरैक्टिव घटकों के बीच नेविगेट करने के लिए <strong>Tab</strong> या\n' +
' <strong>Shift+Tab</strong> दबाएं।</p>\n' +
'\n' +
'<p>टैब मेन्यू को फ़ोकस देकर और फिर उपलब्ध टैब में के बीच जाने के लिए उपयुक्त <strong>ऐरो</strong>\n' +
' कुंजी दबाकर दूसरे डायलॉग टैब पर स्विच करें।</p>\n');

View File

@ -0,0 +1,93 @@
tinymce.Resource.add('tinymce.html-i18n.help-keynav.hr',
'<h1>Početak navigacije na tipkovnici</h1>\n' +
'\n' +
'<dl>\n' +
' <dt>Fokusiranje trake izbornika</dt>\n' +
' <dd>Windows ili Linux: Alt+F9</dd>\n' +
' <dd>macOS: &#x2325;F9</dd>\n' +
' <dt>Fokusiranje alatne trake</dt>\n' +
' <dd>Windows ili Linux: Alt+F10</dd>\n' +
' <dd>macOS: &#x2325;F10</dd>\n' +
' <dt>Fokusiranje podnožja</dt>\n' +
' <dd>Windows ili Linux: Alt+F11</dd>\n' +
' <dd>macOS: &#x2325;F11</dd>\n' +
' <dt>Fokusiranje obavijesti</dt>\n' +
' <dd>Windows ili Linux: Alt + F12</dd>\n' +
' <dd>macOS: &#x2325;F12</dd>\n' +
' <dt>Fokusiranje kontekstne alatne trake</dt>\n' +
' <dd>Windows, Linux ili macOS: Ctrl+F9</dd>\n' +
'</dl>\n' +
'\n' +
'<p>Navigacija će započeti kod prve stavke na korisničkom sučelju, koja će biti istaknuta ili podcrtana ako se radi o prvoj stavci u\n' +
' putu elementa u podnožju.</p>\n' +
'\n' +
'<h1>Navigacija između dijelova korisničkog sučelja</h1>\n' +
'\n' +
'<p>Za pomicanje s jednog dijela korisničkog sučelja na drugi pritisnite <strong>tabulator</strong>.</p>\n' +
'\n' +
'<p>Za pomicanje s jednog dijela korisničkog sučelja na prethodni pritisnite <strong>Shift + tabulator</strong>.</p>\n' +
'\n' +
'<p>Ovo je redoslijed pomicanja <strong>tabulatora</strong> po dijelovima korisničkog sučelja:</p>\n' +
'\n' +
'<ol>\n' +
' <li>Traka izbornika</li>\n' +
' <li>Pojedinačne grupe na alatnoj traci</li>\n' +
' <li>Bočna traka</li>\n' +
' <li>Put elemenata u podnožju</li>\n' +
' <li>Gumb za pomicanje po broju riječi u podnožju</li>\n' +
' <li>Veza na brand u podnožju</li>\n' +
' <li>Značajka za promjenu veličine alata za uređivanje u podnožju</li>\n' +
'</ol>\n' +
'\n' +
'<p>Ako neki dio korisničkog sučelja nije naveden, on se preskače.</p>\n' +
'\n' +
'<p>Ako u podnožju postoji fokus za navigaciju na tipkovnici, a nema vidljive bočne trake, pritiskom na <strong>Shift + tabulator</strong>\n' +
' fokus se prebacuje na prvu skupinu na alatnoj traci, ne na zadnju.</p>\n' +
'\n' +
'<h1>Navigacija unutar dijelova korisničkog sučelja</h1>\n' +
'\n' +
'<p>Za pomicanje s jednog elementa korisničkog sučelja na drugi pritisnite tipku s odgovarajućom <strong>strelicom</strong>.</p>\n' +
'\n' +
'<p>Tipke s <strong>lijevom</strong> i <strong>desnom</strong> strelicom</p>\n' +
'\n' +
'<ul>\n' +
' <li>služe za pomicanje između izbornika na alatnoj traci.</li>\n' +
' <li>otvaraju podizbornik unutar izbornika.</li>\n' +
' <li>služe za pomicanje između gumba unutar skupina na alatnoj traci.</li>\n' +
' <li>služe za pomicanje između stavki na elementu puta u podnožju.</li>\n' +
'</ul>\n' +
'\n' +
'<p>Tipke s <strong>donjom</strong> i <strong>gornjom</strong> strelicom</p>\n' +
'\n' +
'<ul>\n' +
' <li>služe za pomicanje između stavki unutar izbornika.</li>\n' +
' <li>služe za pomicanje između stavki na alatnoj traci skočnog izbornika.</li>\n' +
'</ul>\n' +
'\n' +
'<p>Tipkama <strong>strelica</strong> kružno se pomičete unutar dijela korisničkog sučelja koji je u fokusu.</p>\n' +
'\n' +
'<p>Za zatvaranje otvorenog izbornika, otvorenog podizbornika ili otvorenog skočnog izbornika pritisnite tipku <strong>Esc</strong>.</p>\n' +
'\n' +
'<p>Ako je fokus trenutačno postavljen na vrh pojedinačnog dijela korisničkog sučelja, pritiskom na tipku <strong>Esc</strong> također\n' +
' u potpunosti zatvarate navigaciju na tipkovnici.</p>\n' +
'\n' +
'<h1>Izvršavanje radnji putem stavki izbornika ili gumba na alatnoj traci</h1>\n' +
'\n' +
'<p>Nakon što se istakne stavka izbornika ili gumb na alatnoj traci s radnjom koju želite izvršiti, pritisnite tipku <strong>Return</strong>, <strong>Enter</strong>\n' +
' ili <strong>razmak</strong> da biste pokrenuli željenu radnju.</p>\n' +
'\n' +
'<h1>Navigacija dijaloškim okvirima izvan kartica</h1>\n' +
'\n' +
'<p>Prilikom otvaranja dijaloških okvira izvan kartica fokus se nalazi na prvoj interaktivnoj komponenti.</p>\n' +
'\n' +
'<p>Navigaciju između interaktivnih dijaloških komponenata vršite pritiskom na <strong>tabulator</strong> ili <strong>Shift + tabulator</strong>.</p>\n' +
'\n' +
'<h1>Navigacija dijaloškim okvirima u karticama</h1>\n' +
'\n' +
'<p>Prilikom otvaranja dijaloških okvira u karticama fokus se nalazi na prvom gumbu u izborniku unutar kartice.</p>\n' +
'\n' +
'<p>Navigaciju između interaktivnih komponenata dijaloškog okvira u kartici vršite pritiskom na <strong>tabulator</strong> ili\n' +
' <strong>Shift + tabulator</strong>.</p>\n' +
'\n' +
'<p>Na karticu s drugim dijaloškim okvirom možete se prebaciti tako da stavite fokus na izbornik kartice pa pritisnete tipku s odgovarajućom <strong>strelicom</strong>\n' +
' za kružno pomicanje između dostupnih kartica.</p>\n');

View File

@ -0,0 +1,93 @@
tinymce.Resource.add('tinymce.html-i18n.help-keynav.hu_HU',
'<h1>Billentyűzetes navigáció indítása</h1>\n' +
'\n' +
'<dl>\n' +
' <dt>Fókusz a menüsávra</dt>\n' +
' <dd>Windows és Linux: Alt+F9</dd>\n' +
' <dd>macOS: &#x2325;F9</dd>\n' +
' <dt>Fókusz az eszköztárra</dt>\n' +
' <dd>Windows és Linux: Alt+F10</dd>\n' +
' <dd>macOS: &#x2325;F10</dd>\n' +
' <dt>Fókusz a láblécre</dt>\n' +
' <dd>Windows és Linux: Alt+F11</dd>\n' +
' <dd>macOS: &#x2325;F11</dd>\n' +
' <dt>Ráközelítés az értesítésre</dt>\n' +
' <dd>Windows vagy Linux: Alt+F12</dd>\n' +
' <dd>macOS: &#x2325;F12</dd>\n' +
' <dt>Fókusz egy környezetfüggő eszköztárra</dt>\n' +
' <dd>Windows, Linux és macOS: Ctrl+F9</dd>\n' +
'</dl>\n' +
'\n' +
'<p>A navigáció az első felhasználói felületi elemnél kezdődik, amelyet a rendszer kiemel, illetve aláhúz, amennyiben az az első elem\n' +
' a lábléc elemútvonalán.</p>\n' +
'\n' +
'<h1>Navigálás a felhasználói felület szakaszai között</h1>\n' +
'\n' +
'<p>A felhasználói felület következő szakaszára váltáshoz nyomja meg a <strong>Tab</strong> billentyűt.</p>\n' +
'\n' +
'<p>A felhasználói felület előző szakaszára váltáshoz nyomja meg a <strong>Shift+Tab</strong> billentyűt.</p>\n' +
'\n' +
'<p>A <strong>Tab</strong> billentyűvel a felhasználói felület szakaszai között a következő sorrendben vált:</p>\n' +
'\n' +
'<ol>\n' +
' <li>Menüsáv</li>\n' +
' <li>Az egyes eszköztárcsoportok</li>\n' +
' <li>Oldalsáv</li>\n' +
' <li>Elemútvonal a láblécen</li>\n' +
' <li>Szószámátkapcsoló gomb a láblécen</li>\n' +
' <li>Márkalink a láblécen</li>\n' +
' <li>Szerkesztő átméretezési fogópontja a láblécen</li>\n' +
'</ol>\n' +
'\n' +
'<p>Ha a felhasználói felület valamelyik eleme nincs jelen, a rendszer kihagyja.</p>\n' +
'\n' +
'<p>Ha a billentyűzetes navigáció fókusza a láblécen van, és nincs látható oldalsáv, a <strong>Shift+Tab</strong>\n' +
' billentyűkombináció lenyomásakor az első eszköztárcsoportra ugrik a fókusz, nem az utolsóra.</p>\n' +
'\n' +
'<h1>Navigálás a felhasználói felület szakaszain belül</h1>\n' +
'\n' +
'<p>A felhasználói felület következő elemére váltáshoz nyomja meg a megfelelő <strong>nyílbillentyűt</strong>.</p>\n' +
'\n' +
'<p>A <strong>bal</strong> és a <strong>jobb</strong> nyílgomb</p>\n' +
'\n' +
'<ul>\n' +
' <li>a menüsávban a menük között vált.</li>\n' +
' <li>a menükben megnyit egy almenüt.</li>\n' +
' <li>az eszköztárcsoportban a gombok között vált.</li>\n' +
' <li>a lábléc elemútvonalán az elemek között vált.</li>\n' +
'</ul>\n' +
'\n' +
'<p>A <strong>le</strong> és a <strong>fel</strong> nyílgomb</p>\n' +
'\n' +
'<ul>\n' +
' <li>a menükben a menüpontok között vált.</li>\n' +
' <li>az eszköztár előugró menüjében az elemek között vált.</li>\n' +
'</ul>\n' +
'\n' +
'<p>A <strong>nyílbillentyűk</strong> lenyomásával körkörösen lépkedhet a fókuszban lévő felhasználói felületi szakasz elemei között.</p>\n' +
'\n' +
'<p>A megnyitott menüket, almenüket és előugró menüket az <strong>Esc</strong> billentyűvel zárhatja be.</p>\n' +
'\n' +
'<p>Ha a fókusz az aktuális felületi elem „felső” részén van, az <strong>Esc</strong> billentyűvel az egész\n' +
' billentyűzetes navigációból kilép.</p>\n' +
'\n' +
'<h1>Menüpont vagy eszköztárgomb aktiválása</h1>\n' +
'\n' +
'<p>Amikor a kívánt menüelem vagy eszköztárgomb van kijelölve, nyomja meg a <strong>Return</strong>, az <strong>Enter</strong>\n' +
' vagy a <strong>Szóköz</strong> billentyűt az adott elem vagy gomb aktiválásához.</p>\n' +
'\n' +
'<h1>Navigálás a lapokkal nem rendelkező párbeszédablakokban</h1>\n' +
'\n' +
'<p>A lapokkal nem rendelkező párbeszédablakokban az első interaktív összetevő kapja a fókuszt, amikor a párbeszédpanel megnyílik.</p>\n' +
'\n' +
'<p>A párbeszédpanelek interaktív összetevői között a <strong>Tab</strong> vagy a <strong>Shift+Tab</strong> billentyűvel navigálhat.</p>\n' +
'\n' +
'<h1>Navigálás a lapokkal rendelkező párbeszédablakokban</h1>\n' +
'\n' +
'<p>A lapokkal rendelkező párbeszédablakokban a lapmenü első gombja kapja a fókuszt, amikor a párbeszédpanel megnyílik.</p>\n' +
'\n' +
'<p>A párbeszédpanel e lapjának interaktív összetevői között a <strong>Tab</strong> vagy\n' +
' <strong>Shift+Tab</strong> billentyűvel navigálhat.</p>\n' +
'\n' +
'<p>A párbeszédablak másik lapjára úgy léphet, hogy a fókuszt a lapmenüre állítja, majd lenyomja a megfelelő <strong>nyílbillentyűt</strong>\n' +
' a rendelkezésre álló lapok közötti lépkedéshez.</p>\n');

View File

@ -0,0 +1,93 @@
tinymce.Resource.add('tinymce.html-i18n.help-keynav.id',
'<h1>Memulai navigasi keyboard</h1>\n' +
'\n' +
'<dl>\n' +
' <dt>Fokus pada bilah Menu</dt>\n' +
' <dd>Windows atau Linux: Alt+F9</dd>\n' +
' <dd>macOS: &#x2325;F9</dd>\n' +
' <dt>Fokus pada Bilah Alat</dt>\n' +
' <dd>Windows atau Linux: Alt+F10</dd>\n' +
' <dd>macOS: &#x2325;F10</dd>\n' +
' <dt>Fokus pada footer</dt>\n' +
' <dd>Windows atau Linux: Alt+F11</dd>\n' +
' <dd>macOS: &#x2325;F11</dd>\n' +
' <dt>Fokuskan pemberitahuan</dt>\n' +
' <dd>Windows atau Linux: Alt+F12</dd>\n' +
' <dd>macOS: &#x2325;F12</dd>\n' +
' <dt>Fokus pada bilah alat kontekstual</dt>\n' +
' <dd>Windows, Linux, atau macOS: Ctrl+F9</dd>\n' +
'</dl>\n' +
'\n' +
'<p>Navigasi akan dimulai dari item pertama UI, yang akan disorot atau digarisbawahi di\n' +
' alur elemen Footer.</p>\n' +
'\n' +
'<h1>Berpindah antar-bagian UI</h1>\n' +
'\n' +
'<p>Untuk berpindah dari satu bagian UI ke bagian berikutnya, tekan <strong>Tab</strong>.</p>\n' +
'\n' +
'<p>Untuk berpindah dari satu bagian UI ke bagian sebelumnya, tekan <strong>Shift+Tab</strong>.</p>\n' +
'\n' +
'<p>Urutan <strong>Tab</strong> bagian-bagian UI ini adalah:</p>\n' +
'\n' +
'<ol>\n' +
' <li>Bilah menu</li>\n' +
' <li>Tiap grup bilah alat</li>\n' +
' <li>Bilah sisi</li>\n' +
' <li>Alur elemen di footer</li>\n' +
' <li>Tombol aktifkan/nonaktifkan jumlah kata di footer</li>\n' +
' <li>Tautan merek di footer</li>\n' +
' <li>Pengatur pengubahan ukuran editor di footer</li>\n' +
'</ol>\n' +
'\n' +
'<p>Jika suatu bagian UI tidak ada, bagian tersebut dilewati.</p>\n' +
'\n' +
'<p>Jika fokus navigasi keyboard ada pada footer, tetapi tidak ada bilah sisi yang terlihat, menekan <strong>Shift+Tab</strong>\n' +
' akan memindahkan fokus ke grup bilah alat pertama, bukan yang terakhir.</p>\n' +
'\n' +
'<h1>Berpindah di dalam bagian-bagian UI</h1>\n' +
'\n' +
'<p>Untuk berpindah dari satu elemen UI ke elemen berikutnya, tekan tombol <strong>Panah</strong> yang sesuai.</p>\n' +
'\n' +
'<p>Tombol panah <strong>Kiri</strong> dan <strong>Kanan</strong> untuk</p>\n' +
'\n' +
'<ul>\n' +
' <li>berpindah-pindah antar-menu di dalam bilah menu.</li>\n' +
' <li>membuka sub-menu di dalam menu.</li>\n' +
' <li>berpindah-pindah antar-tombol di dalam grup bilah alat.</li>\n' +
' <li>berpindah-pindah antar-item di dalam alur elemen footer.</li>\n' +
'</ul>\n' +
'\n' +
'<p>Tombol panah <strong>Bawah</strong> dan <strong>Atas</strong> untuk</p>\n' +
'\n' +
'<ul>\n' +
' <li>berpindah-pindah antar-item menu di dalam menu.</li>\n' +
' <li>berpindah-pindah antar-item di dalam menu pop-up bilah alat.</li>\n' +
'</ul>\n' +
'\n' +
'<p>Tombol <strong>Panah</strong> hanya bergerak di dalam bagian UI yang difokuskan.</p>\n' +
'\n' +
'<p>Untuk menutup menu, sub-menu, atau menu pop-up yang terbuka, tekan tombol <strong>Esc</strong>.</p>\n' +
'\n' +
'<p>Jika fokus sedang berada di atas bagian UI tertentu, menekan tombol <strong>Esc</strong> juga dapat mengeluarkan fokus\n' +
' dari seluruh navigasi keyboard.</p>\n' +
'\n' +
'<h1>Menjalankan item menu atau tombol bilah alat</h1>\n' +
'\n' +
'<p>Jika item menu atau tombol bilah alat yang diinginkan tersorot, tekan <strong>Return</strong>, <strong>Enter</strong>,\n' +
' atau <strong>Spasi</strong> untuk menjalankan item.</p>\n' +
'\n' +
'<h1>Berpindah dalam dialog tanpa tab</h1>\n' +
'\n' +
'<p>Dalam dialog tanpa tab, fokus diarahkan pada komponen interaktif pertama saat dialog terbuka.</p>\n' +
'\n' +
'<p>Berpindah di antara komponen dalam dialog interaktif dengan menekan <strong>Tab</strong> atau <strong>Shift+Tab</strong>.</p>\n' +
'\n' +
'<h1>Berpindah dalam dialog dengan tab</h1>\n' +
'\n' +
'<p>Dalam dialog yang memiliki tab, fokus diarahkan pada tombol pertama di dalam menu saat dialog terbuka.</p>\n' +
'\n' +
'<p>Berpindah di antara komponen-komponen interaktif pada tab dialog ini dengan menekan <strong>Tab</strong> atau\n' +
' <strong>Shift+Tab</strong>.</p>\n' +
'\n' +
'<p>Beralih ke tab dialog lain dengan mengarahkan fokus pada menu tab lalu tekan tombol <strong>Panah</strong>\n' +
' yang sesuai untuk berpindah ke berbagai tab yang tersedia.</p>\n');

View File

@ -0,0 +1,93 @@
tinymce.Resource.add('tinymce.html-i18n.help-keynav.it',
'<h1>Iniziare la navigazione tramite tastiera</h1>\n' +
'\n' +
'<dl>\n' +
' <dt>Impostare lo stato attivo per la barra dei menu</dt>\n' +
' <dd>Windows o Linux: ALT+F9</dd>\n' +
' <dd>macOS: &#x2325;F9</dd>\n' +
' <dt>Impostare lo stato attivo per la barra degli strumenti</dt>\n' +
' <dd>Windows o Linux: ALT+F10</dd>\n' +
' <dd>macOS: &#x2325;F10</dd>\n' +
' <dt>Impostare lo stato attivo per il piè di pagina</dt>\n' +
' <dd>Windows o Linux: ALT+F11</dd>\n' +
' <dd>macOS: &#x2325;F11</dd>\n' +
' <dt>Metti a fuoco la notifica</dt>\n' +
' <dd>Windows o Linux: ALT+F12</dd>\n' +
' <dd>macOS: &#x2325;F12</dd>\n' +
' <dt>Impostare lo stato attivo per la barra degli strumenti contestuale</dt>\n' +
' <dd>Windows, Linux o macOS: CTRL+F9</dd>\n' +
'</dl>\n' +
'\n' +
"<p>La navigazione inizierà dalla prima voce dell'interfaccia utente, che sarà evidenziata o sottolineata nel caso della prima voce\n" +
" nel percorso dell'elemento del piè di pagina.</p>\n" +
'\n' +
"<h1>Navigare tra le sezioni dell'interfaccia utente</h1>\n" +
'\n' +
"<p>Per passare da una sezione dell'interfaccia utente alla successiva, premere <strong>TAB</strong>.</p>\n" +
'\n' +
"<p>Per passare da una sezione dell'interfaccia utente alla precedente, premere <strong>MAIUSC+TAB</strong>.</p>\n" +
'\n' +
"<p>L'ordine di <strong>tabulazione</strong> di queste sezioni dell'interfaccia utente è:</p>\n" +
'\n' +
'<ol>\n' +
' <li>Barra dei menu</li>\n' +
' <li>Ogni gruppo di barre degli strumenti</li>\n' +
' <li>Barra laterale</li>\n' +
" <li>Percorso dell'elemento nel piè di pagina</li>\n" +
' <li>Pulsante di attivazione/disattivazione del conteggio delle parole nel piè di pagina</li>\n' +
' <li>Collegamento al marchio nel piè di pagina</li>\n' +
" <li>Quadratino di ridimensionamento dell'editor nel piè di pagina</li>\n" +
'</ol>\n' +
'\n' +
"<p>Se una sezione dell'interfaccia utente non è presente, viene saltata.</p>\n" +
'\n' +
'<p>Se il piè di pagina ha lo stato attivo per la navigazione tramite tastiera e non è presente alcuna barra laterale visibile, premendo <strong>MAIUSC+TAB</strong>\n' +
" si sposta lo stato attivo sul primo gruppo di barre degli strumenti, non sull'ultimo.</p>\n" +
'\n' +
"<h1>Navigare all'interno delle sezioni dell'interfaccia utente</h1>\n" +
'\n' +
"<p>Per passare da un elemento dell'interfaccia utente al successivo, premere il tasto <strong>freccia</strong> appropriato.</p>\n" +
'\n' +
'<p>I tasti freccia <strong>Sinistra</strong> e <strong>Destra</strong></p>\n' +
'\n' +
'<ul>\n' +
' <li>consentono di spostarsi tra i menu della barra dei menu.</li>\n' +
' <li>aprono un sottomenu in un menu.</li>\n' +
' <li>consentono di spostarsi tra i pulsanti di un gruppo di barre degli strumenti.</li>\n' +
" <li>consentono di spostarsi tra le voci nel percorso dell'elemento del piè di pagina.</li>\n" +
'</ul>\n' +
'\n' +
'<p>I tasti freccia <strong>Giù</strong> e <strong>Su</strong></p>\n' +
'\n' +
'<ul>\n' +
' <li>consentono di spostarsi tra le voci di un menu.</li>\n' +
' <li>consentono di spostarsi tra le voci di un menu a comparsa della barra degli strumenti.</li>\n' +
'</ul>\n' +
'\n' +
"<p>I tasti <strong>freccia</strong> consentono di spostarsi all'interno della sezione dell'interfaccia utente con stato attivo.</p>\n" +
'\n' +
'<p>Per chiudere un menu aperto, un sottomenu aperto o un menu a comparsa aperto, premere il tasto <strong>ESC</strong>.</p>\n' +
'\n' +
"<p>Se lo stato attivo corrente si trova nella parte superiore di una particolare sezione dell'interfaccia utente, premendo il tasto <strong>ESC</strong> si esce\n" +
' completamente dalla navigazione tramite tastiera.</p>\n' +
'\n' +
'<h1>Eseguire una voce di menu o un pulsante della barra degli strumenti</h1>\n' +
'\n' +
'<p>Quando la voce di menu o il pulsante della barra degli strumenti desiderati sono evidenziati, premere il tasto di<strong>ritorno a capo</strong>, il tasto <strong>Invio</strong>\n' +
' o la <strong>barra spaziatrice</strong> per eseguirli.</p>\n' +
'\n' +
'<h1>Navigare nelle finestre di dialogo non a schede</h1>\n' +
'\n' +
"<p>Nelle finestre di dialogo non a schede, all'apertura della finestra di dialogo diventa attivo il primo componente interattivo.</p>\n" +
'\n' +
'<p>Per spostarsi tra i componenti interattivi della finestra di dialogo, premere <strong>TAB</strong> o <strong>MAIUSC+TAB</strong>.</p>\n' +
'\n' +
'<h1>Navigare nelle finestre di dialogo a schede</h1>\n' +
'\n' +
"<p>Nelle finestre di dialogo a schede, all'apertura della finestra di dialogo diventa attivo il primo pulsante del menu della scheda.</p>\n" +
'\n' +
'<p>Per spostarsi tra i componenti interattivi di questa scheda della finestra di dialogo, premere <strong>TAB</strong> o\n' +
' <strong>MAIUSC+TAB</strong>.</p>\n' +
'\n' +
"<p>Per passare a un'altra scheda della finestra di dialogo, attivare il menu della scheda e premere il tasto <strong>freccia</strong>\n" +
' appropriato per scorrere le schede disponibili.</p>\n');

View File

@ -0,0 +1,93 @@
tinymce.Resource.add('tinymce.html-i18n.help-keynav.ja',
'<h1>キーボード ナビゲーションの開始</h1>\n' +
'\n' +
'<dl>\n' +
' <dt>メニュー バーをフォーカス</dt>\n' +
' <dd>Windows または Linux: Alt+F9</dd>\n' +
' <dd>macOS: &#x2325;F9</dd>\n' +
' <dt>ツール バーをフォーカス</dt>\n' +
' <dd>Windows または Linux: Alt+F10</dd>\n' +
' <dd>macOS: &#x2325;F10</dd>\n' +
' <dt>フッターをフォーカス</dt>\n' +
' <dd>Windows または Linux: Alt+F11</dd>\n' +
' <dd>macOS: &#x2325;F11</dd>\n' +
' <dt>通知にフォーカス</dt>\n' +
' <dd>Windows または Linux: Alt+F12</dd>\n' +
' <dd>macOS: &#x2325;F12</dd>\n' +
' <dt>コンテキスト ツール バーをフォーカス</dt>\n' +
' <dd>Windows、Linux または macOS: Ctrl+F9</dd>\n' +
'</dl>\n' +
'\n' +
'<p>ナビゲーションは最初の UI 項目から開始され、強調表示されるか、フッターの要素パスにある最初の項目の場合は\n' +
' 下線が引かれます。</p>\n' +
'\n' +
'<h1>UI セクション間の移動</h1>\n' +
'\n' +
'<p>次の UI セクションに移動するには、<strong>Tab</strong> を押します。</p>\n' +
'\n' +
'<p>前の UI セクションに移動するには、<strong>Shift+Tab</strong> を押します。</p>\n' +
'\n' +
'<p>これらの UI セクションの <strong>Tab</strong> の順序:</p>\n' +
'\n' +
'<ol>\n' +
' <li>メニュー バー</li>\n' +
' <li>各ツール バー グループ</li>\n' +
' <li>サイド バー</li>\n' +
' <li>フッターの要素パス</li>\n' +
' <li>フッターの単語数切り替えボタン</li>\n' +
' <li>フッターのブランド リンク</li>\n' +
' <li>フッターのエディター サイズ変更ハンドル</li>\n' +
'</ol>\n' +
'\n' +
'<p>UI セクションが存在しない場合は、スキップされます。</p>\n' +
'\n' +
'<p>フッターにキーボード ナビゲーション フォーカスがあり、表示可能なサイド バーがない場合、<strong>Shift+Tab</strong> を押すと、\n' +
' フォーカスが最後ではなく最初のツール バー グループに移動します。</p>\n' +
'\n' +
'<h1>UI セクション内の移動</h1>\n' +
'\n' +
'<p>次の UI 要素に移動するには、適切な<strong>矢印</strong>キーを押します。</p>\n' +
'\n' +
'<p><strong>左矢印</strong>と<strong>右矢印</strong>のキー</p>\n' +
'\n' +
'<ul>\n' +
' <li>メニュー バーのメニュー間で移動します。</li>\n' +
' <li>メニュー内のサブメニューを開きます。</li>\n' +
' <li>ツール バー グループのボタン間で移動します。</li>\n' +
' <li>フッターの要素パスの項目間で移動します。</li>\n' +
'</ul>\n' +
'\n' +
'<p><strong>下矢印</strong>と<strong>上矢印</strong>のキー</p>\n' +
'\n' +
'<ul>\n' +
' <li>メニュー内のメニュー項目間で移動します。</li>\n' +
' <li>ツール バー ポップアップ メニュー内のメニュー項目間で移動します。</li>\n' +
'</ul>\n' +
'\n' +
'<p><strong>矢印</strong>キーで、フォーカスされた UI セクション内で循環します。</p>\n' +
'\n' +
'<p>開いたメニュー、開いたサブメニュー、開いたポップアップ メニューを閉じるには、<strong>Esc</strong> キーを押します。</p>\n' +
'\n' +
'<p>現在のフォーカスが特定の UI セクションの「一番上」にある場合、<strong>Esc</strong> キーを押すと\n' +
' キーボード ナビゲーションも完全に閉じられます。</p>\n' +
'\n' +
'<h1>メニュー項目またはツール バー ボタンの実行</h1>\n' +
'\n' +
'<p>目的のメニュー項目やツール バー ボタンが強調表示されている場合、<strong>リターン</strong>、<strong>Enter</strong>、\n' +
' または<strong>スペース キー</strong>を押して項目を実行します。</p>\n' +
'\n' +
'<h1>タブのないダイアログの移動</h1>\n' +
'\n' +
'<p>タブのないダイアログでは、ダイアログが開くと最初の対話型コンポーネントがフォーカスされます。</p>\n' +
'\n' +
'<p><strong>Tab</strong> または <strong>Shift+Tab</strong> を押して、対話型ダイアログ コンポーネント間で移動します。</p>\n' +
'\n' +
'<h1>タブ付きダイアログの移動</h1>\n' +
'\n' +
'<p>タブ付きダイアログでは、ダイアログが開くとタブ メニューの最初のボタンがフォーカスされます。</p>\n' +
'\n' +
'<p><strong>Tab</strong> または\n' +
' <strong>Shift+Tab</strong> を押して、このダイアログ タブの対話型コンポーネント間で移動します。</p>\n' +
'\n' +
'<p>タブ メニューをフォーカスしてから適切な<strong>矢印</strong>キーを押して表示可能なタブを循環して、\n' +
' 別のダイアログに切り替えます。</p>\n');

View File

@ -0,0 +1,93 @@
tinymce.Resource.add('tinymce.html-i18n.help-keynav.kk',
'<h1>Пернетақта навигациясын бастау</h1>\n' +
'\n' +
'<dl>\n' +
' <dt>Мәзір жолағын фокустау</dt>\n' +
' <dd>Windows немесе Linux: Alt+F9</dd>\n' +
' <dd>macOS: &#x2325;F9</dd>\n' +
' <dt>Құралдар тақтасын фокустау</dt>\n' +
' <dd>Windows немесе Linux: Alt+F10</dd>\n' +
' <dd>macOS: &#x2325;F10</dd>\n' +
' <dt>Төменгі деректемені фокустау</dt>\n' +
' <dd>Windows немесе Linux: Alt+F11</dd>\n' +
' <dd>macOS: &#x2325;F11</dd>\n' +
' <dt>Хабарландыруды белгілеу</dt>\n' +
' <dd>Windows немесе Linux: Alt+F12</dd>\n' +
' <dd>macOS: &#x2325;F12</dd>\n' +
' <dt>Мәтінмәндік құралдар тақтасын фокустау</dt>\n' +
' <dd>Windows, Linux немесе macOS: Ctrl+F9</dd>\n' +
'</dl>\n' +
'\n' +
'<p>Навигация бөлектелетін немесе Төменгі деректеме элементінің жолындағы бірінші элемент жағдайында асты сызылатын\n' +
' бірінші ПИ элементінен басталады.</p>\n' +
'\n' +
'<h1>ПИ бөлімдері арасында навигациялау</h1>\n' +
'\n' +
'<p>Бір ПИ бөлімінен келесісіне өту үшін <strong>Tab</strong> пернесін басыңыз.</p>\n' +
'\n' +
'<p>Бір ПИ бөлімінен алдыңғысына өту үшін <strong>Shift+Tab</strong> пернесін басыңыз.</p>\n' +
'\n' +
'<p>Осы ПИ бөлімдерінің <strong>Tab</strong> реті:</p>\n' +
'\n' +
'<ol>\n' +
' <li>Мәзір жолағы</li>\n' +
' <li>Әрбір құралдар тақтасы тобы</li>\n' +
' <li>Бүйірлік жолақ</li>\n' +
' <li>Төменгі деректемедегі элемент жолы</li>\n' +
' <li>Төменгі деректемедегі сөздер санын ауыстыру түймесі</li>\n' +
' <li>Төменгі деректемедегі брендингтік сілтеме</li>\n' +
' <li>Төменгі деректемедегі редактор өлшемін өзгерту тұтқасы</li>\n' +
'</ol>\n' +
'\n' +
'<p>ПИ бөлімі көрсетілмесе, ол өткізіп жіберіледі.</p>\n' +
'\n' +
'<p>Төменгі деректемеде пернетақта навигациясының фокусы болса және бүйірлік жолақ көрінбесе, <strong>Shift+Tab</strong> тіркесімін басу әрекеті\n' +
' фокусты соңғысы емес, бірінші құралдар тақтасы тобына жылжытады.</p>\n' +
'\n' +
'<h1>ПИ бөлімдерінде навигациялау</h1>\n' +
'\n' +
'<p>Бір ПИ элементінен келесісіне өту үшін <strong>Arrow</strong> (Көрсеткі) пернесін басыңыз.</p>\n' +
'\n' +
'<p><strong>Left</strong> (Сол жақ) және <strong>Right</strong> (Оң жақ) көрсеткі пернелері</p>\n' +
'\n' +
'<ul>\n' +
' <li>мәзір жолағындағы мәзірлер арасында жылжыту.</li>\n' +
' <li>мәзірде ішкі мәзірді ашу.</li>\n' +
' <li>құралдар тақтасы тобындағы түймелер арасында жылжыту.</li>\n' +
' <li>төменгі деректеме элементінің жолындағы элементтер арасында жылжыту.</li>\n' +
'</ul>\n' +
'\n' +
'<p><strong>Down</strong> (Төмен) және <strong>Up</strong> (Жоғары) көрсеткі пернелері</p>\n' +
'\n' +
'<ul>\n' +
' <li>мәзірдегі мәзір элементтері арасында жылжыту.</li>\n' +
' <li>құралдар тақтасының ашылмалы мәзіріндегі мәзір элементтері арасында жылжыту.</li>\n' +
'</ul>\n' +
'\n' +
'<p>Фокусталған ПИ бөліміндегі <strong>Arrow</strong> (Көрсеткі) пернелерінің циклі.</p>\n' +
'\n' +
'<p>Ашық мәзірді жабу үшін ішкі мәзірді ашып немесе ашылмалы мәзірді ашып, <strong>Esc</strong> пернесін басыңыз.</p>\n' +
'\n' +
'<p>Ағымдағы фокус белгілі бір ПИ бөлімінің «үстінде» болса, <strong>Esc</strong> пернесін басу әрекеті пернетақта\n' +
' навигациясын толығымен жабады.</p>\n' +
'\n' +
'<h1>Мәзір элементін немесе құралдар тақтасы түймесін орындау</h1>\n' +
'\n' +
'<p>Қажетті мәзір элементі немесе құралдар тақтасы түймесі бөлектелген кезде, элементті орындау үшін <strong>Return</strong> (Қайтару), <strong>Enter</strong> (Енгізу)\n' +
' немесе <strong>Space bar</strong> (Бос орын) пернесін басыңыз.</p>\n' +
'\n' +
'<h1>Белгіленбеген диалог терезелерін навигациялау</h1>\n' +
'\n' +
'<p>Белгіленбеген диалог терезелерінде диалог терезесі ашылған кезде бірінші интерактивті құрамдас фокусталады.</p>\n' +
'\n' +
'<p><strong>Tab</strong> немесе <strong>Shift+Tab</strong> пернесін басу арқылы интерактивті диалог терезесінің құрамдастары арасында навигациялаңыз.</p>\n' +
'\n' +
'<h1>Белгіленген диалог терезелерін навигациялау</h1>\n' +
'\n' +
'<p>Белгіленген диалог терезелерінде диалог терезесі ашылған кезде қойынды мәзіріндегі бірінші түйме фокусталады.</p>\n' +
'\n' +
'<p><strong>Tab</strong> немесе\n' +
' <strong>Shift+Tab</strong> пернесін басу арқылы осы диалог терезесі қойындысының интерактивті құрамдастары арасында навигациялаңыз.</p>\n' +
'\n' +
'<p>Қойынды мәзірінің фокусын беру арқылы басқа диалог терезесінің қойындысына ауысып, тиісті <strong>Arrow</strong> (Көрсеткі)\n' +
' пернесін басу арқылы қолжетімді қойындылар арасында айналдыруға болады.</p>\n');

View File

@ -0,0 +1,93 @@
tinymce.Resource.add('tinymce.html-i18n.help-keynav.ko_KR',
'<h1>키보드 탐색 시작</h1>\n' +
'\n' +
'<dl>\n' +
' <dt>메뉴 모음 포커스 표시</dt>\n' +
' <dd>Windows 또는 Linux: Alt+F9</dd>\n' +
' <dd>macOS: &#x2325;F9</dd>\n' +
' <dt>도구 모음 포커스 표시</dt>\n' +
' <dd>Windows 또는 Linux: Alt+F10</dd>\n' +
' <dd>macOS: &#x2325;F10</dd>\n' +
' <dt>푸터 포커스 표시</dt>\n' +
' <dd>Windows 또는 Linux: Alt+F11</dd>\n' +
' <dd>macOS: &#x2325;F11</dd>\n' +
' <dt>알림 포커스</dt>\n' +
' <dd>Windows 또는 Linux: Alt+F12</dd>\n' +
' <dd>macOS: &#x2325;F12</dd>\n' +
' <dt>컨텍스트 도구 모음에 포커스 표시</dt>\n' +
' <dd>Windows, Linux 또는 macOS: Ctrl+F9</dd>\n' +
'</dl>\n' +
'\n' +
'<p>첫 번째 UI 항목에서 탐색이 시작되며, 이때 첫 번째 항목이 강조 표시되거나 푸터 요소 경로에 있는\n' +
' 경우 밑줄 표시됩니다.</p>\n' +
'\n' +
'<h1>UI 섹션 간 탐색</h1>\n' +
'\n' +
'<p>한 UI 섹션에서 다음 UI 섹션으로 이동하려면 <strong>Tab(탭)</strong>을 누릅니다.</p>\n' +
'\n' +
'<p>한 UI 섹션에서 이전 UI 섹션으로 돌아가려면 <strong>Shift+Tab(시프트+탭)</strong>을 누릅니다.</p>\n' +
'\n' +
'<p>이 UI 섹션의 <strong>Tab(탭)</strong> 순서는 다음과 같습니다.</p>\n' +
'\n' +
'<ol>\n' +
' <li>메뉴 바</li>\n' +
' <li>각 도구 모음 그룹</li>\n' +
' <li>사이드바</li>\n' +
' <li>푸터의 요소 경로</li>\n' +
' <li>푸터의 단어 수 토글 버튼</li>\n' +
' <li>푸터의 브랜딩 링크</li>\n' +
' <li>푸터의 에디터 크기 변경 핸들</li>\n' +
'</ol>\n' +
'\n' +
'<p>UI 섹션이 없는 경우 건너뛰기합니다.</p>\n' +
'\n' +
'<p>푸터에 키보드 탐색 포커스가 있고 사이드바는 보이지 않는 경우 <strong>Shift+Tab(시프트+탭)</strong>을 누르면\n' +
' 포커스 표시가 마지막이 아닌 첫 번째 도구 모음 그룹으로 이동합니다.</p>\n' +
'\n' +
'<h1>UI 섹션 내 탐색</h1>\n' +
'\n' +
'<p>한 UI 요소에서 다음 UI 요소로 이동하려면 적절한 <strong>화살표</strong> 키를 누릅니다.</p>\n' +
'\n' +
'<p><strong>왼쪽</strong>과 <strong>오른쪽</strong> 화살표 키의 용도:</p>\n' +
'\n' +
'<ul>\n' +
' <li>메뉴 모음에서 메뉴 항목 사이를 이동합니다.</li>\n' +
' <li>메뉴에서 하위 메뉴를 엽니다.</li>\n' +
' <li>도구 모음 그룹에서 버튼 사이를 이동합니다.</li>\n' +
' <li>푸터의 요소 경로에서 항목 간에 이동합니다.</li>\n' +
'</ul>\n' +
'\n' +
'<p><strong>아래</strong>와 <strong>위</strong> 화살표 키의 용도:</p>\n' +
'\n' +
'<ul>\n' +
' <li>메뉴에서 메뉴 항목 사이를 이동합니다.</li>\n' +
' <li>도구 모음 팝업 메뉴에서 메뉴 항목 사이를 이동합니다.</li>\n' +
'</ul>\n' +
'\n' +
'<p><strong>화살표</strong> 키는 포커스 표시 UI 섹션 내에서 순환됩니다.</p>\n' +
'\n' +
'<p>열려 있는 메뉴, 열려 있는 하위 메뉴 또는 열려 있는 팝업 메뉴를 닫으려면 <strong>Esc</strong> 키를 누릅니다.</p>\n' +
'\n' +
"<p>현재 포커스 표시가 특정 UI 섹션 '상단'에 있는 경우 이때도 <strong>Esc</strong> 키를 누르면\n" +
' 키보드 탐색이 완전히 종료됩니다.</p>\n' +
'\n' +
'<h1>메뉴 항목 또는 도구 모음 버튼 실행</h1>\n' +
'\n' +
'<p>원하는 메뉴 항목 또는 도구 모음 버튼이 강조 표시되어 있을 때 <strong>Return(리턴)</strong>, <strong>Enter(엔터)</strong>,\n' +
' 또는 <strong>Space bar(스페이스바)</strong>를 눌러 해당 항목을 실행합니다.</p>\n' +
'\n' +
'<h1>탭이 없는 대화 탐색</h1>\n' +
'\n' +
'<p>탭이 없는 대화의 경우, 첫 번째 대화형 요소가 포커스 표시된 상태로 대화가 열립니다.</p>\n' +
'\n' +
'<p>대화형 요소들 사이를 이동할 때는 <strong>Tab(탭)</strong> 또는 <strong>Shift+Tab(시프트+탭)</strong>을 누릅니다.</p>\n' +
'\n' +
'<h1>탭이 있는 대화 탐색</h1>\n' +
'\n' +
'<p>탭이 있는 대화의 경우, 탭 메뉴에서 첫 번째 버튼이 포커스 표시된 상태로 대화가 열립니다.</p>\n' +
'\n' +
'<p>이 대화 탭의 대화형 요소들 사이를 이동할 때는 <strong>Tab(탭)</strong> 또는\n' +
' <strong>Shift+Tab(시프트+탭)</strong>을 누릅니다.</p>\n' +
'\n' +
'<p>다른 대화 탭으로 이동하려면 탭 메뉴를 포커스 표시한 다음 적절한 <strong>화살표</strong>\n' +
' 키를 눌러 사용 가능한 탭들을 지나 원하는 탭으로 이동합니다.</p>\n');

View File

@ -0,0 +1,93 @@
tinymce.Resource.add('tinymce.html-i18n.help-keynav.ms',
'<h1>Mulakan navigasi papan kekunci</h1>\n' +
'\n' +
'<dl>\n' +
' <dt>Fokus bar Menu</dt>\n' +
' <dd>Windows atau Linux: Alt+F9</dd>\n' +
' <dd>macOS: &#x2325;F9</dd>\n' +
' <dt>Fokus Bar Alat</dt>\n' +
' <dd>Windows atau Linux: Alt+F10</dd>\n' +
' <dd>macOS: &#x2325;F10</dd>\n' +
' <dt>Fokus pengaki</dt>\n' +
' <dd>Windows atau Linux: Alt+F11</dd>\n' +
' <dd>macOS: &#x2325;F11</dd>\n' +
' <dt>Tumpu kepada pemberitahuan</dt>\n' +
' <dd>Windows atau Linux: Alt+F12</dd>\n' +
' <dd>macOS: &#x2325;F12</dd>\n' +
' <dt>Fokus bar alat kontekstual</dt>\n' +
' <dd>Windows, Linux atau macOS: Ctrl+F9</dd>\n' +
'</dl>\n' +
'\n' +
'<p>Navigasi akan bermula pada item UI pertama, yang akan diserlahkan atau digaris bawah dalam saiz item pertama dalam\n' +
' laluan elemen Pengaki.</p>\n' +
'\n' +
'<h1>Navigasi antara bahagian UI</h1>\n' +
'\n' +
'<p>Untuk bergerak dari satu bahagian UI ke yang seterusnya, tekan <strong>Tab</strong>.</p>\n' +
'\n' +
'<p>Untuk bergerak dari satu bahagian UI ke yang sebelumnya, tekan <strong>Shift+Tab</strong>.</p>\n' +
'\n' +
'<p>Tertib <strong>Tab</strong> bahagian UI ini ialah:</p>\n' +
'\n' +
'<ol>\n' +
' <li>Bar menu</li>\n' +
' <li>Setiap kumpulan bar alat</li>\n' +
' <li>Bar sisi</li>\n' +
' <li>Laluan elemen dalam pengaki</li>\n' +
' <li>Butang togol kiraan perkataan dalam pengaki</li>\n' +
' <li>Pautan penjenamaan dalam pengaki</li>\n' +
' <li>Pemegang saiz semula editor dalam pengaki</li>\n' +
'</ol>\n' +
'\n' +
'<p>Jika bahagian UI tidak wujud, ia dilangkau.</p>\n' +
'\n' +
'<p>Jika pengaki mempunyai fokus navigasi papan kekunci dan tiada bar sisi kelihatan, menekan <strong>Shift+Tab</strong>\n' +
' akan mengalihkan fokus ke kumpulan bar alat pertama, bukannya yang terakhir.</p>\n' +
'\n' +
'<h1>Navigasi dalam bahagian UI</h1>\n' +
'\n' +
'<p>Untuk bergerak dari satu elemen UI ke yang seterusnya, tekan kekunci <strong>Anak Panah</strong> yang bersesuaian.</p>\n' +
'\n' +
'<p>Kekunci anak panah <strong>Kiri</strong> dan <strong>Kanan</strong></p>\n' +
'\n' +
'<ul>\n' +
' <li>bergerak antara menu dalam bar menu.</li>\n' +
' <li>membukan submenu dalam menu.</li>\n' +
' <li>bergerak antara butang dalam kumpulan bar alat.</li>\n' +
' <li>Laluan elemen dalam pengaki.</li>\n' +
'</ul>\n' +
'\n' +
'<p>Kekunci anak panah <strong>Bawah</strong> dan <strong>Atas</strong></p>\n' +
'\n' +
'<ul>\n' +
' <li>bergerak antara item menu dalam menu.</li>\n' +
' <li>bergerak antara item dalam menu timbul bar alat.</li>\n' +
'</ul>\n' +
'\n' +
'<p>Kekunci <strong>Anak Panah</strong> berkitar dalam bahagian UI difokuskan.</p>\n' +
'\n' +
'<p>Untuk menutup menu buka, submenu terbuka atau menu timbul terbuka, tekan kekunci <strong>Esc</strong>.</p>\n' +
'\n' +
"<p>Jika fokus semasa berada di bahagian 'atas' bahagian UI tertentu, menekan kekunci <strong>Esc</strong> juga akan keluar daripada\n" +
' navigasi papan kekunci sepenuhnya.</p>\n' +
'\n' +
'<h1>Laksanakan item menu atau butang bar alat</h1>\n' +
'\n' +
'<p>Apabila item menu atau butang bar alat yang diinginkan diserlahkan, tekan <strong>Return</strong>, <strong>Enter</strong>,\n' +
' atau <strong>bar Space</strong> untuk melaksanakan item.</p>\n' +
'\n' +
'<h1>Navigasi ke dialog tidak bertab</h1>\n' +
'\n' +
'<p>Dalam dialog tidak bertab, komponen interaksi pertama difokuskan apabila dialog dibuka.</p>\n' +
'\n' +
'<p>Navigasi antara komponen dialog interaktif dengan menekan <strong>Tab</strong> atau <strong>Shift+Tab</strong>.</p>\n' +
'\n' +
'<h1>Navigasi ke dialog bertab</h1>\n' +
'\n' +
'<p>Dalam dialog bertab, butang pertama dalam menu tab difokuskan apabila dialog dibuka.</p>\n' +
'\n' +
'<p>Navigasi antara komponen interaktif tab dialog ini dengan menekan <strong>Tab</strong> atau\n' +
' <strong>Shift+Tab</strong>.</p>\n' +
'\n' +
'<p>Tukar kepada tab dialog lain dengan memfokuskan menu tab, kemudian menekan kekunci <strong>Anak Panah</strong> yang bersesuaian\n' +
' untuk berkitar menerusi tab yang tersedia.</p>\n');

View File

@ -0,0 +1,93 @@
tinymce.Resource.add('tinymce.html-i18n.help-keynav.nb_NO',
'<h1>Starte tastaturnavigering</h1>\n' +
'\n' +
'<dl>\n' +
' <dt>Utheve menylinjen</dt>\n' +
' <dd>Windows eller Linux: Alt + F9</dd>\n' +
' <dd>macOS: &#x2325;F9</dd>\n' +
' <dt>Utheve verktøylinjen</dt>\n' +
' <dd>Windows eller Linux: Alt + F10</dd>\n' +
' <dd>macOS: &#x2325;F10</dd>\n' +
' <dt>Utheve bunnteksten</dt>\n' +
' <dd>Windows eller Linux: Alt + F11</dd>\n' +
' <dd>macOS: &#x2325;F11</dd>\n' +
' <dt>Fokuser på varselet</dt>\n' +
' <dd>Windows eller Linux: Alt+F12</dd>\n' +
' <dd>macOS: &#x2325;F12</dd>\n' +
' <dt>Utheve en kontekstuell verktøylinje</dt>\n' +
' <dd>Windows, Linux eller macOS: Ctrl + F9</dd>\n' +
'</dl>\n' +
'\n' +
'<p>Navigeringen starter ved det første grensesnittelementet, som utheves, eller understrekes når det gjelder det første elementet i\n' +
' elementstien i bunnteksten.</p>\n' +
'\n' +
'<h1>Navigere mellom grensesnittdeler</h1>\n' +
'\n' +
'<p>Du kan bevege deg fra én grensesnittdel til den neste ved å trykke på <strong>tabulatortasten</strong>.</p>\n' +
'\n' +
'<p>Du kan bevege deg fra én grensesnittdel til den forrige ved å trykke på <strong>Shift + tabulatortasten</strong>.</p>\n' +
'\n' +
'<p>Rekkefølgen til <strong>tabulatortasten</strong> gjennom grensesnittdelene er:</p>\n' +
'\n' +
'<ol>\n' +
' <li>Menylinjen</li>\n' +
' <li>Hver gruppe på verktøylinjen</li>\n' +
' <li>Sidestolpen</li>\n' +
' <li>Elementstien i bunnteksten</li>\n' +
' <li>Veksleknappen for ordantall i bunnteksten</li>\n' +
' <li>Merkelenken i bunnteksten</li>\n' +
' <li>Skaleringshåndtaket for redigeringsprogrammet i bunnteksten</li>\n' +
'</ol>\n' +
'\n' +
'<p>Hvis en grensesnittdel ikke er til stede, blir den hoppet over.</p>\n' +
'\n' +
'<p>Hvis tastaturnavigeringen har uthevet bunnteksten og det ikke finnes en synlig sidestolpe, kan du trykke på <strong>Shift + tabulatortasten</strong>\n' +
' for å flytte fokuset til den første gruppen på verktøylinjen i stedet for den siste.</p>\n' +
'\n' +
'<h1>Navigere innenfor grensesnittdeler</h1>\n' +
'\n' +
'<p>Du kan bevege deg fra ett grensesnittelement til det neste ved å trykke på den aktuelle <strong>piltasten</strong>.</p>\n' +
'\n' +
'<p>De <strong>venstre</strong> og <strong>høyre</strong> piltastene</p>\n' +
'\n' +
'<ul>\n' +
' <li>beveger deg mellom menyer på menylinjen.</li>\n' +
' <li>åpner en undermeny i en meny.</li>\n' +
' <li>beveger deg mellom knapper i en gruppe på verktøylinjen.</li>\n' +
' <li>beveger deg mellom elementer i elementstien i bunnteksten.</li>\n' +
'</ul>\n' +
'\n' +
'<p><strong>Ned</strong>- og <strong>opp</strong>-piltastene</p>\n' +
'\n' +
'<ul>\n' +
' <li>beveger deg mellom menyelementer i en meny.</li>\n' +
' <li>beveger deg mellom elementer i en hurtigmeny på verktøylinjen.</li>\n' +
'</ul>\n' +
'\n' +
'<p>Med <strong>piltastene</strong> kan du bevege deg innenfor den uthevede grensesnittdelen.</p>\n' +
'\n' +
'<p>Du kan lukke en åpen meny, en åpen undermeny eller en åpen hurtigmeny ved å klikke på <strong>Esc</strong>-tasten.</p>\n' +
'\n' +
'<p>Hvis det øverste nivået i en grensesnittdel er uthevet, kan du ved å trykke på <strong>Esc</strong> også avslutte\n' +
' tastaturnavigeringen helt.</p>\n' +
'\n' +
'<h1>Utføre et menyelement eller en knapp på en verktøylinje</h1>\n' +
'\n' +
'<p>Når det ønskede menyelementet eller verktøylinjeknappen er uthevet, trykker du på <strong>Retur</strong>, <strong>Enter</strong>,\n' +
' eller <strong>mellomromstasten</strong> for å utføre elementet.</p>\n' +
'\n' +
'<h1>Navigere i dialogbokser uten faner</h1>\n' +
'\n' +
'<p>I dialogbokser uten faner blir den første interaktive komponenten uthevet når dialogboksen åpnes.</p>\n' +
'\n' +
'<p>Naviger mellom interaktive komponenter i dialogboksen ved å trykke på <strong>tabulatortasten</strong> eller <strong>Shift + tabulatortasten</strong>.</p>\n' +
'\n' +
'<h1>Navigere i fanebaserte dialogbokser</h1>\n' +
'\n' +
'<p>I fanebaserte dialogbokser blir den første knappen i fanemenyen uthevet når dialogboksen åpnes.</p>\n' +
'\n' +
'<p>Naviger mellom interaktive komponenter i fanen ved å trykke på <strong>tabulatortasten</strong> eller\n' +
' <strong>Shift + tabulatortasten</strong>.</p>\n' +
'\n' +
'<p>Veksle til en annen fane i dialogboksen ved å utheve fanemenyen, og trykk deretter på den aktuelle <strong>piltasten</strong>\n' +
' for å bevege deg mellom de tilgjengelige fanene.</p>\n');

View File

@ -0,0 +1,93 @@
tinymce.Resource.add('tinymce.html-i18n.help-keynav.nl',
'<h1>Toetsenbordnavigatie starten</h1>\n' +
'\n' +
'<dl>\n' +
' <dt>Focus op de menubalk instellen</dt>\n' +
' <dd>Windows of Linux: Alt+F9</dd>\n' +
' <dd>macOS: &#x2325;F9</dd>\n' +
' <dt>Focus op de werkbalk instellen</dt>\n' +
' <dd>Windows of Linux: Alt+F10</dd>\n' +
' <dd>macOS: &#x2325;F10</dd>\n' +
' <dt>Focus op de voettekst instellen</dt>\n' +
' <dd>Windows of Linux: Alt+F11</dd>\n' +
' <dd>macOS: &#x2325;F11</dd>\n' +
' <dt>Focus op de melding instellen</dt>\n' +
' <dd>Windows of Linux: Alt+F12</dd>\n' +
' <dd>macOS: &#x2325;F12</dd>\n' +
' <dt>Focus op een contextuele werkbalk instellen</dt>\n' +
' <dd>Windows, Linux of macOS: Ctrl+F9</dd>\n' +
'</dl>\n' +
'\n' +
'<p>De navigatie start bij het eerste UI-item, dat wordt gemarkeerd of onderstreept als het eerste item zich in\n' +
' in het elementenpad van de voettekst bevindt.</p>\n' +
'\n' +
'<h1>Navigeren tussen UI-secties</h1>\n' +
'\n' +
'<p>Druk op <strong>Tab</strong> om naar de volgende UI-sectie te gaan.</p>\n' +
'\n' +
'<p>Druk op <strong>Shift+Tab</strong> om naar de vorige UI-sectie te gaan.</p>\n' +
'\n' +
'<p>De <strong>Tab</strong>-volgorde van deze UI-secties is:</p>\n' +
'\n' +
'<ol>\n' +
' <li>Menubalk</li>\n' +
' <li>Elke werkbalkgroep</li>\n' +
' <li>Zijbalk</li>\n' +
' <li>Elementenpad in de voettekst</li>\n' +
' <li>Wisselknop voor aantal woorden in de voettekst</li>\n' +
' <li>Merkkoppeling in de voettekst</li>\n' +
' <li>Greep voor het wijzigen van het formaat van de editor in de voettekst</li>\n' +
'</ol>\n' +
'\n' +
'<p>Als een UI-sectie niet aanwezig is, wordt deze overgeslagen.</p>\n' +
'\n' +
'<p>Als de focus van de toetsenbordnavigatie is ingesteld op de voettekst en er geen zichtbare zijbalk is, kun je op <strong>Shift+Tab</strong> drukken\n' +
' om de focus naar de eerste werkbalkgroep in plaats van de laatste te verplaatsen.</p>\n' +
'\n' +
'<h1>Navigeren binnen UI-secties</h1>\n' +
'\n' +
'<p>Druk op de <strong>pijltjestoets</strong> om naar het betreffende UI-element te gaan.</p>\n' +
'\n' +
'<p>Met de pijltjestoetsen <strong>Links</strong> en <strong>Rechts</strong></p>\n' +
'\n' +
'<ul>\n' +
" <li>wissel je tussen menu's in de menubalk.</li>\n" +
' <li>open je een submenu in een menu.</li>\n' +
' <li>wissel je tussen knoppen in een werkbalkgroep.</li>\n' +
' <li>wissel je tussen items in het elementenpad in de voettekst.</li>\n' +
'</ul>\n' +
'\n' +
'<p>Met de pijltjestoetsen <strong>Omlaag</strong> en <strong>Omhoog</strong></p>\n' +
'\n' +
'<ul>\n' +
' <li>wissel je tussen menu-items in een menu.</li>\n' +
' <li>wissel je tussen items in een werkbalkpop-upmenu.</li>\n' +
'</ul>\n' +
'\n' +
'<p>Met de <strong>pijltjestoetsen</strong> wissel je binnen de UI-sectie waarop de focus is ingesteld.</p>\n' +
'\n' +
'<p>Druk op de toets <strong>Esc</strong> om een geopend menu, submenu of pop-upmenu te sluiten.</p>\n' +
'\n' +
"<p>Als de huidige focus is ingesteld 'bovenaan' een bepaalde UI-sectie, kun je op de toets <strong>Esc</strong> drukken\n" +
' om de toetsenbordnavigatie af te sluiten.</p>\n' +
'\n' +
'<h1>Een menu-item of werkbalkknop uitvoeren</h1>\n' +
'\n' +
'<p>Als het gewenste menu-item of de gewenste werkbalkknop is gemarkeerd, kun je op <strong>Return</strong>, <strong>Enter</strong>\n' +
' of de <strong>spatiebalk</strong> drukken om het item uit te voeren.</p>\n' +
'\n' +
'<h1>Navigeren in dialoogvensters zonder tabblad</h1>\n' +
'\n' +
'<p>Als een dialoogvenster zonder tabblad wordt geopend, wordt de focus ingesteld op het eerste interactieve onderdeel.</p>\n' +
'\n' +
'<p>Je kunt navigeren tussen interactieve onderdelen van een dialoogvenster door op <strong>Tab</strong> of <strong>Shift+Tab</strong> te drukken.</p>\n' +
'\n' +
'<h1>Navigeren in dialoogvensters met tabblad</h1>\n' +
'\n' +
'<p>Als een dialoogvenster met tabblad wordt geopend, wordt de focus ingesteld op de eerste knop in het tabbladmenu.</p>\n' +
'\n' +
'<p>Je kunt navigeren tussen interactieve onderdelen van dit tabblad van het dialoogvenster door op <strong>Tab</strong> of\n' +
' <strong>Shift+Tab</strong> te drukken.</p>\n' +
'\n' +
'<p>Je kunt overschakelen naar een ander tabblad van het dialoogvenster door de focus in te stellen op het tabbladmenu en vervolgens op de juiste <strong>pijltjestoets</strong>\n' +
' te drukken om tussen de beschikbare tabbladen te wisselen.</p>\n');

View File

@ -0,0 +1,93 @@
tinymce.Resource.add('tinymce.html-i18n.help-keynav.pl',
'<h1>Początek nawigacji przy użyciu klawiatury</h1>\n' +
'\n' +
'<dl>\n' +
' <dt>Ustaw fokus na pasek menu</dt>\n' +
' <dd>Windows lub Linux: Alt+F9</dd>\n' +
' <dd>macOS: &#x2325;F9</dd>\n' +
' <dt>Ustaw fokus na pasek narzędzi</dt>\n' +
' <dd>Windows lub Linux: Alt+F10</dd>\n' +
' <dd>macOS: &#x2325;F10</dd>\n' +
' <dt>Ustaw fokus na sekcję Footer</dt>\n' +
' <dd>Windows lub Linux: Alt+F11</dd>\n' +
' <dd>macOS: &#x2325;F11</dd>\n' +
' <dt>Skup się na powiadomieniu</dt>\n' +
' <dd>Windows lub Linux: Alt+F12</dd>\n' +
' <dd>macOS: &#x2325;F12</dd>\n' +
' <dt>Ustaw fokus na kontekstowy pasek narzędzi</dt>\n' +
' <dd>Windows, Linux lub macOS: Ctrl+F9</dd>\n' +
'</dl>\n' +
'\n' +
'<p>Nawigacja zostanie rozpoczęta od pierwszego elementu interfejsu użytkownika, który jest podświetlony lub — w przypadku pierwszego elementu\n' +
' w ścieżce elementów w sekcji Footer — podkreślony.</p>\n' +
'\n' +
'<h1>Nawigacja pomiędzy sekcjami interfejsu użytkownika</h1>\n' +
'\n' +
'<p>Aby przenieść się z danej sekcji interfejsu użytkownika do następnej, naciśnij <strong>Tab</strong>.</p>\n' +
'\n' +
'<p>Aby przenieść się z danej sekcji interfejsu użytkownika do poprzedniej, naciśnij <strong>Shift+Tab</strong>.</p>\n' +
'\n' +
'<p>Kolejność klawisza <strong>Tab</strong> w takich sekcjach interfejsu użytkownika jest następująca:</p>\n' +
'\n' +
'<ol>\n' +
' <li>Pasek menu</li>\n' +
' <li>Każda grupa na pasku narzędzi</li>\n' +
' <li>Pasek boczny</li>\n' +
' <li>Ścieżka elementów w sekcji Footer</li>\n' +
' <li>Przycisk przełączania liczby słów w sekcji Footer</li>\n' +
' <li>Łącze brandujące w sekcji Footer</li>\n' +
' <li>Uchwyt zmiany rozmiaru edytora w sekcji Footer</li>\n' +
'</ol>\n' +
'\n' +
'<p>Jeżeli nie ma sekcji interfejsu użytkownika, jest to pomijane.</p>\n' +
'\n' +
'<p>Jeżeli na sekcji Footer jest ustawiony fokus nawigacji przy użyciu klawiatury i nie ma widocznego paska bocznego, naciśnięcie <strong>Shift+Tab</strong>\n' +
' przenosi fokus na pierwszą grupę paska narzędzi, a nie na ostatnią.</p>\n' +
'\n' +
'<h1>Nawigacja wewnątrz sekcji interfejsu użytkownika</h1>\n' +
'\n' +
'<p>Aby przenieść się z danego elementu interfejsu użytkownika do następnego, naciśnij odpowiedni klawisz <strong>strzałki</strong>.</p>\n' +
'\n' +
'<p>Klawisze strzałek <strong>w prawo</strong> i <strong>w lewo</strong> służą do</p>\n' +
'\n' +
'<ul>\n' +
' <li>przenoszenia się pomiędzy menu na pasku menu,</li>\n' +
' <li>otwarcia podmenu w menu,</li>\n' +
' <li>przenoszenia się pomiędzy przyciskami w grupie paska narzędzi,</li>\n' +
' <li>przenoszenia się pomiędzy elementami w ścieżce elementów w sekcji Footer.</li>\n' +
'</ul>\n' +
'\n' +
'<p>Klawisze strzałek <strong>w dół</strong> i <strong>w górę</strong> służą do</p>\n' +
'\n' +
'<ul>\n' +
' <li>przenoszenia się pomiędzy elementami menu w menu,</li>\n' +
' <li>przenoszenia się pomiędzy elementami w wyskakującym menu paska narzędzi.</li>\n' +
'</ul>\n' +
'\n' +
'<p>Klawisze <strong>strzałek</strong> służą do przemieszczania się w sekcji interfejsu użytkownika z ustawionym fokusem.</p>\n' +
'\n' +
'<p>Aby zamknąć otwarte menu, otwarte podmenu lub otwarte menu wyskakujące, naciśnij klawisz <strong>Esc</strong>.</p>\n' +
'\n' +
'<p>Jeżeli fokus jest ustawiony na górze konkretnej sekcji interfejsu użytkownika, naciśnięcie klawisza <strong>Esc</strong> powoduje wyjście\n' +
' z nawigacji przy użyciu klawiatury.</p>\n' +
'\n' +
'<h1>Wykonanie elementu menu lub przycisku paska narzędzi</h1>\n' +
'\n' +
'<p>Gdy podświetlony jest żądany element menu lub przycisk paska narzędzi, naciśnij klawisz <strong>Return</strong>, <strong>Enter</strong>\n' +
' lub <strong>Spacja</strong>, aby go wykonać.</p>\n' +
'\n' +
'<h1>Nawigacja po oknie dialogowym bez kart</h1>\n' +
'\n' +
'<p>Gdy otwiera się okno dialogowe bez kart, fokus ustawiany jest na pierwszą interaktywną część okna.</p>\n' +
'\n' +
'<p>Pomiędzy interaktywnymi częściami okna dialogowego nawiguj, naciskając klawisze <strong>Tab</strong> lub <strong>Shift+Tab</strong>.</p>\n' +
'\n' +
'<h1>Nawigacja po oknie dialogowym z kartami</h1>\n' +
'\n' +
'<p>W przypadku okna dialogowego z kartami po otwarciu okna dialogowego fokus ustawiany jest na pierwszy przycisk w menu karty.</p>\n' +
'\n' +
'<p>Nawigację pomiędzy interaktywnymi częściami karty okna dialogowego prowadzi się poprzez naciskanie klawiszy <strong>Tab</strong> lub\n' +
' <strong>Shift+Tab</strong>.</p>\n' +
'\n' +
'<p>Przełączenie się na inną kartę okna dialogowego wykonuje się poprzez ustawienie fokusu na menu karty i naciśnięcie odpowiedniego klawisza <strong>strzałki</strong>\n' +
' w celu przemieszczenia się pomiędzy dostępnymi kartami.</p>\n');

View File

@ -0,0 +1,93 @@
tinymce.Resource.add('tinymce.html-i18n.help-keynav.pt_BR',
'<h1>Iniciar navegação pelo teclado</h1>\n' +
'\n' +
'<dl>\n' +
' <dt>Foco na barra de menus</dt>\n' +
' <dd>Windows ou Linux: Alt+F9</dd>\n' +
' <dd>macOS: &#x2325;F9</dd>\n' +
' <dt>Foco na barra de ferramentas</dt>\n' +
' <dd>Windows ou Linux: Alt+F10</dd>\n' +
' <dd>macOS: &#x2325;F10</dd>\n' +
' <dt>Foco no rodapé</dt>\n' +
' <dd>Windows ou Linux: Alt+F11</dd>\n' +
' <dd>macOS: &#x2325;F11</dd>\n' +
' <dt>Foco na notificação</dt>\n' +
' <dd>Windows ou Linux: Alt+F12</dd>\n' +
' <dd>macOS: &#x2325;F12</dd>\n' +
' <dt>Foco na barra de ferramentas contextual</dt>\n' +
' <dd>Windows, Linux ou macOS: Ctrl+F9</dd>\n' +
'</dl>\n' +
'\n' +
'<p>A navegação inicia no primeiro item da IU, que será destacado ou sublinhado no caso do primeiro item no\n' +
' caminho do elemento Rodapé.</p>\n' +
'\n' +
'<h1>Navegar entre seções da IU</h1>\n' +
'\n' +
'<p>Para ir de uma seção da IU para a seguinte, pressione <strong>Tab</strong>.</p>\n' +
'\n' +
'<p>Para ir de uma seção da IU para a anterior, pressione <strong>Shift+Tab</strong>.</p>\n' +
'\n' +
'<p>A ordem de <strong>Tab</strong> destas seções da IU é:</p>\n' +
'\n' +
'<ol>\n' +
' <li>Barra de menus</li>\n' +
' <li>Cada grupo da barra de ferramentas</li>\n' +
' <li>Barra lateral</li>\n' +
' <li>Caminho do elemento no rodapé</li>\n' +
' <li>Botão de alternar contagem de palavras no rodapé</li>\n' +
' <li>Link da marca no rodapé</li>\n' +
' <li>Alça de redimensionamento do editor no rodapé</li>\n' +
'</ol>\n' +
'\n' +
'<p>Se não houver uma seção da IU, ela será pulada.</p>\n' +
'\n' +
'<p>Se o rodapé tiver o foco da navegação pelo teclado e não houver uma barra lateral visível, pressionar <strong>Shift+Tab</strong>\n' +
' move o foco para o primeiro grupo da barra de ferramentas, não para o último.</p>\n' +
'\n' +
'<h1>Navegar dentro das seções da IU</h1>\n' +
'\n' +
'<p>Para ir de um elemento da IU para o seguinte, pressione a <strong>Seta</strong> correspondente.</p>\n' +
'\n' +
'<p>As teclas de seta <strong>Esquerda</strong> e <strong>Direita</strong></p>\n' +
'\n' +
'<ul>\n' +
' <li>movem entre menus na barra de menus.</li>\n' +
' <li>abrem um submenu em um menu.</li>\n' +
' <li>movem entre botões em um grupo da barra de ferramentas.</li>\n' +
' <li>movem entre itens no caminho do elemento do rodapé.</li>\n' +
'</ul>\n' +
'\n' +
'<p>As teclas de seta <strong>Abaixo</strong> e <strong>Acima</strong></p>\n' +
'\n' +
'<ul>\n' +
' <li>movem entre itens de menu em um menu.</li>\n' +
' <li>movem entre itens em um menu suspenso da barra de ferramentas.</li>\n' +
'</ul>\n' +
'\n' +
'<p>As teclas de <strong>Seta</strong> alternam dentre a seção da IU em foco.</p>\n' +
'\n' +
'<p>Para fechar um menu aberto, um submenu aberto ou um menu suspenso aberto, pressione <strong>Esc</strong>.</p>\n' +
'\n' +
'<p>Se o foco atual estiver no alto de determinada seção da IU, pressionar <strong>Esc</strong> também sai\n' +
' totalmente da navegação pelo teclado.</p>\n' +
'\n' +
'<h1>Executar um item de menu ou botão da barra de ferramentas</h1>\n' +
'\n' +
'<p>Com o item de menu ou botão da barra de ferramentas desejado destacado, pressione <strong>Return</strong>, <strong>Enter</strong>,\n' +
' ou a <strong>Barra de espaço</strong> para executar o item.</p>\n' +
'\n' +
'<h1>Navegar por caixas de diálogo sem guias</h1>\n' +
'\n' +
'<p>Em caixas de diálogo sem guias, o primeiro componente interativo recebe o foco quando a caixa de diálogo abre.</p>\n' +
'\n' +
'<p>Navegue entre componentes interativos de caixa de diálogo pressionando <strong>Tab</strong> ou <strong>Shift+Tab</strong>.</p>\n' +
'\n' +
'<h1>Navegar por caixas de diálogo com guias</h1>\n' +
'\n' +
'<p>Em caixas de diálogo com guias, o primeiro botão no menu da guia recebe o foco quando a caixa de diálogo abre.</p>\n' +
'\n' +
'<p>Navegue entre componentes interativos dessa guia da caixa de diálogo pressionando <strong>Tab</strong> ou\n' +
' <strong>Shift+Tab</strong>.</p>\n' +
'\n' +
'<p>Alterne para outra guia da caixa de diálogo colocando o foco no menu da guia e pressionando a <strong>Seta</strong>\n' +
' adequada para percorrer as guias disponíveis.</p>\n');

View File

@ -0,0 +1,93 @@
tinymce.Resource.add('tinymce.html-i18n.help-keynav.pt_PT',
'<h1>Iniciar navegação com teclado</h1>\n' +
'\n' +
'<dl>\n' +
' <dt>Foco na barra de menu</dt>\n' +
' <dd>Windows ou Linux: Alt+F9</dd>\n' +
' <dd>macOS: &#x2325;F9</dd>\n' +
' <dt>Foco na barra de ferramentas</dt>\n' +
' <dd>Windows ou Linux: Alt+F10</dd>\n' +
' <dd>macOS: &#x2325;F10</dd>\n' +
' <dt>Foco no rodapé</dt>\n' +
' <dd>Windows ou Linux: Alt+F11</dd>\n' +
' <dd>macOS: &#x2325;F11</dd>\n' +
' <dt>Focar a notificação</dt>\n' +
' <dd>Windows ou Linux: Alt+F12</dd>\n' +
' <dd>macOS: &#x2325;F12</dd>\n' +
' <dt>Foco numa barra de ferramentas contextual</dt>\n' +
' <dd>Windows, Linux ou macOS: Ctrl+F9</dd>\n' +
'</dl>\n' +
'\n' +
'<p>A navegação começará no primeiro item de IU, que estará realçado ou sublinhado, no caso do primeiro item no\n' +
' caminho do elemento do rodapé.</p>\n' +
'\n' +
'<h1>Navegar entre secções de IU</h1>\n' +
'\n' +
'<p>Para se mover de uma secção de IU para a seguinte, prima <strong>Tab</strong>.</p>\n' +
'\n' +
'<p>Para se mover de uma secção de IU para a anterior, prima <strong>Shift+Tab</strong>.</p>\n' +
'\n' +
'<p>A ordem de <strong>tabulação</strong> destas secções de IU é:</p>\n' +
'\n' +
'<ol>\n' +
' <li>Barra de menu</li>\n' +
' <li>Cada grupo da barra de ferramentas</li>\n' +
' <li>Barra lateral</li>\n' +
' <li>Caminho do elemento no rodapé</li>\n' +
' <li>Botão de alternar da contagem de palavras no rodapé</li>\n' +
' <li>Ligação da marca no rodapé</li>\n' +
' <li>Alça de redimensionamento do editor no rodapé</li>\n' +
'</ol>\n' +
'\n' +
'<p>Se uma secção de IU não estiver presente, é ignorada.</p>\n' +
'\n' +
'<p>Se o rodapé tiver foco de navegação com teclado e não existir uma barra lateral visível, premir <strong>Shift+Tab</strong>\n' +
' move o foco para o primeiro grupo da barra de ferramentas e não para o último.</p>\n' +
'\n' +
'<h1>Navegar nas secções de IU</h1>\n' +
'\n' +
'<p>Para se mover de um elemento de IU para o seguinte, prima a tecla de <strong>seta</strong> adequada.</p>\n' +
'\n' +
'<p>As teclas de seta <strong>Para a esquerda</strong> e <strong>Para a direita</strong></p>\n' +
'\n' +
'<ul>\n' +
' <li>movem-se entre menus na barra de menu.</li>\n' +
' <li>abrem um submenu num menu.</li>\n' +
' <li>movem-se entre botões num grupo da barra de ferramentas.</li>\n' +
' <li>movem-se entre itens no caminho do elemento do rodapé.</li>\n' +
'</ul>\n' +
'\n' +
'<p>As teclas de seta <strong>Para cima</strong> e <strong>Para baixo</strong></p>\n' +
'\n' +
'<ul>\n' +
' <li>movem-se entre itens de menu num menu.</li>\n' +
' <li>movem-se entre itens num menu de pop-up da barra de ferramentas.</li>\n' +
'</ul>\n' +
'\n' +
'<p>As teclas de <strong>seta</strong> deslocam-se ciclicamente na secção de IU em foco.</p>\n' +
'\n' +
'<p>Para fechar um menu aberto, um submenu aberto ou um menu de pop-up aberto, prima a tecla <strong>Esc</strong>.</p>\n' +
'\n' +
'<p>Se o foco atual estiver no "topo" de determinada secção de IU, premir a tecla <strong>Esc</strong> também fecha\n' +
' completamente a navegação com teclado.</p>\n' +
'\n' +
'<h1>Executar um item de menu ou botão da barra de ferramentas</h1>\n' +
'\n' +
'<p>Quando o item de menu ou o botão da barra de ferramentas pretendido estiver realçado, prima <strong>Retrocesso</strong>, <strong>Enter</strong>\n' +
' ou a <strong>Barra de espaço</strong> para executar o item.</p>\n' +
'\n' +
'<h1>Navegar em diálogos sem separadores</h1>\n' +
'\n' +
'<p>Nos diálogos sem separadores, o primeiro componente interativo fica em foco quando o diálogo abre.</p>\n' +
'\n' +
'<p>Navegue entre componentes interativos do diálogo, premindo <strong>Tab</strong> ou <strong>Shift+Tab</strong>.</p>\n' +
'\n' +
'<h1>Navegar em diálogos com separadores</h1>\n' +
'\n' +
'<p>Nos diálogos com separadores, o primeiro botão no menu do separador fica em foco quando o diálogo abre.</p>\n' +
'\n' +
'<p>Navegue entre os componentes interativos deste separador do diálogo, premindo <strong>Tab</strong> ou\n' +
' <strong>Shift+Tab</strong>.</p>\n' +
'\n' +
'<p>Mude para outro separador do diálogo colocando o menu do separador em foco e, em seguida, premindo a tecla de <strong>seta</strong>\n' +
' adequada para se deslocar ciclicamente pelos separadores disponíveis.</p>\n');

View File

@ -0,0 +1,93 @@
tinymce.Resource.add('tinymce.html-i18n.help-keynav.ro',
'<h1>Începeți navigarea de la tastatură</h1>\n' +
'\n' +
'<dl>\n' +
' <dt>Focalizare pe bara de meniu</dt>\n' +
' <dd>Windows sau Linux: Alt+F9</dd>\n' +
' <dd>macOS: &#x2325;F9</dd>\n' +
' <dt>Focalizare pe bara de instrumente</dt>\n' +
' <dd>Windows sau Linux: Alt+F10</dd>\n' +
' <dd>macOS: &#x2325;F10</dd>\n' +
' <dt>Focalizare pe subsol</dt>\n' +
' <dd>Windows sau Linux: Alt+F11</dd>\n' +
' <dd>macOS: &#x2325;F11</dd>\n' +
' <dt>Focalizare pe notificare</dt>\n' +
' <dd>Windows sau Linux: Alt+F12</dd>\n' +
' <dd>macOS: &#x2325;F12</dd>\n' +
' <dt>Focalizare pe o bară de instrumente contextuală</dt>\n' +
' <dd>Windows, Linux sau macOS: Ctrl+F9</dd>\n' +
'</dl>\n' +
'\n' +
'<p>Navigarea va începe de la primul element al interfeței cu utilizatorul, care va fi evidențiat sau subliniat în cazul primului element din\n' +
' calea elementului Subsol.</p>\n' +
'\n' +
'<h1>Navigați între secțiunile interfeței cu utilizatorul</h1>\n' +
'\n' +
'<p>Pentru a trece de la o secțiune a interfeței cu utilizatorul la alta, apăsați <strong>Tab</strong>.</p>\n' +
'\n' +
'<p>Pentru a trece de la o secțiune a interfeței cu utilizatorul la cea anterioară, apăsați <strong>Shift+Tab</strong>.</p>\n' +
'\n' +
'<p>Ordinea cu <strong>Tab</strong> a acestor secțiuni ale interfeței cu utilizatorul este următoarea:</p>\n' +
'\n' +
'<ol>\n' +
' <li>Bara de meniu</li>\n' +
' <li>Fiecare grup de bare de instrumente</li>\n' +
' <li>Bara laterală</li>\n' +
' <li>Calea elementului în subsol</li>\n' +
' <li>Buton de comutare a numărului de cuvinte în subsol</li>\n' +
' <li>Link de branding în subsol</li>\n' +
' <li>Mâner de redimensionare a editorului în subsol</li>\n' +
'</ol>\n' +
'\n' +
'<p>În cazul în care o secțiune a interfeței cu utilizatorul nu este prezentă, aceasta este omisă.</p>\n' +
'\n' +
'<p>În cazul în care subsolul are focalizarea navigației asupra tastaturii și nu există o bară laterală vizibilă, apăsarea butonului <strong>Shift+Tab</strong>\n' +
' mută focalizarea pe primul grup de bare de instrumente, nu pe ultimul.</p>\n' +
'\n' +
'<h1>Navigați în secțiunile interfeței cu utilizatorul</h1>\n' +
'\n' +
'<p>Pentru a trece de la un element de interfață cu utilizatorul la următorul, apăsați tasta cu <strong>săgeata</strong> corespunzătoare.</p>\n' +
'\n' +
'<p>Tastele cu săgeți către <strong>stânga</strong> și <strong>dreapta</strong></p>\n' +
'\n' +
'<ul>\n' +
' <li>navighează între meniurile din bara de meniuri.</li>\n' +
' <li>deschid un sub-meniu dintr-un meniu.</li>\n' +
' <li>navighează între butoanele dintr-un grup de bare de instrumente.</li>\n' +
' <li>navighează între elementele din calea elementelor subsolului.</li>\n' +
'</ul>\n' +
'\n' +
'<p>Tastele cu săgeți în <strong>sus</strong> și în <strong>jos</strong></p>\n' +
'\n' +
'<ul>\n' +
' <li>navighează între elementele de meniu dintr-un meniu.</li>\n' +
' <li>navighează între elementele unui meniu pop-up din bara de instrumente.</li>\n' +
'</ul>\n' +
'\n' +
'<p>Tastele cu <strong>săgeți</strong> navighează în cadrul secțiunii interfeței cu utilizatorul asupra căreia se focalizează.</p>\n' +
'\n' +
'<p>Pentru a închide un meniu deschis, un sub-meniu deschis sau un meniu pop-up deschis, apăsați tasta <strong>Esc</strong>.</p>\n' +
'\n' +
'<p>Dacă focalizarea curentă este asupra „părții superioare” a unei anumite secțiuni a interfeței cu utilizatorul, prin apăsarea tastei <strong>Esc</strong> se iese, de asemenea,\n' +
' în întregime din navigarea de la tastatură.</p>\n' +
'\n' +
'<h1>Executarea unui element de meniu sau a unui buton din bara de instrumente</h1>\n' +
'\n' +
'<p>Atunci când elementul de meniu dorit sau butonul dorit din bara de instrumente este evidențiat, apăsați <strong>Return</strong>, <strong>Enter</strong>,\n' +
' sau <strong>bara de spațiu</strong> pentru a executa elementul.</p>\n' +
'\n' +
'<h1>Navigarea de dialoguri fără file</h1>\n' +
'\n' +
'<p>În dialogurile fără file, prima componentă interactivă beneficiază de focalizare la deschiderea dialogului.</p>\n' +
'\n' +
'<p>Navigați între componentele dialogului interactiv apăsând <strong>Tab</strong> sau <strong>Shift+Tab</strong>.</p>\n' +
'\n' +
'<h1>Navigarea de dialoguri cu file</h1>\n' +
'\n' +
'<p>În dialogurile cu file, primul buton din meniul cu file beneficiază de focalizare la deschiderea dialogului.</p>\n' +
'\n' +
'<p>Navigați între componentele interactive ale acestei file de dialog apăsând <strong>Tab</strong> sau\n' +
' <strong>Shift+Tab</strong>.</p>\n' +
'\n' +
'<p>Treceți la o altă filă de dialog focalizând asupra meniului cu file și apoi apăsând <strong>săgeata</strong> corespunzătoare\n' +
' pentru a parcurge filele disponibile.</p>\n');

View File

@ -0,0 +1,93 @@
tinymce.Resource.add('tinymce.html-i18n.help-keynav.ru',
'<h1>Начните управление с помощью клавиатуры</h1>\n' +
'\n' +
'<dl>\n' +
' <dt>Фокус на панели меню</dt>\n' +
' <dd>Windows или Linux: Alt+F9</dd>\n' +
' <dd>macOS: &#x2325;F9</dd>\n' +
' <dt>Фокус на панели инструментов</dt>\n' +
' <dd>Windows или Linux: Alt+F10</dd>\n' +
' <dd>macOS: &#x2325;F10</dd>\n' +
' <dt>Фокус на нижнем колонтитуле</dt>\n' +
' <dd>Windows или Linux: Alt+F11</dd>\n' +
' <dd>macOS: &#x2325;F11</dd>\n' +
' <dt>Фокус на уведомлении</dt>\n' +
' <dd>Windows или Linux: Alt+12</dd>\n' +
' <dd>macOS: &#x2325;F12</dd>\n' +
' <dt>Фокус на контекстной панели инструментов</dt>\n' +
' <dd>Windows, Linux или macOS: Ctrl+F9</dd>\n' +
'</dl>\n' +
'\n' +
'<p>Первый доступный для управления элемент интерфейса будет выделен цветом или подчеркнут (если он находится\n' +
' в пути элементов нижнего колонтитула).</p>\n' +
'\n' +
'<h1>Переход между разделами пользовательского интерфейса</h1>\n' +
'\n' +
'<p>Чтобы перейти из текущего раздела интерфейса в следующий, нажмите <strong>Tab</strong>.</p>\n' +
'\n' +
'<p>Чтобы перейти из текущего раздела интерфейса в предыдущий, нажмите <strong>Shift+Tab</strong>.</p>\n' +
'\n' +
'<p><strong>Вкладки</strong> разделов интерфейса расположены в следующем порядке:</p>\n' +
'\n' +
'<ol>\n' +
' <li>Панель меню</li>\n' +
' <li>Группы панели инструментов</li>\n' +
' <li>Боковая панель</li>\n' +
' <li>Путь элементов нижнего колонтитула</li>\n' +
' <li>Подсчет слов/символов в нижнем колонтитуле</li>\n' +
' <li>Брендовая ссылка в нижнем колонтитуле</li>\n' +
' <li>Угол для изменения размера окна редактора</li>\n' +
'</ol>\n' +
'\n' +
'<p>Если раздел интерфейса отсутствует, он пропускается.</p>\n' +
'\n' +
'<p>Если при управлении с клавиатуры фокус находится на нижнем колонтитуле, а видимая боковая панель отсутствует, то при нажатии сочетания клавиш <strong>Shift+Tab</strong>\n' +
' фокус переносится на первую группу панели инструментов, а не на последнюю.</p>\n' +
'\n' +
'<h1>Переход между элементами внутри разделов пользовательского интерфейса</h1>\n' +
'\n' +
'<p>Чтобы перейти от текущего элемента интерфейса к следующему, нажмите соответствующую <strong>клавишу со стрелкой</strong>.</p>\n' +
'\n' +
'<p>Клавиши со стрелками <strong>влево</strong> и <strong>вправо</strong> позволяют</p>\n' +
'\n' +
'<ul>\n' +
' <li>перемещаться между разными меню в панели меню.</li>\n' +
' <li>открывать разделы меню.</li>\n' +
' <li>перемещаться между кнопками в группе панели инструментов.</li>\n' +
' <li>перемещаться между элементами в пути элементов нижнего колонтитула.</li>\n' +
'</ul>\n' +
'\n' +
'<p>Клавиши со стрелками <strong>вниз</strong> и <strong>вверх</strong> позволяют</p>\n' +
'\n' +
'<ul>\n' +
' <li>перемещаться между элементами одного меню.</li>\n' +
' <li>перемещаться между элементами всплывающего меню в панели инструментов.</li>\n' +
'</ul>\n' +
'\n' +
'<p>При использовании <strong>клавиш со стрелками</strong> вы будете циклически перемещаться по элементам в пределах выбранного раздела интерфейса.</p>\n' +
'\n' +
'<p>Чтобы закрыть открытое меню, его раздел или всплывающее меню, нажмите клавишу <strong>Esc</strong>.</p>\n' +
'\n' +
'<p>Если фокус находится наверху какого-либо раздела интерфейса, нажатие клавиши <strong>Esc</strong> также приведет\n' +
' к выходу из режима управления с помощью клавиатуры.</p>\n' +
'\n' +
'<h1>Использование элемента меню или кнопки на панели инструментов</h1>\n' +
'\n' +
'<p>Когда элемент меню или кнопка панели инструментов будут выделены, нажмите <strong>Return</strong>, <strong>Enter</strong>\n' +
' или <strong>Space</strong>, чтобы их активировать.</p>\n' +
'\n' +
'<h1>Управление в диалоговом окне без вкладок</h1>\n' +
'\n' +
'<p>При открытии диалогового окна без вкладок фокус переносится на первый интерактивный компонент.</p>\n' +
'\n' +
'<p>Для перехода между интерактивными компонентами диалогового окна нажимайте <strong>Tab</strong> или <strong>Shift+Tab</strong>.</p>\n' +
'\n' +
'<h1>Управление в диалоговом окне с вкладками</h1>\n' +
'\n' +
'<p>При открытии диалогового окна с вкладками фокус переносится на первую кнопку в меню вкладок.</p>\n' +
'\n' +
'<p>Для перехода между интерактивными компонентами этой вкладки диалогового окна нажимайте <strong>Tab</strong> или\n' +
' <strong>Shift+Tab</strong>.</p>\n' +
'\n' +
'<p>Для перехода на другую вкладку диалогового окна переместите фокус на меню вкладок, а затем используйте <strong>клавиши со стрелками</strong>\n' +
' для циклического переключения между доступными вкладками.</p>\n');

View File

@ -0,0 +1,93 @@
tinymce.Resource.add('tinymce.html-i18n.help-keynav.sk',
'<h1>Začíname s navigáciou pomocou klávesnice</h1>\n' +
'\n' +
'<dl>\n' +
' <dt>Prejsť na panel s ponukami</dt>\n' +
' <dd>Windows alebo Linux: Alt+F9</dd>\n' +
' <dd>macOS: &#x2325;F9</dd>\n' +
' <dt>Prejsť na panel nástrojov</dt>\n' +
' <dd>Windows alebo Linux: Alt+F10</dd>\n' +
' <dd>macOS: &#x2325;F10</dd>\n' +
' <dt>Prejsť na pätičku</dt>\n' +
' <dd>Windows alebo Linux: Alt+F11</dd>\n' +
' <dd>macOS: &#x2325;F11</dd>\n' +
' <dt>Zaostriť na oznámenie</dt>\n' +
' <dd>Windows alebo Linux: Alt+F12</dd>\n' +
' <dd>macOS: &#x2325;F12</dd>\n' +
' <dt>Prejsť na kontextový panel nástrojov</dt>\n' +
' <dd>Windows, Linux alebo macOS: Ctrl+F9</dd>\n' +
'</dl>\n' +
'\n' +
'<p>Navigácia začne pri prvej položke používateľského rozhrania, ktorá bude zvýraznená alebo v prípade prvej položky\n' +
' cesty k pätičke podčiarknutá.</p>\n' +
'\n' +
'<h1>Navigácia medzi časťami používateľského rozhrania</h1>\n' +
'\n' +
'<p>Ak sa chcete posunúť z jednej časti používateľského rozhrania do druhej, stlačte tlačidlo <strong>Tab</strong>.</p>\n' +
'\n' +
'<p>Ak sa chcete posunúť z jednej časti používateľského rozhrania do predchádzajúcej, stlačte tlačidlá <strong>Shift + Tab</strong>.</p>\n' +
'\n' +
'<p>Poradie prepínania medzi týmito časťami používateľského rozhrania pri stláčaní tlačidla <strong>Tab</strong>:</p>\n' +
'\n' +
'<ol>\n' +
' <li>Panel s ponukou</li>\n' +
' <li>Každá skupina panela nástrojov</li>\n' +
' <li>Bočný panel</li>\n' +
' <li>Cesta k prvku v pätičke</li>\n' +
' <li>Prepínač počtu slov v pätičke</li>\n' +
' <li>Odkaz na informácie o značke v pätičke</li>\n' +
' <li>Úchyt na zmenu veľkosti editora v pätičke</li>\n' +
'</ol>\n' +
'\n' +
'<p>Ak nejaká časť používateľského rozhrania nie je prítomná, preskočí sa.</p>\n' +
'\n' +
'<p>Ak je pätička vybratá na navigáciu pomocou klávesnice a nie je viditeľný bočný panel, stlačením klávesov <strong>Shift+Tab</strong>\n' +
' prejdete na prvú skupinu panela nástrojov, nie na poslednú.</p>\n' +
'\n' +
'<h1>Navigácia v rámci častí používateľského rozhrania</h1>\n' +
'\n' +
'<p>Ak sa chcete posunúť z jedného prvku používateľského rozhrania na ďalší, stlačte príslušný kláves so <strong>šípkou</strong>.</p>\n' +
'\n' +
'<p>Klávesy so šípkami <strong>doľava</strong> a <strong>doprava</strong></p>\n' +
'\n' +
'<ul>\n' +
' <li>umožňujú presun medzi ponukami na paneli ponúk,</li>\n' +
' <li>otvárajú podponuku v rámci ponuky,</li>\n' +
' <li>umožňujú presun medzi tlačidlami v skupine panelov nástrojov,</li>\n' +
' <li>umožňujú presun medzi položkami cesty prvku v pätičke.</li>\n' +
'</ul>\n' +
'\n' +
'<p>Klávesy so šípkami <strong>dole</strong> a <strong>hore</strong></p>\n' +
'\n' +
'<ul>\n' +
' <li>umožňujú presun medzi položkami ponuky,</li>\n' +
' <li>umožňujú presun medzi položkami v kontextovej ponuke panela nástrojov.</li>\n' +
'</ul>\n' +
'\n' +
'<p>Klávesy so <strong>šípkami</strong> vykonávajú prepínanie v rámci vybranej časti používateľského rozhrania.</p>\n' +
'\n' +
'<p>Ak chcete zatvoriť otvorenú ponuku, otvorenú podponuku alebo otvorenú kontextovú ponuku, stlačte kláves <strong>Esc</strong>.</p>\n' +
'\n' +
'<p>Ak je aktuálne vybratá horná časť konkrétneho používateľského rozhrania, stlačením klávesu <strong>Esc</strong> úplne ukončíte tiež\n' +
' navigáciu pomocou klávesnice.</p>\n' +
'\n' +
'<h1>Vykonanie príkazu položky ponuky alebo tlačidla panela nástrojov</h1>\n' +
'\n' +
'<p>Keď je zvýraznená požadovaná položka ponuky alebo tlačidlo panela nástrojov, stlačením klávesov <strong>Return</strong>, <strong>Enter</strong>\n' +
' alebo <strong>medzerníka</strong> vykonáte príslušný príkaz položky.</p>\n' +
'\n' +
'<h1>Navigácia v dialógových oknách bez záložiek</h1>\n' +
'\n' +
'<p>Pri otvorení dialógových okien bez záložiek prejdete na prvý interaktívny komponent.</p>\n' +
'\n' +
'<p>Medzi interaktívnymi dialógovými komponentmi môžete prechádzať stlačením klávesov <strong>Tab</strong> alebo <strong>Shift+Tab</strong>.</p>\n' +
'\n' +
'<h1>Navigácia v dialógových oknách so záložkami</h1>\n' +
'\n' +
'<p>Pri otvorení dialógových okien so záložkami prejdete na prvé tlačidlo v ponuke záložiek.</p>\n' +
'\n' +
'<p>Medzi interaktívnymi komponentmi tejto dialógovej záložky môžete prechádzať stlačením klávesov <strong>Tab</strong> alebo\n' +
' <strong>Shift+Tab</strong>.</p>\n' +
'\n' +
'<p>Ak chcete prepnúť na ďalšiu záložku dialógového okna, prejdite do ponuky záložiek a potom môžete stlačením príslušného klávesu so <strong>šípkou</strong>\n' +
' prepínať medzi dostupnými záložkami.</p>\n');

View File

@ -0,0 +1,93 @@
tinymce.Resource.add('tinymce.html-i18n.help-keynav.sl_SI',
'<h1>Začetek krmarjenja s tipkovnico</h1>\n' +
'\n' +
'<dl>\n' +
' <dt>Fokus na menijsko vrstico</dt>\n' +
' <dd>Windows ali Linux: Alt + F9</dd>\n' +
' <dd>macOS: &#x2325;F9</dd>\n' +
' <dt>Fokus na orodno vrstico</dt>\n' +
' <dd>Windows ali Linux: Alt + F10</dd>\n' +
' <dd>macOS: &#x2325;F10</dd>\n' +
' <dt>Fokus na nogo</dt>\n' +
' <dd>Windows ali Linux: Alt + F11</dd>\n' +
' <dd>macOS: &#x2325;F11</dd>\n' +
' <dt>Označitev obvestila</dt>\n' +
' <dd>Windows ali Linux: Alt + F12</dd>\n' +
' <dd>macOS: &#x2325;F12</dd>\n' +
' <dt>Fokus na kontekstualno orodno vrstico</dt>\n' +
' <dd>Windows, Linux ali macOS: Ctrl + F9</dd>\n' +
'</dl>\n' +
'\n' +
'<p>Krmarjenje se bo začelo s prvim elementom uporabniškega vmesnika, ki bo izpostavljena ali podčrtan, če gre za prvi element na\n' +
' poti do elementa noge.</p>\n' +
'\n' +
'<h1>Krmarjenje med razdelki uporabniškega vmesnika</h1>\n' +
'\n' +
'<p>Če se želite pomakniti z enega dela uporabniškega vmesnika na naslednjega, pritisnite <strong>tabulatorko</strong>.</p>\n' +
'\n' +
'<p>Če se želite pomakniti z enega dela uporabniškega vmesnika na prejšnjega, pritisnite <strong>shift + tabulatorko</strong>.</p>\n' +
'\n' +
'<p>Zaporedje teh razdelkov uporabniškega vmesnika, ko pritiskate <strong>tabulatorko</strong>, je:</p>\n' +
'\n' +
'<ol>\n' +
' <li>Menijska vrstica</li>\n' +
' <li>Posamezne skupine orodne vrstice</li>\n' +
' <li>Stranska vrstica</li>\n' +
' <li>Pod do elementa v nogi</li>\n' +
' <li>Gumb za preklop štetja besed v nogi</li>\n' +
' <li>Povezava do blagovne znamke v nogi</li>\n' +
' <li>Ročaj za spreminjanje velikosti urejevalnika v nogi</li>\n' +
'</ol>\n' +
'\n' +
'<p>Če razdelek uporabniškega vmesnika ni prisoten, je preskočen.</p>\n' +
'\n' +
'<p>Če ima noga fokus za krmarjenje s tipkovnico in ni vidne stranske vrstice, s pritiskom na <strong>shift + tabulatorko</strong>\n' +
' fokus premaknete na prvo skupino orodne vrstice, ne zadnjo.</p>\n' +
'\n' +
'<h1>Krmarjenje v razdelkih uporabniškega vmesnika</h1>\n' +
'\n' +
'<p>Če se želite premakniti z enega elementa uporabniškega vmesnika na naslednjega, pritisnite ustrezno <strong>puščično</strong> tipko.</p>\n' +
'\n' +
'<p><strong>Leva</strong> in <strong>desna</strong> puščična tipka</p>\n' +
'\n' +
'<ul>\n' +
' <li>omogočata premikanje med meniji v menijski vrstici.</li>\n' +
' <li>odpreta podmeni v meniju.</li>\n' +
' <li>omogočata premikanje med gumbi v skupini orodne vrstice.</li>\n' +
' <li>omogočata premikanje med elementi na poti do elementov noge.</li>\n' +
'</ul>\n' +
'\n' +
'<p><strong>Spodnja</strong> in <strong>zgornja</strong> puščična tipka</p>\n' +
'\n' +
'<ul>\n' +
' <li>omogočata premikanje med elementi menija.</li>\n' +
' <li>omogočata premikanje med elementi v pojavnem meniju orodne vrstice.</li>\n' +
'</ul>\n' +
'\n' +
'<p><strong>Puščične</strong> tipke omogočajo kroženje znotraj razdelka uporabniškega vmesnika, na katerem je fokus.</p>\n' +
'\n' +
'<p>Če želite zapreti odprt meni, podmeni ali pojavni meni, pritisnite tipko <strong>Esc</strong>.</p>\n' +
'\n' +
'<p>Če je trenutni fokus na »vrhu« določenega razdelka uporabniškega vmesnika, s pritiskom tipke <strong>Esc</strong> zaprete\n' +
' tudi celotno krmarjenje s tipkovnico.</p>\n' +
'\n' +
'<h1>Izvajanje menijskega elementa ali gumba orodne vrstice</h1>\n' +
'\n' +
'<p>Ko je označen želeni menijski element ali orodja vrstica, pritisnite <strong>vračalko</strong>, <strong>Enter</strong>\n' +
' ali <strong>preslednico</strong>, da izvedete element.</p>\n' +
'\n' +
'<h1>Krmarjenje po pogovornih oknih brez zavihkov</h1>\n' +
'\n' +
'<p>Ko odprete pogovorno okno brez zavihkov, ima fokus prva interaktivna komponenta.</p>\n' +
'\n' +
'<p>Med interaktivnimi komponentami pogovornega okna se premikate s pritiskom <strong>tabulatorke</strong> ali kombinacije tipke <strong>shift + tabulatorke</strong>.</p>\n' +
'\n' +
'<h1>Krmarjenje po pogovornih oknih z zavihki</h1>\n' +
'\n' +
'<p>Ko odprete pogovorno okno z zavihki, ima fokus prvi gumb v meniju zavihka.</p>\n' +
'\n' +
'<p>Med interaktivnimi komponentami tega zavihka pogovornega okna se premikate s pritiskom <strong>tabulatorke</strong> ali\n' +
' kombinacije tipke <strong>shift + tabulatorke</strong>.</p>\n' +
'\n' +
'<p>Na drug zavihek pogovornega okna preklopite tako, da fokus prestavite na meni zavihka in nato pritisnete ustrezno <strong>puščično</strong>\n' +
' tipko, da se pomaknete med razpoložljivimi zavihki.</p>\n');

View File

@ -0,0 +1,93 @@
tinymce.Resource.add('tinymce.html-i18n.help-keynav.sv_SE',
'<h1>Påbörja tangentbordsnavigering</h1>\n' +
'\n' +
'<dl>\n' +
' <dt>Fokusera på menyraden</dt>\n' +
' <dd>Windows eller Linux: Alt+F9</dd>\n' +
' <dd>macOS: &#x2325;F9</dd>\n' +
' <dt>Fokusera på verktygsraden</dt>\n' +
' <dd>Windows eller Linux: Alt+F10</dd>\n' +
' <dd>macOS: &#x2325;F10</dd>\n' +
' <dt>Fokusera på verktygsraden</dt>\n' +
' <dd>Windows eller Linux: Alt+F11</dd>\n' +
' <dd>macOS: &#x2325;F11</dd>\n' +
' <dt>Fokusera aviseringen</dt>\n' +
' <dd>Windows eller Linux: Alt+F12</dd>\n' +
' <dd>macOS: &#x2325;F12</dd>\n' +
' <dt>Fokusera på en snabbverktygsrad</dt>\n' +
' <dd>Windows, Linux eller macOS: Ctrl+F9</dd>\n' +
'</dl>\n' +
'\n' +
'<p>Navigeringen börjar vid det första gränssnittsobjektet, vilket är markerat eller understruket om det gäller det första objektet i\n' +
' sidfotens elementsökväg.</p>\n' +
'\n' +
'<h1>Navigera mellan UI-avsnitt</h1>\n' +
'\n' +
'<p>Flytta från ett UI-avsnitt till nästa genom att trycka på <strong>Tabb</strong>.</p>\n' +
'\n' +
'<p>Flytta från ett UI-avsnitt till det föregående genom att trycka på <strong>Skift+Tabb</strong>.</p>\n' +
'\n' +
'<p><strong>Tabb</strong>-ordningen för dessa UI-avsnitt är:</p>\n' +
'\n' +
'<ol>\n' +
' <li>Menyrad</li>\n' +
' <li>Varje verktygsradsgrupp</li>\n' +
' <li>Sidoruta</li>\n' +
' <li>Elementsökväg i sidfoten</li>\n' +
' <li>Växlingsknapp för ordantal i sidfoten</li>\n' +
' <li>Varumärkeslänk i sidfoten</li>\n' +
' <li>Storlekshandtag för redigeraren i sidfoten</li>\n' +
'</ol>\n' +
'\n' +
'<p>Om ett UI-avsnitt inte finns hoppas det över.</p>\n' +
'\n' +
'<p>Om sidfoten har fokus på tangentbordsnavigering, och det inte finns någon synlig sidoruta, flyttas fokus till den första verktygsradsgruppen\n' +
' när du trycker på <strong>Skift+Tabb</strong>, inte till den sista.</p>\n' +
'\n' +
'<h1>Navigera i UI-avsnitt</h1>\n' +
'\n' +
'<p>Flytta från ett UI-element till nästa genom att trycka på motsvarande <strong>piltangent</strong>.</p>\n' +
'\n' +
'<p><strong>Vänsterpil</strong> och <strong>högerpil</strong></p>\n' +
'\n' +
'<ul>\n' +
' <li>flytta mellan menyer på menyraden.</li>\n' +
' <li>öppna en undermeny på en meny.</li>\n' +
' <li>flytta mellan knappar i en verktygsradgrupp.</li>\n' +
' <li>flytta mellan objekt i sidfotens elementsökväg.</li>\n' +
'</ul>\n' +
'\n' +
'<p><strong>Nedpil</strong> och <strong>uppil</strong></p>\n' +
'\n' +
'<ul>\n' +
' <li>flytta mellan menyalternativ på en meny.</li>\n' +
' <li>flytta mellan alternativ på en popup-meny på verktygsraden.</li>\n' +
'</ul>\n' +
'\n' +
'<p><strong>Piltangenterna</strong> cirkulerar inom det fokuserade UI-avsnittet.</p>\n' +
'\n' +
'<p>Tryck på <strong>Esc</strong>-tangenten om du vill stänga en öppen meny, undermeny eller popup-meny.</p>\n' +
'\n' +
'<p>Om det aktuella fokuset är högst upp i ett UI-avsnitt avlutas även tangentbordsnavigeringen helt när\n' +
' du trycker på <strong>Esc</strong>-tangenten.</p>\n' +
'\n' +
'<h1>Köra ett menyalternativ eller en verktygfältsknapp</h1>\n' +
'\n' +
'<p>När menyalternativet eller verktygsradsknappen är markerad trycker du på <strong>Retur</strong>, <strong>Enter</strong>\n' +
' eller <strong>blanksteg</strong> för att köra alternativet.</p>\n' +
'\n' +
'<h1>Navigera i dialogrutor utan flikar</h1>\n' +
'\n' +
'<p>I dialogrutor utan flikar är den första interaktiva komponenten i fokus när dialogrutan öppnas.</p>\n' +
'\n' +
'<p>Navigera mellan interaktiva dialogkomponenter genom att trycka på <strong>Tabb</strong> eller <strong>Skift+Tabb</strong>.</p>\n' +
'\n' +
'<h1>Navigera i dialogrutor med flikar</h1>\n' +
'\n' +
'<p>I dialogrutor utan flikar är den första knappen på flikmenyn i fokus när dialogrutan öppnas.</p>\n' +
'\n' +
'<p>Navigera mellan interaktiva komponenter på dialogrutefliken genom att trycka på <strong>Tabb</strong> eller\n' +
' <strong>Skift+Tabb</strong>.</p>\n' +
'\n' +
'<p>Växla till en annan dialogruta genom att fokusera på flikmenyn och sedan trycka på motsvarande <strong>piltangent</strong>\n' +
' för att cirkulera mellan de tillgängliga flikarna.</p>\n');

View File

@ -0,0 +1,93 @@
tinymce.Resource.add('tinymce.html-i18n.help-keynav.th_TH',
'<h1>เริ่มต้นการนำทางด้วยแป้นพิมพ์</h1>\n' +
'\n' +
'<dl>\n' +
' <dt>โฟกัสที่แถบเมนู</dt>\n' +
' <dd>Windows หรือ Linux: Alt+F9</dd>\n' +
' <dd>macOS: &#x2325;F9</dd>\n' +
' <dt>โฟกัสที่แถบเครื่องมือ</dt>\n' +
' <dd>Windows หรือ Linux: Alt+F10</dd>\n' +
' <dd>macOS: &#x2325;F10</dd>\n' +
' <dt>โฟกัสที่ส่วนท้าย</dt>\n' +
' <dd>Windows หรือ Linux: Alt+F11</dd>\n' +
' <dd>macOS: &#x2325;F11</dd>\n' +
' <dt>โฟกัสไปที่การแจ้งเตือน</dt>\n' +
' <dd>Windows หรือ Linux: Alt+F12</dd>\n' +
' <dd>macOS: &#x2325;F12</dd>\n' +
' <dt>โฟกัสที่แถบเครื่องมือตามบริบท</dt>\n' +
' <dd>Windows, Linux หรือ macOS: Ctrl+F9</dd>\n' +
'</dl>\n' +
'\n' +
'<p>การนำทางจะเริ่มที่รายการ UI แรก ซึ่งจะมีการไฮไลต์หรือขีดเส้นใต้ไว้ในกรณีที่รายการแรกอยู่ใน\n' +
' พาธองค์ประกอบส่วนท้าย</p>\n' +
'\n' +
'<h1>การนำทางระหว่างส่วนต่างๆ ของ UI</h1>\n' +
'\n' +
'<p>ในการย้ายจากส่วน UI หนึ่งไปยังส่วนถัดไป ให้กด <strong>Tab</strong></p>\n' +
'\n' +
'<p>ในการย้ายจากส่วน UI หนึ่งไปยังส่วนก่อนหน้า ให้กด <strong>Shift+Tab</strong></p>\n' +
'\n' +
'<p>ลำดับ<strong>แท็บ</strong>ของส่วนต่างๆ ของ UI คือ:</p>\n' +
'\n' +
'<ol>\n' +
' <li>แถบเมนู</li>\n' +
' <li>แต่ละกลุ่มแถบเครื่องมือ</li>\n' +
' <li>แถบข้าง</li>\n' +
' <li>พาธองค์ประกอบในส่วนท้าย</li>\n' +
' <li>ปุ่มสลับเปิด/ปิดจำนวนคำในส่วนท้าย</li>\n' +
' <li>ลิงก์ชื่อแบรนด์ในส่วนท้าย</li>\n' +
' <li>จุดจับปรับขนาดของตัวแก้ไขในส่วนท้าย</li>\n' +
'</ol>\n' +
'\n' +
'<p>หากส่วน UI ไม่ปรากฏ แสดงว่าถูกข้ามไป</p>\n' +
'\n' +
'<p>หากส่วนท้ายมีการโฟกัสการนำทางแป้นพิมพ์และไม่มีแถบข้างปรากฏ การกด <strong>Shift+Tab</strong>\n' +
' จะย้ายการโฟกัสไปที่กลุ่มแถบเครื่องมือแรก ไม่ใช่สุดท้าย</p>\n' +
'\n' +
'<h1>การนำทางภายในส่วนต่างๆ ของ UI</h1>\n' +
'\n' +
'<p>ในการย้ายจากองค์ประกอบ UI หนึ่งไปยังองค์ประกอบส่วนถัดไป ให้กดปุ่ม<strong>ลูกศร</strong>ที่เหมาะสม</p>\n' +
'\n' +
'<p>ปุ่มลูกศร<strong>ซ้าย</strong>และ<strong>ขวา</strong></p>\n' +
'\n' +
'<ul>\n' +
' <li>ย้ายไปมาระหว่างเมนูต่างๆ ในแถบเมนู</li>\n' +
' <li>เปิดเมนูย่อยในเมนู</li>\n' +
' <li>ย้ายไปมาระหว่างปุ่มต่างๆ ในกลุ่มแถบเครื่องมือ</li>\n' +
' <li>ย้ายไปมาระหว่างรายการต่างๆ ในพาธองค์ประกอบของส่วนท้าย</li>\n' +
'</ul>\n' +
'\n' +
'<p>ปุ่มลูกศร<strong>ลง</strong>และ<strong>ขึ้น</strong></p>\n' +
'\n' +
'<ul>\n' +
' <li>ย้ายไปมาระหว่างรายการเมนูต่างๆ ในเมนู</li>\n' +
' <li>ย้ายไปมาระหว่างรายการต่างๆ ในเมนูป๊อบอัพแถบเครื่องมือ</li>\n' +
'</ul>\n' +
'\n' +
'<p>ปุ่ม<strong>ลูกศร</strong>จะเลื่อนไปมาภายในส่วน UI ที่โฟกัส</p>\n' +
'\n' +
'<p>ในการปิดเมนูที่เปิดอยู่ เมนูย่อยที่เปิดอยู่ หรือเมนูป๊อบอัพที่เปิดอยู่ ให้กดปุ่ม <strong>Esc</strong></p>\n' +
'\n' +
'<p>หากโฟกัสปัจจุบันอยู่ที่ ‘ด้านบนสุด’ ของส่วน UI เฉพาะ การกดปุ่ม <strong>Esc</strong> จะทำให้ออกจาก\n' +
' การนำทางด้วยแป้นพิมพ์ทั้งหมดเช่นกัน</p>\n' +
'\n' +
'<h1>การดำเนินการรายการเมนูหรือปุ่มในแถบเครื่องมือ</h1>\n' +
'\n' +
'<p>เมื่อไฮไลต์รายการเมนูหรือปุ่มในแถบเครื่องมือที่ต้องการ ให้กด <strong>Return</strong>, <strong>Enter</strong>\n' +
' หรือ <strong>Space bar</strong> เพื่อดำเนินการรายการดังกล่าว</p>\n' +
'\n' +
'<h1>การนำทางสำหรับกล่องโต้ตอบที่ไม่อยู่ในแท็บ</h1>\n' +
'\n' +
'<p>ในกล่องโต้ตอบที่ไม่อยู่ในแท็บ จะโฟกัสที่ส่วนประกอบเชิงโต้ตอบแรกเมื่อกล่องโต้ตอบเปิด</p>\n' +
'\n' +
'<p>นำทางระหว่างส่วนประกอบเชิงโต้ตอบต่างๆ ของกล่องโต้ตอบ โดยการกด <strong>Tab</strong> หรือ <strong>Shift+Tab</strong></p>\n' +
'\n' +
'<h1>การนำทางสำหรับกล่องโต้ตอบที่อยู่ในแท็บ</h1>\n' +
'\n' +
'<p>ในกล่องโต้ตอบที่อยู่ในแท็บ จะโฟกัสที่ปุ่มแรกในเมนูแท็บเมื่อกล่องโต้ตอบเปิด</p>\n' +
'\n' +
'<p>นำทางระหว่างส่วนประกอบเชิงโต้ตอบต่างๆ ของแท็บกล่องโต้ตอบนี้โดยการกด <strong>Tab</strong> หรือ\n' +
' <strong>Shift+Tab</strong></p>\n' +
'\n' +
'<p>สลับไปยังแท็บกล่องโต้ตอบอื่นโดยการเลือกโฟกัสที่เมนูแท็บ แล้วกดปุ่ม<strong>ลูกศร</strong>ที่เหมาะสม\n' +
' เพื่อเลือกแท็บที่ใช้ได้</p>\n');

View File

@ -0,0 +1,93 @@
tinymce.Resource.add('tinymce.html-i18n.help-keynav.tr',
'<h1>Klavyeyle gezintiyi başlatma</h1>\n' +
'\n' +
'<dl>\n' +
' <dt>Menü çubuğuna odaklan</dt>\n' +
' <dd>Windows veya Linux: Alt+F9</dd>\n' +
' <dd>macOS: &#x2325;F9</dd>\n' +
' <dt>Araç çubuğuna odaklan</dt>\n' +
' <dd>Windows veya Linux: Alt+F10</dd>\n' +
' <dd>macOS: &#x2325;F10</dd>\n' +
' <dt>Alt bilgiye odaklan</dt>\n' +
' <dd>Windows veya Linux: Alt+F11</dd>\n' +
' <dd>macOS: &#x2325;F11</dd>\n' +
' <dt>Bildirime odakla</dt>\n' +
' <dd>Windows veya Linux: Alt+F12</dd>\n' +
' <dd>macOS: &#x2325;F12</dd>\n' +
' <dt>Bağlamsal araç çubuğuna odaklan</dt>\n' +
' <dd>Windows, Linux veya macOS: Ctrl+F9</dd>\n' +
'</dl>\n' +
'\n' +
'<p>Gezinti ilk kullanıcı arabirimi öğesinden başlar, bu öğe vurgulanır ya da ilk öğe, Alt bilgi elemanı\n' +
' yolundaysa altı çizilir.</p>\n' +
'\n' +
'<h1>Kullanıcı arabirimi bölümleri arasında gezinme</h1>\n' +
'\n' +
'<p>Sonraki kullanıcı arabirimi bölümüne gitmek için <strong>Sekme</strong> tuşuna basın.</p>\n' +
'\n' +
'<p>Önceki kullanıcı arabirimi bölümüne gitmek için <strong>Shift+Sekme</strong> tuşlarına basın.</p>\n' +
'\n' +
'<p>Bu kullanıcı arabirimi bölümlerinin <strong>Sekme</strong> sırası:</p>\n' +
'\n' +
'<ol>\n' +
' <li>Menü çubuğu</li>\n' +
' <li>Her araç çubuğu grubu</li>\n' +
' <li>Kenar çubuğu</li>\n' +
' <li>Alt bilgide öğe yolu</li>\n' +
' <li>Alt bilgide sözcük sayısı geçiş düğmesi</li>\n' +
' <li>Alt bilgide marka bağlantısı</li>\n' +
' <li>Alt bilgide düzenleyiciyi yeniden boyutlandırma tutamacı</li>\n' +
'</ol>\n' +
'\n' +
'<p>Kullanıcı arabirimi bölümü yoksa atlanır.</p>\n' +
'\n' +
'<p>Alt bilgide klavyeyle gezinti odağı yoksa ve görünür bir kenar çubuğu mevcut değilse <strong>Shift+Sekme</strong> tuşlarına basıldığında\n' +
' odak son araç çubuğu yerine ilk araç çubuğu grubuna taşınır.</p>\n' +
'\n' +
'<h1>Kullanıcı arabirimi bölümleri içinde gezinme</h1>\n' +
'\n' +
'<p>Sonraki kullanıcı arabirimi elemanına gitmek için uygun <strong>Ok</strong> tuşuna basın.</p>\n' +
'\n' +
'<p><strong>Sol</strong> ve <strong>Sağ</strong> ok tuşları</p>\n' +
'\n' +
'<ul>\n' +
' <li>menü çubuğundaki menüler arasında hareket eder.</li>\n' +
' <li>menüde bir alt menü açar.</li>\n' +
' <li>araç çubuğu grubundaki düğmeler arasında hareket eder.</li>\n' +
' <li>alt bilginin öğe yolundaki öğeler arasında hareket eder.</li>\n' +
'</ul>\n' +
'\n' +
'<p><strong>Aşağı</strong> ve <strong>Yukarı</strong> ok tuşları</p>\n' +
'\n' +
'<ul>\n' +
' <li>menüdeki menü öğeleri arasında hareket eder.</li>\n' +
' <li>araç çubuğu açılır menüsündeki öğeler arasında hareket eder.</li>\n' +
'</ul>\n' +
'\n' +
'<p><strong>Ok</strong> tuşları, odaklanılan kullanıcı arabirimi bölümü içinde döngüsel olarak hareket eder.</p>\n' +
'\n' +
'<p>Açık bir menüyü, açık bir alt menüyü veya açık bir açılır menüyü kapatmak için <strong>Esc</strong> tuşuna basın.</p>\n' +
'\n' +
'<p>Geçerli odak belirli bir kullanıcı arabirimi bölümünün "üst" kısmındaysa <strong>Esc</strong> tuşuna basıldığında\n' +
' klavyeyle gezintiden de tamamen çıkılır.</p>\n' +
'\n' +
'<h1>Menü öğesini veya araç çubuğu düğmesini yürütme</h1>\n' +
'\n' +
'<p>İstediğiniz menü öğesi veya araç çubuğu düğmesi vurgulandığında <strong>Return</strong>, <strong>Enter</strong>\n' +
' veya <strong>Ara çubuğu</strong> tuşuna basın.</p>\n' +
'\n' +
'<h1>Sekme bulunmayan iletişim kutularında gezinme</h1>\n' +
'\n' +
'<p>Sekme bulunmayan iletişim kutularında, iletişim kutusu açıldığında ilk etkileşimli bileşene odaklanılır.</p>\n' +
'\n' +
'<p>Etkileşimli iletişim kutusu bileşenleri arasında gezinmek için <strong>Sekme</strong> veya <strong>Shift+ Sekme</strong> tuşlarına basın.</p>\n' +
'\n' +
'<h1>Sekmeli iletişim kutularında gezinme</h1>\n' +
'\n' +
'<p>Sekmeli iletişim kutularında, iletişim kutusu açıldığında sekme menüsündeki ilk düğmeye odaklanılır.</p>\n' +
'\n' +
'<p>Bu iletişim kutusu sekmesinin etkileşimli bileşenleri arasında gezinmek için <strong>Sekme</strong> veya\n' +
' <strong>Shift+Sekme</strong> tuşlarına basın.</p>\n' +
'\n' +
'<p>Mevcut sekmeler arasında geçiş yapmak için sekme menüsüne odaklanıp uygun <strong>Ok</strong> tuşuna basarak\n' +
' başka bir iletişim kutusu sekmesine geçiş yapın.</p>\n');

View File

@ -0,0 +1,93 @@
tinymce.Resource.add('tinymce.html-i18n.help-keynav.uk',
'<h1>Початок роботи з навігацією за допомогою клавіатури</h1>\n' +
'\n' +
'<dl>\n' +
' <dt>Фокус на рядок меню</dt>\n' +
' <dd>Windows або Linux: Alt+F9</dd>\n' +
' <dd>macOS: &#x2325;F9</dd>\n' +
' <dt>Фокус на панелі інструментів</dt>\n' +
' <dd>Windows або Linux: Alt+F10</dd>\n' +
' <dd>macOS: &#x2325;F10</dd>\n' +
' <dt>Фокус на розділі "Нижній колонтитул"</dt>\n' +
' <dd>Windows або Linux: Alt+F11</dd>\n' +
' <dd>macOS: &#x2325;F11</dd>\n' +
' <dt>Фокус на сповіщення</dt>\n' +
' <dd>Windows або Linux: Alt+F12</dd>\n' +
' <dd>macOS: &#x2325;F12</dd>\n' +
' <dt>Фокус на контекстній панелі інструментів</dt>\n' +
' <dd>Windows, Linux або macOS: Ctrl+F9</dd>\n' +
'</dl>\n' +
'\n' +
'<p>Навігація почнеться з першого елемента інтерфейсу користувача, який буде виділено або підкреслено в разі, якщо перший елемент знаходиться в\n' +
' шляху до елемента "Нижній колонтитул".</p>\n' +
'\n' +
'<h1>Навігація між розділами інтерфейсу користувача</h1>\n' +
'\n' +
'<p>Щоб перейти з одного розділу інтерфейсу користувача до наступного розділу, натисніть клавішу <strong>Tab</strong>.</p>\n' +
'\n' +
'<p>Щоб перейти з одного розділу інтерфейсу користувача до попереднього розділу, натисніть сполучення клавіш <strong>Shift+Tab</strong>.</p>\n' +
'\n' +
'<p>Порядок <strong>Вкладок</strong> цих розділів інтерфейсу користувача такий:</p>\n' +
'\n' +
'<ol>\n' +
' <li>Рядок меню</li>\n' +
' <li>Кожна група панелей інструментів</li>\n' +
' <li>Бічна панель</li>\n' +
' <li>Шлях до елементів у розділі "Нижній колонтитул"</li>\n' +
' <li>Кнопка перемикача "Кількість слів" у розділі "Нижній колонтитул"</li>\n' +
' <li>Посилання на брендинг у розділі "Нижній колонтитул"</li>\n' +
' <li>Маркер змінення розміру в розділі "Нижній колонтитул"</li>\n' +
'</ol>\n' +
'\n' +
'<p>Якщо розділ інтерфейсу користувача відсутній, він пропускається.</p>\n' +
'\n' +
'<p>Якщо фокус навігації клавіатури знаходиться на розділі "Нижній колонтитул", але користувач не бачить видиму бічну панель, натисніть <strong>Shift+Tab</strong>,\n' +
' щоб перемістити фокус на першу групу панелі інструментів, а не на останню.</p>\n' +
'\n' +
'<h1>Навігація в межах розділів інтерфейсу користувача</h1>\n' +
'\n' +
'<p>Щоб перейти з одного елементу інтерфейсу користувача до наступного, натисніть відповідну клавішу <strong>зі стрілкою</strong>.</p>\n' +
'\n' +
'<p>Клавіші зі стрілками <strong>Ліворуч</strong> і <strong>Праворуч</strong></p>\n' +
'\n' +
'<ul>\n' +
' <li>переміщують між меню в рядку меню.</li>\n' +
' <li>відкривають вкладене меню в меню.</li>\n' +
' <li>переміщують користувача між кнопками в групі панелі інструментів.</li>\n' +
' <li>переміщують між елементами в шляху до елементів у розділі "Нижній колонтитул".</li>\n' +
'</ul>\n' +
'\n' +
'<p>Клавіші зі стрілками <strong>Вниз</strong> і <strong>Вгору</strong></p>\n' +
'\n' +
'<ul>\n' +
' <li>переміщують між елементами меню в меню.</li>\n' +
' <li>переміщують між елементами в спливаючому меню панелі інструментів.</li>\n' +
'</ul>\n' +
'\n' +
'<p>Клавіші <strong>зі стрілками</strong> переміщують фокус циклічно в межах розділу інтерфейсу користувача, на якому знаходиться фокус.</p>\n' +
'\n' +
'<p>Щоб закрити відкрите меню, відкрите вкладене меню або відкрите спливаюче меню, натисніть клавішу <strong>Esc</strong>.</p>\n' +
'\n' +
'<p>Якщо поточний фокус знаходиться на верхньому рівні певного розділу інтерфейсу користувача, натискання клавіші <strong>Esc</strong> також виконує вихід\n' +
' з навігації за допомогою клавіатури повністю.</p>\n' +
'\n' +
'<h1>Виконання елементу меню або кнопки панелі інструментів</h1>\n' +
'\n' +
'<p>Коли потрібний елемент меню або кнопку панелі інструментів виділено, натисніть клавіші <strong>Return</strong>, <strong>Enter</strong>,\n' +
' або <strong>Пробіл</strong>, щоб виконати цей елемент.</p>\n' +
'\n' +
'<h1>Навігація по діалоговим вікнам без вкладок</h1>\n' +
'\n' +
'<p>У діалогових вікнах без вкладок перший інтерактивний компонент приймає фокус, коли відкривається діалогове вікно.</p>\n' +
'\n' +
'<p>Переходьте між інтерактивними компонентами діалогового вікна, натискаючи клавіші <strong>Tab</strong> або <strong>Shift+Tab</strong>.</p>\n' +
'\n' +
'<h1>Навігація по діалоговим вікнам з вкладками</h1>\n' +
'\n' +
'<p>У діалогових вікнах із вкладками перша кнопка в меню вкладки приймає фокус, коли відкривається діалогове вікно.</p>\n' +
'\n' +
'<p>Переходьте між інтерактивними компонентами цієї вкладки діалогового вікна, натискаючи клавіші <strong>Tab</strong> або\n' +
' <strong>Shift+Tab</strong>.</p>\n' +
'\n' +
'<p>Щоб перейти на іншу вкладку діалогового вікна, перемістіть фокус на меню вкладки, а потім натисніть відповідну клавішу <strong>зі стрілкою</strong>,\n' +
' щоб циклічно переходити по доступним вкладкам.</p>\n');

View File

@ -0,0 +1,93 @@
tinymce.Resource.add('tinymce.html-i18n.help-keynav.vi',
'<h1>Bắt đầu điều hướng bàn phím</h1>\n' +
'\n' +
'<dl>\n' +
' <dt>Tập trung vào thanh menu</dt>\n' +
' <dd>Windows hoặc Linux: Alt+F9</dd>\n' +
' <dd>macOS: &#x2325;F9</dd>\n' +
' <dt>Tập trung vào thanh công cụ</dt>\n' +
' <dd>Windows hoặc Linux: Alt+F10</dd>\n' +
' <dd>macOS: &#x2325;F10</dd>\n' +
' <dt>Tập trung vào chân trang</dt>\n' +
' <dd>Windows hoặc Linux: Alt+F11</dd>\n' +
' <dd>macOS: &#x2325;F11</dd>\n' +
' <dt>Tập trung vào thông báo</dt>\n' +
' <dd>Windows hoặc Linux: Alt+F12</dd>\n' +
' <dd>macOS: &#x2325;F12</dd>\n' +
' <dt>Tập trung vào thanh công cụ ngữ cảnh</dt>\n' +
' <dd>Windows, Linux hoặc macOS: Ctrl+F9</dd>\n' +
'</dl>\n' +
'\n' +
'<p>Điều hướng sẽ bắt đầu từ mục UI đầu tiên. Mục này sẽ được tô sáng hoặc có gạch dưới (nếu là mục đầu tiên trong\n' +
' đường dẫn phần tử Chân trang).</p>\n' +
'\n' +
'<h1>Di chuyển qua lại giữa các phần UI</h1>\n' +
'\n' +
'<p>Để di chuyển từ một phần UI sang phần tiếp theo, ấn <strong>Tab</strong>.</p>\n' +
'\n' +
'<p>Để di chuyển từ một phần UI về phần trước đó, ấn <strong>Shift+Tab</strong>.</p>\n' +
'\n' +
'<p>Thứ tự <strong>Tab</strong> của các phần UI này như sau:</p>\n' +
'\n' +
'<ol>\n' +
' <li>Thanh menu</li>\n' +
' <li>Từng nhóm thanh công cụ</li>\n' +
' <li>Thanh bên</li>\n' +
' <li>Đường dẫn phần tử trong chân trang</li>\n' +
' <li>Nút chuyển đổi đếm chữ ở chân trang</li>\n' +
' <li>Liên kết thương hiệu ở chân trang</li>\n' +
' <li>Núm điều tác chỉnh kích cỡ trình soạn thảo ở chân trang</li>\n' +
'</ol>\n' +
'\n' +
'<p>Nếu người dùng không thấy một phần UI, thì có nghĩa phần đó bị bỏ qua.</p>\n' +
'\n' +
'<p>Nếu ở chân trang có tính năng tập trung điều hướng bàn phím, mà không có thanh bên nào hiện hữu, thao tác ấn <strong>Shift+Tab</strong>\n' +
' sẽ chuyển hướng tập trung vào nhóm thanh công cụ đầu tiên, không phải cuối cùng.</p>\n' +
'\n' +
'<h1>Di chuyển qua lại trong các phần UI</h1>\n' +
'\n' +
'<p>Để di chuyển từ một phần tử UI sang phần tiếp theo, ấn phím <strong>Mũi tên</strong> tương ứng cho phù hợp.</p>\n' +
'\n' +
'<p>Các phím mũi tên <strong>Trái</strong> và <strong>Phải</strong></p>\n' +
'\n' +
'<ul>\n' +
' <li>di chuyển giữa các menu trong thanh menu.</li>\n' +
' <li>mở menu phụ trong một menu.</li>\n' +
' <li>di chuyển giữa các nút trong nhóm thanh công cụ.</li>\n' +
' <li>di chuyển giữa các mục trong đường dẫn phần tử của chân trang.</li>\n' +
'</ul>\n' +
'\n' +
'<p>Các phím mũi tên <strong>Hướng xuống</strong> và <strong>Hướng lên</strong></p>\n' +
'\n' +
'<ul>\n' +
' <li>di chuyển giữa các mục menu trong menu.</li>\n' +
' <li>di chuyển giữa các mục trong menu thanh công cụ dạng bật lên.</li>\n' +
'</ul>\n' +
'\n' +
'<p>Các phím <strong>mũi tên</strong> xoay vòng trong một phần UI tập trung.</p>\n' +
'\n' +
'<p>Để đóng một menu mở, một menu phụ đang mở, hoặc một menu dạng bật lên đang mở, hãy ấn phím <strong>Esc</strong>.</p>\n' +
'\n' +
'<p>Nếu trọng tâm hiện tại là ở phần “đầu” của một phần UI cụ thể, thao tác ấn phím <strong>Esc</strong> cũng sẽ thoát\n' +
' toàn bộ phần điều hướng bàn phím.</p>\n' +
'\n' +
'<h1>Thực hiện chức năng của một mục menu hoặc nút thanh công cụ</h1>\n' +
'\n' +
'<p>Khi mục menu hoặc nút thanh công cụ muốn dùng được tô sáng, hãy ấn <strong>Return</strong>, <strong>Enter</strong>,\n' +
' hoặc <strong>Phím cách</strong> để thực hiện chức năng mục đó.</p>\n' +
'\n' +
'<h1>Điều hướng giữa các hộp thoại không có nhiều tab</h1>\n' +
'\n' +
'<p>Trong các hộp thoại không có nhiều tab, khi hộp thoại mở ra, trọng tâm sẽ hướng vào thành phần tương tác đầu tiên.</p>\n' +
'\n' +
'<p>Di chuyển giữa các thành phần hộp thoại tương tác bằng cách ấn <strong>Tab</strong> hoặc <strong>Shift+Tab</strong>.</p>\n' +
'\n' +
'<h1>Điều hướng giữa các hộp thoại có nhiều tab</h1>\n' +
'\n' +
'<p>Trong các hộp thoại có nhiều tab, khi hộp thoại mở ra, trọng tâm sẽ hướng vào nút đầu tiên trong menu tab.</p>\n' +
'\n' +
'<p>Di chuyển giữa các thành phần tương tác của tab hộp thoại này bằng cách ấn <strong>Tab</strong> hoặc\n' +
' <strong>Shift+Tab</strong>.</p>\n' +
'\n' +
'<p>Chuyển sang một tab hộp thoại khác bằng cách chuyển trọng tâm vào menu tab, rồi ấn phím <strong>Mũi tên</strong> phù hợp\n' +
' để xoay vòng các tab hiện có.</p>\n');

View File

@ -0,0 +1,87 @@
tinymce.Resource.add('tinymce.html-i18n.help-keynav.zh_CN',
'<h1>开始键盘导航</h1>\n' +
'\n' +
'<dl>\n' +
' <dt>使菜单栏处于焦点</dt>\n' +
' <dd>Windows 或 LinuxAlt+F9</dd>\n' +
' <dd>macOS&#x2325;F9</dd>\n' +
' <dt>使工具栏处于焦点</dt>\n' +
' <dd>Windows 或 LinuxAlt+F10</dd>\n' +
' <dd>macOS&#x2325;F10</dd>\n' +
' <dt>使页脚处于焦点</dt>\n' +
' <dd>Windows 或 LinuxAlt+F11</dd>\n' +
' <dd>macOS&#x2325;F11</dd>\n' +
' <dt>使通知处于焦点</dt>\n' +
' <dd>Windows 或 LinuxAlt+F12</dd>\n' +
' <dd>macOS&#x2325;F12</dd>\n' +
' <dt>使上下文工具栏处于焦点</dt>\n' +
' <dd>Windows、Linux 或 macOSCtrl+F9</dd>\n' +
'</dl>\n' +
'\n' +
'<p>导航将在第一个 UI 项上开始,其中突出显示该项,或者对于页脚元素路径中的第一项,将为其添加下划线。</p>\n' +
'\n' +
'<h1>在 UI 部分之间导航</h1>\n' +
'\n' +
'<p>要从一个 UI 部分移至下一个,请按 <strong>Tab</strong>。</p>\n' +
'\n' +
'<p>要从一个 UI 部分移至上一个,请按 <strong>Shift+Tab</strong>。</p>\n' +
'\n' +
'<p>这些 UI 部分的 <strong>Tab</strong> 顺序为:</p>\n' +
'\n' +
'<ol>\n' +
' <li>菜单栏</li>\n' +
' <li>每个工具栏组</li>\n' +
' <li>边栏</li>\n' +
' <li>页脚中的元素路径</li>\n' +
' <li>页脚中的字数切换按钮</li>\n' +
' <li>页脚中的品牌链接</li>\n' +
' <li>页脚中的编辑器调整大小图柄</li>\n' +
'</ol>\n' +
'\n' +
'<p>如果不存在某个 UI 部分,则跳过它。</p>\n' +
'\n' +
'<p>如果键盘导航焦点在页脚,并且没有可见的边栏,则按 <strong>Shift+Tab</strong> 将焦点移至第一个工具栏组而非最后一个。</p>\n' +
'\n' +
'<h1>在 UI 部分内导航</h1>\n' +
'\n' +
'<p>要从一个 UI 元素移至下一个,请按相应的<strong>箭头</strong>键。</p>\n' +
'\n' +
'<p><strong>左</strong>和<strong>右</strong>箭头键</p>\n' +
'\n' +
'<ul>\n' +
' <li>在菜单栏中的菜单之间移动。</li>\n' +
' <li>打开菜单中的子菜单。</li>\n' +
' <li>在工具栏组中的按钮之间移动。</li>\n' +
' <li>在页脚的元素路径中的各项之间移动。</li>\n' +
'</ul>\n' +
'\n' +
'<p><strong>下</strong>和<strong>上</strong>箭头键</p>\n' +
'\n' +
'<ul>\n' +
' <li>在菜单中的菜单项之间移动。</li>\n' +
' <li>在工具栏弹出菜单中的各项之间移动。</li>\n' +
'</ul>\n' +
'\n' +
'<p><strong>箭头</strong>键在具有焦点的 UI 部分内循环。</p>\n' +
'\n' +
'<p>要关闭打开的菜单、打开的子菜单或打开的弹出菜单,请按 <strong>Esc</strong> 键。</p>\n' +
'\n' +
'<p>如果当前的焦点在特定 UI 部分的“顶部”,则按 <strong>Esc</strong> 键还将完全退出键盘导航。</p>\n' +
'\n' +
'<h1>执行菜单项或工具栏按钮</h1>\n' +
'\n' +
'<p>当突出显示所需的菜单项或工具栏按钮时,按 <strong>Return</strong>、<strong>Enter</strong> 或<strong>空格</strong>以执行该项。</p>\n' +
'\n' +
'<h1>在非标签页式对话框中导航</h1>\n' +
'\n' +
'<p>在非标签页式对话框中,当对话框打开时,第一个交互组件获得焦点。</p>\n' +
'\n' +
'<p>通过按 <strong>Tab</strong> 或 <strong>Shift+Tab</strong>,在交互对话框组件之间导航。</p>\n' +
'\n' +
'<h1>在标签页式对话框中导航</h1>\n' +
'\n' +
'<p>在标签页式对话框中,当对话框打开时,标签页菜单中的第一个按钮获得焦点。</p>\n' +
'\n' +
'<p>通过按 <strong>Tab</strong> 或 <strong>Shift+Tab</strong>,在此对话框的交互组件之间导航。</p>\n' +
'\n' +
'<p>通过将焦点移至另一对话框标签页的菜单,然后按相应的<strong>箭头</strong>键以在可用的标签页间循环,从而切换到该对话框标签页。</p>\n');

View File

@ -0,0 +1,93 @@
tinymce.Resource.add('tinymce.html-i18n.help-keynav.zh_TW',
'<h1>開始鍵盤瀏覽</h1>\n' +
'\n' +
'<dl>\n' +
' <dt>跳至功能表列</dt>\n' +
' <dd>Windows 或 LinuxAlt+F9</dd>\n' +
' <dd>macOS&#x2325;F9</dd>\n' +
' <dt>跳至工具列</dt>\n' +
' <dd>Windows 或 LinuxAlt+F10</dd>\n' +
' <dd>macOS&#x2325;F10</dd>\n' +
' <dt>跳至頁尾</dt>\n' +
' <dd>Windows 或 LinuxAlt+F11</dd>\n' +
' <dd>macOS&#x2325;F11</dd>\n' +
' <dt>跳至通知</dt>\n' +
' <dd>Windows 或 LinuxAlt+F12</dd>\n' +
' <dd>macOS&#x2325;F12</dd>\n' +
' <dt>跳至關聯式工具列</dt>\n' +
' <dd>Windows、Linux 或 macOSCtrl+F9</dd>\n' +
'</dl>\n' +
'\n' +
'<p>瀏覽會從第一個 UI 項目開始,該項目會反白顯示,但如果是「頁尾」元素路徑的第一項,\n' +
' 則加底線。</p>\n' +
'\n' +
'<h1>在 UI 區段之間瀏覽</h1>\n' +
'\n' +
'<p>從 UI 區段移至下一個,請按 <strong>Tab</strong>。</p>\n' +
'\n' +
'<p>從 UI 區段移回上一個,請按 <strong>Shift+Tab</strong>。</p>\n' +
'\n' +
'<p>這些 UI 區段的 <strong>Tab</strong> 順序如下:</p>\n' +
'\n' +
'<ol>\n' +
' <li>功能表列</li>\n' +
' <li>各個工具列群組</li>\n' +
' <li>側邊欄</li>\n' +
' <li>頁尾中的元素路徑</li>\n' +
' <li>頁尾中字數切換按鈕</li>\n' +
' <li>頁尾中的品牌連結</li>\n' +
' <li>頁尾中編輯器調整大小控點</li>\n' +
'</ol>\n' +
'\n' +
'<p>如果 UI 區段未顯示,表示已略過該區段。</p>\n' +
'\n' +
'<p>如果鍵盤瀏覽跳至頁尾,但沒有顯示側邊欄,則按下 <strong>Shift+Tab</strong>\n' +
' 會跳至第一個工具列群組,而不是最後一個。</p>\n' +
'\n' +
'<h1>在 UI 區段之內瀏覽</h1>\n' +
'\n' +
'<p>在兩個 UI 元素之間移動,請按適當的<strong>方向</strong>鍵。</p>\n' +
'\n' +
'<p><strong>向左</strong>和<strong>向右</strong>方向鍵</p>\n' +
'\n' +
'<ul>\n' +
' <li>在功能表列中的功能表之間移動。</li>\n' +
' <li>開啟功能表中的子功能表。</li>\n' +
' <li>在工具列群組中的按鈕之間移動。</li>\n' +
' <li>在頁尾的元素路徑中項目之間移動。</li>\n' +
'</ul>\n' +
'\n' +
'<p><strong>向下</strong>和<strong>向上</strong>方向鍵</p>\n' +
'\n' +
'<ul>\n' +
' <li>在功能表中的功能表項目之間移動。</li>\n' +
' <li>在工具列快顯功能表中的項目之間移動。</li>\n' +
'</ul>\n' +
'\n' +
'<p><strong>方向</strong>鍵會在所跳至 UI 區段之內循環。</p>\n' +
'\n' +
'<p>若要關閉已開啟的功能表、已開啟的子功能表,或已開啟的快顯功能表,請按 <strong>Esc</strong> 鍵。</p>\n' +
'\n' +
'<p>如果目前已跳至特定 UI 區段的「頂端」,則按 <strong>Esc</strong> 鍵也會結束\n' +
' 整個鍵盤瀏覽。</p>\n' +
'\n' +
'<h1>執行功能表列項目或工具列按鈕</h1>\n' +
'\n' +
'<p>當想要的功能表項目或工具列按鈕已反白顯示時,按 <strong>Return</strong>、<strong>Enter</strong>、\n' +
' 或<strong>空白鍵</strong>即可執行該項目。</p>\n' +
'\n' +
'<h1>瀏覽非索引標籤式對話方塊</h1>\n' +
'\n' +
'<p>在非索引標籤式對話方塊中,開啟對話方塊時會跳至第一個互動元件。</p>\n' +
'\n' +
'<p>按 <strong>Tab</strong> 或 <strong>Shift+Tab</strong> 即可在互動式對話方塊元件之間瀏覽。</p>\n' +
'\n' +
'<h1>瀏覽索引標籤式對話方塊</h1>\n' +
'\n' +
'<p>在索引標籤式對話方塊中,開啟對話方塊時會跳至索引標籤式功能表中的第一個按鈕。</p>\n' +
'\n' +
'<p>若要在此對話方塊的互動式元件之間瀏覽,請按 <strong>Tab</strong> 或\n' +
' <strong>Shift+Tab</strong>。</p>\n' +
'\n' +
'<p>先跳至索引標籤式功能表,然後按適當的<strong>方向</strong>鍵,即可切換至另一個對話方塊索引標籤,\n' +
' 以循環瀏覽可用的索引標籤。</p>\n');

View File

@ -1,5 +1,5 @@
/**
* TinyMCE version 6.4.1 (2023-03-29)
* TinyMCE version 7.5.1 (TBD)
*/
(function () {
@ -19,15 +19,17 @@
};
};
var global$3 = tinymce.util.Tools.resolve('tinymce.PluginManager');
var global$4 = tinymce.util.Tools.resolve('tinymce.PluginManager');
const random = () => window.crypto.getRandomValues(new Uint32Array(1))[0] / 4294967295;
let unique = 0;
const generate = prefix => {
const date = new Date();
const time = date.getTime();
const random = Math.floor(Math.random() * 1000000000);
const random$1 = Math.floor(random() * 1000000000);
unique++;
return prefix + '_' + random + unique + String(time);
return prefix + '_' + random$1 + unique + String(time);
};
const get$1 = customTabs => {
@ -57,13 +59,15 @@
editor.ui.registry.addButton('help', {
icon: 'help',
tooltip: 'Help',
onAction: dialogOpener
onAction: dialogOpener,
context: 'any'
});
editor.ui.registry.addMenuItem('help', {
text: 'Help',
icon: 'help',
shortcut: 'Alt+0',
onAction: dialogOpener
onAction: dialogOpener,
context: 'any'
});
};
@ -257,73 +261,23 @@
return r;
};
const description = `<h1>Editor UI keyboard navigation</h1>
var global$3 = tinymce.util.Tools.resolve('tinymce.Resource');
<h2>Activating keyboard navigation</h2>
var global$2 = tinymce.util.Tools.resolve('tinymce.util.I18n');
<p>The sections of the outer UI of the editor - the menubar, toolbar, sidebar and footer - are all keyboard navigable. As such, there are multiple ways to activate keyboard navigation:</p>
<ul>
<li>Focus the menubar: Alt + F9 (Windows) or &#x2325;F9 (MacOS)</li>
<li>Focus the toolbar: Alt + F10 (Windows) or &#x2325;F10 (MacOS)</li>
<li>Focus the footer: Alt + F11 (Windows) or &#x2325;F11 (MacOS)</li>
</ul>
const pLoadHtmlByLangCode = (baseUrl, langCode) => global$3.load(`tinymce.html-i18n.help-keynav.${ langCode }`, `${ baseUrl }/js/i18n/keynav/${ langCode }.js`);
const pLoadI18nHtml = baseUrl => pLoadHtmlByLangCode(baseUrl, global$2.getCode()).catch(() => pLoadHtmlByLangCode(baseUrl, 'en'));
const initI18nLoad = (editor, baseUrl) => {
editor.on('init', () => {
pLoadI18nHtml(baseUrl);
});
};
<p>Focusing the menubar or toolbar will start keyboard navigation at the first item in the menubar or toolbar, which will be highlighted with a gray background. Focusing the footer will start keyboard navigation at the first item in the element path, which will be highlighted with an underline. </p>
<h2>Moving between UI sections</h2>
<p>When keyboard navigation is active, pressing tab will move the focus to the next major section of the UI, where applicable. These sections are:</p>
<ul>
<li>the menubar</li>
<li>each group of the toolbar </li>
<li>the sidebar</li>
<li>the element path in the footer </li>
<li>the wordcount toggle button in the footer </li>
<li>the branding link in the footer </li>
<li>the editor resize handle in the footer</li>
</ul>
<p>Pressing shift + tab will move backwards through the same sections, except when moving from the footer to the toolbar. Focusing the element path then pressing shift + tab will move focus to the first toolbar group, not the last.</p>
<h2>Moving within UI sections</h2>
<p>Keyboard navigation within UI sections can usually be achieved using the left and right arrow keys. This includes:</p>
<ul>
<li>moving between menus in the menubar</li>
<li>moving between buttons in a toolbar group</li>
<li>moving between items in the element path</li>
</ul>
<p>In all these UI sections, keyboard navigation will cycle within the section. For example, focusing the last button in a toolbar group then pressing right arrow will move focus to the first item in the same toolbar group. </p>
<h1>Executing buttons</h1>
<p>To execute a button, navigate the selection to the desired button and hit space or enter.</p>
<h1>Opening, navigating and closing menus</h1>
<p>When focusing a menubar button or a toolbar button with a menu, pressing space, enter or down arrow will open the menu. When the menu opens the first item will be selected. To move up or down the menu, press the up or down arrow key respectively. This is the same for submenus, which can also be opened and closed using the left and right arrow keys.</p>
<p>To close any active menu, hit the escape key. When a menu is closed the selection will be restored to its previous selection. This also works for closing submenus.</p>
<h1>Context toolbars and menus</h1>
<p>To focus an open context toolbar such as the table context toolbar, press Ctrl + F9 (Windows) or &#x2303;F9 (MacOS).</p>
<p>Context toolbar navigation is the same as toolbar navigation, and context menu navigation is the same as standard menu navigation.</p>
<h1>Dialog navigation</h1>
<p>There are two types of dialog UIs in TinyMCE: tabbed dialogs and non-tabbed dialogs.</p>
<p>When a non-tabbed dialog is opened, the first interactive component in the dialog will be focused. Users can navigate between interactive components by pressing tab. This includes any footer buttons. Navigation will cycle back to the first dialog component if tab is pressed while focusing the last component in the dialog. Pressing shift + tab will navigate backwards.</p>
<p>When a tabbed dialog is opened, the first button in the tab menu is focused. Pressing tab will navigate to the first interactive component in that tab, and will cycle through the tab\u2019s components, the footer buttons, then back to the tab button. To switch to another tab, focus the tab button for the current tab, then use the arrow keys to cycle through the tab buttons.</p>`;
const tab$3 = () => {
const pTab = async pluginUrl => {
const body = {
type: 'htmlpanel',
presets: 'document',
html: description
html: await pLoadI18nHtml(pluginUrl)
};
return {
name: 'keyboardnav',
@ -332,10 +286,10 @@
};
};
var global$2 = tinymce.util.Tools.resolve('tinymce.Env');
var global$1 = tinymce.util.Tools.resolve('tinymce.Env');
const convertText = source => {
const isMac = global$2.os.isMacOS() || global$2.os.isiOS();
const isMac = global$1.os.isMacOS() || global$1.os.isiOS();
const mac = {
alt: '&#x2325;',
ctrl: '&#x2303;',
@ -436,6 +390,10 @@
shortcuts: ['Alt + F11'],
action: 'Focus to element path'
},
{
shortcuts: ['Alt + F12'],
action: 'Focus to notification'
},
{
shortcuts: ['Ctrl + F9'],
action: 'Focus to contextual toolbar'
@ -485,12 +443,10 @@
};
};
var global$1 = tinymce.util.Tools.resolve('tinymce.util.I18n');
const urls = map([
{
key: 'advlist',
name: 'Advanced List'
key: 'accordion',
name: 'Accordion'
},
{
key: 'anchor',
@ -560,6 +516,10 @@
key: 'lists',
name: 'Lists'
},
{
key: 'advlist',
name: 'List Styles'
},
{
key: 'media',
name: 'Media'
@ -592,10 +552,6 @@
key: 'table',
name: 'Table'
},
{
key: 'template',
name: 'Template'
},
{
key: 'textcolor',
name: 'Text Color'
@ -618,20 +574,15 @@
type: 'premium'
},
{
key: 'advcode',
name: 'Advanced Code Editor',
type: 'premium'
},
{
key: 'advtable',
name: 'Advanced Tables',
type: 'premium'
},
{
key: 'advtemplate',
name: 'Advanced Templates',
key: 'typography',
name: 'Advanced Typography',
type: 'premium',
slug: 'advanced-templates'
slug: 'advanced-typography'
},
{
key: 'ai',
name: 'AI Assistant',
type: 'premium'
},
{
key: 'casechange',
@ -644,21 +595,10 @@
type: 'premium'
},
{
key: 'editimage',
name: 'Enhanced Image Editing',
key: 'advcode',
name: 'Enhanced Code Editor',
type: 'premium'
},
{
key: 'footnotes',
name: 'Footnotes',
type: 'premium'
},
{
key: 'typography',
name: 'Advanced Typography',
type: 'premium',
slug: 'advanced-typography'
},
{
key: 'mediaembed',
name: 'Enhanced Media Embed',
@ -666,8 +606,23 @@
slug: 'introduction-to-mediaembed'
},
{
key: 'export',
name: 'Export',
key: 'advtable',
name: 'Enhanced Tables',
type: 'premium'
},
{
key: 'exportpdf',
name: 'Export to PDF',
type: 'premium'
},
{
key: 'exportword',
name: 'Export to Word',
type: 'premium'
},
{
key: 'footnotes',
name: 'Footnotes',
type: 'premium'
},
{
@ -675,6 +630,16 @@
name: 'Format Painter',
type: 'premium'
},
{
key: 'editimage',
name: 'Image Editing',
type: 'premium'
},
{
key: 'importword',
name: 'Import from Word',
type: 'premium'
},
{
key: 'inlinecss',
name: 'Inline CSS',
@ -686,6 +651,16 @@
name: 'Link Checker',
type: 'premium'
},
{
key: 'math',
name: 'Math',
type: 'premium'
},
{
key: 'markdown',
name: 'Markdown',
type: 'premium'
},
{
key: 'mentions',
name: 'Mentions',
@ -713,14 +688,13 @@
slug: 'introduction-to-powerpaste'
},
{
key: 'rtc',
name: 'Real-Time Collaboration',
type: 'premium',
slug: 'rtc-introduction'
key: 'revisionhistory',
name: 'Revision History',
type: 'premium'
},
{
key: 'tinymcespellchecker',
name: 'Spell Checker Pro',
name: 'Spell Checker',
type: 'premium',
slug: 'introduction-to-tiny-spellchecker'
},
@ -734,6 +708,12 @@
name: 'Table of Contents',
type: 'premium'
},
{
key: 'advtemplate',
name: 'Templates',
type: 'premium',
slug: 'advanced-templates'
},
{
key: 'tinycomments',
name: 'Tiny Comments',
@ -759,9 +739,9 @@
});
const sortedPremiumPlugins = sort(map(premiumPlugins, p => p.name), (s1, s2) => s1.localeCompare(s2));
const premiumPluginList = map(sortedPremiumPlugins, pluginName => `<li>${ pluginName }</li>`).join('');
return '<div data-mce-tabstop="1" tabindex="-1">' + '<p><b>' + global$1.translate('Premium plugins:') + '</b></p>' + '<ul>' + premiumPluginList + '<li class="tox-help__more-link" "><a href="https://www.tiny.cloud/pricing/?utm_campaign=editor_referral&utm_medium=help_dialog&utm_source=tinymce" rel="noopener" target="_blank">' + global$1.translate('Learn more...') + '</a></li>' + '</ul>' + '</div>';
return '<div>' + '<p><b>' + global$2.translate('Premium plugins:') + '</b></p>' + '<ul>' + premiumPluginList + '<li class="tox-help__more-link" ">' + '<a href="https://www.tiny.cloud/pricing/?utm_campaign=help_dialog_plugin_tab&utm_source=tiny&utm_medium=referral&utm_term=read_more&utm_content=premium_plugin_heading" rel="noopener" target="_blank"' + ' data-alloy-tabstop="true" tabindex="-1">' + global$2.translate('Learn more...') + '</a></li>' + '</ul>' + '</div>';
};
const makeLink = p => `<a href="${ p.url }" target="_blank" rel="noopener">${ p.name }</a>`;
const makeLink = p => `<a data-alloy-tabstop="true" tabindex="-1" href="${ p.url }" target="_blank" rel="noopener">${ p.name }</a>`;
const identifyUnknownPlugin = (editor, key) => {
const getMetadata = editor.plugins[key].getMetadata;
if (isFunction(getMetadata)) {
@ -785,7 +765,7 @@
const name = x.type === 'premium' ? `${ x.name }*` : x.name;
const html = makeLink({
name,
url: `https://www.tiny.cloud/docs/tinymce/6/${ x.slug }/`
url: `https://www.tiny.cloud/docs/tinymce/7/${ x.slug }/`
});
return {
name,
@ -805,7 +785,7 @@
});
const count = pluginLis.length;
const pluginsString = pluginLis.join('');
const html = '<p><b>' + global$1.translate([
const html = '<p><b>' + global$2.translate([
'Plugins installed ({0}):',
count
]) + '</b></p>' + '<ul>' + pluginsString + '</ul>';
@ -815,7 +795,7 @@
if (editor == null) {
return '';
}
return '<div data-mce-tabstop="1" tabindex="-1">' + pluginLister(editor) + '</div>';
return '<div>' + pluginLister(editor) + '</div>';
};
const htmlPanel = {
type: 'htmlpanel',
@ -837,10 +817,10 @@
const tab = () => {
const getVersion = (major, minor) => major.indexOf('@') === 0 ? 'X.X.X' : major + '.' + minor;
const version = getVersion(global.majorVersion, global.minorVersion);
const changeLogLink = '<a href="https://www.tiny.cloud/docs/tinymce/6/changelog/?utm_campaign=editor_referral&utm_medium=help_dialog&utm_source=tinymce" rel="noopener" target="_blank">TinyMCE ' + version + '</a>';
const changeLogLink = '<a data-alloy-tabstop="true" tabindex="-1" href="https://www.tiny.cloud/docs/tinymce/7/changelog/?utm_campaign=help_dialog_version_tab&utm_source=tiny&utm_medium=referral" rel="noopener" target="_blank">TinyMCE ' + version + '</a>';
const htmlPanel = {
type: 'htmlpanel',
html: '<p>' + global$1.translate([
html: '<p>' + global$2.translate([
'You are using {0}',
changeLogLink
]) + '</p>',
@ -885,9 +865,9 @@
names
};
};
const parseCustomTabs = (editor, customTabs) => {
const pParseCustomTabs = async (editor, customTabs, pluginUrl) => {
const shortcuts = tab$2();
const nav = tab$3();
const nav = await pTab(pluginUrl);
const plugins = tab$1(editor);
const versions = tab();
const tabs = {
@ -899,37 +879,39 @@
};
return Optional.from(getHelpTabs(editor)).fold(() => getNamesFromTabs(tabs), tabsFromSettings => parseHelpTabsSetting(tabsFromSettings, tabs));
};
const init = (editor, customTabs) => () => {
const {tabs, names} = parseCustomTabs(editor, customTabs);
const foundTabs = map(names, name => get(tabs, name));
const dialogTabs = cat(foundTabs);
const body = {
type: 'tabpanel',
tabs: dialogTabs
};
editor.windowManager.open({
title: 'Help',
size: 'normal',
body,
buttons: [{
type: 'cancel',
name: 'close',
text: 'Close',
primary: true
}],
initialData: {}
const init = (editor, customTabs, pluginUrl) => () => {
pParseCustomTabs(editor, customTabs, pluginUrl).then(({tabs, names}) => {
const foundTabs = map(names, name => get(tabs, name));
const dialogTabs = cat(foundTabs);
const body = {
type: 'tabpanel',
tabs: dialogTabs
};
editor.windowManager.open({
title: 'Help',
size: 'medium',
body,
buttons: [{
type: 'cancel',
name: 'close',
text: 'Close',
primary: true
}],
initialData: {}
});
});
};
var Plugin = () => {
global$3.add('help', editor => {
global$4.add('help', (editor, pluginUrl) => {
const customTabs = Cell({});
const api = get$1(customTabs);
register$1(editor);
const dialogOpener = init(editor, customTabs);
const dialogOpener = init(editor, customTabs, pluginUrl);
register(editor, dialogOpener);
register$2(editor, dialogOpener);
editor.shortcuts.add('Alt+0', 'Open help dialog', 'mceHelp');
initI18nLoad(editor, pluginUrl);
return api;
});
};

File diff suppressed because one or more lines are too long

View File

@ -1,5 +1,5 @@
/**
* TinyMCE version 6.4.1 (2023-03-29)
* TinyMCE version 7.5.1 (TBD)
*/
(function () {
@ -992,7 +992,8 @@
name: 'src',
type: 'urlinput',
filetype: 'image',
label: 'Source'
label: 'Source',
picker_text: 'Browse files'
};
const imageList = info.imageList.map(items => ({
name: 'images',
@ -1278,6 +1279,7 @@
});
api.showTab('general');
changeSrc(helpers, info, state, api);
api.focus('src');
};
blobToDataUri(file).then(dataUrl => {
const blobInfo = helpers.createBlobCache(file, blobUri, dataUrl);
@ -1287,7 +1289,9 @@
finalize();
}).catch(err => {
finalize();
helpers.alertErr(err);
helpers.alertErr(err, () => {
api.focus('fileinput');
});
});
} else {
helpers.addToBlobCache(blobInfo);
@ -1368,8 +1372,8 @@
const addToBlobCache = editor => blobInfo => {
editor.editorUpload.blobCache.add(blobInfo);
};
const alertErr = editor => message => {
editor.windowManager.alert(message);
const alertErr = editor => (message, callback) => {
editor.windowManager.alert(message, callback);
};
const normalizeCss = editor => cssText => normalizeCss$1(editor, cssText);
const parseStyle = editor => cssText => editor.dom.parseStyle(cssText);
@ -1456,6 +1460,16 @@
});
};
const onSetupEditable = editor => api => {
const nodeChanged = () => {
api.setEnabled(editor.selection.isEditable());
};
editor.on('NodeChange', nodeChanged);
nodeChanged();
return () => {
editor.off('NodeChange', nodeChanged);
};
};
const register = editor => {
editor.ui.registry.addToggleButton('image', {
icon: 'image',
@ -1463,15 +1477,21 @@
onAction: Dialog(editor).open,
onSetup: buttonApi => {
buttonApi.setActive(isNonNullable(getSelectedImage(editor)));
return editor.selection.selectorChangedWithUnbind('img:not([data-mce-object]):not([data-mce-placeholder]),figure.image', buttonApi.setActive).unbind;
const unbindSelectorChanged = editor.selection.selectorChangedWithUnbind('img:not([data-mce-object]):not([data-mce-placeholder]),figure.image', buttonApi.setActive).unbind;
const unbindEditable = onSetupEditable(editor)(buttonApi);
return () => {
unbindSelectorChanged();
unbindEditable();
};
}
});
editor.ui.registry.addMenuItem('image', {
icon: 'image',
text: 'Image...',
onAction: Dialog(editor).open
onAction: Dialog(editor).open,
onSetup: onSetupEditable(editor)
});
editor.ui.registry.addContextMenu('image', { update: element => isFigure(element) || isImage(element) && !isPlaceholderImage(element) ? ['image'] : [] });
editor.ui.registry.addContextMenu('image', { update: element => editor.selection.isEditable() && (isFigure(element) || isImage(element) && !isPlaceholderImage(element)) ? ['image'] : [] });
};
var Plugin = () => {

File diff suppressed because one or more lines are too long

View File

@ -1,5 +1,5 @@
/**
* TinyMCE version 6.4.1 (2023-03-29)
* TinyMCE version 7.5.1 (TBD)
*/
(function () {
@ -141,7 +141,8 @@
const skinUrlBase = getSkinUrl(editor);
const skinUrl = skinUrlBase ? editor.documentBaseURI.toAbsolute(skinUrlBase) : global$2.baseURL + '/skins/ui/' + skin;
const contentSkinUrlPart = global$2.baseURL + '/skins/content/';
return href === skinUrl + '/content' + (editor.inline ? '.inline' : '') + '.min.css' || href.indexOf(contentSkinUrlPart) !== -1;
const suffix = editor.editorManager.suffix;
return href === skinUrl + '/content' + (editor.inline ? '.inline' : '') + `${ suffix }.css` || href.indexOf(contentSkinUrlPart) !== -1;
}
return false;
};
@ -177,7 +178,7 @@
} catch (e) {
}
global.each(rules, cssRule => {
if (isCssImportRule(cssRule)) {
if (isCssImportRule(cssRule) && cssRule.styleSheet) {
append(cssRule.styleSheet, true);
} else if (isCssPageRule(cssRule)) {
global.each(cssRule.selectorText.split(','), selector => {

View File

@ -1,4 +1,4 @@
/**
* TinyMCE version 6.4.1 (2023-03-29)
* TinyMCE version 7.5.1 (TBD)
*/
!function(){"use strict";var e=tinymce.util.Tools.resolve("tinymce.PluginManager");const t=e=>t=>(e=>{const t=typeof e;return null===e?"null":"object"===t&&Array.isArray(e)?"array":"object"===t&&(s=r=e,(o=String).prototype.isPrototypeOf(s)||(null===(n=r.constructor)||void 0===n?void 0:n.name)===o.name)?"string":t;var s,r,o,n})(t)===e,s=t("string"),r=t("object"),o=t("array"),n=("function",e=>"function"==typeof e);var c=tinymce.util.Tools.resolve("tinymce.dom.DOMUtils"),i=tinymce.util.Tools.resolve("tinymce.EditorManager"),l=tinymce.util.Tools.resolve("tinymce.Env"),a=tinymce.util.Tools.resolve("tinymce.util.Tools");const p=e=>t=>t.options.get(e),u=p("importcss_merge_classes"),m=p("importcss_exclusive"),f=p("importcss_selector_converter"),y=p("importcss_selector_filter"),d=p("importcss_groups"),h=p("importcss_append"),_=p("importcss_file_filter"),g=p("skin"),v=p("skin_url"),b=Array.prototype.push,x=/^\.(?:ephox|tiny-pageembed|mce)(?:[.-]+\w+)+$/,T=e=>s(e)?t=>-1!==t.indexOf(e):e instanceof RegExp?t=>e.test(t):e,S=(e,t)=>{let s={};const r=/^(?:([a-z0-9\-_]+))?(\.[a-z0-9_\-\.]+)$/i.exec(t);if(!r)return;const o=r[1],n=r[2].substr(1).split(".").join(" "),c=a.makeMap("a,img");return r[1]?(s={title:t},e.schema.getTextBlockElements()[o]?s.block=o:e.schema.getBlockElements()[o]||c[o.toLowerCase()]?s.selector=o:s.inline=o):r[2]&&(s={inline:"span",title:t.substr(1),classes:n}),u(e)?s.classes=n:s.attributes={class:n},s},k=(e,t)=>null===t||m(e),w=e=>{e.on("init",(()=>{const t=(()=>{const e=[],t=[],s={};return{addItemToGroup:(e,r)=>{s[e]?s[e].push(r):(t.push(e),s[e]=[r])},addItem:t=>{e.push(t)},toFormats:()=>{return(r=t,n=e=>{const t=s[e];return 0===t.length?[]:[{title:e,items:t}]},(e=>{const t=[];for(let s=0,r=e.length;s<r;++s){if(!o(e[s]))throw new Error("Arr.flatten item "+s+" was not an array, input: "+e);b.apply(t,e[s])}return t})(((e,t)=>{const s=e.length,r=new Array(s);for(let o=0;o<s;o++){const s=e[o];r[o]=t(s,o)}return r})(r,n))).concat(e);var r,n}}})(),r={},n=T(y(e)),p=(e=>a.map(e,(e=>a.extend({},e,{original:e,selectors:{},filter:T(e.filter)}))))(d(e)),u=(t,s)=>{if(((e,t,s,r)=>!(k(e,s)?t in r:t in s.selectors))(e,t,s,r)){((e,t,s,r)=>{k(e,s)?r[t]=!0:s.selectors[t]=!0})(e,t,s,r);const o=((e,t,s,r)=>{let o;const n=f(e);return o=r&&r.selector_converter?r.selector_converter:n||(()=>S(e,s)),o.call(t,s,r)})(e,e.plugins.importcss,t,s);if(o){const t=o.name||c.DOM.uniqueId();return e.formatter.register(t,o),{title:o.title,format:t}}}return null};a.each(((e,t,r)=>{const o=[],n={},c=(t,n)=>{let p,u=t.href;if(u=(e=>{const t=l.cacheSuffix;return s(e)&&(e=e.replace("?"+t,"").replace("&"+t,"")),e})(u),u&&(!r||r(u,n))&&!((e,t)=>{const s=g(e);if(s){const r=v(e),o=r?e.documentBaseURI.toAbsolute(r):i.baseURL+"/skins/ui/"+s,n=i.baseURL+"/skins/content/";return t===o+"/content"+(e.inline?".inline":"")+".min.css"||-1!==t.indexOf(n)}return!1})(e,u)){a.each(t.imports,(e=>{c(e,!0)}));try{p=t.cssRules||t.rules}catch(e){}a.each(p,(e=>{e.styleSheet?c(e.styleSheet,!0):e.selectorText&&a.each(e.selectorText.split(","),(e=>{o.push(a.trim(e))}))}))}};a.each(e.contentCSS,(e=>{n[e]=!0})),r||(r=(e,t)=>t||n[e]);try{a.each(t.styleSheets,(e=>{c(e)}))}catch(e){}return o})(e,e.getDoc(),T(_(e))),(e=>{if(!x.test(e)&&(!n||n(e))){const s=((e,t)=>a.grep(e,(e=>!e.filter||e.filter(t))))(p,e);if(s.length>0)a.each(s,(s=>{const r=u(e,s);r&&t.addItemToGroup(s.title,r)}));else{const s=u(e,null);s&&t.addItem(s)}}}));const m=t.toFormats();e.dispatch("addStyleModifications",{items:m,replace:!h(e)})}))};e.add("importcss",(e=>((e=>{const t=e.options.register,o=e=>s(e)||n(e)||r(e);t("importcss_merge_classes",{processor:"boolean",default:!0}),t("importcss_exclusive",{processor:"boolean",default:!0}),t("importcss_selector_converter",{processor:"function"}),t("importcss_selector_filter",{processor:o}),t("importcss_file_filter",{processor:o}),t("importcss_groups",{processor:"object[]"}),t("importcss_append",{processor:"boolean",default:!1})})(e),w(e),(e=>({convertSelectorToFormat:t=>S(e,t)}))(e))))}();
!function(){"use strict";var e=tinymce.util.Tools.resolve("tinymce.PluginManager");const t=e=>t=>(e=>{const t=typeof e;return null===e?"null":"object"===t&&Array.isArray(e)?"array":"object"===t&&(s=r=e,(o=String).prototype.isPrototypeOf(s)||(null===(n=r.constructor)||void 0===n?void 0:n.name)===o.name)?"string":t;var s,r,o,n})(t)===e,s=t("string"),r=t("object"),o=t("array"),n=("function",e=>"function"==typeof e);var c=tinymce.util.Tools.resolve("tinymce.dom.DOMUtils"),i=tinymce.util.Tools.resolve("tinymce.EditorManager"),l=tinymce.util.Tools.resolve("tinymce.Env"),a=tinymce.util.Tools.resolve("tinymce.util.Tools");const p=e=>t=>t.options.get(e),u=p("importcss_merge_classes"),m=p("importcss_exclusive"),f=p("importcss_selector_converter"),y=p("importcss_selector_filter"),d=p("importcss_groups"),h=p("importcss_append"),g=p("importcss_file_filter"),_=p("skin"),v=p("skin_url"),b=Array.prototype.push,x=/^\.(?:ephox|tiny-pageembed|mce)(?:[.-]+\w+)+$/,T=e=>s(e)?t=>-1!==t.indexOf(e):e instanceof RegExp?t=>e.test(t):e,S=(e,t)=>{let s={};const r=/^(?:([a-z0-9\-_]+))?(\.[a-z0-9_\-\.]+)$/i.exec(t);if(!r)return;const o=r[1],n=r[2].substr(1).split(".").join(" "),c=a.makeMap("a,img");return r[1]?(s={title:t},e.schema.getTextBlockElements()[o]?s.block=o:e.schema.getBlockElements()[o]||c[o.toLowerCase()]?s.selector=o:s.inline=o):r[2]&&(s={inline:"span",title:t.substr(1),classes:n}),u(e)?s.classes=n:s.attributes={class:n},s},k=(e,t)=>null===t||m(e),M=e=>{e.on("init",(()=>{const t=(()=>{const e=[],t=[],s={};return{addItemToGroup:(e,r)=>{s[e]?s[e].push(r):(t.push(e),s[e]=[r])},addItem:t=>{e.push(t)},toFormats:()=>{return(r=t,n=e=>{const t=s[e];return 0===t.length?[]:[{title:e,items:t}]},(e=>{const t=[];for(let s=0,r=e.length;s<r;++s){if(!o(e[s]))throw new Error("Arr.flatten item "+s+" was not an array, input: "+e);b.apply(t,e[s])}return t})(((e,t)=>{const s=e.length,r=new Array(s);for(let o=0;o<s;o++){const s=e[o];r[o]=t(s,o)}return r})(r,n))).concat(e);var r,n}}})(),r={},n=T(y(e)),p=(e=>a.map(e,(e=>a.extend({},e,{original:e,selectors:{},filter:T(e.filter)}))))(d(e)),u=(t,s)=>{if(((e,t,s,r)=>!(k(e,s)?t in r:t in s.selectors))(e,t,s,r)){((e,t,s,r)=>{k(e,s)?r[t]=!0:s.selectors[t]=!0})(e,t,s,r);const o=((e,t,s,r)=>{let o;const n=f(e);return o=r&&r.selector_converter?r.selector_converter:n||(()=>S(e,s)),o.call(t,s,r)})(e,e.plugins.importcss,t,s);if(o){const t=o.name||c.DOM.uniqueId();return e.formatter.register(t,o),{title:o.title,format:t}}}return null};a.each(((e,t,r)=>{const o=[],n={},c=(t,n)=>{let p,u=t.href;if(u=(e=>{const t=l.cacheSuffix;return s(e)&&(e=e.replace("?"+t,"").replace("&"+t,"")),e})(u),u&&(!r||r(u,n))&&!((e,t)=>{const s=_(e);if(s){const r=v(e),o=r?e.documentBaseURI.toAbsolute(r):i.baseURL+"/skins/ui/"+s,n=i.baseURL+"/skins/content/",c=e.editorManager.suffix;return t===o+"/content"+(e.inline?".inline":"")+`${c}.css`||-1!==t.indexOf(n)}return!1})(e,u)){a.each(t.imports,(e=>{c(e,!0)}));try{p=t.cssRules||t.rules}catch(e){}a.each(p,(e=>{e.styleSheet&&e.styleSheet?c(e.styleSheet,!0):e.selectorText&&a.each(e.selectorText.split(","),(e=>{o.push(a.trim(e))}))}))}};a.each(e.contentCSS,(e=>{n[e]=!0})),r||(r=(e,t)=>t||n[e]);try{a.each(t.styleSheets,(e=>{c(e)}))}catch(e){}return o})(e,e.getDoc(),T(g(e))),(e=>{if(!x.test(e)&&(!n||n(e))){const s=((e,t)=>a.grep(e,(e=>!e.filter||e.filter(t))))(p,e);if(s.length>0)a.each(s,(s=>{const r=u(e,s);r&&t.addItemToGroup(s.title,r)}));else{const s=u(e,null);s&&t.addItem(s)}}}));const m=t.toFormats();e.dispatch("addStyleModifications",{items:m,replace:!h(e)})}))};e.add("importcss",(e=>((e=>{const t=e.options.register,o=e=>s(e)||n(e)||r(e);t("importcss_merge_classes",{processor:"boolean",default:!0}),t("importcss_exclusive",{processor:"boolean",default:!0}),t("importcss_selector_converter",{processor:"function"}),t("importcss_selector_filter",{processor:o}),t("importcss_file_filter",{processor:o}),t("importcss_groups",{processor:"object[]"}),t("importcss_append",{processor:"boolean",default:!1})})(e),M(e),(e=>({convertSelectorToFormat:t=>S(e,t)}))(e))))}();

View File

@ -1,5 +1,5 @@
/**
* TinyMCE version 6.4.1 (2023-03-29)
* TinyMCE version 7.5.1 (TBD)
*/
(function () {
@ -80,7 +80,7 @@
editor.selection.collapse(false);
};
const insertDateTime = (editor, format) => {
if (shouldInsertTimeElement(editor)) {
if (shouldInsertTimeElement(editor) && editor.selection.isEditable()) {
const userTime = getDateTime(editor, format);
let computerTime;
if (/%[HMSIp]/.test(format)) {
@ -124,6 +124,16 @@
var global = tinymce.util.Tools.resolve('tinymce.util.Tools');
const onSetupEditable = editor => api => {
const nodeChanged = () => {
api.setEnabled(editor.selection.isEditable());
};
editor.on('NodeChange', nodeChanged);
nodeChanged();
return () => {
editor.off('NodeChange', nodeChanged);
};
};
const register = editor => {
const formats = getFormats(editor);
const defaultFormat = Cell(getDefaultDateTime(editor));
@ -145,7 +155,8 @@
onItemAction: (_api, value) => {
defaultFormat.set(value);
insertDateTime(value);
}
},
onSetup: onSetupEditable(editor)
});
const makeMenuItemHandler = format => () => {
defaultFormat.set(format);
@ -158,7 +169,8 @@
type: 'menuitem',
text: getDateTime(editor, format),
onAction: makeMenuItemHandler(format)
}))
})),
onSetup: onSetupEditable(editor)
});
};

View File

@ -1,4 +1,4 @@
/**
* TinyMCE version 6.4.1 (2023-03-29)
* TinyMCE version 7.5.1 (TBD)
*/
!function(){"use strict";var e=tinymce.util.Tools.resolve("tinymce.PluginManager");const t=e=>t=>t.options.get(e),a=t("insertdatetime_dateformat"),r=t("insertdatetime_timeformat"),n=t("insertdatetime_formats"),s=t("insertdatetime_element"),i="Sun Mon Tue Wed Thu Fri Sat Sun".split(" "),o="Sunday Monday Tuesday Wednesday Thursday Friday Saturday Sunday".split(" "),l="Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec".split(" "),m="January February March April May June July August September October November December".split(" "),c=(e,t)=>{if((e=""+e).length<t)for(let a=0;a<t-e.length;a++)e="0"+e;return e},d=(e,t,a=new Date)=>(t=(t=(t=(t=(t=(t=(t=(t=(t=(t=(t=(t=(t=(t=(t=t.replace("%D","%m/%d/%Y")).replace("%r","%I:%M:%S %p")).replace("%Y",""+a.getFullYear())).replace("%y",""+a.getYear())).replace("%m",c(a.getMonth()+1,2))).replace("%d",c(a.getDate(),2))).replace("%H",""+c(a.getHours(),2))).replace("%M",""+c(a.getMinutes(),2))).replace("%S",""+c(a.getSeconds(),2))).replace("%I",""+((a.getHours()+11)%12+1))).replace("%p",a.getHours()<12?"AM":"PM")).replace("%B",""+e.translate(m[a.getMonth()]))).replace("%b",""+e.translate(l[a.getMonth()]))).replace("%A",""+e.translate(o[a.getDay()]))).replace("%a",""+e.translate(i[a.getDay()]))).replace("%%","%"),u=(e,t)=>{if(s(e)){const a=d(e,t);let r;r=/%[HMSIp]/.test(t)?d(e,"%Y-%m-%dT%H:%M"):d(e,"%Y-%m-%d");const n=e.dom.getParent(e.selection.getStart(),"time");n?((e,t,a,r)=>{const n=e.dom.create("time",{datetime:a},r);e.dom.replace(n,t),e.selection.select(n,!0),e.selection.collapse(!1)})(e,n,r,a):e.insertContent('<time datetime="'+r+'">'+a+"</time>")}else e.insertContent(d(e,t))};var p=tinymce.util.Tools.resolve("tinymce.util.Tools");e.add("insertdatetime",(e=>{(e=>{const t=e.options.register;t("insertdatetime_dateformat",{processor:"string",default:e.translate("%Y-%m-%d")}),t("insertdatetime_timeformat",{processor:"string",default:e.translate("%H:%M:%S")}),t("insertdatetime_formats",{processor:"string[]",default:["%H:%M:%S","%Y-%m-%d","%I:%M:%S %p","%D"]}),t("insertdatetime_element",{processor:"boolean",default:!1})})(e),(e=>{e.addCommand("mceInsertDate",((t,r)=>{u(e,null!=r?r:a(e))})),e.addCommand("mceInsertTime",((t,a)=>{u(e,null!=a?a:r(e))}))})(e),(e=>{const t=n(e),a=(e=>{let t=e;return{get:()=>t,set:e=>{t=e}}})((e=>{const t=n(e);return t.length>0?t[0]:r(e)})(e)),s=t=>e.execCommand("mceInsertDate",!1,t);e.ui.registry.addSplitButton("insertdatetime",{icon:"insert-time",tooltip:"Insert date/time",select:e=>e===a.get(),fetch:a=>{a(p.map(t,(t=>({type:"choiceitem",text:d(e,t),value:t}))))},onAction:e=>{s(a.get())},onItemAction:(e,t)=>{a.set(t),s(t)}});const i=e=>()=>{a.set(e),s(e)};e.ui.registry.addNestedMenuItem("insertdatetime",{icon:"insert-time",text:"Date/time",getSubmenuItems:()=>p.map(t,(t=>({type:"menuitem",text:d(e,t),onAction:i(t)})))})})(e)}))}();
!function(){"use strict";var e=tinymce.util.Tools.resolve("tinymce.PluginManager");const t=e=>t=>t.options.get(e),a=t("insertdatetime_dateformat"),n=t("insertdatetime_timeformat"),r=t("insertdatetime_formats"),s=t("insertdatetime_element"),i="Sun Mon Tue Wed Thu Fri Sat Sun".split(" "),o="Sunday Monday Tuesday Wednesday Thursday Friday Saturday Sunday".split(" "),l="Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec".split(" "),m="January February March April May June July August September October November December".split(" "),c=(e,t)=>{if((e=""+e).length<t)for(let a=0;a<t-e.length;a++)e="0"+e;return e},d=(e,t,a=new Date)=>(t=(t=(t=(t=(t=(t=(t=(t=(t=(t=(t=(t=(t=(t=(t=t.replace("%D","%m/%d/%Y")).replace("%r","%I:%M:%S %p")).replace("%Y",""+a.getFullYear())).replace("%y",""+a.getYear())).replace("%m",c(a.getMonth()+1,2))).replace("%d",c(a.getDate(),2))).replace("%H",""+c(a.getHours(),2))).replace("%M",""+c(a.getMinutes(),2))).replace("%S",""+c(a.getSeconds(),2))).replace("%I",""+((a.getHours()+11)%12+1))).replace("%p",a.getHours()<12?"AM":"PM")).replace("%B",""+e.translate(m[a.getMonth()]))).replace("%b",""+e.translate(l[a.getMonth()]))).replace("%A",""+e.translate(o[a.getDay()]))).replace("%a",""+e.translate(i[a.getDay()]))).replace("%%","%"),u=(e,t)=>{if(s(e)&&e.selection.isEditable()){const a=d(e,t);let n;n=/%[HMSIp]/.test(t)?d(e,"%Y-%m-%dT%H:%M"):d(e,"%Y-%m-%d");const r=e.dom.getParent(e.selection.getStart(),"time");r?((e,t,a,n)=>{const r=e.dom.create("time",{datetime:a},n);e.dom.replace(r,t),e.selection.select(r,!0),e.selection.collapse(!1)})(e,r,n,a):e.insertContent('<time datetime="'+n+'">'+a+"</time>")}else e.insertContent(d(e,t))};var p=tinymce.util.Tools.resolve("tinymce.util.Tools");const g=e=>t=>{const a=()=>{t.setEnabled(e.selection.isEditable())};return e.on("NodeChange",a),a(),()=>{e.off("NodeChange",a)}};e.add("insertdatetime",(e=>{(e=>{const t=e.options.register;t("insertdatetime_dateformat",{processor:"string",default:e.translate("%Y-%m-%d")}),t("insertdatetime_timeformat",{processor:"string",default:e.translate("%H:%M:%S")}),t("insertdatetime_formats",{processor:"string[]",default:["%H:%M:%S","%Y-%m-%d","%I:%M:%S %p","%D"]}),t("insertdatetime_element",{processor:"boolean",default:!1})})(e),(e=>{e.addCommand("mceInsertDate",((t,n)=>{u(e,null!=n?n:a(e))})),e.addCommand("mceInsertTime",((t,a)=>{u(e,null!=a?a:n(e))}))})(e),(e=>{const t=r(e),a=(e=>{let t=e;return{get:()=>t,set:e=>{t=e}}})((e=>{const t=r(e);return t.length>0?t[0]:n(e)})(e)),s=t=>e.execCommand("mceInsertDate",!1,t);e.ui.registry.addSplitButton("insertdatetime",{icon:"insert-time",tooltip:"Insert date/time",select:e=>e===a.get(),fetch:a=>{a(p.map(t,(t=>({type:"choiceitem",text:d(e,t),value:t}))))},onAction:e=>{s(a.get())},onItemAction:(e,t)=>{a.set(t),s(t)},onSetup:g(e)});const i=e=>()=>{a.set(e),s(e)};e.ui.registry.addNestedMenuItem("insertdatetime",{icon:"insert-time",text:"Date/time",getSubmenuItems:()=>p.map(t,(t=>({type:"menuitem",text:d(e,t),onAction:i(t)}))),onSetup:g(e)})})(e)}))}();

View File

@ -1,5 +1,5 @@
/**
* TinyMCE version 6.4.1 (2023-03-29)
* TinyMCE version 7.5.1 (TBD)
*/
(function () {
@ -292,53 +292,6 @@
const allowUnsafeLinkTarget = option('allow_unsafe_link_target');
const useQuickLink = option('link_quicklink');
var global$4 = tinymce.util.Tools.resolve('tinymce.util.Tools');
const getValue = item => isString(item.value) ? item.value : '';
const getText = item => {
if (isString(item.text)) {
return item.text;
} else if (isString(item.title)) {
return item.title;
} else {
return '';
}
};
const sanitizeList = (list, extractValue) => {
const out = [];
global$4.each(list, item => {
const text = getText(item);
if (item.menu !== undefined) {
const items = sanitizeList(item.menu, extractValue);
out.push({
text,
items
});
} else {
const value = extractValue(item);
out.push({
text,
value
});
}
});
return out;
};
const sanitizeWith = (extracter = getValue) => list => Optional.from(list).map(list => sanitizeList(list, extracter));
const sanitize = list => sanitizeWith(getValue)(list);
const createUi = (name, label) => items => ({
name,
type: 'listbox',
label,
items
});
const ListOptions = {
sanitize,
sanitizeWith,
createUi,
getValue
};
const keys = Object.keys;
const hasOwnProperty = Object.hasOwnProperty;
const each = (obj, f) => {
@ -365,9 +318,11 @@
const has = (obj, key) => hasOwnProperty.call(obj, key);
const hasNonNullableKey = (obj, key) => has(obj, key) && obj[key] !== undefined && obj[key] !== null;
var global$4 = tinymce.util.Tools.resolve('tinymce.util.URI');
var global$3 = tinymce.util.Tools.resolve('tinymce.dom.TreeWalker');
var global$2 = tinymce.util.Tools.resolve('tinymce.util.URI');
var global$2 = tinymce.util.Tools.resolve('tinymce.util.Tools');
const isAnchor = elm => isNonNullable(elm) && elm.nodeName.toLowerCase() === 'a';
const isLink = elm => isAnchor(elm) && !!getHref(elm);
@ -396,12 +351,12 @@
const applyRelTargetRules = (rel, isUnsafe) => {
const rules = ['noopener'];
const rels = rel ? rel.split(/\s+/) : [];
const toString = rels => global$4.trim(rels.sort().join(' '));
const toString = rels => global$2.trim(rels.sort().join(' '));
const addTargetRules = rels => {
rels = removeTargetRules(rels);
return rels.length > 0 ? rels.concat(rules) : rules;
};
const removeTargetRules = rels => rels.filter(val => global$4.inArray(rules, val) === -1);
const removeTargetRules = rels => rels.filter(val => global$2.inArray(rules, val) === -1);
const newRels = isUnsafe ? addTargetRules(rels) : removeTargetRules(rels);
return newRels.length > 0 ? toString(newRels) : '';
};
@ -420,7 +375,7 @@
return trimCaretContainers(text);
};
const getLinksInSelection = rng => collectNodesInRange(rng, isLink);
const getLinks$1 = elements => global$4.grep(elements, isLink);
const getLinks$1 = elements => global$2.grep(elements, isLink);
const hasLinks = elements => getLinks$1(elements).length > 0;
const hasLinksInSelection = rng => getLinksInSelection(rng).length > 0;
const isOnlyTextSelected = editor => {
@ -439,6 +394,7 @@
}
};
const isImageFigure = elm => isNonNullable(elm) && elm.nodeName === 'FIGURE' && /\bimage\b/i.test(elm.className);
const getLinkAttrs = data => {
const attrs = [
'title',
@ -565,7 +521,7 @@
const href = data.href;
return {
...data,
href: global$2.isDomSafe(href, 'a', uriOptions) ? href : ''
href: global$4.isDomSafe(href, 'a', uriOptions) ? href : ''
};
};
const link = (editor, attachState, data) => {
@ -596,6 +552,51 @@
}
};
const getValue = item => isString(item.value) ? item.value : '';
const getText = item => {
if (isString(item.text)) {
return item.text;
} else if (isString(item.title)) {
return item.title;
} else {
return '';
}
};
const sanitizeList = (list, extractValue) => {
const out = [];
global$2.each(list, item => {
const text = getText(item);
if (item.menu !== undefined) {
const items = sanitizeList(item.menu, extractValue);
out.push({
text,
items
});
} else {
const value = extractValue(item);
out.push({
text,
value
});
}
});
return out;
};
const sanitizeWith = (extracter = getValue) => list => Optional.from(list).map(list => sanitizeList(list, extracter));
const sanitize = list => sanitizeWith(getValue)(list);
const createUi = (name, label) => items => ({
name,
type: 'listbox',
label,
items
});
const ListOptions = {
sanitize,
sanitizeWith,
createUi,
getValue
};
const isListGroup = item => hasNonNullableKey(item, 'items');
const findTextByValue = (value, catalog) => findMap(catalog, item => {
if (isListGroup(item)) {
@ -903,7 +904,8 @@
name: 'url',
type: 'urlinput',
filetype: 'file',
label: 'URL'
label: 'URL',
picker_text: 'Browse links'
}];
const displayText = settings.anchor.text.map(() => ({
name: 'text',
@ -960,7 +962,7 @@
onSubmit
};
};
const open$1 = editor => {
const open = editor => {
const data = collectData(editor);
data.then(info => {
const onSubmit = handleSubmit(editor, info);
@ -973,13 +975,74 @@
const register = editor => {
editor.addCommand('mceLink', (_ui, value) => {
if ((value === null || value === void 0 ? void 0 : value.dialog) === true || !useQuickLink(editor)) {
open$1(editor);
open(editor);
} else {
editor.dispatch('contexttoolbar-show', { toolbarKey: 'quicklink' });
}
});
};
const setup$2 = editor => {
editor.addShortcut('Meta+K', '', () => {
editor.execCommand('mceLink');
});
};
const Cell = initial => {
let value = initial;
const get = () => {
return value;
};
const set = v => {
value = v;
};
return {
get,
set
};
};
const singleton = doRevoke => {
const subject = Cell(Optional.none());
const revoke = () => subject.get().each(doRevoke);
const clear = () => {
revoke();
subject.set(Optional.none());
};
const isSet = () => subject.get().isSome();
const get = () => subject.get();
const set = s => {
revoke();
subject.set(Optional.some(s));
};
return {
clear,
isSet,
get,
set
};
};
const value = () => {
const subject = singleton(noop);
const on = f => subject.get().each(f);
return {
...subject,
on
};
};
const removeFromStart = (str, numChars) => {
return str.substring(numChars);
};
const checkRange = (str, substr, start) => substr === '' || str.length >= substr.length && str.substr(start, start + substr.length) === substr;
const removeLeading = (str, prefix) => {
return startsWith(str, prefix) ? removeFromStart(str, prefix.length) : str;
};
const startsWith = (str, prefix) => {
return checkRange(str, prefix, 0);
};
var global = tinymce.util.Tools.resolve('tinymce.util.VK');
const appendClickRemove = (link, evt) => {
@ -987,18 +1050,19 @@
link.dispatchEvent(evt);
document.body.removeChild(link);
};
const open = url => {
const openLink = url => {
const link = document.createElement('a');
link.target = '_blank';
link.href = url;
link.rel = 'noreferrer noopener';
const evt = document.createEvent('MouseEvents');
evt.initMouseEvent('click', true, true, window, 0, 0, 0, 0, 0, false, false, false, false, 0, null);
const evt = new MouseEvent('click', {
bubbles: true,
cancelable: true,
view: window
});
document.dispatchEvent(evt);
appendClickRemove(link, evt);
};
const getLink = (editor, elm) => editor.dom.getParent(elm, 'a[href]');
const getSelectedLink = editor => getLink(editor, editor.selection.getStart());
const hasOnlyAltModifier = e => {
return e.altKey === true && e.shiftKey === false && e.ctrlKey === false && e.metaKey === false;
};
@ -1006,108 +1070,132 @@
if (a) {
const href = getHref(a);
if (/^#/.test(href)) {
const targetEl = editor.dom.select(href);
const targetEl = editor.dom.select(`${ href },[name="${ removeLeading(href, '#') }"]`);
if (targetEl.length) {
editor.selection.scrollIntoView(targetEl[0], true);
}
} else {
open(a.href);
openLink(a.href);
}
}
};
const openDialog = editor => () => {
editor.execCommand('mceLink', false, { dialog: true });
const isSelectionOnImageWithEmbeddedLink = editor => {
const rng = editor.selection.getRng();
const node = rng.startContainer;
return isLink(node) && rng.startContainer === rng.endContainer && editor.dom.select('img', node).length === 1;
};
const gotoSelectedLink = editor => () => {
gotoLink(editor, getSelectedLink(editor));
const getLinkFromElement = (editor, element) => {
const links = getLinks$1(editor.dom.getParents(element));
return someIf(links.length === 1, links[0]);
};
const setupGotoLinks = editor => {
const getLinkInSelection = editor => {
const links = getLinksInSelection(editor.selection.getRng());
return someIf(links.length > 0, links[0]).or(getLinkFromElement(editor, editor.selection.getNode()));
};
const getLinkFromSelection = editor => editor.selection.isCollapsed() || isSelectionOnImageWithEmbeddedLink(editor) ? getLinkFromElement(editor, editor.selection.getStart()) : getLinkInSelection(editor);
const setup$1 = editor => {
const selectedLink = value();
const getSelectedLink = () => selectedLink.get().or(getLinkFromSelection(editor));
const gotoSelectedLink = () => getSelectedLink().each(link => gotoLink(editor, link));
editor.on('contextmenu', e => {
getLinkFromElement(editor, e.target).each(selectedLink.set);
});
editor.on('SelectionChange', () => {
if (!selectedLink.isSet()) {
getLinkFromSelection(editor).each(selectedLink.set);
}
});
editor.on('click', e => {
const link = getLink(editor, e.target);
if (link && global.metaKeyPressed(e)) {
selectedLink.clear();
const links = getLinks$1(editor.dom.getParents(e.target));
if (links.length === 1 && global.metaKeyPressed(e)) {
e.preventDefault();
gotoLink(editor, link);
gotoLink(editor, links[0]);
}
});
editor.on('keydown', e => {
selectedLink.clear();
if (!e.isDefaultPrevented() && e.keyCode === 13 && hasOnlyAltModifier(e)) {
const link = getSelectedLink(editor);
if (link) {
getSelectedLink().each(link => {
e.preventDefault();
gotoLink(editor, link);
}
});
}
});
return { gotoSelectedLink };
};
const openDialog = editor => () => {
editor.execCommand('mceLink', false, { dialog: true });
};
const toggleState = (editor, toggler) => {
editor.on('NodeChange', toggler);
return () => editor.off('NodeChange', toggler);
};
const toggleActiveState = editor => api => {
const updateState = () => api.setActive(!editor.mode.isReadOnly() && isInAnchor(editor, editor.selection.getNode()));
const toggleLinkState = editor => api => {
const updateState = () => {
api.setActive(!editor.mode.isReadOnly() && isInAnchor(editor, editor.selection.getNode()));
api.setEnabled(editor.selection.isEditable());
};
updateState();
return toggleState(editor, updateState);
};
const hasExactlyOneLinkInSelection = editor => {
const links = editor.selection.isCollapsed() ? getLinks$1(editor.dom.getParents(editor.selection.getStart())) : getLinksInSelection(editor.selection.getRng());
return links.length === 1;
};
const toggleEnabledState = editor => api => {
const updateState = () => api.setEnabled(hasExactlyOneLinkInSelection(editor));
const toggleLinkMenuState = editor => api => {
const updateState = () => {
api.setEnabled(editor.selection.isEditable());
};
updateState();
return toggleState(editor, updateState);
};
const toggleUnlinkState = editor => api => {
const toggleRequiresLinkState = editor => api => {
const hasLinks$1 = parents => hasLinks(parents) || hasLinksInSelection(editor.selection.getRng());
const parents = editor.dom.getParents(editor.selection.getStart());
api.setEnabled(hasLinks$1(parents));
return toggleState(editor, e => api.setEnabled(hasLinks$1(e.parents)));
const updateEnabled = parents => {
api.setEnabled(hasLinks$1(parents) && editor.selection.isEditable());
};
updateEnabled(parents);
return toggleState(editor, e => updateEnabled(e.parents));
};
const setup = editor => {
editor.addShortcut('Meta+K', '', () => {
editor.execCommand('mceLink');
});
};
const setupButtons = editor => {
const setupButtons = (editor, openLink) => {
editor.ui.registry.addToggleButton('link', {
icon: 'link',
tooltip: 'Insert/edit link',
shortcut: 'Meta+K',
onAction: openDialog(editor),
onSetup: toggleActiveState(editor)
onSetup: toggleLinkState(editor)
});
editor.ui.registry.addButton('openlink', {
icon: 'new-tab',
tooltip: 'Open link',
onAction: gotoSelectedLink(editor),
onSetup: toggleEnabledState(editor)
onAction: openLink.gotoSelectedLink,
onSetup: toggleRequiresLinkState(editor)
});
editor.ui.registry.addButton('unlink', {
icon: 'unlink',
tooltip: 'Remove link',
onAction: () => unlink(editor),
onSetup: toggleUnlinkState(editor)
onSetup: toggleRequiresLinkState(editor)
});
};
const setupMenuItems = editor => {
const setupMenuItems = (editor, openLink) => {
editor.ui.registry.addMenuItem('openlink', {
text: 'Open link',
icon: 'new-tab',
onAction: gotoSelectedLink(editor),
onSetup: toggleEnabledState(editor)
onAction: openLink.gotoSelectedLink,
onSetup: toggleRequiresLinkState(editor)
});
editor.ui.registry.addMenuItem('link', {
icon: 'link',
text: 'Link...',
shortcut: 'Meta+K',
onAction: openDialog(editor)
onAction: openDialog(editor),
onSetup: toggleLinkMenuState(editor)
});
editor.ui.registry.addMenuItem('unlink', {
icon: 'unlink',
text: 'Remove link',
onAction: () => unlink(editor),
onSetup: toggleUnlinkState(editor)
onSetup: toggleRequiresLinkState(editor)
});
};
const setupContextMenu = editor => {
@ -1123,13 +1211,13 @@
}
});
};
const setupContextToolbars = editor => {
const setupContextToolbars = (editor, openLink) => {
const collapseSelectionToEnd = editor => {
editor.selection.collapse(false);
};
const onSetupLink = buttonApi => {
const node = editor.selection.getNode();
buttonApi.setEnabled(isInAnchor(editor, node));
buttonApi.setEnabled(isInAnchor(editor, node) && editor.selection.isEditable());
return noop;
};
const getLinkText = value => {
@ -1147,7 +1235,7 @@
type: 'contextformtogglebutton',
icon: 'link',
tooltip: 'Link',
onSetup: toggleActiveState(editor)
onSetup: toggleLinkState(editor)
},
label: 'Link',
predicate: node => hasContextToolbar(editor) && isInAnchor(editor, node),
@ -1164,7 +1252,7 @@
onSetup: buttonApi => {
const node = editor.selection.getNode();
buttonApi.setActive(isInAnchor(editor, node));
return toggleActiveState(editor)(buttonApi);
return toggleLinkState(editor)(buttonApi);
},
onAction: formApi => {
const value = formApi.getValue();
@ -1178,7 +1266,7 @@
text,
title: Optional.none(),
rel: Optional.none(),
target: Optional.none(),
target: Optional.from(getDefaultLinkTarget(editor)),
class: Optional.none()
});
collapseSelectionToEnd(editor);
@ -1201,24 +1289,27 @@
tooltip: 'Open link',
onSetup: onSetupLink,
onAction: formApi => {
gotoSelectedLink(editor)();
openLink.gotoSelectedLink();
formApi.hide();
}
}
]
});
};
const setup = editor => {
const openLink = setup$1(editor);
setupButtons(editor, openLink);
setupMenuItems(editor, openLink);
setupContextMenu(editor);
setupContextToolbars(editor, openLink);
};
var Plugin = () => {
global$5.add('link', editor => {
register$1(editor);
setupButtons(editor);
setupMenuItems(editor);
setupContextMenu(editor);
setupContextToolbars(editor);
setupGotoLinks(editor);
register(editor);
setup(editor);
setup$2(editor);
});
};

File diff suppressed because one or more lines are too long

View File

@ -1,5 +1,5 @@
/**
* TinyMCE version 6.4.1 (2023-03-29)
* TinyMCE version 7.5.1 (TBD)
*/
(function () {
@ -40,6 +40,7 @@
const noop = () => {
};
const compose1 = (fbc, fab) => a => fbc(fab(a));
const constant = value => {
return () => {
return value;
@ -48,6 +49,12 @@
const tripleEquals = (a, b) => {
return a === b;
};
function curry(fn, ...initialArgs) {
return (...restArgs) => {
const all = initialArgs.concat(restArgs);
return fn.apply(null, all);
};
}
const not = f => t => !f(t);
const never = constant(false);
@ -261,7 +268,10 @@
const equals = (lhs, rhs, comparator = tripleEquals) => lift2(lhs, rhs, comparator).getOr(lhs.isNone() && rhs.isNone());
const lift2 = (oa, ob, f) => oa.isSome() && ob.isSome() ? Optional.some(f(oa.getOrDie(), ob.getOrDie())) : Optional.none();
const COMMENT = 8;
const DOCUMENT_FRAGMENT = 11;
const ELEMENT = 1;
const TEXT = 3;
const fromHtml = (html, scope) => {
const doc = scope || document;
@ -327,17 +337,39 @@
};
const is = is$1;
var ClosestOrAncestor = (is, ancestor, scope, a, isRoot) => {
if (is(scope, a)) {
return Optional.some(scope);
} else if (isFunction(isRoot) && isRoot(scope)) {
return Optional.none();
} else {
return ancestor(scope, a, isRoot);
const Global = typeof window !== 'undefined' ? window : Function('return this;')();
const path = (parts, scope) => {
let o = scope !== undefined && scope !== null ? scope : Global;
for (let i = 0; i < parts.length && o !== undefined && o !== null; ++i) {
o = o[parts[i]];
}
return o;
};
const resolve = (p, scope) => {
const parts = p.split('.');
return path(parts, scope);
};
typeof window !== 'undefined' ? window : Function('return this;')();
const unsafe = (name, scope) => {
return resolve(name, scope);
};
const getOrDie = (name, scope) => {
const actual = unsafe(name, scope);
if (actual === undefined || actual === null) {
throw new Error(name + ' not available on this browser');
}
return actual;
};
const getPrototypeOf = Object.getPrototypeOf;
const sandHTMLElement = scope => {
return getOrDie('HTMLElement', scope);
};
const isPrototypeOf = x => {
const scope = resolve('ownerDocument.defaultView', x);
return isObject(x) && (sandHTMLElement(scope).prototype.isPrototypeOf(x) || /^HTML\w*Element$/.test(getPrototypeOf(x).constructor.name));
};
const name = element => {
const r = element.dom.nodeName;
@ -345,7 +377,11 @@
};
const type = element => element.dom.nodeType;
const isType = t => element => type(element) === t;
const isComment = element => type(element) === COMMENT || name(element) === '#comment';
const isHTMLElement = element => isElement$1(element) && isPrototypeOf(element.dom);
const isElement$1 = isType(ELEMENT);
const isText = isType(TEXT);
const isDocumentFragment = isType(DOCUMENT_FRAGMENT);
const isTag = tag => e => isElement$1(e) && name(e) === tag;
const parent = element => Optional.from(element.dom.parentNode).map(SugarElement.fromDom);
@ -359,7 +395,34 @@
const firstChild = element => child(element, 0);
const lastChild = element => child(element, element.dom.childNodes.length - 1);
const ancestor = (scope, predicate, isRoot) => {
const isShadowRoot = dos => isDocumentFragment(dos) && isNonNullable(dos.dom.host);
const getRootNode = e => SugarElement.fromDom(e.dom.getRootNode());
const getShadowRoot = e => {
const r = getRootNode(e);
return isShadowRoot(r) ? Optional.some(r) : Optional.none();
};
const getShadowHost = e => SugarElement.fromDom(e.dom.host);
const inBody = element => {
const dom = isText(element) ? element.dom.parentNode : element.dom;
if (dom === undefined || dom === null || dom.ownerDocument === null) {
return false;
}
const doc = dom.ownerDocument;
return getShadowRoot(SugarElement.fromDom(dom)).fold(() => doc.body.contains(dom), compose1(inBody, getShadowHost));
};
var ClosestOrAncestor = (is, ancestor, scope, a, isRoot) => {
if (is(scope, a)) {
return Optional.some(scope);
} else if (isFunction(isRoot) && isRoot(scope)) {
return Optional.none();
} else {
return ancestor(scope, a, isRoot);
}
};
const ancestor$3 = (scope, predicate, isRoot) => {
let element = scope.dom;
const stop = isFunction(isRoot) ? isRoot : never;
while (element.parentNode) {
@ -373,11 +436,27 @@
}
return Optional.none();
};
const closest = (scope, predicate, isRoot) => {
const closest$2 = (scope, predicate, isRoot) => {
const is = (s, test) => test(s);
return ClosestOrAncestor(is, ancestor, scope, predicate, isRoot);
return ClosestOrAncestor(is, ancestor$3, scope, predicate, isRoot);
};
const ancestor$2 = (scope, selector, isRoot) => ancestor$3(scope, e => is$1(e, selector), isRoot);
const closest$1 = (scope, selector, isRoot) => {
const is = (element, selector) => is$1(element, selector);
return ClosestOrAncestor(is, ancestor$2, scope, selector, isRoot);
};
const closest = target => closest$1(target, '[contenteditable]');
const isEditable = (element, assumeEditable = false) => {
if (inBody(element)) {
return element.dom.isContentEditable;
} else {
return closest(element).fold(constant(assumeEditable), editable => getRaw(editable) === 'true');
}
};
const getRaw = element => element.dom.contentEditable;
const before$1 = (marker, element) => {
const parent$1 = parent(marker);
parent$1.each(v => {
@ -395,6 +474,14 @@
before$1(v, element);
});
};
const prepend = (parent, element) => {
const firstChild$1 = firstChild(parent);
firstChild$1.fold(() => {
append$1(parent, element);
}, v => {
parent.dom.insertBefore(element.dom, v.dom);
});
};
const append$1 = (parent, element) => {
parent.dom.appendChild(element.dom);
};
@ -539,7 +626,7 @@
const getForcedRootBlock = option('forced_root_block');
const getForcedRootBlockAttrs = option('forced_root_block_attrs');
const createTextBlock = (editor, contentNode) => {
const createTextBlock = (editor, contentNode, attrs = {}) => {
const dom = editor.dom;
const blockElements = editor.schema.getBlockElements();
const fragment = dom.createFragment();
@ -548,7 +635,10 @@
let node;
let textBlock;
let hasContentNode = false;
textBlock = dom.create(blockName, blockAttrs);
textBlock = dom.create(blockName, {
...blockAttrs,
...attrs.style ? { style: attrs.style } : {}
});
if (!isBlock(contentNode.firstChild, blockElements)) {
fragment.appendChild(textBlock);
}
@ -713,9 +803,11 @@
const isListHost = (schema, node) => !isListNode(node) && !isListItemNode(node) && exists(listNames, listName => schema.isValidChild(node.nodeName, listName));
const getClosestListHost = (editor, elm) => {
const parentBlocks = editor.dom.getParents(elm, editor.dom.isBlock);
const parentBlock = find(parentBlocks, elm => isListHost(editor.schema, elm));
const isNotForcedRootBlock = elm => elm.nodeName.toLowerCase() !== getForcedRootBlock(editor);
const parentBlock = find(parentBlocks, elm => isNotForcedRootBlock(elm) && isListHost(editor.schema, elm));
return parentBlock.getOr(editor.getBody());
};
const isListInsideAnLiWithFirstAndLastNotListElement = list => parent(list).exists(parent => isListItemNode(parent.dom) && firstChild(parent).exists(firstChild => !isListNode(firstChild.dom)) && lastChild(parent).exists(lastChild => !isListNode(lastChild.dom)));
const findLastParentListNode = (editor, elm) => {
const parentLists = editor.dom.getParents(elm, 'ol,ul', getClosestListHost(editor, elm));
return last(parentLists);
@ -725,9 +817,14 @@
const subsequentLists = filter$1(editor.selection.getSelectedBlocks(), isOlUlNode);
return firstList.toArray().concat(subsequentLists);
};
const getParentLists = editor => {
const elm = editor.selection.getStart();
return editor.dom.getParents(elm, 'ol,ul', getClosestListHost(editor, elm));
};
const getSelectedListRoots = editor => {
const selectedLists = getSelectedLists(editor);
return getUniqueListRoots(editor, selectedLists);
const parentLists = getParentLists(editor);
return find(parentLists, p => isListInsideAnLiWithFirstAndLastNotListElement(SugarElement.fromDom(p))).fold(() => getUniqueListRoots(editor, selectedLists), l => [l]);
};
const getUniqueListRoots = (editor, lists) => {
const listRoots = map(lists, list => findLastParentListNode(editor, list).getOr(list));
@ -739,13 +836,12 @@
const isWithinNonEditable = (editor, element) => element !== null && !editor.dom.isEditable(element);
const selectionIsWithinNonEditableList = editor => {
const parentList = getParentList(editor);
return isWithinNonEditable(editor, parentList);
return isWithinNonEditable(editor, parentList) || !editor.selection.isEditable();
};
const isWithinNonEditableList = (editor, element) => {
const parentList = editor.dom.getParent(element, 'ol,ul,dl');
return isWithinNonEditable(editor, parentList);
return isWithinNonEditable(editor, parentList) || !editor.selection.isEditable();
};
const hasNonEditableBlocksSelected = editor => exists(editor.selection.getSelectedBlocks(), not(editor.dom.isEditable));
const setNodeChangeHandler = (editor, nodeChangeHandler) => {
const initialNode = editor.selection.getNode();
nodeChangeHandler({
@ -791,6 +887,32 @@
internalSet(dom, property, value);
};
const isList = el => is(el, 'OL,UL');
const isListItem = el => is(el, 'LI');
const hasFirstChildList = el => firstChild(el).exists(isList);
const hasLastChildList = el => lastChild(el).exists(isList);
const isEntryList = entry => 'listAttributes' in entry;
const isEntryComment = entry => 'isComment' in entry;
const isEntryFragment = entry => 'isFragment' in entry;
const isIndented = entry => entry.depth > 0;
const isSelected = entry => entry.isSelected;
const cloneItemContent = li => {
const children$1 = children(li);
const content = hasLastChildList(li) ? children$1.slice(0, -1) : children$1;
return map(content, deep);
};
const createEntry = (li, depth, isSelected) => parent(li).filter(isElement$1).map(list => ({
depth,
dirty: false,
isSelected,
content: cloneItemContent(li),
itemAttributes: clone$1(li),
listAttributes: clone$1(list),
listType: name(list),
isInPreviousLi: false
}));
const joinSegment = (parent, child) => {
append$1(parent.item, child.list);
};
@ -813,7 +935,7 @@
const createSegments = (scope, entry, size) => {
const segments = [];
for (let i = 0; i < size; i++) {
segments.push(createSegment(scope, entry.listType));
segments.push(createSegment(scope, isEntryList(entry) ? entry.listType : entry.parentListType));
}
return segments;
};
@ -822,8 +944,10 @@
set(segments[i].item, 'list-style-type', 'none');
}
last(segments).each(segment => {
setAll(segment.list, entry.listAttributes);
setAll(segment.item, entry.itemAttributes);
if (isEntryList(entry)) {
setAll(segment.list, entry.listAttributes);
setAll(segment.item, entry.itemAttributes);
}
append(segment.item, entry.content);
});
};
@ -846,9 +970,16 @@
const writeShallow = (scope, cast, entry) => {
const newCast = cast.slice(0, entry.depth);
last(newCast).each(segment => {
const item = createItem(scope, entry.itemAttributes, entry.content);
appendItem(segment, item);
normalizeSegment(segment, entry);
if (isEntryList(entry)) {
const item = createItem(scope, entry.itemAttributes, entry.content);
appendItem(segment, item);
normalizeSegment(segment, entry);
} else if (isEntryFragment(entry)) {
append(segment.item, entry.content);
} else {
const item = SugarElement.fromHtml(`<!--${ entry.content }-->`);
append$1(segment.list, item);
}
});
return newCast;
};
@ -860,33 +991,27 @@
return cast.concat(segments);
};
const composeList = (scope, entries) => {
const cast = foldl(entries, (cast, entry) => {
return entry.depth > cast.length ? writeDeep(scope, cast, entry) : writeShallow(scope, cast, entry);
let firstCommentEntryOpt = Optional.none();
const cast = foldl(entries, (cast, entry, i) => {
if (!isEntryComment(entry)) {
return entry.depth > cast.length ? writeDeep(scope, cast, entry) : writeShallow(scope, cast, entry);
} else {
if (i === 0) {
firstCommentEntryOpt = Optional.some(entry);
return cast;
}
return writeShallow(scope, cast, entry);
}
}, []);
firstCommentEntryOpt.each(firstCommentEntry => {
const item = SugarElement.fromHtml(`<!--${ firstCommentEntry.content }-->`);
head(cast).each(fistCast => {
prepend(fistCast.list, item);
});
});
return head(cast).map(segment => segment.list);
};
const isList = el => is(el, 'OL,UL');
const hasFirstChildList = el => firstChild(el).exists(isList);
const hasLastChildList = el => lastChild(el).exists(isList);
const isIndented = entry => entry.depth > 0;
const isSelected = entry => entry.isSelected;
const cloneItemContent = li => {
const children$1 = children(li);
const content = hasLastChildList(li) ? children$1.slice(0, -1) : children$1;
return map(content, deep);
};
const createEntry = (li, depth, isSelected) => parent(li).filter(isElement$1).map(list => ({
depth,
dirty: false,
isSelected,
content: cloneItemContent(li),
itemAttributes: clone$1(li),
listAttributes: clone$1(list),
listType: name(list)
}));
const indentEntry = (indentation, entry) => {
switch (indentation) {
case 'Indent':
@ -902,8 +1027,10 @@
};
const cloneListProperties = (target, source) => {
target.listType = source.listType;
target.listAttributes = { ...source.listAttributes };
if (isEntryList(target) && isEntryList(source)) {
target.listType = source.listType;
target.listAttributes = { ...source.listAttributes };
}
};
const cleanListProperties = entry => {
entry.listAttributes = filter(entry.listAttributes, (_value, key) => key !== 'start');
@ -917,7 +1044,7 @@
const normalizeEntries = entries => {
each$1(entries, (entry, i) => {
closestSiblingEntry(entries, i).fold(() => {
if (entry.dirty) {
if (entry.dirty && isEntryList(entry)) {
cleanListProperties(entry);
}
}, matchingEntry => cloneListProperties(entry, matchingEntry));
@ -939,7 +1066,17 @@
};
};
const parseItem = (depth, itemSelection, selectionState, item) => firstChild(item).filter(isList).fold(() => {
const parseSingleItem = (depth, itemSelection, selectionState, item) => {
var _a;
if (isComment(item)) {
return [{
depth: depth + 1,
content: (_a = item.dom.nodeValue) !== null && _a !== void 0 ? _a : '',
dirty: false,
isSelected: false,
isComment: true
}];
}
itemSelection.each(selection => {
if (eq(selection.start, item)) {
selectionState.set(true);
@ -953,7 +1090,29 @@
});
const childListEntries = lastChild(item).filter(isList).map(list => parseList(depth, itemSelection, selectionState, list)).getOr([]);
return currentItemEntry.toArray().concat(childListEntries);
}, list => parseList(depth, itemSelection, selectionState, list));
};
const parseItem = (depth, itemSelection, selectionState, item) => firstChild(item).filter(isList).fold(() => parseSingleItem(depth, itemSelection, selectionState, item), list => {
const parsedSiblings = foldl(children(item), (acc, liChild, i) => {
if (i === 0) {
return acc;
} else {
if (isListItem(liChild)) {
return acc.concat(parseSingleItem(depth, itemSelection, selectionState, liChild));
} else {
const fragment = {
isFragment: true,
depth,
content: [liChild],
isSelected: false,
dirty: false,
parentListType: name(list)
};
return acc.concat(fragment);
}
}
}, []);
return parseList(depth, itemSelection, selectionState, list).concat(parsedSiblings);
});
const parseList = (depth, itemSelection, selectionState, list) => bind(children(list), element => {
const parser = isList(element) ? parseList : parseItem;
const newDepth = depth + 1;
@ -971,8 +1130,9 @@
const outdentedComposer = (editor, entries) => {
const normalizedEntries = normalizeEntries(entries);
return map(normalizedEntries, entry => {
const content = fromElements(entry.content);
return SugarElement.fromDom(createTextBlock(editor, content.dom));
const content = !isEntryComment(entry) ? fromElements(entry.content) : fromElements([SugarElement.fromHtml(`<!--${ entry.content }-->`)]);
const listItemAttrs = isEntryList(entry) ? entry.itemAttributes : {};
return SugarElement.fromDom(createTextBlock(editor, content.dom, listItemAttrs));
});
};
const indentedComposer = (editor, entries) => {
@ -1029,6 +1189,10 @@
const zeroWidth = '\uFEFF';
const isZwsp = char => char === zeroWidth;
const ancestor$1 = (scope, predicate, isRoot) => ancestor$3(scope, predicate, isRoot).isSome();
const ancestor = (element, target) => ancestor$1(element, curry(eq, target));
var global$1 = tinymce.util.Tools.resolve('tinymce.dom.BookmarkManager');
const DOM$1 = global$3.DOM;
@ -1148,9 +1312,15 @@
if (!start && isBr(container.nextSibling)) {
container = container.nextSibling;
}
const findBlockAncestor = node => {
while (!editor.dom.isBlock(node) && node.parentNode && root !== node) {
node = node.parentNode;
}
return node;
};
const findBetterContainer = (container, forward) => {
var _a;
const walker = new global$5(container, root);
const walker = new global$5(container, findBlockAncestor(container));
const dir = forward ? 'next' : 'prev';
let node;
while (node = walker[dir]()) {
@ -1245,10 +1415,19 @@
detailStyle = detailStyle === null ? '' : detailStyle;
return sibStyle === detailStyle;
};
const getRootSearchStart = (editor, range) => {
const start = editor.selection.getStart(true);
const startPoint = getEndPointNode(editor, range, true, editor.getBody());
if (ancestor(SugarElement.fromDom(startPoint), SugarElement.fromDom(range.commonAncestorContainer))) {
return range.commonAncestorContainer;
} else {
return start;
}
};
const applyList = (editor, listName, detail) => {
const rng = editor.selection.getRng();
let listItemName = 'LI';
const root = getClosestListHost(editor, editor.selection.getStart(true));
const root = getClosestListHost(editor, getRootSearchStart(editor, rng));
const dom = editor.dom;
if (dom.getContentEditable(editor.selection.getNode()) === 'false') {
return;
@ -1258,7 +1437,7 @@
listItemName = 'DT';
}
const bookmark = createBookmark(rng);
const selectedTextBlocks = getSelectedTextBlocks(editor, rng, root);
const selectedTextBlocks = filter$1(getSelectedTextBlocks(editor, rng, root), editor.dom.isEditable);
global$2.each(selectedTextBlocks, block => {
let listBlock;
const sibling = block.previousSibling;
@ -1335,9 +1514,27 @@
fireListEvent(editor, listToggleActionFromListName(listName), list);
}
};
const updateCustomList = (editor, list, listName, detail) => {
list.classList.forEach((cls, _, classList) => {
if (cls.startsWith('tox-')) {
classList.remove(cls);
if (classList.length === 0) {
list.removeAttribute('class');
}
}
});
if (list.nodeName !== listName) {
const newList = editor.dom.rename(list, listName);
updateListWithDetails(editor.dom, newList, detail);
fireListEvent(editor, listToggleActionFromListName(listName), newList);
} else {
updateListWithDetails(editor.dom, list, detail);
fireListEvent(editor, listToggleActionFromListName(listName), list);
}
};
const toggleMultipleLists = (editor, parentList, lists, listName, detail) => {
const parentIsList = isListNode(parentList);
if (parentIsList && parentList.nodeName === listName && !hasListStyleDetail(detail)) {
if (parentIsList && parentList.nodeName === listName && !hasListStyleDetail(detail) && !isCustomList(parentList)) {
flattenListSelection(editor);
} else {
applyList(editor, listName, detail);
@ -1346,8 +1543,9 @@
parentList,
...lists
] : lists;
const updateFunction = parentIsList && isCustomList(parentList) ? updateCustomList : updateList$1;
global$2.each(allLists, elm => {
updateList$1(editor, elm, listName, detail);
updateFunction(editor, elm, listName, detail);
});
editor.selection.setRng(resolveBookmark(bookmark));
}
@ -1364,6 +1562,16 @@
flattenListSelection(editor);
} else {
const bookmark = createBookmark(editor.selection.getRng());
if (isCustomList(parentList)) {
parentList.classList.forEach((cls, _, classList) => {
if (cls.startsWith('tox-')) {
classList.remove(cls);
if (classList.length === 0) {
parentList.removeAttribute('class');
}
}
});
}
updateListWithDetails(editor.dom, parentList, detail);
const newList = editor.dom.rename(parentList, listName);
mergeWithAdjacentLists(editor.dom, newList);
@ -1378,7 +1586,7 @@
};
const toggleList = (editor, listName, _detail) => {
const parentList = getParentList(editor);
if (isWithinNonEditableList(editor, parentList) || hasNonEditableBlocksSelected(editor)) {
if (isWithinNonEditableList(editor, parentList)) {
return;
}
const selectedSubLists = getSelectedSubLists(editor);
@ -1452,8 +1660,9 @@
const childNodes = elm.childNodes;
return childNodes.length === 1 && !isListNode(childNodes[0]) && dom.isBlock(childNodes[0]);
};
const isUnwrappable = node => Optional.from(node).map(SugarElement.fromDom).filter(isHTMLElement).exists(el => isEditable(el) && !contains$1(['details'], name(el)));
const unwrapSingleBlockChild = (dom, elm) => {
if (hasOnlyOneBlockChild(dom, elm)) {
if (hasOnlyOneBlockChild(dom, elm) && isUnwrappable(elm.firstChild)) {
dom.remove(elm.firstChild, true);
}
};
@ -1534,7 +1743,8 @@
}
const rng = normalizeRange(selection.getRng());
const otherLi = dom.getParent(findNextCaretContainer(editor, rng, isForward, root), 'LI', root);
if (otherLi && otherLi !== li) {
const willMergeParentIntoChild = otherLi && (isForward ? dom.isChildOf(li, otherLi) : dom.isChildOf(otherLi, li));
if (otherLi && otherLi !== li && !willMergeParentIntoChild) {
editor.undoManager.transact(() => {
if (isForward) {
mergeForward(editor, rng, otherLi, li);
@ -1547,6 +1757,18 @@
}
});
return true;
} else if (willMergeParentIntoChild && !isForward && otherLi !== li) {
editor.undoManager.transact(() => {
if (rng.commonAncestorContainer.parentElement) {
const bookmark = createBookmark(rng);
const oldParentElRef = rng.commonAncestorContainer.parentElement;
moveChildren(dom, rng.commonAncestorContainer.parentElement, otherLi);
oldParentElRef.remove();
const resolvedBookmark = resolveBookmark(bookmark);
editor.selection.setRng(resolvedBookmark);
}
});
return true;
} else if (!otherLi) {
if (!isForward && rng.startOffset === 0 && rng.endOffset === 0) {
editor.undoManager.transact(() => {
@ -1570,7 +1792,7 @@
const selectionStartElm = editor.selection.getStart();
const root = getClosestEditingHost(editor, selectionStartElm);
const block = dom.getParent(selectionStartElm, dom.isBlock, root);
if (block && dom.isEmpty(block)) {
if (block && dom.isEmpty(block, undefined, { checkRootAsContent: true })) {
const rng = normalizeRange(editor.selection.getRng());
const otherLi = dom.getParent(findNextCaretContainer(editor, rng, isForward, root), 'LI', root);
if (otherLi) {
@ -1580,14 +1802,15 @@
'caption'
], name(element));
const findRoot = node => node.dom === root;
const otherLiCell = closest(SugarElement.fromDom(otherLi), findValidElement, findRoot);
const caretCell = closest(SugarElement.fromDom(rng.startContainer), findValidElement, findRoot);
const otherLiCell = closest$2(SugarElement.fromDom(otherLi), findValidElement, findRoot);
const caretCell = closest$2(SugarElement.fromDom(rng.startContainer), findValidElement, findRoot);
if (!equals(otherLiCell, caretCell, eq)) {
return false;
}
editor.undoManager.transact(() => {
const parentNode = otherLi.parentNode;
removeBlock(dom, block, root);
mergeWithAdjacentLists(dom, otherLi.parentNode);
mergeWithAdjacentLists(dom, parentNode);
editor.selection.select(otherLi, true);
editor.selection.collapse(isForward);
});
@ -1608,7 +1831,14 @@
const backspaceDeleteRange = editor => {
if (hasListSelection(editor)) {
editor.undoManager.transact(() => {
let shouldFireInput = true;
const inputHandler = () => shouldFireInput = false;
editor.on('input', inputHandler);
editor.execCommand('Delete');
editor.off('input', inputHandler);
if (shouldFireInput) {
editor.dispatch('input');
}
normalizeLists(editor.dom, editor.getBody());
});
return true;
@ -1883,8 +2113,9 @@
const setupToggleButtonHandler = (editor, listName) => api => {
const toggleButtonHandler = e => {
api.setActive(inList(e.parents, listName));
api.setEnabled(!isWithinNonEditableList(editor, e.element));
api.setEnabled(!isWithinNonEditableList(editor, e.element) && editor.selection.isEditable());
};
api.setEnabled(editor.selection.isEditable());
return setNodeChangeHandler(editor, toggleButtonHandler);
};
const register$1 = editor => {

File diff suppressed because one or more lines are too long

View File

@ -1,5 +1,5 @@
/**
* TinyMCE version 6.4.1 (2023-03-29)
* TinyMCE version 7.5.1 (TBD)
*/
(function () {
@ -255,12 +255,6 @@
}
data = global$5.extend(node.attributes.map, data);
}
if (name === 'script') {
data = {
type: 'script',
source: node.attr('src')
};
}
if (name === 'source') {
if (!data.source) {
data.source = node.attr('src');
@ -425,6 +419,22 @@
url: 'www.youtube.com/embed/$1',
allowFullscreen: true
},
{
regex: /vimeo\.com\/([0-9]+)\?h=(\w+)/,
type: 'iframe',
w: 425,
h: 350,
url: 'player.vimeo.com/video/$1?h=$2&title=0&byline=0&portrait=0&color=8dc7dc',
allowFullscreen: true
},
{
regex: /vimeo\.com\/(.*)\/([0-9]+)\?h=(\w+)/,
type: 'iframe',
w: 425,
h: 350,
url: 'player.vimeo.com/video/$2?h=$3&title=0&amp;byline=0',
allowFullscreen: true
},
{
regex: /vimeo\.com\/([0-9]+)/,
type: 'iframe',
@ -524,9 +534,6 @@
return '<video width="' + data.width + '" height="' + data.height + '"' + (data.poster ? ' poster="' + data.poster + '"' : '') + ' controls="controls">\n' + '<source src="' + data.source + '"' + (data.sourcemime ? ' type="' + data.sourcemime + '"' : '') + ' />\n' + (data.altsource ? '<source src="' + data.altsource + '"' + (data.altsourcemime ? ' type="' + data.altsourcemime + '"' : '') + ' />\n' : '') + '</video>';
}
};
const getScriptHtml = data => {
return '<script src="' + data.source + '"></script>';
};
const dataToHtml = (editor, dataIn) => {
var _a;
const data = global$5.extend({}, dataIn);
@ -572,8 +579,6 @@
return getFlashHtml(data);
} else if (data.sourcemime.indexOf('audio') !== -1) {
return getAudioHtml(data, audioTemplateCallback);
} else if (data.type === 'script') {
return getScriptHtml(data);
} else {
return getVideoHtml(data, videoTemplateCallback);
}
@ -582,6 +587,12 @@
const isMediaElement = element => element.hasAttribute('data-mce-object') || element.hasAttribute('data-ephox-embed-iri');
const setup$2 = editor => {
editor.on('mousedown', e => {
const previewObj = editor.dom.getParent(e.target, '.mce-preview-object');
if (previewObj && editor.dom.getAttrib(previewObj, 'data-mce-selected') === '2') {
e.stopImmediatePropagation();
}
});
editor.on('click keyup touchend', () => {
const selectedNode = editor.selection.getNode();
if (selectedNode && editor.dom.hasClass(selectedNode, 'mce-preview-object')) {
@ -590,12 +601,6 @@
}
}
});
editor.on('ObjectSelected', e => {
const objectType = e.target.getAttribute('data-mce-object');
if (objectType === 'script') {
e.preventDefault();
}
});
editor.on('ObjectResized', e => {
const target = e.target;
if (target.getAttribute('data-mce-object')) {
@ -626,7 +631,7 @@
if (cache[data.source]) {
wrappedResolve(cache[data.source]);
} else {
handler({ url: data.source }, wrappedResolve, rej);
handler({ url: data.source }).then(wrappedResolve).catch(rej);
}
});
};
@ -702,9 +707,23 @@
const getEditorData = editor => {
const element = editor.selection.getNode();
const snippet = isMediaElement(element) ? editor.serializer.serialize(element, { selection: true }) : '';
const data = htmlToData(snippet, editor.schema);
const getDimensionsOfElement = () => {
if (isEmbedIframe(data.source, data.type)) {
const rect = editor.dom.getRect(element);
return {
width: rect.w.toString().replace(/px$/, ''),
height: rect.h.toString().replace(/px$/, '')
};
} else {
return {};
}
};
const dimensions = getDimensionsOfElement();
return {
embed: snippet,
...htmlToData(snippet, editor.schema)
...data,
...dimensions
};
};
const addEmbedHtml = (api, editor) => response => {
@ -736,9 +755,17 @@
selectPlaceholder(editor, beforeObjects);
editor.nodeChanged();
};
const isEmbedIframe = (url, mediaDataType) => isNonNullable(mediaDataType) && mediaDataType === 'ephox-embed-iri' && isNonNullable(matchPattern(url));
const shouldInsertAsNewIframe = (prevData, newData) => {
const hasDimensionsChanged = (prevData, newData) => prevData.width !== newData.width || prevData.height !== newData.height;
return hasDimensionsChanged(prevData, newData) && isEmbedIframe(newData.source, prevData.type);
};
const submitForm = (prevData, newData, editor) => {
var _a;
newData.embed = updateHtml((_a = newData.embed) !== null && _a !== void 0 ? _a : '', newData, false, editor.schema);
newData.embed = shouldInsertAsNewIframe(prevData, newData) && hasDimensions(editor) ? dataToHtml(editor, {
...newData,
embed: ''
}) : updateHtml((_a = newData.embed) !== null && _a !== void 0 ? _a : '', newData, false, editor.schema);
if (newData.embed && (prevData.source === newData.source || isCached(newData.source))) {
handleInsert(editor, newData.embed);
} else {
@ -767,8 +794,12 @@
const dataFromEmbed = htmlToData((_a = data.embed) !== null && _a !== void 0 ? _a : '', editor.schema);
api.setData(wrap(dataFromEmbed));
};
const handleUpdate = (api, sourceInput) => {
const data = unwrap(api.getData(), sourceInput);
const handleUpdate = (api, sourceInput, prevData) => {
const dialogData = unwrap(api.getData(), sourceInput);
const data = shouldInsertAsNewIframe(prevData, dialogData) && hasDimensions(editor) ? {
...dialogData,
embed: ''
} : dialogData;
const embed = dataToHtml(editor, data);
api.setData(wrap({
...data,
@ -779,7 +810,8 @@
name: 'source',
type: 'urlinput',
filetype: 'media',
label: 'Source'
label: 'Source',
picker_text: 'Browse files'
}];
const sizeInput = !hasDimensions(editor) ? [] : [{
type: 'sizeinput',
@ -870,7 +902,7 @@
case 'dimensions':
case 'altsource':
case 'poster':
handleUpdate(api, detail.name);
handleUpdate(api, detail.name, currentData.get());
break;
}
currentData.set(unwrap(api.getData()));
@ -965,7 +997,9 @@
if (name === 'iframe') {
previewNode.attr({
allowfullscreen: node.attr('allowfullscreen'),
frameborder: '0'
frameborder: '0',
sandbox: node.attr('sandbox'),
referrerpolicy: node.attr('referrerpolicy')
});
} else {
const attrs = [
@ -1076,7 +1110,7 @@
});
}
});
parser.addNodeFilter('iframe,video,audio,object,embed,script', placeHolderConverter(editor));
parser.addNodeFilter('iframe,video,audio,object,embed', placeHolderConverter(editor));
serializer.addAttributeFilter('data-mce-object', (nodes, name) => {
var _a;
let i = nodes.length;
@ -1087,7 +1121,7 @@
}
const realElmName = node.attr(name);
const realElm = new global$2(realElmName, 1);
if (realElmName !== 'audio' && realElmName !== 'script') {
if (realElmName !== 'audio') {
const className = node.attr('class');
if (className && className.indexOf('mce-preview-object') !== -1 && node.firstChild) {
realElm.attr({
@ -1110,9 +1144,6 @@
realElm.attr(attrName.substr(11), attribs[ai].value);
}
}
if (realElmName === 'script') {
realElm.attr('type', 'text/javascript');
}
const innerHtml = node.attr('data-mce-html');
if (innerHtml) {
const fragment = parseAndSanitize(editor, realElmName, unescape(innerHtml));
@ -1141,6 +1172,16 @@
});
};
const onSetupEditable = editor => api => {
const nodeChanged = () => {
api.setEnabled(editor.selection.isEditable());
};
editor.on('NodeChange', nodeChanged);
nodeChanged();
return () => {
editor.off('NodeChange', nodeChanged);
};
};
const register = editor => {
const onAction = () => editor.execCommand('mceMedia');
editor.ui.registry.addToggleButton('media', {
@ -1150,13 +1191,19 @@
onSetup: buttonApi => {
const selection = editor.selection;
buttonApi.setActive(isMediaElement(selection.getNode()));
return selection.selectorChangedWithUnbind('img[data-mce-object],span[data-mce-object],div[data-ephox-embed-iri]', buttonApi.setActive).unbind;
const unbindSelectorChanged = selection.selectorChangedWithUnbind('img[data-mce-object],span[data-mce-object],div[data-ephox-embed-iri]', buttonApi.setActive).unbind;
const unbindEditable = onSetupEditable(editor)(buttonApi);
return () => {
unbindSelectorChanged();
unbindEditable();
};
}
});
editor.ui.registry.addMenuItem('media', {
icon: 'embed',
text: 'Media...',
onAction
onAction,
onSetup: onSetupEditable(editor)
});
};

File diff suppressed because one or more lines are too long

View File

@ -1,5 +1,5 @@
/**
* TinyMCE version 6.4.1 (2023-03-29)
* TinyMCE version 7.5.1 (TBD)
*/
(function () {
@ -83,17 +83,29 @@
}
};
const onSetupEditable = editor => api => {
const nodeChanged = () => {
api.setEnabled(editor.selection.isEditable());
};
editor.on('NodeChange', nodeChanged);
nodeChanged();
return () => {
editor.off('NodeChange', nodeChanged);
};
};
const register = editor => {
const onAction = () => editor.execCommand('mceNonBreaking');
editor.ui.registry.addButton('nonbreaking', {
icon: 'non-breaking',
tooltip: 'Nonbreaking space',
onAction
onAction,
onSetup: onSetupEditable(editor)
});
editor.ui.registry.addMenuItem('nonbreaking', {
icon: 'non-breaking',
text: 'Nonbreaking space',
onAction
onAction,
onSetup: onSetupEditable(editor)
});
};

View File

@ -1,4 +1,4 @@
/**
* TinyMCE version 6.4.1 (2023-03-29)
* TinyMCE version 7.5.1 (TBD)
*/
!function(){"use strict";var n=tinymce.util.Tools.resolve("tinymce.PluginManager");const e=n=>e=>typeof e===n,a=e("boolean"),o=e("number"),t=n=>e=>e.options.get(n),i=t("nonbreaking_force_tab"),r=t("nonbreaking_wrap"),s=(n,e)=>{let a="";for(let o=0;o<e;o++)a+=n;return a},c=(n,e)=>{const a=r(n)||n.plugins.visualchars?`<span class="${(n=>!!n.plugins.visualchars&&n.plugins.visualchars.isEnabled())(n)?"mce-nbsp-wrap mce-nbsp":"mce-nbsp-wrap"}" contenteditable="false">${s("&nbsp;",e)}</span>`:s("&nbsp;",e);n.undoManager.transact((()=>n.insertContent(a)))};var l=tinymce.util.Tools.resolve("tinymce.util.VK");n.add("nonbreaking",(n=>{(n=>{const e=n.options.register;e("nonbreaking_force_tab",{processor:n=>a(n)?{value:n?3:0,valid:!0}:o(n)?{value:n,valid:!0}:{valid:!1,message:"Must be a boolean or number."},default:!1}),e("nonbreaking_wrap",{processor:"boolean",default:!0})})(n),(n=>{n.addCommand("mceNonBreaking",(()=>{c(n,1)}))})(n),(n=>{const e=()=>n.execCommand("mceNonBreaking");n.ui.registry.addButton("nonbreaking",{icon:"non-breaking",tooltip:"Nonbreaking space",onAction:e}),n.ui.registry.addMenuItem("nonbreaking",{icon:"non-breaking",text:"Nonbreaking space",onAction:e})})(n),(n=>{const e=i(n);e>0&&n.on("keydown",(a=>{if(a.keyCode===l.TAB&&!a.isDefaultPrevented()){if(a.shiftKey)return;a.preventDefault(),a.stopImmediatePropagation(),c(n,e)}}))})(n)}))}();
!function(){"use strict";var n=tinymce.util.Tools.resolve("tinymce.PluginManager");const e=n=>e=>typeof e===n,o=e("boolean"),a=e("number"),t=n=>e=>e.options.get(n),i=t("nonbreaking_force_tab"),s=t("nonbreaking_wrap"),r=(n,e)=>{let o="";for(let a=0;a<e;a++)o+=n;return o},c=(n,e)=>{const o=s(n)||n.plugins.visualchars?`<span class="${(n=>!!n.plugins.visualchars&&n.plugins.visualchars.isEnabled())(n)?"mce-nbsp-wrap mce-nbsp":"mce-nbsp-wrap"}" contenteditable="false">${r("&nbsp;",e)}</span>`:r("&nbsp;",e);n.undoManager.transact((()=>n.insertContent(o)))};var l=tinymce.util.Tools.resolve("tinymce.util.VK");const u=n=>e=>{const o=()=>{e.setEnabled(n.selection.isEditable())};return n.on("NodeChange",o),o(),()=>{n.off("NodeChange",o)}};n.add("nonbreaking",(n=>{(n=>{const e=n.options.register;e("nonbreaking_force_tab",{processor:n=>o(n)?{value:n?3:0,valid:!0}:a(n)?{value:n,valid:!0}:{valid:!1,message:"Must be a boolean or number."},default:!1}),e("nonbreaking_wrap",{processor:"boolean",default:!0})})(n),(n=>{n.addCommand("mceNonBreaking",(()=>{c(n,1)}))})(n),(n=>{const e=()=>n.execCommand("mceNonBreaking");n.ui.registry.addButton("nonbreaking",{icon:"non-breaking",tooltip:"Nonbreaking space",onAction:e,onSetup:u(n)}),n.ui.registry.addMenuItem("nonbreaking",{icon:"non-breaking",text:"Nonbreaking space",onAction:e,onSetup:u(n)})})(n),(n=>{const e=i(n);e>0&&n.on("keydown",(o=>{if(o.keyCode===l.TAB&&!o.isDefaultPrevented()){if(o.shiftKey)return;o.preventDefault(),o.stopImmediatePropagation(),c(n,e)}}))})(n)}))}();

View File

@ -1,5 +1,5 @@
/**
* TinyMCE version 6.4.1 (2023-03-29)
* TinyMCE version 7.5.1 (TBD)
*/
(function () {
@ -76,17 +76,29 @@
});
};
const onSetupEditable = editor => api => {
const nodeChanged = () => {
api.setEnabled(editor.selection.isEditable());
};
editor.on('NodeChange', nodeChanged);
nodeChanged();
return () => {
editor.off('NodeChange', nodeChanged);
};
};
const register = editor => {
const onAction = () => editor.execCommand('mcePageBreak');
editor.ui.registry.addButton('pagebreak', {
icon: 'page-break',
tooltip: 'Page break',
onAction
onAction,
onSetup: onSetupEditable(editor)
});
editor.ui.registry.addMenuItem('pagebreak', {
text: 'Page break',
icon: 'page-break',
onAction
onAction,
onSetup: onSetupEditable(editor)
});
};

View File

@ -1,4 +1,4 @@
/**
* TinyMCE version 6.4.1 (2023-03-29)
* TinyMCE version 7.5.1 (TBD)
*/
!function(){"use strict";var e=tinymce.util.Tools.resolve("tinymce.PluginManager"),a=tinymce.util.Tools.resolve("tinymce.Env");const t=e=>a=>a.options.get(e),r=t("pagebreak_separator"),n=t("pagebreak_split_block"),o="mce-pagebreak",s=e=>{const t=`<img src="${a.transparentSrc}" class="mce-pagebreak" data-mce-resize="false" data-mce-placeholder />`;return e?`<p>${t}</p>`:t};e.add("pagebreak",(e=>{(e=>{const a=e.options.register;a("pagebreak_separator",{processor:"string",default:"\x3c!-- pagebreak --\x3e"}),a("pagebreak_split_block",{processor:"boolean",default:!1})})(e),(e=>{e.addCommand("mcePageBreak",(()=>{e.insertContent(s(n(e)))}))})(e),(e=>{const a=()=>e.execCommand("mcePageBreak");e.ui.registry.addButton("pagebreak",{icon:"page-break",tooltip:"Page break",onAction:a}),e.ui.registry.addMenuItem("pagebreak",{text:"Page break",icon:"page-break",onAction:a})})(e),(e=>{const a=r(e),t=()=>n(e),c=new RegExp(a.replace(/[\?\.\*\[\]\(\)\{\}\+\^\$\:]/g,(e=>"\\"+e)),"gi");e.on("BeforeSetContent",(e=>{e.content=e.content.replace(c,s(t()))})),e.on("PreInit",(()=>{e.serializer.addNodeFilter("img",(r=>{let n,s,c=r.length;for(;c--;)if(n=r[c],s=n.attr("class"),s&&-1!==s.indexOf(o)){const r=n.parent;if(r&&e.schema.getBlockElements()[r.name]&&t()){r.type=3,r.value=a,r.raw=!0,n.remove();continue}n.type=3,n.value=a,n.raw=!0}}))}))})(e),(e=>{e.on("ResolveName",(a=>{"IMG"===a.target.nodeName&&e.dom.hasClass(a.target,o)&&(a.name="pagebreak")}))})(e)}))}();
!function(){"use strict";var e=tinymce.util.Tools.resolve("tinymce.PluginManager"),a=tinymce.util.Tools.resolve("tinymce.Env");const t=e=>a=>a.options.get(e),n=t("pagebreak_separator"),o=t("pagebreak_split_block"),r="mce-pagebreak",s=e=>{const t=`<img src="${a.transparentSrc}" class="${r}" data-mce-resize="false" data-mce-placeholder />`;return e?`<p>${t}</p>`:t},c=e=>a=>{const t=()=>{a.setEnabled(e.selection.isEditable())};return e.on("NodeChange",t),t(),()=>{e.off("NodeChange",t)}};e.add("pagebreak",(e=>{(e=>{const a=e.options.register;a("pagebreak_separator",{processor:"string",default:"\x3c!-- pagebreak --\x3e"}),a("pagebreak_split_block",{processor:"boolean",default:!1})})(e),(e=>{e.addCommand("mcePageBreak",(()=>{e.insertContent(s(o(e)))}))})(e),(e=>{const a=()=>e.execCommand("mcePageBreak");e.ui.registry.addButton("pagebreak",{icon:"page-break",tooltip:"Page break",onAction:a,onSetup:c(e)}),e.ui.registry.addMenuItem("pagebreak",{text:"Page break",icon:"page-break",onAction:a,onSetup:c(e)})})(e),(e=>{const a=n(e),t=()=>o(e),c=new RegExp(a.replace(/[\?\.\*\[\]\(\)\{\}\+\^\$\:]/g,(e=>"\\"+e)),"gi");e.on("BeforeSetContent",(e=>{e.content=e.content.replace(c,s(t()))})),e.on("PreInit",(()=>{e.serializer.addNodeFilter("img",(n=>{let o,s,c=n.length;for(;c--;)if(o=n[c],s=o.attr("class"),s&&-1!==s.indexOf(r)){const n=o.parent;if(n&&e.schema.getBlockElements()[n.name]&&t()){n.type=3,n.value=a,n.raw=!0,o.remove();continue}o.type=3,o.value=a,o.raw=!0}}))}))})(e),(e=>{e.on("ResolveName",(a=>{"IMG"===a.target.nodeName&&e.dom.hasClass(a.target,r)&&(a.name="pagebreak")}))})(e)}))}();

View File

@ -1,5 +1,5 @@
/**
* TinyMCE version 6.4.1 (2023-03-29)
* TinyMCE version 7.5.1 (TBD)
*/
(function () {
@ -76,12 +76,14 @@
editor.ui.registry.addButton('preview', {
icon: 'preview',
tooltip: 'Preview',
onAction
onAction,
context: 'any'
});
editor.ui.registry.addMenuItem('preview', {
icon: 'preview',
text: 'Preview',
onAction
onAction,
context: 'any'
});
};

View File

@ -1,4 +1,4 @@
/**
* TinyMCE version 6.4.1 (2023-03-29)
* TinyMCE version 7.5.1 (TBD)
*/
!function(){"use strict";var e=tinymce.util.Tools.resolve("tinymce.PluginManager"),t=tinymce.util.Tools.resolve("tinymce.Env"),o=tinymce.util.Tools.resolve("tinymce.util.Tools");const n=e=>t=>t.options.get(e),i=n("content_style"),s=n("content_css_cors"),c=n("body_class"),r=n("body_id");e.add("preview",(e=>{(e=>{e.addCommand("mcePreview",(()=>{(e=>{const n=(e=>{var n;let l="";const a=e.dom.encode,d=null!==(n=i(e))&&void 0!==n?n:"";l+='<base href="'+a(e.documentBaseURI.getURI())+'">';const m=s(e)?' crossorigin="anonymous"':"";o.each(e.contentCSS,(t=>{l+='<link type="text/css" rel="stylesheet" href="'+a(e.documentBaseURI.toAbsolute(t))+'"'+m+">"})),d&&(l+='<style type="text/css">'+d+"</style>");const y=r(e),u=c(e),v='<script>document.addEventListener && document.addEventListener("click", function(e) {for (var elm = e.target; elm; elm = elm.parentNode) {if (elm.nodeName === "A" && !('+(t.os.isMacOS()||t.os.isiOS()?"e.metaKey":"e.ctrlKey && !e.altKey")+")) {e.preventDefault();}}}, false);<\/script> ",p=e.getBody().dir,w=p?' dir="'+a(p)+'"':"";return"<!DOCTYPE html><html><head>"+l+'</head><body id="'+a(y)+'" class="mce-content-body '+a(u)+'"'+w+">"+e.getContent()+v+"</body></html>"})(e);e.windowManager.open({title:"Preview",size:"large",body:{type:"panel",items:[{name:"preview",type:"iframe",sandboxed:!0,transparent:!1}]},buttons:[{type:"cancel",name:"close",text:"Close",primary:!0}],initialData:{preview:n}}).focus("close")})(e)}))})(e),(e=>{const t=()=>e.execCommand("mcePreview");e.ui.registry.addButton("preview",{icon:"preview",tooltip:"Preview",onAction:t}),e.ui.registry.addMenuItem("preview",{icon:"preview",text:"Preview",onAction:t})})(e)}))}();
!function(){"use strict";var e=tinymce.util.Tools.resolve("tinymce.PluginManager"),t=tinymce.util.Tools.resolve("tinymce.Env"),n=tinymce.util.Tools.resolve("tinymce.util.Tools");const o=e=>t=>t.options.get(e),i=o("content_style"),s=o("content_css_cors"),c=o("body_class"),r=o("body_id");e.add("preview",(e=>{(e=>{e.addCommand("mcePreview",(()=>{(e=>{const o=(e=>{var o;let a="";const l=e.dom.encode,d=null!==(o=i(e))&&void 0!==o?o:"";a+='<base href="'+l(e.documentBaseURI.getURI())+'">';const m=s(e)?' crossorigin="anonymous"':"";n.each(e.contentCSS,(t=>{a+='<link type="text/css" rel="stylesheet" href="'+l(e.documentBaseURI.toAbsolute(t))+'"'+m+">"})),d&&(a+='<style type="text/css">'+d+"</style>");const y=r(e),u=c(e),v='<script>document.addEventListener && document.addEventListener("click", function(e) {for (var elm = e.target; elm; elm = elm.parentNode) {if (elm.nodeName === "A" && !('+(t.os.isMacOS()||t.os.isiOS()?"e.metaKey":"e.ctrlKey && !e.altKey")+")) {e.preventDefault();}}}, false);<\/script> ",p=e.getBody().dir,w=p?' dir="'+l(p)+'"':"";return"<!DOCTYPE html><html><head>"+a+'</head><body id="'+l(y)+'" class="mce-content-body '+l(u)+'"'+w+">"+e.getContent()+v+"</body></html>"})(e);e.windowManager.open({title:"Preview",size:"large",body:{type:"panel",items:[{name:"preview",type:"iframe",sandboxed:!0,transparent:!1}]},buttons:[{type:"cancel",name:"close",text:"Close",primary:!0}],initialData:{preview:o}}).focus("close")})(e)}))})(e),(e=>{const t=()=>e.execCommand("mcePreview");e.ui.registry.addButton("preview",{icon:"preview",tooltip:"Preview",onAction:t,context:"any"}),e.ui.registry.addMenuItem("preview",{icon:"preview",text:"Preview",onAction:t,context:"any"})})(e)}))}();

View File

@ -1,11 +1,11 @@
/**
* TinyMCE version 6.4.1 (2023-03-29)
* TinyMCE version 7.5.1 (TBD)
*/
(function () {
'use strict';
var global$2 = tinymce.util.Tools.resolve('tinymce.PluginManager');
var global$1 = tinymce.util.Tools.resolve('tinymce.PluginManager');
const hasProto = (v, constructor, predicate) => {
var _a;
@ -79,13 +79,15 @@
const getInsertToolbarItems = option('quickbars_insert_toolbar');
const getImageToolbarItems = option('quickbars_image_toolbar');
const random = () => window.crypto.getRandomValues(new Uint32Array(1))[0] / 4294967295;
let unique = 0;
const generate = prefix => {
const date = new Date();
const time = date.getTime();
const random = Math.floor(Math.random() * 1000000000);
const random$1 = Math.floor(random() * 1000000000);
unique++;
return prefix + '_' + random + unique + String(time);
return prefix + '_' + random$1 + unique + String(time);
};
const insertTable = (editor, columns, rows) => {
@ -111,11 +113,10 @@
});
};
var global$1 = tinymce.util.Tools.resolve('tinymce.Env');
var global = tinymce.util.Tools.resolve('tinymce.util.Delay');
const pickFile = editor => new Promise(resolve => {
let resolved = false;
const fileInput = document.createElement('input');
fileInput.type = 'file';
fileInput.accept = 'image/*';
@ -124,20 +125,29 @@
fileInput.style.top = '0';
fileInput.style.opacity = '0.001';
document.body.appendChild(fileInput);
const changeHandler = e => {
resolve(Array.prototype.slice.call(e.target.files));
const resolveFileInput = value => {
var _a;
if (!resolved) {
(_a = fileInput.parentNode) === null || _a === void 0 ? void 0 : _a.removeChild(fileInput);
resolved = true;
resolve(value);
}
};
const changeHandler = e => {
resolveFileInput(Array.prototype.slice.call(e.target.files));
};
fileInput.addEventListener('input', changeHandler);
fileInput.addEventListener('change', changeHandler);
const cancelHandler = e => {
const cleanup = () => {
var _a;
resolve([]);
(_a = fileInput.parentNode) === null || _a === void 0 ? void 0 : _a.removeChild(fileInput);
resolveFileInput([]);
};
if (global$1.os.isAndroid() && e.type !== 'remove') {
global.setEditorTimeout(editor, cleanup, 0);
} else {
cleanup();
if (!resolved) {
if (e.type === 'focusin') {
global.setEditorTimeout(editor, cleanup, 1000);
} else {
cleanup();
}
}
editor.off('focusin remove', cancelHandler);
};
@ -278,7 +288,7 @@
return r.toLowerCase();
};
const has = (element, key) => {
const has$1 = (element, key) => {
const dom = element.dom;
return dom && dom.hasAttribute ? dom.hasAttribute(key) : false;
};
@ -384,7 +394,7 @@
const sugarNode = SugarElement.fromDom(node);
const textBlockElementsMap = editor.schema.getTextBlockElements();
const isRoot = elem => elem.dom === editor.getBody();
return !has(sugarNode, 'data-mce-bogus') && closest(sugarNode, 'table,[data-mce-bogus="all"]', isRoot).fold(() => closest$1(sugarNode, elem => name(elem) in textBlockElementsMap && editor.dom.isEmpty(elem.dom), isRoot), never);
return !has$1(sugarNode, 'data-mce-bogus') && closest(sugarNode, 'table,[data-mce-bogus="all"]', isRoot).fold(() => closest$1(sugarNode, elem => name(elem) in textBlockElementsMap && editor.dom.isEmpty(elem.dom), isRoot), never);
},
items: insertToolbarItems,
position: 'line',
@ -393,9 +403,19 @@
}
};
const supports = element => element.dom.classList !== undefined;
const has = (element, clazz) => supports(element) && element.dom.classList.contains(clazz);
const addToEditor = editor => {
const isEditable = node => editor.dom.getContentEditableParent(node) !== 'false';
const isImage = node => node.nodeName === 'IMG' || node.nodeName === 'FIGURE' && /image/i.test(node.className);
const isEditable = node => editor.dom.isEditable(node);
const isInEditableContext = el => isEditable(el.parentElement);
const isImage = node => {
const isImageFigure = node.nodeName === 'FIGURE' && /image/i.test(node.className);
const isImage = node.nodeName === 'IMG' || isImageFigure;
const isPagebreak = has(SugarElement.fromDom(node), 'mce-pagebreak');
return isImage && isInEditableContext(node) && !isPagebreak;
};
const imageToolbarItems = getImageToolbarItems(editor);
if (imageToolbarItems.length > 0) {
editor.ui.registry.addContextToolbar('imageselection', {
@ -416,7 +436,7 @@
};
var Plugin = () => {
global$2.add('quickbars', editor => {
global$1.add('quickbars', editor => {
register(editor);
setupButtons(editor);
addToEditor$1(editor);

File diff suppressed because one or more lines are too long

View File

@ -1,5 +1,5 @@
/**
* TinyMCE version 6.4.1 (2023-03-29)
* TinyMCE version 7.5.1 (TBD)
*/
(function () {
@ -93,7 +93,8 @@
tooltip: 'Save',
enabled: false,
onAction: () => editor.execCommand('mceSave'),
onSetup: stateToggle(editor)
onSetup: stateToggle(editor),
shortcut: 'Meta+S'
});
editor.ui.registry.addButton('cancel', {
icon: 'cancel',

Some files were not shown because too many files have changed in this diff Show More