@ckeditor/ckeditor5-restricted-editing 34.0.0 → 35.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +53 -0
- package/LICENSE.md +2 -6
- package/build/restricted-editing.js +1 -1
- package/build/translations/ar.js +1 -0
- package/build/translations/bg.js +1 -0
- package/build/translations/bn.js +1 -0
- package/build/translations/ca.js +1 -0
- package/build/translations/fi.js +1 -0
- package/build/translations/he.js +1 -0
- package/build/translations/ja.js +1 -0
- package/build/translations/lt.js +1 -0
- package/build/translations/ms.js +1 -0
- package/build/translations/pt.js +1 -0
- package/build/translations/sv.js +1 -0
- package/build/translations/th.js +1 -0
- package/build/translations/vi.js +1 -0
- package/lang/translations/ar.po +37 -0
- package/lang/translations/bg.po +37 -0
- package/lang/translations/bn.po +37 -0
- package/lang/translations/ca.po +37 -0
- package/lang/translations/es.po +1 -1
- package/lang/translations/fi.po +37 -0
- package/lang/translations/fr.po +1 -1
- package/lang/translations/he.po +37 -0
- package/lang/translations/it.po +1 -1
- package/lang/translations/ja.po +37 -0
- package/lang/translations/lt.po +37 -0
- package/lang/translations/ms.po +37 -0
- package/lang/translations/pt-br.po +1 -1
- package/lang/translations/pt.po +37 -0
- package/lang/translations/sv.po +37 -0
- package/lang/translations/th.po +37 -0
- package/lang/translations/vi.po +37 -0
- package/package.json +18 -17
- package/src/restrictededitingmode/converters.js +1 -1
- package/src/restrictededitingmodeediting.js +18 -8
- package/build/restricted-editing.js.map +0 -1
package/CHANGELOG.md
ADDED
@@ -0,0 +1,53 @@
|
|
1
|
+
Changelog
|
2
|
+
=========
|
3
|
+
|
4
|
+
All changes in the package are documented in the main repository. See: https://github.com/ckeditor/ckeditor5/blob/master/CHANGELOG.md.
|
5
|
+
|
6
|
+
Changes for the past releases are available below.
|
7
|
+
|
8
|
+
## [19.0.0](https://github.com/ckeditor/ckeditor5-restricted-editing/compare/v18.0.0...v19.0.0) (2020-04-29)
|
9
|
+
|
10
|
+
### Other changes
|
11
|
+
|
12
|
+
* Updated translations. ([4d7336d](https://github.com/ckeditor/ckeditor5-restricted-editing/commit/4d7336d))
|
13
|
+
|
14
|
+
|
15
|
+
## [18.0.0](https://github.com/ckeditor/ckeditor5-restricted-editing/compare/v17.0.0...v18.0.0) (2020-03-19)
|
16
|
+
|
17
|
+
### Other changes
|
18
|
+
|
19
|
+
* Updated translations. ([e2a6a7d](https://github.com/ckeditor/ckeditor5-restricted-editing/commit/e2a6a7d))
|
20
|
+
|
21
|
+
|
22
|
+
## [17.0.0](https://github.com/ckeditor/ckeditor5-restricted-editing/compare/v16.0.0...v17.0.0) (2020-02-19)
|
23
|
+
|
24
|
+
### MAJOR BREAKING CHANGES
|
25
|
+
|
26
|
+
* Changed the class denoting the exception spans from `ck-restricted-editing-exception` to `restricted-editing-exception`. See [ckeditor/ckeditor5-restricted-editing#6](https://github.com/ckeditor/ckeditor5-restricted-editing/pull/6).
|
27
|
+
|
28
|
+
The data produced by version 16.0.0 of this package will not be recognized by the new version of this package. The easiest migration method is to replace all occurrences of `class="ck-restricted-editing-exception"` with `class="restricted-editing-exception"` prior to loading the data into the editor.
|
29
|
+
|
30
|
+
### Features
|
31
|
+
|
32
|
+
* Add `enableCommand()` method to `RestrictedEditingModeEditing`. Closes [ckeditor/ckeditor5#6041](https://github.com/ckeditor/ckeditor5/issues/6041). Closes [ckeditor/ckeditor5#6011](https://github.com/ckeditor/ckeditor5/issues/6011). ([e617559](https://github.com/ckeditor/ckeditor5-restricted-editing/commit/e617559))
|
33
|
+
* Allow pasting content into exception areas in the restricted editing mode. Closes [ckeditor/ckeditor5#5802](https://github.com/ckeditor/ckeditor5/issues/5802). ([6704d21](https://github.com/ckeditor/ckeditor5-restricted-editing/commit/6704d21))
|
34
|
+
* Pressing Ctrl+A when the selection range is inside an exception selects text only within an exception in restricted editing. Second Ctrl+A selects the entire text in the editor. Closes [ckeditor/ckeditor5#5826](https://github.com/ckeditor/ckeditor5/issues/5826). ([569d588](https://github.com/ckeditor/ckeditor5-restricted-editing/commit/569d588))
|
35
|
+
* Remove the entire exception when collapsed selection is inside text with restricted attribute. Closes [#5828](https://github.com/ckeditor/ckeditor5-restricted-editing/issues/5828). ([44f443e](https://github.com/ckeditor/ckeditor5-restricted-editing/commit/44f443e))
|
36
|
+
|
37
|
+
### Bug fixes
|
38
|
+
|
39
|
+
* Fix non-flat exception markers. Closes [ckeditor/ckeditor5#6003](https://github.com/ckeditor/ckeditor5/issues/6003). ([70e3e12](https://github.com/ckeditor/ckeditor5-restricted-editing/commit/70e3e12))
|
40
|
+
* Focus the editor before executing toolbar buttons' command. See [ckeditor/ckeditor5#353](https://github.com/ckeditor/ckeditor5/issues/353). ([e7f9d23](https://github.com/ckeditor/ckeditor5-restricted-editing/commit/e7f9d23))
|
41
|
+
* Pressing "Tab" or "Shift+Tab" should move focus outside the editor in restricted mode if the selection is anchored in the last (or first) exception. Closes [ckeditor/ckeditor5#5834](https://github.com/ckeditor/ckeditor5/issues/5834). ([dc26f4c](https://github.com/ckeditor/ckeditor5-restricted-editing/commit/dc26f4c))
|
42
|
+
* Restricted editing boundaries should not be crossed by delete content and input command. Closes [ckeditor/ckeditor5#5840](https://github.com/ckeditor/ckeditor5/issues/5840). ([3ae681a](https://github.com/ckeditor/ckeditor5-restricted-editing/commit/3ae681a))
|
43
|
+
|
44
|
+
### Other changes
|
45
|
+
|
46
|
+
* Added CSS classes to the editable elements to differentiate between the restricted and standard modes. See [ckeditor/ckeditor5#5829](https://github.com/ckeditor/ckeditor5/issues/5829). ([de38be8](https://github.com/ckeditor/ckeditor5-restricted-editing/commit/de38be8))
|
47
|
+
* Align CSS class names to the changes in the restricted editing feature. See [ckeditor/ckeditor5#5899](https://github.com/ckeditor/ckeditor5/issues/5899). ([3ba00b0](https://github.com/ckeditor/ckeditor5-restricted-editing/commit/3ba00b0))
|
48
|
+
* Updated translations. ([c076842](https://github.com/ckeditor/ckeditor5-restricted-editing/commit/c076842))
|
49
|
+
|
50
|
+
|
51
|
+
## [16.0.0](https://github.com/ckeditor/ckeditor5-restricted-editing/tree/v16.0.0) (2019-12-04)
|
52
|
+
|
53
|
+
The initial release.
|
package/LICENSE.md
CHANGED
@@ -2,7 +2,7 @@ Software License Agreement
|
|
2
2
|
==========================
|
3
3
|
|
4
4
|
**CKEditor 5 restricted editing feature** – https://github.com/ckeditor/ckeditor5-restricted-editing <br>
|
5
|
-
Copyright (c) 2003-2022, [CKSource
|
5
|
+
Copyright (c) 2003-2022, [CKSource Holding sp. z o.o.](https://cksource.com) All rights reserved.
|
6
6
|
|
7
7
|
Licensed under the terms of [GNU General Public License Version 2 or later](http://www.gnu.org/licenses/gpl.html).
|
8
8
|
|
@@ -11,11 +11,7 @@ Sources of Intellectual Property Included in CKEditor
|
|
11
11
|
|
12
12
|
Where not otherwise indicated, all CKEditor content is authored by CKSource engineers and consists of CKSource-owned intellectual property. In some specific instances, CKEditor will incorporate work done by developers outside of CKSource with their express permission.
|
13
13
|
|
14
|
-
The following libraries are included in CKEditor under the [MIT license](https://opensource.org/licenses/MIT):
|
15
|
-
|
16
|
-
* Lo-Dash - Copyright (c) JS Foundation and other contributors https://js.foundation/. Based on Underscore.js, copyright Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors http://underscorejs.org/.
|
17
|
-
|
18
14
|
Trademarks
|
19
15
|
----------
|
20
16
|
|
21
|
-
**CKEditor** is a trademark of [CKSource
|
17
|
+
**CKEditor** is a trademark of [CKSource Holding sp. z o.o.](https://cksource.com) All other brand and product names are trademarks, registered trademarks or service marks of their respective holders.
|
@@ -2,4 +2,4 @@
|
|
2
2
|
/*!
|
3
3
|
* @license Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved.
|
4
4
|
* For licensing, see LICENSE.md.
|
5
|
-
*/(()=>{var e={673:(e,t,i)=>{"use strict";i.d(t,{Z:()=>o});var n=i(609),r=i.n(n)()((function(e){return e[1]}));r.push([e.id,":root{--ck-color-restricted-editing-exception-background:rgba(255,169,77,.2);--ck-color-restricted-editing-exception-hover-background:rgba(255,169,77,.35);--ck-color-restricted-editing-exception-brackets:rgba(204,105,0,.4);--ck-color-restricted-editing-selected-exception-background:rgba(255,169,77,.5);--ck-color-restricted-editing-selected-exception-brackets:rgba(204,105,0,.6)}.ck-editor__editable .restricted-editing-exception{background-color:var(--ck-color-restricted-editing-exception-background);border:1px solid;border-image:linear-gradient(to right,var(--ck-color-restricted-editing-exception-brackets) 0,var(--ck-color-restricted-editing-exception-brackets) 5px,transparent 6px,transparent calc(100% - 6px),var(--ck-color-restricted-editing-exception-brackets) calc(100% - 5px),var(--ck-color-restricted-editing-exception-brackets) 100%) 1;transition:background .2s ease-in-out}.ck-editor__editable .restricted-editing-exception.restricted-editing-exception_selected{background-color:var(--ck-color-restricted-editing-selected-exception-background);border-image:linear-gradient(to right,var(--ck-color-restricted-editing-selected-exception-brackets) 0,var(--ck-color-restricted-editing-selected-exception-brackets) 5px,var(--ck-color-restricted-editing-selected-exception-brackets) calc(100% - 5px),var(--ck-color-restricted-editing-selected-exception-brackets) 100%) 1}.ck-editor__editable .restricted-editing-exception.restricted-editing-exception_collapsed{padding-left:1ch}.ck-restricted-editing_mode_restricted,.ck-restricted-editing_mode_restricted *{cursor:default}.ck-restricted-editing_mode_restricted .restricted-editing-exception,.ck-restricted-editing_mode_restricted .restricted-editing-exception *{cursor:text}.ck-restricted-editing_mode_restricted .restricted-editing-exception:hover{background:var(--ck-color-restricted-editing-exception-hover-background)}",""]);const o=r},609:e=>{"use strict";e.exports=function(e){var t=[];return t.toString=function(){return this.map((function(t){var i=e(t);return t[2]?"@media ".concat(t[2]," {").concat(i,"}"):i})).join("")},t.i=function(e,i,n){"string"==typeof e&&(e=[[null,e,""]]);var r={};if(n)for(var o=0;o<this.length;o++){var s=this[o][0];null!=s&&(r[s]=!0)}for(var c=0;c<e.length;c++){var a=[].concat(e[c]);n&&r[a[0]]||(i&&(a[2]?a[2]="".concat(i," and ").concat(a[2]):a[2]=i),t.push(a))}},t}},62:(e,t,i)=>{"use strict";var n,r=function(){return void 0===n&&(n=Boolean(window&&document&&document.all&&!window.atob)),n},o=function(){var e={};return function(t){if(void 0===e[t]){var i=document.querySelector(t);if(window.HTMLIFrameElement&&i instanceof window.HTMLIFrameElement)try{i=i.contentDocument.head}catch(e){i=null}e[t]=i}return e[t]}}(),s=[];function c(e){for(var t=-1,i=0;i<s.length;i++)if(s[i].identifier===e){t=i;break}return t}function a(e,t){for(var i={},n=[],r=0;r<e.length;r++){var o=e[r],a=t.base?o[0]+t.base:o[0],d=i[a]||0,l="".concat(a," ").concat(d);i[a]=d+1;var g=c(l),u={css:o[1],media:o[2],sourceMap:o[3]};-1!==g?(s[g].references++,s[g].updater(u)):s.push({identifier:l,updater:f(u,t),references:1}),n.push(l)}return n}function d(e){var t=document.createElement("style"),n=e.attributes||{};if(void 0===n.nonce){var r=i.nc;r&&(n.nonce=r)}if(Object.keys(n).forEach((function(e){t.setAttribute(e,n[e])})),"function"==typeof e.insert)e.insert(t);else{var s=o(e.insert||"head");if(!s)throw new Error("Couldn't find a style target. This probably means that the value for the 'insert' parameter is invalid.");s.appendChild(t)}return t}var l,g=(l=[],function(e,t){return l[e]=t,l.filter(Boolean).join("\n")});function u(e,t,i,n){var r=i?"":n.media?"@media ".concat(n.media," {").concat(n.css,"}"):n.css;if(e.styleSheet)e.styleSheet.cssText=g(t,r);else{var o=document.createTextNode(r),s=e.childNodes;s[t]&&e.removeChild(s[t]),s.length?e.insertBefore(o,s[t]):e.appendChild(o)}}function m(e,t,i){var n=i.css,r=i.media,o=i.sourceMap;if(r?e.setAttribute("media",r):e.removeAttribute("media"),o&&"undefined"!=typeof btoa&&(n+="\n/*# sourceMappingURL=data:application/json;base64,".concat(btoa(unescape(encodeURIComponent(JSON.stringify(o))))," */")),e.styleSheet)e.styleSheet.cssText=n;else{for(;e.firstChild;)e.removeChild(e.firstChild);e.appendChild(document.createTextNode(n))}}var p=null,h=0;function f(e,t){var i,n,r;if(t.singleton){var o=h++;i=p||(p=d(t)),n=u.bind(null,i,o,!1),r=u.bind(null,i,o,!0)}else i=d(t),n=m.bind(null,i,t),r=function(){!function(e){if(null===e.parentNode)return!1;e.parentNode.removeChild(e)}(i)};return n(e),function(t){if(t){if(t.css===e.css&&t.media===e.media&&t.sourceMap===e.sourceMap)return;n(e=t)}else r()}}e.exports=function(e,t){(t=t||{}).singleton||"boolean"==typeof t.singleton||(t.singleton=r());var i=a(e=e||[],t);return function(e){if(e=e||[],"[object Array]"===Object.prototype.toString.call(e)){for(var n=0;n<i.length;n++){var r=c(i[n]);s[r].references--}for(var o=a(e,t),d=0;d<i.length;d++){var l=c(i[d]);0===s[l].references&&(s[l].updater(),s.splice(l,1))}i=o}}}},704:(e,t,i)=>{e.exports=i(79)("./src/core.js")},492:(e,t,i)=>{e.exports=i(79)("./src/engine.js")},273:(e,t,i)=>{e.exports=i(79)("./src/ui.js")},209:(e,t,i)=>{e.exports=i(79)("./src/utils.js")},79:e=>{"use strict";e.exports=CKEditor5.dll}},t={};function i(n){var r=t[n];if(void 0!==r)return r.exports;var o=t[n]={id:n,exports:{}};return e[n](o,o.exports,i),o.exports}i.n=e=>{var t=e&&e.__esModule?()=>e.default:()=>e;return i.d(t,{a:t}),t},i.d=(e,t)=>{for(var n in t)i.o(t,n)&&!i.o(e,n)&&Object.defineProperty(e,n,{enumerable:!0,get:t[n]})},i.o=(e,t)=>Object.prototype.hasOwnProperty.call(e,t),i.r=e=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})};var n={};(()=>{"use strict";i.r(n),i.d(n,{RestrictedEditingMode:()=>y,RestrictedEditingModeEditing:()=>u,RestrictedEditingModeUI:()=>E,StandardEditingMode:()=>S,StandardEditingModeEditing:()=>R,StandardEditingModeUI:()=>T});var e=i(704);class t extends e.Command{constructor(e,t){super(e),this.affectsData=!1,this._direction=t}refresh(){this.isEnabled=this._checkEnabled()}execute(){const e=r(this.editor.model,this._direction);this.editor.model.change((t=>{t.setSelection(e)}))}_checkEnabled(){return!!r(this.editor.model,this._direction)}}function r(e,t){const i=e.document.selection.getFirstPosition(),n=[];for(const r of e.markers.getMarkersGroup("restrictedEditingException")){const e=r.getRange(),o=i.isTouching(e.start)&&i.hasSameParentAs(e.start)||i.isTouching(e.end)&&i.hasSameParentAs(e.end);e.containsPosition(i)||o||("forward"===t&&e.start.isAfter(i)||"backward"===t&&e.end.isBefore(i))&&n.push(e)}return n.length?n.sort(((e,i)=>"forward"===t?e.start.isAfter(i.start)?1:-1:e.start.isBefore(i.start)?1:-1)).shift():null}var o=i(492);function s(e,t){for(const i of e.model.markers){if(c(i.getRange(),t)&&i.name.startsWith("restrictedEditingException:"))return i}}function c(e,t){return e.containsPosition(t)||e.end.isEqual(t)||e.start.isEqual(t)}const a="restricted-editing-exception_selected";function d(e,t,i,n){const r=s(e,t.getShiftedBy(i));return!(!r||!r.getStart().isEqual(t.getShiftedBy(i)))&&(n.updateMarker(r,{range:n.createRange(r.getStart().getShiftedBy(-i),r.getEnd())}),!0)}function l(e,t,i,n){const r=s(e,t);return!(!r||!r.getEnd().isEqual(t))&&(n.updateMarker(r,{range:n.createRange(r.getStart(),r.getEnd().getShiftedBy(i))}),!0)}const g="RestrictedEditingMode";class u extends e.Plugin{static get pluginName(){return"RestrictedEditingModeEditing"}constructor(e){super(e),e.config.define("restrictedEditing",{allowedCommands:["bold","italic","link","unlink"],allowedAttributes:["bold","italic","linkHref"]}),this._alwaysEnabled=new Set(["undo","redo"]),this._allowedInException=new Set(["input","delete","deleteForward"])}init(){const e=this.editor,i=e.editing.view;e.config.get("restrictedEditing.allowedCommands").forEach((e=>this._allowedInException.add(e))),this._setupConversion(),this._setupCommandsToggling(),this._setupRestrictions(),e.commands.add("goToPreviousRestrictedEditingException",new t(e,"backward")),e.commands.add("goToNextRestrictedEditingException",new t(e,"forward")),e.keystrokes.set("Tab",m(e,"goToNextRestrictedEditingException")),e.keystrokes.set("Shift+Tab",m(e,"goToPreviousRestrictedEditingException")),e.keystrokes.set("Ctrl+A",function(e){return(t,i)=>{const n=e.model,r=e.model.document.selection,o=s(e,r.focus);if(!o)return;const c=r.getFirstRange();(o.getRange().containsRange(c,!0)||r.isCollapsed)&&(i(),n.change((e=>{e.setSelection(o.getRange())})))}}(e)),i.change((e=>{for(const t of i.document.roots)e.addClass("ck-restricted-editing_mode_restricted",t)}))}enableCommand(e){this.editor.commands.get(e).clearForceDisabled(g),this._alwaysEnabled.add(e)}_setupConversion(){const e=this.editor,t=e.model,i=t.document;let n=0;var r;e.conversion.for("upcast").add((r={view:{name:"span",classes:"restricted-editing-exception"},model:()=>(n++,`restrictedEditingException:${n}`)},e=>e.on("element:span",((e,t,i)=>{const{writer:n}=i,s=new o.Matcher(r.view).match(t.viewItem);if(!s)return;const c=s.match;c.name=!0;const{modelRange:a}=i.convertChildren(t.viewItem,t.modelCursor);i.consumable.consume(t.viewItem,c);const d=r.model(t.viewItem),l=n.createElement("$marker",{"data-name":d}),g=n.createElement("$marker",{"data-name":d});n.insert(g,a.end),n.insert(l,a.start),t.modelRange=n.createRange(n.createPositionBefore(l),n.createPositionAfter(g)),t.modelCursor=t.modelRange.end})))),e.conversion.for("downcast").markerToHighlight({model:"restrictedEditingException",view:()=>({name:"span",classes:"restricted-editing-exception",priority:-10})}),e.conversion.for("editingDowncast").markerToElement({model:"restrictedEditingException",view:(e,{writer:t})=>t.createUIElement("span",{class:"restricted-editing-exception restricted-editing-exception_collapsed"})}),e.conversion.for("dataDowncast").markerToElement({model:"restrictedEditingException",view:(e,{writer:t})=>t.createEmptyElement("span",{class:"restricted-editing-exception"})}),i.registerPostFixer(function(e){return t=>{let i=!1;for(const n of e.model.document.differ.getChanges())"insert"==n.type&&"$text"==n.name&&(i=d(e,n.position,n.length,t)||i,i=l(e,n.position,n.length,t)||i);return!1}}(e)),i.registerPostFixer(function(e){return t=>{let i=!1;for(const{name:n,data:r}of e.model.document.differ.getChangedMarkers())n.startsWith("restrictedEditingException")&&r.newRange&&"$graveyard"==r.newRange.root.rootName&&(t.updateMarker(n,{range:t.createRange(t.createPositionAt(r.oldRange.start))}),i=!0);return i}}(e)),t.markers.on("update:restrictedEditingException",function(e){const t=e.model;return(e,i,n,r)=>{n||r.isFlat||t.change((e=>{const t=r.start,n=r.end,o=t.path.length>n.path.length,s=o?r.start:e.createPositionAt(n.parent,0),c=o?e.createPositionAt(t.parent,"end"):r.end;e.updateMarker(i,{range:e.createRange(s,c)})}))}}(e)),function(e){const t=e.editing.view,i=e.model,n=new Set;t.document.registerPostFixer((t=>{const r=i.document.selection,o=s(e,r.anchor);if(o)for(const i of e.editing.mapper.markerNameToElements(o.name))t.addClass(a,i),n.add(i)})),e.conversion.for("editingDowncast").add((e=>{function i(){t.change((e=>{for(const t of n.values())e.removeClass(a,t),n.delete(t)}))}e.on("insert",i,{priority:"highest"}),e.on("remove",i,{priority:"highest"}),e.on("attribute",i,{priority:"highest"}),e.on("selection",i,{priority:"highest"})}))}(e)}_setupRestrictions(){const e=this.editor,t=e.model,i=t.document.selection,n=e.editing.view.document,r=e.plugins.get("ClipboardPipeline");this.listenTo(t,"deleteContent",function(e){return(t,i)=>{const[n]=i,r=s(e,n.focus)||s(e,n.anchor);if(!r)return void t.stop();if(n.isCollapsed)return;const o=r.getRange().getIntersection(n.getFirstRange());n.is("documentSelection")?e.model.change((e=>{e.setSelection(o)})):n.setTo(o)}}(e),{priority:"high"});const o=e.commands.get("input");o&&this.listenTo(o,"execute",function(e){return(t,i)=>{const[n]=i,{range:r}=n;r&&(h(e,r)||t.stop())}}(e),{priority:"high"}),this.listenTo(r,"contentInsertion",(t=>{h(e,i.getFirstRange())||t.stop()})),this.listenTo(n,"clipboardOutput",((t,n)=>{"cut"!=n.method||h(e,i.getFirstRange())||t.stop()}),{priority:"high"});const c=e.config.get("restrictedEditing.allowedAttributes");t.schema.addAttributeCheck(function(e){return(t,i)=>{if(t.startsWith("$clipboardHolder"))return e.includes(i)}}(c)),t.schema.addChildCheck(f)}_setupCommandsToggling(){const e=this.editor.model.document;this._disableCommands(),this.listenTo(e.selection,"change",this._checkCommands.bind(this)),this.listenTo(e,"change:data",this._checkCommands.bind(this))}_checkCommands(){const e=this.editor,t=e.model.document.selection;if(t.rangeCount>1)return void this._disableCommands();const i=s(e,t.focus);this._disableCommands(),function(e,t){if(!t)return!1;const i=t.getRange();return e.isCollapsed?c(i,e.focus):i.containsRange(e.getFirstRange(),!0)}(t,i)&&this._enableCommands(i)}_enableCommands(e){const t=this.editor;for(const[i,n]of t.commands)n.affectsData&&!this._alwaysEnabled.has(i)&&this._allowedInException.has(i)&&(p(i,t.model.document.selection,e.getRange())||n.clearForceDisabled(g))}_disableCommands(){const e=this.editor;for(const[t,i]of e.commands)i.affectsData&&!this._alwaysEnabled.has(t)&&i.forceDisabled(g)}}function m(e,t){return(i,n)=>{e.commands.get(t).isEnabled&&(e.execute(t),n())}}function p(e,t,i){return!("delete"!=e||!i.start.isEqual(t.focus))||!("deleteForward"!=e||!t.isCollapsed||!i.end.isEqual(t.focus))}function h(e,t){const i=s(e,t.start),n=s(e,t.end);return i&&n&&n===i}function f(e,t){if(e.startsWith("$clipboardHolder"))return"$text"===t.name}var b=i(273),v=i(209);class E extends e.Plugin{static get pluginName(){return"RestrictedEditingModeUI"}init(){const e=this.editor,t=e.t;e.ui.componentFactory.add("restrictedEditing",(i=>{const n=(0,b.createDropdown)(i),r=new v.Collection;return r.add(this._getButtonDefinition("goToPreviousRestrictedEditingException",t("Previous editable region"),"Shift+Tab")),r.add(this._getButtonDefinition("goToNextRestrictedEditingException",t("Next editable region"),"Tab")),(0,b.addListToDropdown)(n,r),n.buttonView.set({label:t("Navigate editable regions"),icon:'<svg viewBox="0 0 20 20" xmlns="http://www.w3.org/2000/svg"><path d="M15.5 6.5a3.5 3.5 0 0 1 3.495 3.308L19 10v2a1 1 0 0 1 1 1v5a1 1 0 0 1-1 1h-7a1 1 0 0 1-1-1v-5a1 1 0 0 1 1-1v-2l.005-.192A3.5 3.5 0 0 1 15.5 6.5zm0 7.5a.5.5 0 0 0-.492.41L15 14.5v2a.5.5 0 0 0 .992.09L16 16.5v-2a.5.5 0 0 0-.5-.5zm0-6a2 2 0 0 0-2 2v2h4v-2a2 2 0 0 0-2-2zm-9.25 8a.75.75 0 1 1 0 1.5H.75a.75.75 0 1 1 0-1.5h5.5zm0-5a.75.75 0 1 1 0 1.5H.75a.75.75 0 1 1 0-1.5h5.5zm3-5a.75.75 0 0 1 0 1.5H.75a.75.75 0 0 1 0-1.5h8.5zm6-5a.75.75 0 1 1 0 1.5H.75a.75.75 0 0 1 0-1.5h14.5z"/></svg>',tooltip:!0,isEnabled:!0,isOn:!1}),this.listenTo(n,"execute",(t=>{e.execute(t.source._commandName),e.editing.view.focus()})),n}))}_getButtonDefinition(e,t,i){const n=this.editor.commands.get(e),r={type:"button",model:new b.Model({label:t,withText:!0,keystroke:i,withKeystroke:!0,_commandName:e})};return r.model.bind("isEnabled").to(n,"isEnabled"),r}}var x=i(62),w=i.n(x),k=i(673),_={injectType:"singletonStyleTag",attributes:{"data-cke":!0},insert:"head",singleton:!0};w()(k.Z,_);k.Z.locals;class y extends e.Plugin{static get pluginName(){return"RestrictedEditingMode"}static get requires(){return[u,E]}}class C extends e.Command{refresh(){const e=this.editor.model,t=e.document;this.value=!!t.selection.getAttribute("restrictedEditingException"),this.isEnabled=e.schema.checkAttributeInSelection(t.selection,"restrictedEditingException")}execute(e={}){const t=this.editor.model,i=t.document.selection,n=void 0===e.forceValue?!this.value:e.forceValue;t.change((e=>{const r=t.schema.getValidRanges(i.getRanges(),"restrictedEditingException");if(i.isCollapsed)if(n)e.setSelectionAttribute("restrictedEditingException",n);else{const t=e=>e.item.getAttribute("restrictedEditingException")===this.value,n=i.focus.getLastMatchingPosition(t,{direction:"backward"}),r=i.focus.getLastMatchingPosition(t),o=i.focus;e.removeSelectionAttribute("restrictedEditingException"),o.isEqual(n)||o.isEqual(r)||e.removeAttribute("restrictedEditingException",e.createRange(n,r))}else for(const t of r)n?e.setAttribute("restrictedEditingException",n,t):e.removeAttribute("restrictedEditingException",t)}))}}class R extends e.Plugin{static get pluginName(){return"StandardEditingModeEditing"}init(){const e=this.editor;e.model.schema.extend("$text",{allowAttributes:["restrictedEditingException"]}),e.conversion.for("upcast").elementToAttribute({model:"restrictedEditingException",view:{name:"span",classes:"restricted-editing-exception"}}),e.conversion.for("downcast").attributeToElement({model:"restrictedEditingException",view:(e,{writer:t})=>{if(e)return t.createAttributeElement("span",{class:"restricted-editing-exception"},{priority:-10})}}),e.commands.add("restrictedEditingException",new C(e)),e.editing.view.change((t=>{for(const i of e.editing.view.document.roots)t.addClass("ck-restricted-editing_mode_standard",i)}))}}class T extends e.Plugin{init(){const e=this.editor,t=e.t;e.ui.componentFactory.add("restrictedEditingException",(i=>{const n=e.commands.get("restrictedEditingException"),r=new b.ButtonView(i);return r.set({icon:'<svg viewBox="0 0 20 20" xmlns="http://www.w3.org/2000/svg"><path d="M6.25 16a.75.75 0 1 1 0 1.5H.75a.75.75 0 1 1 0-1.5h5.5zm0-5a.75.75 0 1 1 0 1.5H.75a.75.75 0 1 1 0-1.5h5.5zm3-5a.75.75 0 0 1 0 1.5H.75a.75.75 0 0 1 0-1.5h8.5zm6-5a.75.75 0 1 1 0 1.5H.75a.75.75 0 0 1 0-1.5h14.5zm.25 5.5a3.5 3.5 0 0 1 3.143 1.959.75.75 0 0 1-1.36.636A2 2 0 0 0 13.5 10v2H19a1 1 0 0 1 1 1v5a1 1 0 0 1-1 1h-7a1 1 0 0 1-1-1v-5a1 1 0 0 1 1-1v-2l.005-.192A3.5 3.5 0 0 1 15.5 6.5zm0 7.5a.5.5 0 0 0-.492.41L15 14.5v2a.5.5 0 0 0 .992.09L16 16.5v-2a.5.5 0 0 0-.5-.5z"/></svg>',tooltip:!0,isToggleable:!0}),r.bind("isOn","isEnabled").to(n,"value","isEnabled"),r.bind("label").to(n,"value",(e=>t(e?"Disable editing":"Enable editing"))),this.listenTo(r,"execute",(()=>{e.execute("restrictedEditingException"),e.editing.view.focus()})),r}))}}class S extends e.Plugin{static get pluginName(){return"StandardEditingMode"}static get requires(){return[R,T]}}})(),(window.CKEditor5=window.CKEditor5||{}).restrictedEditing=n})();
|
5
|
+
*/(()=>{var e={673:(e,t,i)=>{"use strict";i.d(t,{Z:()=>o});var n=i(609),r=i.n(n)()((function(e){return e[1]}));r.push([e.id,":root{--ck-color-restricted-editing-exception-background:rgba(255,169,77,.2);--ck-color-restricted-editing-exception-hover-background:rgba(255,169,77,.35);--ck-color-restricted-editing-exception-brackets:rgba(204,105,0,.4);--ck-color-restricted-editing-selected-exception-background:rgba(255,169,77,.5);--ck-color-restricted-editing-selected-exception-brackets:rgba(204,105,0,.6)}.ck-editor__editable .restricted-editing-exception{background-color:var(--ck-color-restricted-editing-exception-background);border:1px solid;border-image:linear-gradient(to right,var(--ck-color-restricted-editing-exception-brackets) 0,var(--ck-color-restricted-editing-exception-brackets) 5px,transparent 6px,transparent calc(100% - 6px),var(--ck-color-restricted-editing-exception-brackets) calc(100% - 5px),var(--ck-color-restricted-editing-exception-brackets) 100%) 1;transition:background .2s ease-in-out}.ck-editor__editable .restricted-editing-exception.restricted-editing-exception_selected{background-color:var(--ck-color-restricted-editing-selected-exception-background);border-image:linear-gradient(to right,var(--ck-color-restricted-editing-selected-exception-brackets) 0,var(--ck-color-restricted-editing-selected-exception-brackets) 5px,var(--ck-color-restricted-editing-selected-exception-brackets) calc(100% - 5px),var(--ck-color-restricted-editing-selected-exception-brackets) 100%) 1}.ck-editor__editable .restricted-editing-exception.restricted-editing-exception_collapsed{padding-left:1ch}.ck-restricted-editing_mode_restricted,.ck-restricted-editing_mode_restricted *{cursor:default}.ck-restricted-editing_mode_restricted .restricted-editing-exception,.ck-restricted-editing_mode_restricted .restricted-editing-exception *{cursor:text}.ck-restricted-editing_mode_restricted .restricted-editing-exception:hover{background:var(--ck-color-restricted-editing-exception-hover-background)}",""]);const o=r},609:e=>{"use strict";e.exports=function(e){var t=[];return t.toString=function(){return this.map((function(t){var i=e(t);return t[2]?"@media ".concat(t[2]," {").concat(i,"}"):i})).join("")},t.i=function(e,i,n){"string"==typeof e&&(e=[[null,e,""]]);var r={};if(n)for(var o=0;o<this.length;o++){var s=this[o][0];null!=s&&(r[s]=!0)}for(var c=0;c<e.length;c++){var a=[].concat(e[c]);n&&r[a[0]]||(i&&(a[2]?a[2]="".concat(i," and ").concat(a[2]):a[2]=i),t.push(a))}},t}},62:(e,t,i)=>{"use strict";var n,r=function(){return void 0===n&&(n=Boolean(window&&document&&document.all&&!window.atob)),n},o=function(){var e={};return function(t){if(void 0===e[t]){var i=document.querySelector(t);if(window.HTMLIFrameElement&&i instanceof window.HTMLIFrameElement)try{i=i.contentDocument.head}catch(e){i=null}e[t]=i}return e[t]}}(),s=[];function c(e){for(var t=-1,i=0;i<s.length;i++)if(s[i].identifier===e){t=i;break}return t}function a(e,t){for(var i={},n=[],r=0;r<e.length;r++){var o=e[r],a=t.base?o[0]+t.base:o[0],d=i[a]||0,l="".concat(a," ").concat(d);i[a]=d+1;var g=c(l),u={css:o[1],media:o[2],sourceMap:o[3]};-1!==g?(s[g].references++,s[g].updater(u)):s.push({identifier:l,updater:f(u,t),references:1}),n.push(l)}return n}function d(e){var t=document.createElement("style"),n=e.attributes||{};if(void 0===n.nonce){var r=i.nc;r&&(n.nonce=r)}if(Object.keys(n).forEach((function(e){t.setAttribute(e,n[e])})),"function"==typeof e.insert)e.insert(t);else{var s=o(e.insert||"head");if(!s)throw new Error("Couldn't find a style target. This probably means that the value for the 'insert' parameter is invalid.");s.appendChild(t)}return t}var l,g=(l=[],function(e,t){return l[e]=t,l.filter(Boolean).join("\n")});function u(e,t,i,n){var r=i?"":n.media?"@media ".concat(n.media," {").concat(n.css,"}"):n.css;if(e.styleSheet)e.styleSheet.cssText=g(t,r);else{var o=document.createTextNode(r),s=e.childNodes;s[t]&&e.removeChild(s[t]),s.length?e.insertBefore(o,s[t]):e.appendChild(o)}}function m(e,t,i){var n=i.css,r=i.media,o=i.sourceMap;if(r?e.setAttribute("media",r):e.removeAttribute("media"),o&&"undefined"!=typeof btoa&&(n+="\n/*# sourceMappingURL=data:application/json;base64,".concat(btoa(unescape(encodeURIComponent(JSON.stringify(o))))," */")),e.styleSheet)e.styleSheet.cssText=n;else{for(;e.firstChild;)e.removeChild(e.firstChild);e.appendChild(document.createTextNode(n))}}var p=null,h=0;function f(e,t){var i,n,r;if(t.singleton){var o=h++;i=p||(p=d(t)),n=u.bind(null,i,o,!1),r=u.bind(null,i,o,!0)}else i=d(t),n=m.bind(null,i,t),r=function(){!function(e){if(null===e.parentNode)return!1;e.parentNode.removeChild(e)}(i)};return n(e),function(t){if(t){if(t.css===e.css&&t.media===e.media&&t.sourceMap===e.sourceMap)return;n(e=t)}else r()}}e.exports=function(e,t){(t=t||{}).singleton||"boolean"==typeof t.singleton||(t.singleton=r());var i=a(e=e||[],t);return function(e){if(e=e||[],"[object Array]"===Object.prototype.toString.call(e)){for(var n=0;n<i.length;n++){var r=c(i[n]);s[r].references--}for(var o=a(e,t),d=0;d<i.length;d++){var l=c(i[d]);0===s[l].references&&(s[l].updater(),s.splice(l,1))}i=o}}}},704:(e,t,i)=>{e.exports=i(79)("./src/core.js")},492:(e,t,i)=>{e.exports=i(79)("./src/engine.js")},273:(e,t,i)=>{e.exports=i(79)("./src/ui.js")},209:(e,t,i)=>{e.exports=i(79)("./src/utils.js")},79:e=>{"use strict";e.exports=CKEditor5.dll}},t={};function i(n){var r=t[n];if(void 0!==r)return r.exports;var o=t[n]={id:n,exports:{}};return e[n](o,o.exports,i),o.exports}i.n=e=>{var t=e&&e.__esModule?()=>e.default:()=>e;return i.d(t,{a:t}),t},i.d=(e,t)=>{for(var n in t)i.o(t,n)&&!i.o(e,n)&&Object.defineProperty(e,n,{enumerable:!0,get:t[n]})},i.o=(e,t)=>Object.prototype.hasOwnProperty.call(e,t),i.r=e=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},i.nc=void 0;var n={};(()=>{"use strict";i.r(n),i.d(n,{RestrictedEditingMode:()=>y,RestrictedEditingModeEditing:()=>u,RestrictedEditingModeUI:()=>E,StandardEditingMode:()=>S,StandardEditingModeEditing:()=>R,StandardEditingModeUI:()=>T});var e=i(704);class t extends e.Command{constructor(e,t){super(e),this.affectsData=!1,this._direction=t}refresh(){this.isEnabled=this._checkEnabled()}execute(){const e=r(this.editor.model,this._direction);this.editor.model.change((t=>{t.setSelection(e)}))}_checkEnabled(){return!!r(this.editor.model,this._direction)}}function r(e,t){const i=e.document.selection.getFirstPosition(),n=[];for(const r of e.markers.getMarkersGroup("restrictedEditingException")){const e=r.getRange(),o=i.isTouching(e.start)&&i.hasSameParentAs(e.start)||i.isTouching(e.end)&&i.hasSameParentAs(e.end);e.containsPosition(i)||o||("forward"===t&&e.start.isAfter(i)||"backward"===t&&e.end.isBefore(i))&&n.push(e)}return n.length?n.sort(((e,i)=>"forward"===t?e.start.isAfter(i.start)?1:-1:e.start.isBefore(i.start)?1:-1)).shift():null}var o=i(492);function s(e,t){for(const i of e.model.markers){if(c(i.getRange(),t)&&i.name.startsWith("restrictedEditingException:"))return i}}function c(e,t){return e.containsPosition(t)||e.end.isEqual(t)||e.start.isEqual(t)}const a="restricted-editing-exception_selected";function d(e,t,i,n){const r=s(e,t.getShiftedBy(i));return!(!r||!r.getStart().isEqual(t.getShiftedBy(i)))&&(n.updateMarker(r,{range:n.createRange(r.getStart().getShiftedBy(-i),r.getEnd())}),!0)}function l(e,t,i,n){const r=s(e,t);return!(!r||!r.getEnd().isEqual(t))&&(n.updateMarker(r,{range:n.createRange(r.getStart(),r.getEnd().getShiftedBy(i))}),!0)}const g="RestrictedEditingMode";class u extends e.Plugin{static get pluginName(){return"RestrictedEditingModeEditing"}constructor(e){super(e),e.config.define("restrictedEditing",{allowedCommands:["bold","italic","link","unlink"],allowedAttributes:["bold","italic","linkHref"]}),this._alwaysEnabled=new Set(["undo","redo"]),this._allowedInException=new Set(["input","delete","deleteForward"])}init(){const e=this.editor,i=e.editing.view;e.config.get("restrictedEditing.allowedCommands").forEach((e=>this._allowedInException.add(e))),this._setupConversion(),this._setupCommandsToggling(),this._setupRestrictions(),e.commands.add("goToPreviousRestrictedEditingException",new t(e,"backward")),e.commands.add("goToNextRestrictedEditingException",new t(e,"forward")),e.keystrokes.set("Tab",m(e,"goToNextRestrictedEditingException")),e.keystrokes.set("Shift+Tab",m(e,"goToPreviousRestrictedEditingException")),e.keystrokes.set("Ctrl+A",function(e){return(t,i)=>{const n=e.model,r=e.model.document.selection,o=s(e,r.focus);if(!o)return;const c=r.getFirstRange();(o.getRange().containsRange(c,!0)||r.isCollapsed)&&(i(),n.change((e=>{e.setSelection(o.getRange())})))}}(e)),i.change((e=>{for(const t of i.document.roots)e.addClass("ck-restricted-editing_mode_restricted",t)}))}enableCommand(e){this.editor.commands.get(e).clearForceDisabled(g),this._alwaysEnabled.add(e)}_setupConversion(){const e=this.editor,t=e.model.document;let i=0;var n;e.conversion.for("upcast").add((n={view:{name:"span",classes:"restricted-editing-exception"},model:()=>(i++,`restrictedEditingException:${i}`)},e=>e.on("element:span",((e,t,i)=>{const{writer:r}=i,s=new o.Matcher(n.view).match(t.viewItem);if(!s)return;const c=s.match;c.name=!0;const{modelRange:a}=i.convertChildren(t.viewItem,t.modelCursor);i.consumable.consume(t.viewItem,c);const d=n.model(t.viewItem),l=r.createElement("$marker",{"data-name":d}),g=r.createElement("$marker",{"data-name":d});r.insert(g,a.end),r.insert(l,a.start),t.modelRange=r.createRange(r.createPositionBefore(l),r.createPositionAfter(g)),t.modelCursor=t.modelRange.end})))),e.conversion.for("downcast").markerToHighlight({model:"restrictedEditingException",view:()=>({name:"span",classes:"restricted-editing-exception",priority:-10})}),e.conversion.for("editingDowncast").markerToElement({model:"restrictedEditingException",view:(e,{writer:t})=>t.createUIElement("span",{class:"restricted-editing-exception restricted-editing-exception_collapsed"})}),e.conversion.for("dataDowncast").markerToElement({model:"restrictedEditingException",view:(e,{writer:t})=>t.createEmptyElement("span",{class:"restricted-editing-exception"})}),t.registerPostFixer(function(e){return t=>{let i=!1;for(const n of e.model.document.differ.getChanges())"insert"==n.type&&"$text"==n.name&&(i=d(e,n.position,n.length,t)||i,i=l(e,n.position,n.length,t)||i);return i}}(e)),t.registerPostFixer(function(e){return t=>{let i=!1;for(const{name:n,data:r}of e.model.document.differ.getChangedMarkers())n.startsWith("restrictedEditingException")&&r.newRange&&"$graveyard"==r.newRange.root.rootName&&(t.updateMarker(n,{range:t.createRange(t.createPositionAt(r.oldRange.start))}),i=!0);return i}}(e)),t.registerPostFixer(function(e){return t=>{let i=!1;const n=e.model.document.differ.getChangedMarkers();for(const{data:{newRange:e,oldRange:r},name:o}of n)if(o.startsWith("restrictedEditingException")&&!r&&!e.isFlat){const n=e.start,r=e.end,s=n.path.length>r.path.length,c=s?e.start:t.createPositionAt(r.parent,0),a=s?t.createPositionAt(n.parent,"end"):e.end;t.updateMarker(o,{range:t.createRange(c,a)}),i=!0}return i}}(e)),function(e){const t=e.editing.view,i=e.model,n=new Set;t.document.registerPostFixer((t=>{const r=i.document.selection,o=s(e,r.anchor);if(o)for(const i of e.editing.mapper.markerNameToElements(o.name))t.addClass(a,i),n.add(i)})),e.conversion.for("editingDowncast").add((e=>{function i(){t.change((e=>{for(const t of n.values())e.removeClass(a,t),n.delete(t)}))}e.on("insert",i,{priority:"highest"}),e.on("remove",i,{priority:"highest"}),e.on("attribute",i,{priority:"highest"}),e.on("selection",i,{priority:"highest"})}))}(e)}_setupRestrictions(){const e=this.editor,t=e.model,i=t.document.selection,n=e.editing.view.document,r=e.plugins.get("ClipboardPipeline");this.listenTo(t,"deleteContent",function(e){return(t,i)=>{const[n]=i,r=s(e,n.focus)||s(e,n.anchor);if(!r)return void t.stop();if(n.isCollapsed)return;const o=r.getRange().getIntersection(n.getFirstRange());n.is("documentSelection")?e.model.change((e=>{e.setSelection(o)})):n.setTo(o)}}(e),{priority:"high"});const o=e.commands.get("input");o&&this.listenTo(o,"execute",function(e){return(t,i)=>{const[n]=i,{range:r}=n;r&&(h(e,r)||t.stop())}}(e),{priority:"high"}),this.listenTo(r,"contentInsertion",(t=>{h(e,i.getFirstRange())||t.stop()})),this.listenTo(n,"clipboardOutput",((t,n)=>{"cut"!=n.method||h(e,i.getFirstRange())||t.stop()}),{priority:"high"});const c=e.config.get("restrictedEditing.allowedAttributes");t.schema.addAttributeCheck(function(e){return(t,i)=>{if(t.startsWith("$clipboardHolder"))return e.includes(i)}}(c)),t.schema.addChildCheck(f)}_setupCommandsToggling(){const e=this.editor.model.document;this._disableCommands(),this.listenTo(e.selection,"change",this._checkCommands.bind(this)),this.listenTo(e,"change:data",this._checkCommands.bind(this))}_checkCommands(){const e=this.editor,t=e.model.document.selection;if(t.rangeCount>1)return void this._disableCommands();const i=s(e,t.focus);this._disableCommands(),function(e,t){if(!t)return!1;const i=t.getRange();return e.isCollapsed?c(i,e.focus):i.containsRange(e.getFirstRange(),!0)}(t,i)&&this._enableCommands(i)}_enableCommands(e){const t=this.editor;for(const[i,n]of t.commands)n.affectsData&&!this._alwaysEnabled.has(i)&&this._allowedInException.has(i)&&(p(i,t.model.document.selection,e.getRange())||n.clearForceDisabled(g))}_disableCommands(){const e=this.editor;for(const[t,i]of e.commands)i.affectsData&&!this._alwaysEnabled.has(t)&&i.forceDisabled(g)}}function m(e,t){return(i,n)=>{e.commands.get(t).isEnabled&&(e.execute(t),n())}}function p(e,t,i){return!("delete"!=e||!i.start.isEqual(t.focus))||!("deleteForward"!=e||!t.isCollapsed||!i.end.isEqual(t.focus))}function h(e,t){const i=s(e,t.start),n=s(e,t.end);return i&&n&&n===i}function f(e,t){if(e.startsWith("$clipboardHolder"))return"$text"===t.name}var v=i(273),b=i(209);class E extends e.Plugin{static get pluginName(){return"RestrictedEditingModeUI"}init(){const e=this.editor,t=e.t;e.ui.componentFactory.add("restrictedEditing",(i=>{const n=(0,v.createDropdown)(i),r=new b.Collection;return r.add(this._getButtonDefinition("goToPreviousRestrictedEditingException",t("Previous editable region"),"Shift+Tab")),r.add(this._getButtonDefinition("goToNextRestrictedEditingException",t("Next editable region"),"Tab")),(0,v.addListToDropdown)(n,r),n.buttonView.set({label:t("Navigate editable regions"),icon:'<svg viewBox="0 0 20 20" xmlns="http://www.w3.org/2000/svg"><path d="M15.5 6.5a3.5 3.5 0 0 1 3.495 3.308L19 10v2a1 1 0 0 1 1 1v5a1 1 0 0 1-1 1h-7a1 1 0 0 1-1-1v-5a1 1 0 0 1 1-1v-2l.005-.192A3.5 3.5 0 0 1 15.5 6.5zm0 7.5a.5.5 0 0 0-.492.41L15 14.5v2a.5.5 0 0 0 .992.09L16 16.5v-2a.5.5 0 0 0-.5-.5zm0-6a2 2 0 0 0-2 2v2h4v-2a2 2 0 0 0-2-2zm-9.25 8a.75.75 0 1 1 0 1.5H.75a.75.75 0 1 1 0-1.5h5.5zm0-5a.75.75 0 1 1 0 1.5H.75a.75.75 0 1 1 0-1.5h5.5zm3-5a.75.75 0 0 1 0 1.5H.75a.75.75 0 0 1 0-1.5h8.5zm6-5a.75.75 0 1 1 0 1.5H.75a.75.75 0 0 1 0-1.5h14.5z"/></svg>',tooltip:!0,isEnabled:!0,isOn:!1}),this.listenTo(n,"execute",(t=>{e.execute(t.source._commandName),e.editing.view.focus()})),n}))}_getButtonDefinition(e,t,i){const n=this.editor.commands.get(e),r={type:"button",model:new v.Model({label:t,withText:!0,keystroke:i,withKeystroke:!0,_commandName:e})};return r.model.bind("isEnabled").to(n,"isEnabled"),r}}var x=i(62),w=i.n(x),k=i(673),_={injectType:"singletonStyleTag",attributes:{"data-cke":!0},insert:"head",singleton:!0};w()(k.Z,_);k.Z.locals;class y extends e.Plugin{static get pluginName(){return"RestrictedEditingMode"}static get requires(){return[u,E]}}class C extends e.Command{refresh(){const e=this.editor.model,t=e.document;this.value=!!t.selection.getAttribute("restrictedEditingException"),this.isEnabled=e.schema.checkAttributeInSelection(t.selection,"restrictedEditingException")}execute(e={}){const t=this.editor.model,i=t.document.selection,n=void 0===e.forceValue?!this.value:e.forceValue;t.change((e=>{const r=t.schema.getValidRanges(i.getRanges(),"restrictedEditingException");if(i.isCollapsed)if(n)e.setSelectionAttribute("restrictedEditingException",n);else{const t=e=>e.item.getAttribute("restrictedEditingException")===this.value,n=i.focus.getLastMatchingPosition(t,{direction:"backward"}),r=i.focus.getLastMatchingPosition(t),o=i.focus;e.removeSelectionAttribute("restrictedEditingException"),o.isEqual(n)||o.isEqual(r)||e.removeAttribute("restrictedEditingException",e.createRange(n,r))}else for(const t of r)n?e.setAttribute("restrictedEditingException",n,t):e.removeAttribute("restrictedEditingException",t)}))}}class R extends e.Plugin{static get pluginName(){return"StandardEditingModeEditing"}init(){const e=this.editor;e.model.schema.extend("$text",{allowAttributes:["restrictedEditingException"]}),e.conversion.for("upcast").elementToAttribute({model:"restrictedEditingException",view:{name:"span",classes:"restricted-editing-exception"}}),e.conversion.for("downcast").attributeToElement({model:"restrictedEditingException",view:(e,{writer:t})=>{if(e)return t.createAttributeElement("span",{class:"restricted-editing-exception"},{priority:-10})}}),e.commands.add("restrictedEditingException",new C(e)),e.editing.view.change((t=>{for(const i of e.editing.view.document.roots)t.addClass("ck-restricted-editing_mode_standard",i)}))}}class T extends e.Plugin{init(){const e=this.editor,t=e.t;e.ui.componentFactory.add("restrictedEditingException",(i=>{const n=e.commands.get("restrictedEditingException"),r=new v.ButtonView(i);return r.set({icon:'<svg viewBox="0 0 20 20" xmlns="http://www.w3.org/2000/svg"><path d="M6.25 16a.75.75 0 1 1 0 1.5H.75a.75.75 0 1 1 0-1.5h5.5zm0-5a.75.75 0 1 1 0 1.5H.75a.75.75 0 1 1 0-1.5h5.5zm3-5a.75.75 0 0 1 0 1.5H.75a.75.75 0 0 1 0-1.5h8.5zm6-5a.75.75 0 1 1 0 1.5H.75a.75.75 0 0 1 0-1.5h14.5zm.25 5.5a3.5 3.5 0 0 1 3.143 1.959.75.75 0 0 1-1.36.636A2 2 0 0 0 13.5 10v2H19a1 1 0 0 1 1 1v5a1 1 0 0 1-1 1h-7a1 1 0 0 1-1-1v-5a1 1 0 0 1 1-1v-2l.005-.192A3.5 3.5 0 0 1 15.5 6.5zm0 7.5a.5.5 0 0 0-.492.41L15 14.5v2a.5.5 0 0 0 .992.09L16 16.5v-2a.5.5 0 0 0-.5-.5z"/></svg>',tooltip:!0,isToggleable:!0}),r.bind("isOn","isEnabled").to(n,"value","isEnabled"),r.bind("label").to(n,"value",(e=>t(e?"Disable editing":"Enable editing"))),this.listenTo(r,"execute",(()=>{e.execute("restrictedEditingException"),e.editing.view.focus()})),r}))}}class S extends e.Plugin{static get pluginName(){return"StandardEditingMode"}static get requires(){return[R,T]}}})(),(window.CKEditor5=window.CKEditor5||{}).restrictedEditing=n})();
|
@@ -0,0 +1 @@
|
|
1
|
+
!function(i){const e=i.ar=i.ar||{};e.dictionary=Object.assign(e.dictionary||{},{"Disable editing":"تعطيل التحرير","Enable editing":"تمكين التحرير","Navigate editable regions":"التنقل في مناطق التحرير","Next editable region":"منطقة التحرير التالية","Previous editable region":"منطقة التحرير السابقة"})}(window.CKEDITOR_TRANSLATIONS||(window.CKEDITOR_TRANSLATIONS={}));
|
@@ -0,0 +1 @@
|
|
1
|
+
!function(i){const e=i.bg=i.bg||{};e.dictionary=Object.assign(e.dictionary||{},{"Disable editing":"Изключи възможност за редакция","Enable editing":"Разреши възможност за редакция ","Navigate editable regions":"Навигация между региони с възможност за редакция","Next editable region":"Следващ регион с възможност за редакция","Previous editable region":"Предишен регион с възможнос за редакция"})}(window.CKEDITOR_TRANSLATIONS||(window.CKEDITOR_TRANSLATIONS={}));
|
@@ -0,0 +1 @@
|
|
1
|
+
!function(i){const e=i.bn=i.bn||{};e.dictionary=Object.assign(e.dictionary||{},{"Disable editing":"সম্পাদনা নিষ্ক্রিয় করুন","Enable editing":"সম্পাদনা সক্রিয় করুন","Navigate editable regions":"সম্পাদনাযোগ্য অংশে নেভিগেট করুন","Next editable region":"পরবর্তী সম্পাদনাযোগ্য অংশ","Previous editable region":"পূর্ববর্তী সম্পাদনাযোগ্য অংশ"})}(window.CKEDITOR_TRANSLATIONS||(window.CKEDITOR_TRANSLATIONS={}));
|
@@ -0,0 +1 @@
|
|
1
|
+
!function(e){const i=e.ca=e.ca||{};i.dictionary=Object.assign(i.dictionary||{},{"Disable editing":"Desactivar l'edició","Enable editing":"Activar l'edició","Navigate editable regions":"Navegar per parts editables","Next editable region":"Següent part editable","Previous editable region":"Part editable anterior"})}(window.CKEDITOR_TRANSLATIONS||(window.CKEDITOR_TRANSLATIONS={}));
|
@@ -0,0 +1 @@
|
|
1
|
+
!function(a){const i=a.fi=a.fi||{};i.dictionary=Object.assign(i.dictionary||{},{"Disable editing":"Poista muokkaus käytöstä","Enable editing":"Ota muokkaus käyttöön","Navigate editable regions":"Siirry muokattavilla alueilla","Next editable region":"Seuraava muokattava alue","Previous editable region":"Aikaisempi muokattava alue"})}(window.CKEDITOR_TRANSLATIONS||(window.CKEDITOR_TRANSLATIONS={}));
|
@@ -0,0 +1 @@
|
|
1
|
+
!function(i){const e=i.he=i.he||{};e.dictionary=Object.assign(e.dictionary||{},{"Disable editing":"הפוך עריכה ללא זמינה","Enable editing":"אפשר עריכה","Navigate editable regions":"ניווט באזורים הניתנים לעריכה","Next editable region":"האזור הבא שניתן לעריכה","Previous editable region":"האזור הקודם שניתן לעריכה"})}(window.CKEDITOR_TRANSLATIONS||(window.CKEDITOR_TRANSLATIONS={}));
|
@@ -0,0 +1 @@
|
|
1
|
+
!function(i){const e=i.ja=i.ja||{};e.dictionary=Object.assign(e.dictionary||{},{"Disable editing":"編集を無効にする","Enable editing":"編集を有効にする","Navigate editable regions":"編集可能な領域をナビゲート","Next editable region":"次に編集可能な領域","Previous editable region":"前の編集可能な領域"})}(window.CKEDITOR_TRANSLATIONS||(window.CKEDITOR_TRANSLATIONS={}));
|
@@ -0,0 +1 @@
|
|
1
|
+
!function(i){const a=i.lt=i.lt||{};a.dictionary=Object.assign(a.dictionary||{},{"Disable editing":"Išjungti redagavimą","Enable editing":"Įjungti redagavimą","Navigate editable regions":"Naviguoti tarp redaguojamų sričių","Next editable region":"Sekanti redaguojama sritis","Previous editable region":"Buvusi redaguojama sritis"})}(window.CKEDITOR_TRANSLATIONS||(window.CKEDITOR_TRANSLATIONS={}));
|
@@ -0,0 +1 @@
|
|
1
|
+
!function(n){const a=n.ms=n.ms||{};a.dictionary=Object.assign(a.dictionary||{},{"Disable editing":"Matikan suntingan","Enable editing":"Benarkan suntingan","Navigate editable regions":"Kawal bahagian yang boleh disunting seterusnya","Next editable region":"Bahagian yang boleh disunting seterusnya","Previous editable region":"Bahagian yang boleh disunting sebelumnya"})}(window.CKEDITOR_TRANSLATIONS||(window.CKEDITOR_TRANSLATIONS={}));
|
@@ -0,0 +1 @@
|
|
1
|
+
!function(e){const i=e.pt=e.pt||{};i.dictionary=Object.assign(i.dictionary||{},{"Disable editing":"Desativar edição","Enable editing":"Ativar edição","Navigate editable regions":"Navegar regiões editáveis","Next editable region":"Região editável seguinte","Previous editable region":"Região editável anterior"})}(window.CKEDITOR_TRANSLATIONS||(window.CKEDITOR_TRANSLATIONS={}));
|
@@ -0,0 +1 @@
|
|
1
|
+
!function(e){const i=e.sv=e.sv||{};i.dictionary=Object.assign(i.dictionary||{},{"Disable editing":"Stäng av redigering","Enable editing":"Aktivera redigering","Navigate editable regions":"Navigera redigerbara områden","Next editable region":"Nästa redigerbara område","Previous editable region":"Föregående redigerbara område"})}(window.CKEDITOR_TRANSLATIONS||(window.CKEDITOR_TRANSLATIONS={}));
|
@@ -0,0 +1 @@
|
|
1
|
+
!function(i){const e=i.th=i.th||{};e.dictionary=Object.assign(e.dictionary||{},{"Disable editing":"ปิดใช้งานการแก้ไข","Enable editing":"เปิดใช้งานการแก้ไข","Navigate editable regions":"นำทางไปยังพื้นที่ซึ่งสามารถแก้ไขได้","Next editable region":"พื้นที่ซึ่งสามารถแก้ไขได้ถัดไป","Previous editable region":"พื้นที่ซึ่งสามารถแก้ไขได้ก่อนหน้านี้"})}(window.CKEDITOR_TRANSLATIONS||(window.CKEDITOR_TRANSLATIONS={}));
|
@@ -0,0 +1 @@
|
|
1
|
+
!function(n){const i=n.vi=n.vi||{};i.dictionary=Object.assign(i.dictionary||{},{"Disable editing":"Tắt tính năng chỉnh sửa","Enable editing":"Bật tính năng chỉnh sửa","Navigate editable regions":"Di chuyển giữa các vùng có thể chỉnh sửa","Next editable region":"Vùng có thể chỉnh sửa tiếp theo","Previous editable region":"Vùng có thể chỉnh sửa trước đó"})}(window.CKEDITOR_TRANSLATIONS||(window.CKEDITOR_TRANSLATIONS={}));
|
@@ -0,0 +1,37 @@
|
|
1
|
+
# Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved.
|
2
|
+
#
|
3
|
+
# !!! IMPORTANT !!!
|
4
|
+
#
|
5
|
+
# Before you edit this file, please keep in mind that contributing to the project
|
6
|
+
# translations is possible ONLY via the Transifex online service.
|
7
|
+
#
|
8
|
+
# To submit your translations, visit https://www.transifex.com/ckeditor/ckeditor5.
|
9
|
+
#
|
10
|
+
# To learn more, check out the official contributor's guide:
|
11
|
+
# https://ckeditor.com/docs/ckeditor5/latest/framework/guides/contributing/contributing.html
|
12
|
+
#
|
13
|
+
msgid ""
|
14
|
+
msgstr ""
|
15
|
+
"Language-Team: Arabic (https://www.transifex.com/ckeditor/teams/11143/ar/)\n"
|
16
|
+
"Language: ar\n"
|
17
|
+
"Plural-Forms: nplurals=6; plural=n==0 ? 0 : n==1 ? 1 : n==2 ? 2 : n%100>=3 && n%100<=10 ? 3 : n%100>=11 && n%100<=99 ? 4 : 5;\n"
|
18
|
+
|
19
|
+
msgctxt "A label of the button indicating that using this button will make a selected text non–editable."
|
20
|
+
msgid "Disable editing"
|
21
|
+
msgstr "تعطيل التحرير"
|
22
|
+
|
23
|
+
msgctxt "A label of the button indicating that using this button will make a selected text editable."
|
24
|
+
msgid "Enable editing"
|
25
|
+
msgstr "تمكين التحرير"
|
26
|
+
|
27
|
+
msgctxt "A label of the button that moves selection to the previous editable region in the content."
|
28
|
+
msgid "Previous editable region"
|
29
|
+
msgstr "منطقة التحرير السابقة"
|
30
|
+
|
31
|
+
msgctxt "A label of the button that moves selection to the next editable region in the content."
|
32
|
+
msgid "Next editable region"
|
33
|
+
msgstr "منطقة التحرير التالية"
|
34
|
+
|
35
|
+
msgctxt "A label of the dropdown that provides controls to navigate editable regions in the content."
|
36
|
+
msgid "Navigate editable regions"
|
37
|
+
msgstr "التنقل في مناطق التحرير"
|
@@ -0,0 +1,37 @@
|
|
1
|
+
# Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved.
|
2
|
+
#
|
3
|
+
# !!! IMPORTANT !!!
|
4
|
+
#
|
5
|
+
# Before you edit this file, please keep in mind that contributing to the project
|
6
|
+
# translations is possible ONLY via the Transifex online service.
|
7
|
+
#
|
8
|
+
# To submit your translations, visit https://www.transifex.com/ckeditor/ckeditor5.
|
9
|
+
#
|
10
|
+
# To learn more, check out the official contributor's guide:
|
11
|
+
# https://ckeditor.com/docs/ckeditor5/latest/framework/guides/contributing/contributing.html
|
12
|
+
#
|
13
|
+
msgid ""
|
14
|
+
msgstr ""
|
15
|
+
"Language-Team: Bulgarian (https://www.transifex.com/ckeditor/teams/11143/bg/)\n"
|
16
|
+
"Language: bg\n"
|
17
|
+
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
|
18
|
+
|
19
|
+
msgctxt "A label of the button indicating that using this button will make a selected text non–editable."
|
20
|
+
msgid "Disable editing"
|
21
|
+
msgstr "Изключи възможност за редакция"
|
22
|
+
|
23
|
+
msgctxt "A label of the button indicating that using this button will make a selected text editable."
|
24
|
+
msgid "Enable editing"
|
25
|
+
msgstr "Разреши възможност за редакция "
|
26
|
+
|
27
|
+
msgctxt "A label of the button that moves selection to the previous editable region in the content."
|
28
|
+
msgid "Previous editable region"
|
29
|
+
msgstr "Предишен регион с възможнос за редакция"
|
30
|
+
|
31
|
+
msgctxt "A label of the button that moves selection to the next editable region in the content."
|
32
|
+
msgid "Next editable region"
|
33
|
+
msgstr "Следващ регион с възможност за редакция"
|
34
|
+
|
35
|
+
msgctxt "A label of the dropdown that provides controls to navigate editable regions in the content."
|
36
|
+
msgid "Navigate editable regions"
|
37
|
+
msgstr "Навигация между региони с възможност за редакция"
|
@@ -0,0 +1,37 @@
|
|
1
|
+
# Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved.
|
2
|
+
#
|
3
|
+
# !!! IMPORTANT !!!
|
4
|
+
#
|
5
|
+
# Before you edit this file, please keep in mind that contributing to the project
|
6
|
+
# translations is possible ONLY via the Transifex online service.
|
7
|
+
#
|
8
|
+
# To submit your translations, visit https://www.transifex.com/ckeditor/ckeditor5.
|
9
|
+
#
|
10
|
+
# To learn more, check out the official contributor's guide:
|
11
|
+
# https://ckeditor.com/docs/ckeditor5/latest/framework/guides/contributing/contributing.html
|
12
|
+
#
|
13
|
+
msgid ""
|
14
|
+
msgstr ""
|
15
|
+
"Language-Team: Bengali (https://www.transifex.com/ckeditor/teams/11143/bn/)\n"
|
16
|
+
"Language: bn\n"
|
17
|
+
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
|
18
|
+
|
19
|
+
msgctxt "A label of the button indicating that using this button will make a selected text non–editable."
|
20
|
+
msgid "Disable editing"
|
21
|
+
msgstr "সম্পাদনা নিষ্ক্রিয় করুন"
|
22
|
+
|
23
|
+
msgctxt "A label of the button indicating that using this button will make a selected text editable."
|
24
|
+
msgid "Enable editing"
|
25
|
+
msgstr "সম্পাদনা সক্রিয় করুন"
|
26
|
+
|
27
|
+
msgctxt "A label of the button that moves selection to the previous editable region in the content."
|
28
|
+
msgid "Previous editable region"
|
29
|
+
msgstr "পূর্ববর্তী সম্পাদনাযোগ্য অংশ"
|
30
|
+
|
31
|
+
msgctxt "A label of the button that moves selection to the next editable region in the content."
|
32
|
+
msgid "Next editable region"
|
33
|
+
msgstr "পরবর্তী সম্পাদনাযোগ্য অংশ"
|
34
|
+
|
35
|
+
msgctxt "A label of the dropdown that provides controls to navigate editable regions in the content."
|
36
|
+
msgid "Navigate editable regions"
|
37
|
+
msgstr "সম্পাদনাযোগ্য অংশে নেভিগেট করুন"
|
@@ -0,0 +1,37 @@
|
|
1
|
+
# Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved.
|
2
|
+
#
|
3
|
+
# !!! IMPORTANT !!!
|
4
|
+
#
|
5
|
+
# Before you edit this file, please keep in mind that contributing to the project
|
6
|
+
# translations is possible ONLY via the Transifex online service.
|
7
|
+
#
|
8
|
+
# To submit your translations, visit https://www.transifex.com/ckeditor/ckeditor5.
|
9
|
+
#
|
10
|
+
# To learn more, check out the official contributor's guide:
|
11
|
+
# https://ckeditor.com/docs/ckeditor5/latest/framework/guides/contributing/contributing.html
|
12
|
+
#
|
13
|
+
msgid ""
|
14
|
+
msgstr ""
|
15
|
+
"Language-Team: Catalan (https://www.transifex.com/ckeditor/teams/11143/ca/)\n"
|
16
|
+
"Language: ca\n"
|
17
|
+
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
|
18
|
+
|
19
|
+
msgctxt "A label of the button indicating that using this button will make a selected text non–editable."
|
20
|
+
msgid "Disable editing"
|
21
|
+
msgstr "Desactivar l'edició"
|
22
|
+
|
23
|
+
msgctxt "A label of the button indicating that using this button will make a selected text editable."
|
24
|
+
msgid "Enable editing"
|
25
|
+
msgstr "Activar l'edició"
|
26
|
+
|
27
|
+
msgctxt "A label of the button that moves selection to the previous editable region in the content."
|
28
|
+
msgid "Previous editable region"
|
29
|
+
msgstr "Part editable anterior"
|
30
|
+
|
31
|
+
msgctxt "A label of the button that moves selection to the next editable region in the content."
|
32
|
+
msgid "Next editable region"
|
33
|
+
msgstr "Següent part editable"
|
34
|
+
|
35
|
+
msgctxt "A label of the dropdown that provides controls to navigate editable regions in the content."
|
36
|
+
msgid "Navigate editable regions"
|
37
|
+
msgstr "Navegar per parts editables"
|
package/lang/translations/es.po
CHANGED
@@ -14,7 +14,7 @@ msgid ""
|
|
14
14
|
msgstr ""
|
15
15
|
"Language-Team: Spanish (https://www.transifex.com/ckeditor/teams/11143/es/)\n"
|
16
16
|
"Language: es\n"
|
17
|
-
"Plural-Forms: nplurals=
|
17
|
+
"Plural-Forms: nplurals=3; plural=n == 1 ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;\n"
|
18
18
|
|
19
19
|
msgctxt "A label of the button indicating that using this button will make a selected text non–editable."
|
20
20
|
msgid "Disable editing"
|
@@ -0,0 +1,37 @@
|
|
1
|
+
# Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved.
|
2
|
+
#
|
3
|
+
# !!! IMPORTANT !!!
|
4
|
+
#
|
5
|
+
# Before you edit this file, please keep in mind that contributing to the project
|
6
|
+
# translations is possible ONLY via the Transifex online service.
|
7
|
+
#
|
8
|
+
# To submit your translations, visit https://www.transifex.com/ckeditor/ckeditor5.
|
9
|
+
#
|
10
|
+
# To learn more, check out the official contributor's guide:
|
11
|
+
# https://ckeditor.com/docs/ckeditor5/latest/framework/guides/contributing/contributing.html
|
12
|
+
#
|
13
|
+
msgid ""
|
14
|
+
msgstr ""
|
15
|
+
"Language-Team: Finnish (https://www.transifex.com/ckeditor/teams/11143/fi/)\n"
|
16
|
+
"Language: fi\n"
|
17
|
+
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
|
18
|
+
|
19
|
+
msgctxt "A label of the button indicating that using this button will make a selected text non–editable."
|
20
|
+
msgid "Disable editing"
|
21
|
+
msgstr "Poista muokkaus käytöstä"
|
22
|
+
|
23
|
+
msgctxt "A label of the button indicating that using this button will make a selected text editable."
|
24
|
+
msgid "Enable editing"
|
25
|
+
msgstr "Ota muokkaus käyttöön"
|
26
|
+
|
27
|
+
msgctxt "A label of the button that moves selection to the previous editable region in the content."
|
28
|
+
msgid "Previous editable region"
|
29
|
+
msgstr "Aikaisempi muokattava alue"
|
30
|
+
|
31
|
+
msgctxt "A label of the button that moves selection to the next editable region in the content."
|
32
|
+
msgid "Next editable region"
|
33
|
+
msgstr "Seuraava muokattava alue"
|
34
|
+
|
35
|
+
msgctxt "A label of the dropdown that provides controls to navigate editable regions in the content."
|
36
|
+
msgid "Navigate editable regions"
|
37
|
+
msgstr "Siirry muokattavilla alueilla"
|
package/lang/translations/fr.po
CHANGED
@@ -14,7 +14,7 @@ msgid ""
|
|
14
14
|
msgstr ""
|
15
15
|
"Language-Team: French (https://www.transifex.com/ckeditor/teams/11143/fr/)\n"
|
16
16
|
"Language: fr\n"
|
17
|
-
"Plural-Forms: nplurals=
|
17
|
+
"Plural-Forms: nplurals=3; plural=(n == 0 || n == 1) ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;\n"
|
18
18
|
|
19
19
|
msgctxt "A label of the button indicating that using this button will make a selected text non–editable."
|
20
20
|
msgid "Disable editing"
|
@@ -0,0 +1,37 @@
|
|
1
|
+
# Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved.
|
2
|
+
#
|
3
|
+
# !!! IMPORTANT !!!
|
4
|
+
#
|
5
|
+
# Before you edit this file, please keep in mind that contributing to the project
|
6
|
+
# translations is possible ONLY via the Transifex online service.
|
7
|
+
#
|
8
|
+
# To submit your translations, visit https://www.transifex.com/ckeditor/ckeditor5.
|
9
|
+
#
|
10
|
+
# To learn more, check out the official contributor's guide:
|
11
|
+
# https://ckeditor.com/docs/ckeditor5/latest/framework/guides/contributing/contributing.html
|
12
|
+
#
|
13
|
+
msgid ""
|
14
|
+
msgstr ""
|
15
|
+
"Language-Team: Hebrew (https://www.transifex.com/ckeditor/teams/11143/he/)\n"
|
16
|
+
"Language: he\n"
|
17
|
+
"Plural-Forms: nplurals=4; plural=(n == 1 && n % 1 == 0) ? 0 : (n == 2 && n % 1 == 0) ? 1: (n % 10 == 0 && n % 1 == 0 && n > 10) ? 2 : 3;\n"
|
18
|
+
|
19
|
+
msgctxt "A label of the button indicating that using this button will make a selected text non–editable."
|
20
|
+
msgid "Disable editing"
|
21
|
+
msgstr "הפוך עריכה ללא זמינה"
|
22
|
+
|
23
|
+
msgctxt "A label of the button indicating that using this button will make a selected text editable."
|
24
|
+
msgid "Enable editing"
|
25
|
+
msgstr "אפשר עריכה"
|
26
|
+
|
27
|
+
msgctxt "A label of the button that moves selection to the previous editable region in the content."
|
28
|
+
msgid "Previous editable region"
|
29
|
+
msgstr "האזור הקודם שניתן לעריכה"
|
30
|
+
|
31
|
+
msgctxt "A label of the button that moves selection to the next editable region in the content."
|
32
|
+
msgid "Next editable region"
|
33
|
+
msgstr "האזור הבא שניתן לעריכה"
|
34
|
+
|
35
|
+
msgctxt "A label of the dropdown that provides controls to navigate editable regions in the content."
|
36
|
+
msgid "Navigate editable regions"
|
37
|
+
msgstr "ניווט באזורים הניתנים לעריכה"
|
package/lang/translations/it.po
CHANGED
@@ -14,7 +14,7 @@ msgid ""
|
|
14
14
|
msgstr ""
|
15
15
|
"Language-Team: Italian (https://www.transifex.com/ckeditor/teams/11143/it/)\n"
|
16
16
|
"Language: it\n"
|
17
|
-
"Plural-Forms: nplurals=
|
17
|
+
"Plural-Forms: nplurals=3; plural=n == 1 ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;\n"
|
18
18
|
|
19
19
|
msgctxt "A label of the button indicating that using this button will make a selected text non–editable."
|
20
20
|
msgid "Disable editing"
|
@@ -0,0 +1,37 @@
|
|
1
|
+
# Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved.
|
2
|
+
#
|
3
|
+
# !!! IMPORTANT !!!
|
4
|
+
#
|
5
|
+
# Before you edit this file, please keep in mind that contributing to the project
|
6
|
+
# translations is possible ONLY via the Transifex online service.
|
7
|
+
#
|
8
|
+
# To submit your translations, visit https://www.transifex.com/ckeditor/ckeditor5.
|
9
|
+
#
|
10
|
+
# To learn more, check out the official contributor's guide:
|
11
|
+
# https://ckeditor.com/docs/ckeditor5/latest/framework/guides/contributing/contributing.html
|
12
|
+
#
|
13
|
+
msgid ""
|
14
|
+
msgstr ""
|
15
|
+
"Language-Team: Japanese (https://www.transifex.com/ckeditor/teams/11143/ja/)\n"
|
16
|
+
"Language: ja\n"
|
17
|
+
"Plural-Forms: nplurals=1; plural=0;\n"
|
18
|
+
|
19
|
+
msgctxt "A label of the button indicating that using this button will make a selected text non–editable."
|
20
|
+
msgid "Disable editing"
|
21
|
+
msgstr "編集を無効にする"
|
22
|
+
|
23
|
+
msgctxt "A label of the button indicating that using this button will make a selected text editable."
|
24
|
+
msgid "Enable editing"
|
25
|
+
msgstr "編集を有効にする"
|
26
|
+
|
27
|
+
msgctxt "A label of the button that moves selection to the previous editable region in the content."
|
28
|
+
msgid "Previous editable region"
|
29
|
+
msgstr "前の編集可能な領域"
|
30
|
+
|
31
|
+
msgctxt "A label of the button that moves selection to the next editable region in the content."
|
32
|
+
msgid "Next editable region"
|
33
|
+
msgstr "次に編集可能な領域"
|
34
|
+
|
35
|
+
msgctxt "A label of the dropdown that provides controls to navigate editable regions in the content."
|
36
|
+
msgid "Navigate editable regions"
|
37
|
+
msgstr "編集可能な領域をナビゲート"
|
@@ -0,0 +1,37 @@
|
|
1
|
+
# Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved.
|
2
|
+
#
|
3
|
+
# !!! IMPORTANT !!!
|
4
|
+
#
|
5
|
+
# Before you edit this file, please keep in mind that contributing to the project
|
6
|
+
# translations is possible ONLY via the Transifex online service.
|
7
|
+
#
|
8
|
+
# To submit your translations, visit https://www.transifex.com/ckeditor/ckeditor5.
|
9
|
+
#
|
10
|
+
# To learn more, check out the official contributor's guide:
|
11
|
+
# https://ckeditor.com/docs/ckeditor5/latest/framework/guides/contributing/contributing.html
|
12
|
+
#
|
13
|
+
msgid ""
|
14
|
+
msgstr ""
|
15
|
+
"Language-Team: Lithuanian (https://www.transifex.com/ckeditor/teams/11143/lt/)\n"
|
16
|
+
"Language: lt\n"
|
17
|
+
"Plural-Forms: nplurals=4; plural=(n % 10 == 1 && (n % 100 > 19 || n % 100 < 11) ? 0 : (n % 10 >= 2 && n % 10 <=9) && (n % 100 > 19 || n % 100 < 11) ? 1 : n % 1 != 0 ? 2: 3);\n"
|
18
|
+
|
19
|
+
msgctxt "A label of the button indicating that using this button will make a selected text non–editable."
|
20
|
+
msgid "Disable editing"
|
21
|
+
msgstr "Išjungti redagavimą"
|
22
|
+
|
23
|
+
msgctxt "A label of the button indicating that using this button will make a selected text editable."
|
24
|
+
msgid "Enable editing"
|
25
|
+
msgstr "Įjungti redagavimą"
|
26
|
+
|
27
|
+
msgctxt "A label of the button that moves selection to the previous editable region in the content."
|
28
|
+
msgid "Previous editable region"
|
29
|
+
msgstr "Buvusi redaguojama sritis"
|
30
|
+
|
31
|
+
msgctxt "A label of the button that moves selection to the next editable region in the content."
|
32
|
+
msgid "Next editable region"
|
33
|
+
msgstr "Sekanti redaguojama sritis"
|
34
|
+
|
35
|
+
msgctxt "A label of the dropdown that provides controls to navigate editable regions in the content."
|
36
|
+
msgid "Navigate editable regions"
|
37
|
+
msgstr "Naviguoti tarp redaguojamų sričių"
|
@@ -0,0 +1,37 @@
|
|
1
|
+
# Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved.
|
2
|
+
#
|
3
|
+
# !!! IMPORTANT !!!
|
4
|
+
#
|
5
|
+
# Before you edit this file, please keep in mind that contributing to the project
|
6
|
+
# translations is possible ONLY via the Transifex online service.
|
7
|
+
#
|
8
|
+
# To submit your translations, visit https://www.transifex.com/ckeditor/ckeditor5.
|
9
|
+
#
|
10
|
+
# To learn more, check out the official contributor's guide:
|
11
|
+
# https://ckeditor.com/docs/ckeditor5/latest/framework/guides/contributing/contributing.html
|
12
|
+
#
|
13
|
+
msgid ""
|
14
|
+
msgstr ""
|
15
|
+
"Language-Team: Malay (https://www.transifex.com/ckeditor/teams/11143/ms/)\n"
|
16
|
+
"Language: ms\n"
|
17
|
+
"Plural-Forms: nplurals=1; plural=0;\n"
|
18
|
+
|
19
|
+
msgctxt "A label of the button indicating that using this button will make a selected text non–editable."
|
20
|
+
msgid "Disable editing"
|
21
|
+
msgstr "Matikan suntingan"
|
22
|
+
|
23
|
+
msgctxt "A label of the button indicating that using this button will make a selected text editable."
|
24
|
+
msgid "Enable editing"
|
25
|
+
msgstr "Benarkan suntingan"
|
26
|
+
|
27
|
+
msgctxt "A label of the button that moves selection to the previous editable region in the content."
|
28
|
+
msgid "Previous editable region"
|
29
|
+
msgstr "Bahagian yang boleh disunting sebelumnya"
|
30
|
+
|
31
|
+
msgctxt "A label of the button that moves selection to the next editable region in the content."
|
32
|
+
msgid "Next editable region"
|
33
|
+
msgstr "Bahagian yang boleh disunting seterusnya"
|
34
|
+
|
35
|
+
msgctxt "A label of the dropdown that provides controls to navigate editable regions in the content."
|
36
|
+
msgid "Navigate editable regions"
|
37
|
+
msgstr "Kawal bahagian yang boleh disunting seterusnya"
|
@@ -14,7 +14,7 @@ msgid ""
|
|
14
14
|
msgstr ""
|
15
15
|
"Language-Team: Portuguese (Brazil) (https://www.transifex.com/ckeditor/teams/11143/pt_BR/)\n"
|
16
16
|
"Language: pt_BR\n"
|
17
|
-
"Plural-Forms: nplurals=
|
17
|
+
"Plural-Forms: nplurals=3; plural=(n == 0 || n == 1) ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;\n"
|
18
18
|
|
19
19
|
msgctxt "A label of the button indicating that using this button will make a selected text non–editable."
|
20
20
|
msgid "Disable editing"
|
@@ -0,0 +1,37 @@
|
|
1
|
+
# Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved.
|
2
|
+
#
|
3
|
+
# !!! IMPORTANT !!!
|
4
|
+
#
|
5
|
+
# Before you edit this file, please keep in mind that contributing to the project
|
6
|
+
# translations is possible ONLY via the Transifex online service.
|
7
|
+
#
|
8
|
+
# To submit your translations, visit https://www.transifex.com/ckeditor/ckeditor5.
|
9
|
+
#
|
10
|
+
# To learn more, check out the official contributor's guide:
|
11
|
+
# https://ckeditor.com/docs/ckeditor5/latest/framework/guides/contributing/contributing.html
|
12
|
+
#
|
13
|
+
msgid ""
|
14
|
+
msgstr ""
|
15
|
+
"Language-Team: Portuguese (https://www.transifex.com/ckeditor/teams/11143/pt/)\n"
|
16
|
+
"Language: pt\n"
|
17
|
+
"Plural-Forms: nplurals=3; plural=(n == 0 || n == 1) ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;\n"
|
18
|
+
|
19
|
+
msgctxt "A label of the button indicating that using this button will make a selected text non–editable."
|
20
|
+
msgid "Disable editing"
|
21
|
+
msgstr "Desativar edição"
|
22
|
+
|
23
|
+
msgctxt "A label of the button indicating that using this button will make a selected text editable."
|
24
|
+
msgid "Enable editing"
|
25
|
+
msgstr "Ativar edição"
|
26
|
+
|
27
|
+
msgctxt "A label of the button that moves selection to the previous editable region in the content."
|
28
|
+
msgid "Previous editable region"
|
29
|
+
msgstr "Região editável anterior"
|
30
|
+
|
31
|
+
msgctxt "A label of the button that moves selection to the next editable region in the content."
|
32
|
+
msgid "Next editable region"
|
33
|
+
msgstr "Região editável seguinte"
|
34
|
+
|
35
|
+
msgctxt "A label of the dropdown that provides controls to navigate editable regions in the content."
|
36
|
+
msgid "Navigate editable regions"
|
37
|
+
msgstr "Navegar regiões editáveis"
|
@@ -0,0 +1,37 @@
|
|
1
|
+
# Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved.
|
2
|
+
#
|
3
|
+
# !!! IMPORTANT !!!
|
4
|
+
#
|
5
|
+
# Before you edit this file, please keep in mind that contributing to the project
|
6
|
+
# translations is possible ONLY via the Transifex online service.
|
7
|
+
#
|
8
|
+
# To submit your translations, visit https://www.transifex.com/ckeditor/ckeditor5.
|
9
|
+
#
|
10
|
+
# To learn more, check out the official contributor's guide:
|
11
|
+
# https://ckeditor.com/docs/ckeditor5/latest/framework/guides/contributing/contributing.html
|
12
|
+
#
|
13
|
+
msgid ""
|
14
|
+
msgstr ""
|
15
|
+
"Language-Team: Swedish (https://www.transifex.com/ckeditor/teams/11143/sv/)\n"
|
16
|
+
"Language: sv\n"
|
17
|
+
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
|
18
|
+
|
19
|
+
msgctxt "A label of the button indicating that using this button will make a selected text non–editable."
|
20
|
+
msgid "Disable editing"
|
21
|
+
msgstr "Stäng av redigering"
|
22
|
+
|
23
|
+
msgctxt "A label of the button indicating that using this button will make a selected text editable."
|
24
|
+
msgid "Enable editing"
|
25
|
+
msgstr "Aktivera redigering"
|
26
|
+
|
27
|
+
msgctxt "A label of the button that moves selection to the previous editable region in the content."
|
28
|
+
msgid "Previous editable region"
|
29
|
+
msgstr "Föregående redigerbara område"
|
30
|
+
|
31
|
+
msgctxt "A label of the button that moves selection to the next editable region in the content."
|
32
|
+
msgid "Next editable region"
|
33
|
+
msgstr "Nästa redigerbara område"
|
34
|
+
|
35
|
+
msgctxt "A label of the dropdown that provides controls to navigate editable regions in the content."
|
36
|
+
msgid "Navigate editable regions"
|
37
|
+
msgstr "Navigera redigerbara områden"
|
@@ -0,0 +1,37 @@
|
|
1
|
+
# Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved.
|
2
|
+
#
|
3
|
+
# !!! IMPORTANT !!!
|
4
|
+
#
|
5
|
+
# Before you edit this file, please keep in mind that contributing to the project
|
6
|
+
# translations is possible ONLY via the Transifex online service.
|
7
|
+
#
|
8
|
+
# To submit your translations, visit https://www.transifex.com/ckeditor/ckeditor5.
|
9
|
+
#
|
10
|
+
# To learn more, check out the official contributor's guide:
|
11
|
+
# https://ckeditor.com/docs/ckeditor5/latest/framework/guides/contributing/contributing.html
|
12
|
+
#
|
13
|
+
msgid ""
|
14
|
+
msgstr ""
|
15
|
+
"Language-Team: Thai (https://www.transifex.com/ckeditor/teams/11143/th/)\n"
|
16
|
+
"Language: th\n"
|
17
|
+
"Plural-Forms: nplurals=1; plural=0;\n"
|
18
|
+
|
19
|
+
msgctxt "A label of the button indicating that using this button will make a selected text non–editable."
|
20
|
+
msgid "Disable editing"
|
21
|
+
msgstr "ปิดใช้งานการแก้ไข"
|
22
|
+
|
23
|
+
msgctxt "A label of the button indicating that using this button will make a selected text editable."
|
24
|
+
msgid "Enable editing"
|
25
|
+
msgstr "เปิดใช้งานการแก้ไข"
|
26
|
+
|
27
|
+
msgctxt "A label of the button that moves selection to the previous editable region in the content."
|
28
|
+
msgid "Previous editable region"
|
29
|
+
msgstr "พื้นที่ซึ่งสามารถแก้ไขได้ก่อนหน้านี้"
|
30
|
+
|
31
|
+
msgctxt "A label of the button that moves selection to the next editable region in the content."
|
32
|
+
msgid "Next editable region"
|
33
|
+
msgstr "พื้นที่ซึ่งสามารถแก้ไขได้ถัดไป"
|
34
|
+
|
35
|
+
msgctxt "A label of the dropdown that provides controls to navigate editable regions in the content."
|
36
|
+
msgid "Navigate editable regions"
|
37
|
+
msgstr "นำทางไปยังพื้นที่ซึ่งสามารถแก้ไขได้"
|
@@ -0,0 +1,37 @@
|
|
1
|
+
# Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved.
|
2
|
+
#
|
3
|
+
# !!! IMPORTANT !!!
|
4
|
+
#
|
5
|
+
# Before you edit this file, please keep in mind that contributing to the project
|
6
|
+
# translations is possible ONLY via the Transifex online service.
|
7
|
+
#
|
8
|
+
# To submit your translations, visit https://www.transifex.com/ckeditor/ckeditor5.
|
9
|
+
#
|
10
|
+
# To learn more, check out the official contributor's guide:
|
11
|
+
# https://ckeditor.com/docs/ckeditor5/latest/framework/guides/contributing/contributing.html
|
12
|
+
#
|
13
|
+
msgid ""
|
14
|
+
msgstr ""
|
15
|
+
"Language-Team: Vietnamese (https://www.transifex.com/ckeditor/teams/11143/vi/)\n"
|
16
|
+
"Language: vi\n"
|
17
|
+
"Plural-Forms: nplurals=1; plural=0;\n"
|
18
|
+
|
19
|
+
msgctxt "A label of the button indicating that using this button will make a selected text non–editable."
|
20
|
+
msgid "Disable editing"
|
21
|
+
msgstr "Tắt tính năng chỉnh sửa"
|
22
|
+
|
23
|
+
msgctxt "A label of the button indicating that using this button will make a selected text editable."
|
24
|
+
msgid "Enable editing"
|
25
|
+
msgstr "Bật tính năng chỉnh sửa"
|
26
|
+
|
27
|
+
msgctxt "A label of the button that moves selection to the previous editable region in the content."
|
28
|
+
msgid "Previous editable region"
|
29
|
+
msgstr "Vùng có thể chỉnh sửa trước đó"
|
30
|
+
|
31
|
+
msgctxt "A label of the button that moves selection to the next editable region in the content."
|
32
|
+
msgid "Next editable region"
|
33
|
+
msgstr "Vùng có thể chỉnh sửa tiếp theo"
|
34
|
+
|
35
|
+
msgctxt "A label of the dropdown that provides controls to navigate editable regions in the content."
|
36
|
+
msgid "Navigate editable regions"
|
37
|
+
msgstr "Di chuyển giữa các vùng có thể chỉnh sửa"
|
package/package.json
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
{
|
2
2
|
"name": "@ckeditor/ckeditor5-restricted-editing",
|
3
|
-
"version": "
|
3
|
+
"version": "35.0.0",
|
4
4
|
"description": "Restricted editing feature for CKEditor 5 editors.",
|
5
5
|
"keywords": [
|
6
6
|
"ckeditor",
|
@@ -11,24 +11,24 @@
|
|
11
11
|
],
|
12
12
|
"main": "src/index.js",
|
13
13
|
"dependencies": {
|
14
|
-
"ckeditor5": "^
|
14
|
+
"ckeditor5": "^35.0.0"
|
15
15
|
},
|
16
16
|
"devDependencies": {
|
17
|
-
"@ckeditor/ckeditor5-basic-styles": "^
|
18
|
-
"@ckeditor/ckeditor5-block-quote": "^
|
19
|
-
"@ckeditor/ckeditor5-clipboard": "^
|
20
|
-
"@ckeditor/ckeditor5-core": "^
|
17
|
+
"@ckeditor/ckeditor5-basic-styles": "^35.0.0",
|
18
|
+
"@ckeditor/ckeditor5-block-quote": "^35.0.0",
|
19
|
+
"@ckeditor/ckeditor5-clipboard": "^35.0.0",
|
20
|
+
"@ckeditor/ckeditor5-core": "^35.0.0",
|
21
21
|
"@ckeditor/ckeditor5-dev-utils": "^30.0.0",
|
22
|
-
"@ckeditor/ckeditor5-editor-classic": "^
|
23
|
-
"@ckeditor/ckeditor5-engine": "^
|
24
|
-
"@ckeditor/ckeditor5-link": "^
|
25
|
-
"@ckeditor/ckeditor5-paragraph": "^
|
26
|
-
"@ckeditor/ckeditor5-table": "^
|
27
|
-
"@ckeditor/ckeditor5-theme-lark": "^
|
28
|
-
"@ckeditor/ckeditor5-typing": "^
|
29
|
-
"@ckeditor/ckeditor5-ui": "^
|
30
|
-
"@ckeditor/ckeditor5-undo": "^
|
31
|
-
"@ckeditor/ckeditor5-utils": "^
|
22
|
+
"@ckeditor/ckeditor5-editor-classic": "^35.0.0",
|
23
|
+
"@ckeditor/ckeditor5-engine": "^35.0.0",
|
24
|
+
"@ckeditor/ckeditor5-link": "^35.0.0",
|
25
|
+
"@ckeditor/ckeditor5-paragraph": "^35.0.0",
|
26
|
+
"@ckeditor/ckeditor5-table": "^35.0.0",
|
27
|
+
"@ckeditor/ckeditor5-theme-lark": "^35.0.0",
|
28
|
+
"@ckeditor/ckeditor5-typing": "^35.0.0",
|
29
|
+
"@ckeditor/ckeditor5-ui": "^35.0.0",
|
30
|
+
"@ckeditor/ckeditor5-undo": "^35.0.0",
|
31
|
+
"@ckeditor/ckeditor5-utils": "^35.0.0",
|
32
32
|
"webpack": "^5.58.1",
|
33
33
|
"webpack-cli": "^4.9.0"
|
34
34
|
},
|
@@ -50,7 +50,8 @@
|
|
50
50
|
"src",
|
51
51
|
"theme",
|
52
52
|
"build",
|
53
|
-
"ckeditor5-metadata.json"
|
53
|
+
"ckeditor5-metadata.json",
|
54
|
+
"CHANGELOG.md"
|
54
55
|
],
|
55
56
|
"scripts": {
|
56
57
|
"dll:build": "webpack"
|
@@ -180,7 +180,7 @@ export default class RestrictedEditingModeEditing extends Plugin {
|
|
180
180
|
|
181
181
|
doc.registerPostFixer( extendMarkerOnTypingPostFixer( editor ) );
|
182
182
|
doc.registerPostFixer( resurrectCollapsedMarkerPostFixer( editor ) );
|
183
|
-
|
183
|
+
doc.registerPostFixer( ensureNewMarkerIsFlatPostFixer( editor ) );
|
184
184
|
|
185
185
|
setupExceptionHighlighting( editor );
|
186
186
|
}
|
@@ -447,12 +447,18 @@ function isRangeInsideSingleMarker( editor, range ) {
|
|
447
447
|
// Markers created by developer in the data might break in many other ways.
|
448
448
|
//
|
449
449
|
// See #6003.
|
450
|
-
function
|
451
|
-
|
450
|
+
function ensureNewMarkerIsFlatPostFixer( editor ) {
|
451
|
+
return writer => {
|
452
|
+
let changeApplied = false;
|
452
453
|
|
453
|
-
|
454
|
-
|
455
|
-
|
454
|
+
const changedMarkers = editor.model.document.differ.getChangedMarkers();
|
455
|
+
|
456
|
+
for ( const { data: { newRange, oldRange }, name } of changedMarkers ) {
|
457
|
+
if ( !name.startsWith( 'restrictedEditingException' ) ) {
|
458
|
+
continue;
|
459
|
+
}
|
460
|
+
|
461
|
+
if ( !oldRange && !newRange.isFlat ) {
|
456
462
|
const start = newRange.start;
|
457
463
|
const end = newRange.end;
|
458
464
|
|
@@ -461,11 +467,15 @@ function ensureNewMarkerIsFlat( editor ) {
|
|
461
467
|
const fixedStart = startIsHigherInTree ? newRange.start : writer.createPositionAt( end.parent, 0 );
|
462
468
|
const fixedEnd = startIsHigherInTree ? writer.createPositionAt( start.parent, 'end' ) : newRange.end;
|
463
469
|
|
464
|
-
writer.updateMarker(
|
470
|
+
writer.updateMarker( name, {
|
465
471
|
range: writer.createRange( fixedStart, fixedEnd )
|
466
472
|
} );
|
467
|
-
|
473
|
+
|
474
|
+
changeApplied = true;
|
475
|
+
}
|
468
476
|
}
|
477
|
+
|
478
|
+
return changeApplied;
|
469
479
|
};
|
470
480
|
}
|
471
481
|
|
@@ -1 +0,0 @@
|
|
1
|
-
{"version":3,"sources":["webpack://CKEditor5.restrictedEditing/./theme/restrictedediting.css","webpack://CKEditor5.restrictedEditing/../node_modules/css-loader/dist/runtime/api.js","webpack://CKEditor5.restrictedEditing/../node_modules/css-loader/dist/runtime/cssWithMappingToString.js","webpack://CKEditor5.restrictedEditing/./theme/icons/contentlock.svg","webpack://CKEditor5.restrictedEditing/./theme/icons/contentunlock.svg","webpack://CKEditor5.restrictedEditing/./theme/restrictedediting.css?a89e","webpack://CKEditor5.restrictedEditing/../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js","webpack://CKEditor5.restrictedEditing/./src/restrictededitingexceptioncommand.js","webpack://CKEditor5.restrictedEditing/./src/restrictededitingmode.js","webpack://CKEditor5.restrictedEditing/./src/restrictededitingmode/converters.js","webpack://CKEditor5.restrictedEditing/./src/restrictededitingmode/utils.js","webpack://CKEditor5.restrictedEditing/./src/restrictededitingmodeediting.js","webpack://CKEditor5.restrictedEditing/./src/restrictededitingmodenavigationcommand.js","webpack://CKEditor5.restrictedEditing/./src/restrictededitingmodeui.js","webpack://CKEditor5.restrictedEditing/./src/standardeditingmode.js","webpack://CKEditor5.restrictedEditing/./src/standardeditingmodeediting.js","webpack://CKEditor5.restrictedEditing/./src/standardeditingmodeui.js","webpack://CKEditor5.restrictedEditing/delegated \"./src/core.js\" from dll-reference CKEditor5.dll","webpack://CKEditor5.restrictedEditing/delegated \"./src/engine.js\" from dll-reference CKEditor5.dll","webpack://CKEditor5.restrictedEditing/delegated \"./src/ui.js\" from dll-reference CKEditor5.dll","webpack://CKEditor5.restrictedEditing/delegated \"./src/utils.js\" from dll-reference CKEditor5.dll","webpack://CKEditor5.restrictedEditing/external var \"CKEditor5.dll\"","webpack://CKEditor5.restrictedEditing/webpack/bootstrap","webpack://CKEditor5.restrictedEditing/webpack/runtime/compat get default export","webpack://CKEditor5.restrictedEditing/webpack/runtime/define property getters","webpack://CKEditor5.restrictedEditing/webpack/runtime/hasOwnProperty shorthand","webpack://CKEditor5.restrictedEditing/webpack/runtime/make namespace object","webpack://CKEditor5.restrictedEditing/./src/index.js"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;AAAA;AAC4H;AAC7B;AAC/F,8BAA8B,mFAA2B,CAAC,wGAAqC;AAC/F;AACA,gDAAgD,uEAAuE,8EAA8E,oEAAoE,gFAAgF,6EAA6E,mDAAmD,yEAAyE,iBAAiB,0UAA0U,sCAAsC,yFAAyF,kFAAkF,iUAAiU,0FAA0F,iBAAiB,gFAAgF,eAAe,4IAA4I,YAAY,2EAA2E,yEAAyE,OAAO,kjBAAkjB,gFAAgF,uFAAuF,8EAA8E,yFAAyF,uFAAuF,GAAG,wDAAwD,2CAA2C,8EAA8E,sBAAsB,4YAA4Y,+CAA+C,yFAAyF,uXAAuX,KAAK,gDAAgD,gHAAgH,KAAK,GAAG,4CAA4C,oBAAoB,8KAA8K,sBAAsB,KAAK,uCAAuC,mBAAmB,aAAa,qBAAqB,OAAO,iBAAiB,kFAAkF,OAAO,KAAK,GAAG,qBAAqB;AACxlJ;AACA,iEAAe,uBAAuB,EAAC;;;;;;;;;;;;ACP1B;;AAEb;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;;AAEjB;AACA;AACA;;AAEA;AACA,4CAA4C,qBAAqB;AACjE;;AAEA;AACA,KAAK;AACL,KAAK;AACL;;;AAGA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA,sBAAsB,iBAAiB;AACvC;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA,qBAAqB,qBAAqB;AAC1C;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,UAAU;AACV;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;;;;;;;;;;ACjEa;;AAEb,kCAAkC;;AAElC,8BAA8B;;AAE9B,kDAAkD,gBAAgB,gEAAgE,wDAAwD,6DAA6D,sDAAsD;;AAE7S,uCAAuC,uDAAuD,uCAAuC,SAAS,OAAO,oBAAoB;;AAEzK,yCAAyC,8FAA8F,wBAAwB,eAAe,eAAe,gBAAgB,YAAY,MAAM,wBAAwB,+BAA+B,aAAa,qBAAqB,uCAAuC,cAAc,WAAW,YAAY,UAAU,MAAM,mDAAmD,UAAU,sBAAsB;;AAEve,gCAAgC;;AAEhC;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA,uDAAuD,cAAc;AACrE;AACA;AACA;AACA,KAAK;AACL;AACA;;AAEA;AACA;;;;;;;;;;;;;;;ACnCA,iEAAe,kjBAAkjB;;;;;;;;;;;;;;;ACAjkB,iEAAe,6iBAA6iB;;;;;;;;;;;;;;;;;;ACA7d;AAC/F,YAAsL;;AAEtL,eAAe,+CAA+C;;AAE9D;AACA;;AAEA,aAAa,0GAAG,CAAC,kKAAO;;;;AAIxB,iEAAe,yKAAc,MAAM;;;;;;;;;;;ACZtB;;AAEb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,CAAC;;AAED;AACA;AACA;AACA;AACA,wDAAwD;;AAExD;AACA;AACA;AACA;AACA;AACA,UAAU;AACV;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA,CAAC;;AAED;;AAEA;AACA;;AAEA,kBAAkB,wBAAwB;AAC1C;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA,kBAAkB,iBAAiB;AACnC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA,OAAO;AACP;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,gBAAgB,KAAwC,GAAG,sBAAiB,GAAG,CAAI;;AAEnF;AACA;AACA;AACA;;AAEA;AACA;AACA,GAAG;;AAEH;AACA;AACA,IAAI;AACJ;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;;AAGA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;;AAED;AACA,qEAAqE,qBAAqB,cAAc;;AAExG;;AAEA;AACA;AACA,IAAI;AACJ;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA,IAAI;AACJ;AACA;;AAEA;AACA,yDAAyD;AACzD,IAAI;;AAEJ;;;AAGA;AACA;AACA,IAAI;AACJ;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,MAAM;AACN;AACA;AACA;AACA;;AAEA;AACA,2BAA2B;AAC3B;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA,oBAAoB,4BAA4B;AAChD;AACA;AACA;AACA;;AAEA;;AAEA,qBAAqB,6BAA6B;AAClD;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;;;;;;;;;;;;;;;AC5QA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAE6C;;AAE7C;AACA;AACA;AACe,gDAAgD,uDAAO;AACtE;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,uBAAuB;AACvB;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,MAAM;AACN;AACA,wFAAwF,wBAAwB;AAChH;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;;;;;;;;;;;;;;;;;;;;ACjEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAE4C;;AAE8B;AACV;;AAExB;;AAExC;AACA;AACA;AACA;AACA;AACA,UAAU,0HAA0H;AACpI,UAAU,2GAA2G;AACrH;AACA;AACA;AACe,oCAAoC,sDAAM;AACzD;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,WAAW,qEAA4B,EAAE,gEAAuB;AAChE;AACA;;AAEA;AACA;AACA,IAAI,6EAA6E;AACjF;AACA,iBAAiB,kFAAkF;AACnG;AACA,YAAY;AACZ;AACA;;AAEA;AACA;AACA,8BAA8B,6EAA6E;AAC3G;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA,QAAQ,sEAAsE;AAC9E;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI,yGAAyG;AAC7G;AACA,YAAY,gBAAgB;AAC5B;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAY,gBAAgB;AAC5B;;;;;;;;;;;;;;;;;;;;;ACtGA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAE+C;;AAED;;AAE9C;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO,sEAAsE;AAC7E;AACA;AACA;AACA;AACA,WAAW,kCAAkC;AAC7C;AACO;AACP;AACA;AACA;;AAEA;AACA;AACA;;AAEA,iBAAiB,2DAAmB;;AAEpC;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,GAAG;;AAEH;AACA;AACA;AACA,8CAA8C,sBAAsB;AACpE,8CAA8C,sBAAsB;AACpE,iDAAiD,sBAAsB;AACvE,iDAAiD,sBAAsB;;AAEvE;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA,GAAG;AACH;;AAEA;AACA;AACA;AACA,WAAW,kCAAkC;AAC7C,aAAa;AACb;AACO;AACP;AACA;AACA;;AAEA,gBAAgB,aAAa;AAC7B;AACA;AACA;AACA,MAAM;;AAEN;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,kCAAkC;AAC7C,aAAa;AACb;AACO;AACP;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,QAAQ;AACnB,WAAW,2CAA2C;AACtD;AACA,WAAW,qDAAqD;AAChE;AACA,WAAW,wCAAwC;AACnD;AACO;AACP;AACA,UAAU,SAAS;;AAEnB,sBAAsB,yDAAO;AAC7B;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA,UAAU,qCAAqC;AAC/C;;AAEA;AACA,6DAA6D,0BAA0B;AACvF,2DAA2D,0BAA0B;;AAErF;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;;AAEA;AACA;AACA,uBAAuB,2DAAmB;;AAE1C;AACA;AACA;AACA,IAAI;;AAEJ;AACA;;AAEA;AACA;;AAEA;AACA;AACA,qBAAqB,2DAAmB;;AAExC;AACA;AACA;AACA,IAAI;;AAEJ;AACA;;AAEA;AACA;;;;;;;;;;;;;;;;;;AC9LA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,IAAI,iFAAiF;AACrF;AACA;AACA,WAAW,kCAAkC;AAC7C,WAAW,uCAAuC;AAClD,aAAa,uDAAuD;AACpE;AACO;AACP;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,iCAAiC;AAC5C,WAAW,uCAAuC;AAClD,aAAa;AACb;AACO;AACP;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,yCAAyC;AACpD,WAAW,6CAA6C;AACxD,aAAa;AACb;AACO;AACP;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;;;;;;;;;;;;;;;;;;;;ACrEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAE4C;;AAE8C;AAM9C;AAC6C;;AAEzF;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACe,2CAA2C,sDAAM;AAChE;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,IAAI;;AAEJ;AACA;AACA;AACA,YAAY;AACZ;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,YAAY;AACZ;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA,qEAAqE,+EAAkC;AACvG,iEAAiE,+EAAkC;AACnG;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,IAAI;AACJ;;AAEA;AACA;AACA;AACA;AACA;AACA,KAAK,mGAAmG;AACxG;AACA,YAAY,QAAQ;AACpB;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA,yCAAyC,0FAAuB;AAChE;AACA;AACA;AACA,IAAI;AACJ;AACA,oBAAoB;;AAEpB,0CAA0C,cAAc;AACxD;AACA,IAAI;;AAEJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI;;AAEJ;AACA;AACA;AACA;AACA,yBAAyB,SAAS;AAClC;AACA;AACA,MAAM;AACN;AACA,IAAI;;AAEJ;AACA;AACA,yBAAyB,SAAS;AAClC;AACA;AACA,MAAM;AACN;AACA,IAAI;;AAEJ,yBAAyB,gGAA6B;AACtD,yBAAyB,oGAAiC;AAC1D;;AAEA,EAAE,6FAA0B;AAC5B;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,4EAA4E,mBAAmB;;AAE/F;;AAEA;AACA;AACA;AACA,uFAAuF,mBAAmB;AAC1G;;AAEA;AACA;AACA;AACA;AACA;AACA,IAAI;;AAEJ;AACA;AACA;AACA;AACA;AACA,GAAG,IAAI,mBAAmB;;AAE1B;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA,iBAAiB,iFAAmB;;AAEpC;;AAEA,OAAO,iFAAmB;AAC1B;AACA;AACA;;AAEA;AACA;AACA;AACA,cAAc,6CAA6C;AAC3D;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,iBAAiB,iFAAmB;;AAEpC;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA,KAAK;AACL;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,iBAAiB,iFAAmB,+BAA+B,iFAAmB;;AAEtF;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,UAAU,QAAQ;;AAElB;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA,uBAAuB,iFAAmB;AAC1C,qBAAqB,iFAAmB;;AAExC;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA,MAAM;AACN,KAAK;AACL;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;ACneA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAE6C;;AAE7C;AACA;AACA;AACA;AACA;AACe,qDAAqD,uDAAO;AAC3E;AACA;AACA;AACA,YAAY,kCAAkC;AAC9C,YAAY,QAAQ;AACpB;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,cAAc;AACd;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,IAAI;AACJ;;AAEA;AACA;AACA;AACA;AACA,cAAc,SAAS;AACvB;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,iCAAiC;AAC5C,WAAW,QAAQ;AACnB,aAAa;AACb;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,IAAI;AACJ;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA,GAAG;AACH;;;;;;;;;;;;;;;;;;;;ACvHA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAE4C;AACgC;AAC3B;;AAEK;;AAEtD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACe,sCAAsC,sDAAM;AAC3D;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,wBAAwB,gEAAc;AACtC,yBAAyB,2DAAU;;AAEnC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,GAAG,mEAAiB;;AAEpB;AACA;AACA,UAAU,oEAAQ;AAClB;AACA;AACA;AACA,KAAK;;AAEL;AACA;AACA;AACA,KAAK;;AAEL;AACA,IAAI;AACJ;;AAEA;AACA;AACA;AACA;AACA,YAAY,QAAQ;AACpB,YAAY,QAAQ;AACpB,YAAY,QAAQ;AACpB,cAAc;AACd;AACA;AACA;AACA;AACA;AACA;AACA,cAAc,mDAAK;AACnB;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;;AAEA;;AAEA;AACA;AACA;;;;;;;;;;;;;;;;;;;;ACnGA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAE4C;;AAE0B;AACV;;AAEpB;;AAExC;AACA;AACA;AACA;AACA;AACA,UAAU,oHAAoH;AAC9H,UAAU,qGAAqG;AAC/G;AACA;AACA;AACe,kCAAkC,sDAAM;AACvD;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,WAAW,mEAA0B,EAAE,8DAAqB;AAC5D;AACA;;;;;;;;;;;;;;;;;;ACrCA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAE4C;;AAEwC;;AAEpF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACe,yCAAyC,sDAAM;AAC9D;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA,yCAAyC,oDAAoD;;AAE7F;AACA;AACA;AACA;AACA;AACA;AACA,IAAI;;AAEJ;AACA;AACA,kCAAkC,SAAS;AAC3C;AACA;AACA,qDAAqD,uCAAuC,IAAI,gBAAgB;AAChH;AACA;AACA,IAAI;;AAEJ,yDAAyD,0EAAiC;;AAE1F;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;;;;;;;;;;;;;;;;;;;AChEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAE4C;AACE;;AAEY;;AAE1D;AACA;AACA;AACA;AACA;AACA;AACA;AACe,oCAAoC,sDAAM;AACzD;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,oBAAoB,wDAAU;;AAE9B;AACA,UAAU,sEAAU;AACpB;AACA;AACA,KAAK;;AAEL;AACA;AACA;AACA,KAAK;;AAEL;AACA;AACA;AACA,KAAK;;AAEL;AACA,IAAI;AACJ;AACA;;;;;;;;;;;ACpDA;;;;;;;;;;ACAA;;;;;;;;;;ACAA;;;;;;;;;;ACAA;;;;;;;;;;;ACAA;;;;;;UCAA;UACA;;UAEA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;;UAEA;UACA;;UAEA;UACA;UACA;;;;;WCtBA;WACA;WACA;WACA;WACA;WACA,iCAAiC,WAAW;WAC5C;WACA;;;;;WCPA;WACA;WACA;WACA;WACA,yCAAyC,wCAAwC;WACjF;WACA;WACA;;;;;WCPA;;;;;WCAA;WACA;WACA;WACA,uDAAuD,iBAAiB;WACxE;WACA,gDAAgD,aAAa;WAC7D;;;;;;;;;;;;;;;;;;;;;;;;;;ACNA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAE2E;AACc;AACV;AACR;AACc;AACV","file":"restricted-editing.js","sourcesContent":["// Imports\nimport ___CSS_LOADER_API_SOURCEMAP_IMPORT___ from \"../../../node_modules/css-loader/dist/runtime/cssWithMappingToString.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../../node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, \":root{--ck-color-restricted-editing-exception-background:rgba(255,169,77,.2);--ck-color-restricted-editing-exception-hover-background:rgba(255,169,77,.35);--ck-color-restricted-editing-exception-brackets:rgba(204,105,0,.4);--ck-color-restricted-editing-selected-exception-background:rgba(255,169,77,.5);--ck-color-restricted-editing-selected-exception-brackets:rgba(204,105,0,.6)}.ck-editor__editable .restricted-editing-exception{background-color:var(--ck-color-restricted-editing-exception-background);border:1px solid;border-image:linear-gradient(to right,var(--ck-color-restricted-editing-exception-brackets) 0,var(--ck-color-restricted-editing-exception-brackets) 5px,transparent 6px,transparent calc(100% - 6px),var(--ck-color-restricted-editing-exception-brackets) calc(100% - 5px),var(--ck-color-restricted-editing-exception-brackets) 100%) 1;transition:background .2s ease-in-out}.ck-editor__editable .restricted-editing-exception.restricted-editing-exception_selected{background-color:var(--ck-color-restricted-editing-selected-exception-background);border-image:linear-gradient(to right,var(--ck-color-restricted-editing-selected-exception-brackets) 0,var(--ck-color-restricted-editing-selected-exception-brackets) 5px,var(--ck-color-restricted-editing-selected-exception-brackets) calc(100% - 5px),var(--ck-color-restricted-editing-selected-exception-brackets) 100%) 1}.ck-editor__editable .restricted-editing-exception.restricted-editing-exception_collapsed{padding-left:1ch}.ck-restricted-editing_mode_restricted,.ck-restricted-editing_mode_restricted *{cursor:default}.ck-restricted-editing_mode_restricted .restricted-editing-exception,.ck-restricted-editing_mode_restricted .restricted-editing-exception *{cursor:text}.ck-restricted-editing_mode_restricted .restricted-editing-exception:hover{background:var(--ck-color-restricted-editing-exception-hover-background)}\", \"\",{\"version\":3,\"sources\":[\"webpack://./../ckeditor5-theme-lark/theme/ckeditor5-restricted-editing/restrictedediting.css\"],\"names\":[],\"mappings\":\"AAKA,MACC,sEAA2E,CAC3E,6EAAkF,CAClF,mEAAyE,CACzE,+EAAoF,CACpF,4EACD,CAEA,mDAEC,wEAAyE,CACzE,gBAAiB,CACjB,yUAQG,CAXH,qCA4BD,CAfC,yFACC,iFAAkF,CAClF,gUAOD,CAEA,0FAEC,gBACD,CAQA,gFACC,cACD,CAKC,4IACC,WACD,CAEA,2EACC,wEACD\",\"sourcesContent\":[\"/*\\n * Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved.\\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\\n */\\n\\n:root {\\n\\t--ck-color-restricted-editing-exception-background: hsla(31, 100%, 65%, .2);\\n\\t--ck-color-restricted-editing-exception-hover-background: hsla(31, 100%, 65%, .35);\\n\\t--ck-color-restricted-editing-exception-brackets: hsla(31, 100%, 40%, .4);\\n\\t--ck-color-restricted-editing-selected-exception-background: hsla(31, 100%, 65%, .5);\\n\\t--ck-color-restricted-editing-selected-exception-brackets: hsla(31, 100%, 40%, .6);\\n}\\n\\n.ck-editor__editable .restricted-editing-exception {\\n\\ttransition: .2s ease-in-out background;\\n\\tbackground-color: var(--ck-color-restricted-editing-exception-background);\\n\\tborder: 1px solid;\\n\\tborder-image: linear-gradient(\\n\\t\\tto right,\\n\\t\\tvar(--ck-color-restricted-editing-exception-brackets) 0%,\\n\\t\\tvar(--ck-color-restricted-editing-exception-brackets) 5px,\\n\\t\\thsla(0, 0%, 0%, 0) 6px,\\n\\t\\thsla(0, 0%, 0%, 0) calc(100% - 6px),\\n\\t\\tvar(--ck-color-restricted-editing-exception-brackets) calc(100% - 5px),\\n\\t\\tvar(--ck-color-restricted-editing-exception-brackets) 100%\\n\\t) 1;\\n\\n\\t&.restricted-editing-exception_selected {\\n\\t\\tbackground-color: var(--ck-color-restricted-editing-selected-exception-background);\\n\\t\\tborder-image: linear-gradient(\\n\\t\\t\\tto right,\\n\\t\\t\\tvar(--ck-color-restricted-editing-selected-exception-brackets) 0%,\\n\\t\\t\\tvar(--ck-color-restricted-editing-selected-exception-brackets) 5px,\\n\\t\\t\\tvar(--ck-color-restricted-editing-selected-exception-brackets) calc(100% - 5px),\\n\\t\\t\\tvar(--ck-color-restricted-editing-selected-exception-brackets) 100%\\n\\t\\t) 1;\\n\\t}\\n\\n\\t&.restricted-editing-exception_collapsed {\\n\\t\\t/* Empty exception should have the same width as exception with at least 1 char */\\n\\t\\tpadding-left: 1ch;\\n\\t}\\n}\\n\\n.ck-restricted-editing_mode_restricted {\\n\\tcursor: default;\\n\\n\\t/* We also have to override all elements inside the restricted editable to prevent cursor switching between default and text\\n\\tduring the pointer movement. */\\n\\t& * {\\n\\t\\tcursor: default;\\n\\t}\\n\\n\\t& .restricted-editing-exception {\\n\\t\\tcursor: text;\\n\\n\\t\\t& * {\\n\\t\\t\\tcursor: text;\\n\\t\\t}\\n\\n\\t\\t&:hover {\\n\\t\\t\\tbackground: var(--ck-color-restricted-editing-exception-hover-background);\\n\\t\\t}\\n\\t}\\n}\\n\"],\"sourceRoot\":\"\"}]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n","\"use strict\";\n\n/*\n MIT License http://www.opensource.org/licenses/mit-license.php\n Author Tobias Koppers @sokra\n*/\n// css base code, injected by the css-loader\n// eslint-disable-next-line func-names\nmodule.exports = function (cssWithMappingToString) {\n var list = []; // return the list of modules as css string\n\n list.toString = function toString() {\n return this.map(function (item) {\n var content = cssWithMappingToString(item);\n\n if (item[2]) {\n return \"@media \".concat(item[2], \" {\").concat(content, \"}\");\n }\n\n return content;\n }).join(\"\");\n }; // import a list of modules into the list\n // eslint-disable-next-line func-names\n\n\n list.i = function (modules, mediaQuery, dedupe) {\n if (typeof modules === \"string\") {\n // eslint-disable-next-line no-param-reassign\n modules = [[null, modules, \"\"]];\n }\n\n var alreadyImportedModules = {};\n\n if (dedupe) {\n for (var i = 0; i < this.length; i++) {\n // eslint-disable-next-line prefer-destructuring\n var id = this[i][0];\n\n if (id != null) {\n alreadyImportedModules[id] = true;\n }\n }\n }\n\n for (var _i = 0; _i < modules.length; _i++) {\n var item = [].concat(modules[_i]);\n\n if (dedupe && alreadyImportedModules[item[0]]) {\n // eslint-disable-next-line no-continue\n continue;\n }\n\n if (mediaQuery) {\n if (!item[2]) {\n item[2] = mediaQuery;\n } else {\n item[2] = \"\".concat(mediaQuery, \" and \").concat(item[2]);\n }\n }\n\n list.push(item);\n }\n };\n\n return list;\n};","\"use strict\";\n\nfunction _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); }\n\nfunction _nonIterableRest() { throw new TypeError(\"Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\"); }\n\nfunction _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === \"string\") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === \"Object\" && o.constructor) n = o.constructor.name; if (n === \"Map\" || n === \"Set\") return Array.from(o); if (n === \"Arguments\" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }\n\nfunction _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }\n\nfunction _iterableToArrayLimit(arr, i) { var _i = arr && (typeof Symbol !== \"undefined\" && arr[Symbol.iterator] || arr[\"@@iterator\"]); if (_i == null) return; var _arr = []; var _n = true; var _d = false; var _s, _e; try { for (_i = _i.call(arr); !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i[\"return\"] != null) _i[\"return\"](); } finally { if (_d) throw _e; } } return _arr; }\n\nfunction _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }\n\nmodule.exports = function cssWithMappingToString(item) {\n var _item = _slicedToArray(item, 4),\n content = _item[1],\n cssMapping = _item[3];\n\n if (!cssMapping) {\n return content;\n }\n\n if (typeof btoa === \"function\") {\n // eslint-disable-next-line no-undef\n var base64 = btoa(unescape(encodeURIComponent(JSON.stringify(cssMapping))));\n var data = \"sourceMappingURL=data:application/json;charset=utf-8;base64,\".concat(base64);\n var sourceMapping = \"/*# \".concat(data, \" */\");\n var sourceURLs = cssMapping.sources.map(function (source) {\n return \"/*# sourceURL=\".concat(cssMapping.sourceRoot || \"\").concat(source, \" */\");\n });\n return [content].concat(sourceURLs).concat([sourceMapping]).join(\"\\n\");\n }\n\n return [content].join(\"\\n\");\n};","export default \"<svg viewBox=\\\"0 0 20 20\\\" xmlns=\\\"http://www.w3.org/2000/svg\\\"><path d=\\\"M15.5 6.5a3.5 3.5 0 0 1 3.495 3.308L19 10v2a1 1 0 0 1 1 1v5a1 1 0 0 1-1 1h-7a1 1 0 0 1-1-1v-5a1 1 0 0 1 1-1v-2l.005-.192A3.5 3.5 0 0 1 15.5 6.5zm0 7.5a.5.5 0 0 0-.492.41L15 14.5v2a.5.5 0 0 0 .992.09L16 16.5v-2a.5.5 0 0 0-.5-.5zm0-6a2 2 0 0 0-2 2v2h4v-2a2 2 0 0 0-2-2zm-9.25 8a.75.75 0 1 1 0 1.5H.75a.75.75 0 1 1 0-1.5h5.5zm0-5a.75.75 0 1 1 0 1.5H.75a.75.75 0 1 1 0-1.5h5.5zm3-5a.75.75 0 0 1 0 1.5H.75a.75.75 0 0 1 0-1.5h8.5zm6-5a.75.75 0 1 1 0 1.5H.75a.75.75 0 0 1 0-1.5h14.5z\\\"/></svg>\";","export default \"<svg viewBox=\\\"0 0 20 20\\\" xmlns=\\\"http://www.w3.org/2000/svg\\\"><path d=\\\"M6.25 16a.75.75 0 1 1 0 1.5H.75a.75.75 0 1 1 0-1.5h5.5zm0-5a.75.75 0 1 1 0 1.5H.75a.75.75 0 1 1 0-1.5h5.5zm3-5a.75.75 0 0 1 0 1.5H.75a.75.75 0 0 1 0-1.5h8.5zm6-5a.75.75 0 1 1 0 1.5H.75a.75.75 0 0 1 0-1.5h14.5zm.25 5.5a3.5 3.5 0 0 1 3.143 1.959.75.75 0 0 1-1.36.636A2 2 0 0 0 13.5 10v2H19a1 1 0 0 1 1 1v5a1 1 0 0 1-1 1h-7a1 1 0 0 1-1-1v-5a1 1 0 0 1 1-1v-2l.005-.192A3.5 3.5 0 0 1 15.5 6.5zm0 7.5a.5.5 0 0 0-.492.41L15 14.5v2a.5.5 0 0 0 .992.09L16 16.5v-2a.5.5 0 0 0-.5-.5z\\\"/></svg>\";","import api from \"!../../../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\";\n import content from \"!!../../../node_modules/css-loader/dist/cjs.js!../../../node_modules/postcss-loader/dist/cjs.js??ruleSet[1].rules[1].use[2]!./restrictedediting.css\";\n\nvar options = {\"injectType\":\"singletonStyleTag\",\"attributes\":{\"data-cke\":true}};\n\noptions.insert = \"head\";\noptions.singleton = true;\n\nvar update = api(content, options);\n\n\n\nexport default content.locals || {};","\"use strict\";\n\nvar isOldIE = function isOldIE() {\n var memo;\n return function memorize() {\n if (typeof memo === 'undefined') {\n // Test for IE <= 9 as proposed by Browserhacks\n // @see http://browserhacks.com/#hack-e71d8692f65334173fee715c222cb805\n // Tests for existence of standard globals is to allow style-loader\n // to operate correctly into non-standard environments\n // @see https://github.com/webpack-contrib/style-loader/issues/177\n memo = Boolean(window && document && document.all && !window.atob);\n }\n\n return memo;\n };\n}();\n\nvar getTarget = function getTarget() {\n var memo = {};\n return function memorize(target) {\n if (typeof memo[target] === 'undefined') {\n var styleTarget = document.querySelector(target); // Special case to return head of iframe instead of iframe itself\n\n if (window.HTMLIFrameElement && styleTarget instanceof window.HTMLIFrameElement) {\n try {\n // This will throw an exception if access to iframe is blocked\n // due to cross-origin restrictions\n styleTarget = styleTarget.contentDocument.head;\n } catch (e) {\n // istanbul ignore next\n styleTarget = null;\n }\n }\n\n memo[target] = styleTarget;\n }\n\n return memo[target];\n };\n}();\n\nvar stylesInDom = [];\n\nfunction getIndexByIdentifier(identifier) {\n var result = -1;\n\n for (var i = 0; i < stylesInDom.length; i++) {\n if (stylesInDom[i].identifier === identifier) {\n result = i;\n break;\n }\n }\n\n return result;\n}\n\nfunction modulesToDom(list, options) {\n var idCountMap = {};\n var identifiers = [];\n\n for (var i = 0; i < list.length; i++) {\n var item = list[i];\n var id = options.base ? item[0] + options.base : item[0];\n var count = idCountMap[id] || 0;\n var identifier = \"\".concat(id, \" \").concat(count);\n idCountMap[id] = count + 1;\n var index = getIndexByIdentifier(identifier);\n var obj = {\n css: item[1],\n media: item[2],\n sourceMap: item[3]\n };\n\n if (index !== -1) {\n stylesInDom[index].references++;\n stylesInDom[index].updater(obj);\n } else {\n stylesInDom.push({\n identifier: identifier,\n updater: addStyle(obj, options),\n references: 1\n });\n }\n\n identifiers.push(identifier);\n }\n\n return identifiers;\n}\n\nfunction insertStyleElement(options) {\n var style = document.createElement('style');\n var attributes = options.attributes || {};\n\n if (typeof attributes.nonce === 'undefined') {\n var nonce = typeof __webpack_nonce__ !== 'undefined' ? __webpack_nonce__ : null;\n\n if (nonce) {\n attributes.nonce = nonce;\n }\n }\n\n Object.keys(attributes).forEach(function (key) {\n style.setAttribute(key, attributes[key]);\n });\n\n if (typeof options.insert === 'function') {\n options.insert(style);\n } else {\n var target = getTarget(options.insert || 'head');\n\n if (!target) {\n throw new Error(\"Couldn't find a style target. This probably means that the value for the 'insert' parameter is invalid.\");\n }\n\n target.appendChild(style);\n }\n\n return style;\n}\n\nfunction removeStyleElement(style) {\n // istanbul ignore if\n if (style.parentNode === null) {\n return false;\n }\n\n style.parentNode.removeChild(style);\n}\n/* istanbul ignore next */\n\n\nvar replaceText = function replaceText() {\n var textStore = [];\n return function replace(index, replacement) {\n textStore[index] = replacement;\n return textStore.filter(Boolean).join('\\n');\n };\n}();\n\nfunction applyToSingletonTag(style, index, remove, obj) {\n var css = remove ? '' : obj.media ? \"@media \".concat(obj.media, \" {\").concat(obj.css, \"}\") : obj.css; // For old IE\n\n /* istanbul ignore if */\n\n if (style.styleSheet) {\n style.styleSheet.cssText = replaceText(index, css);\n } else {\n var cssNode = document.createTextNode(css);\n var childNodes = style.childNodes;\n\n if (childNodes[index]) {\n style.removeChild(childNodes[index]);\n }\n\n if (childNodes.length) {\n style.insertBefore(cssNode, childNodes[index]);\n } else {\n style.appendChild(cssNode);\n }\n }\n}\n\nfunction applyToTag(style, options, obj) {\n var css = obj.css;\n var media = obj.media;\n var sourceMap = obj.sourceMap;\n\n if (media) {\n style.setAttribute('media', media);\n } else {\n style.removeAttribute('media');\n }\n\n if (sourceMap && typeof btoa !== 'undefined') {\n css += \"\\n/*# sourceMappingURL=data:application/json;base64,\".concat(btoa(unescape(encodeURIComponent(JSON.stringify(sourceMap)))), \" */\");\n } // For old IE\n\n /* istanbul ignore if */\n\n\n if (style.styleSheet) {\n style.styleSheet.cssText = css;\n } else {\n while (style.firstChild) {\n style.removeChild(style.firstChild);\n }\n\n style.appendChild(document.createTextNode(css));\n }\n}\n\nvar singleton = null;\nvar singletonCounter = 0;\n\nfunction addStyle(obj, options) {\n var style;\n var update;\n var remove;\n\n if (options.singleton) {\n var styleIndex = singletonCounter++;\n style = singleton || (singleton = insertStyleElement(options));\n update = applyToSingletonTag.bind(null, style, styleIndex, false);\n remove = applyToSingletonTag.bind(null, style, styleIndex, true);\n } else {\n style = insertStyleElement(options);\n update = applyToTag.bind(null, style, options);\n\n remove = function remove() {\n removeStyleElement(style);\n };\n }\n\n update(obj);\n return function updateStyle(newObj) {\n if (newObj) {\n if (newObj.css === obj.css && newObj.media === obj.media && newObj.sourceMap === obj.sourceMap) {\n return;\n }\n\n update(obj = newObj);\n } else {\n remove();\n }\n };\n}\n\nmodule.exports = function (list, options) {\n options = options || {}; // Force single-tag solution on IE6-9, which has a hard limit on the # of <style>\n // tags it will allow on a page\n\n if (!options.singleton && typeof options.singleton !== 'boolean') {\n options.singleton = isOldIE();\n }\n\n list = list || [];\n var lastIdentifiers = modulesToDom(list, options);\n return function update(newList) {\n newList = newList || [];\n\n if (Object.prototype.toString.call(newList) !== '[object Array]') {\n return;\n }\n\n for (var i = 0; i < lastIdentifiers.length; i++) {\n var identifier = lastIdentifiers[i];\n var index = getIndexByIdentifier(identifier);\n stylesInDom[index].references--;\n }\n\n var newLastIdentifiers = modulesToDom(newList, options);\n\n for (var _i = 0; _i < lastIdentifiers.length; _i++) {\n var _identifier = lastIdentifiers[_i];\n\n var _index = getIndexByIdentifier(_identifier);\n\n if (stylesInDom[_index].references === 0) {\n stylesInDom[_index].updater();\n\n stylesInDom.splice(_index, 1);\n }\n }\n\n lastIdentifiers = newLastIdentifiers;\n };\n};","/**\n * @license Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\n\n/**\n * @module restricted-editing/restrictededitingexceptioncommand\n */\n\nimport { Command } from 'ckeditor5/src/core';\n\n/**\n * @extends module:core/command~Command\n */\nexport default class RestrictedEditingExceptionCommand extends Command {\n\t/**\n\t * @inheritDoc\n\t */\n\trefresh() {\n\t\tconst model = this.editor.model;\n\t\tconst doc = model.document;\n\n\t\tthis.value = !!doc.selection.getAttribute( 'restrictedEditingException' );\n\n\t\tthis.isEnabled = model.schema.checkAttributeInSelection( doc.selection, 'restrictedEditingException' );\n\t}\n\n\t/**\n\t * @inheritDoc\n\t */\n\texecute( options = {} ) {\n\t\tconst model = this.editor.model;\n\t\tconst document = model.document;\n\t\tconst selection = document.selection;\n\t\tconst valueToSet = ( options.forceValue === undefined ) ? !this.value : options.forceValue;\n\n\t\tmodel.change( writer => {\n\t\t\tconst ranges = model.schema.getValidRanges( selection.getRanges(), 'restrictedEditingException' );\n\n\t\t\tif ( selection.isCollapsed ) {\n\t\t\t\tif ( valueToSet ) {\n\t\t\t\t\twriter.setSelectionAttribute( 'restrictedEditingException', valueToSet );\n\t\t\t\t} else {\n\t\t\t\t\tconst isSameException = value => value.item.getAttribute( 'restrictedEditingException' ) === this.value;\n\t\t\t\t\tconst exceptionStart = selection.focus.getLastMatchingPosition( isSameException, { direction: 'backward' } );\n\t\t\t\t\tconst exceptionEnd = selection.focus.getLastMatchingPosition( isSameException );\n\t\t\t\t\tconst focus = selection.focus;\n\n\t\t\t\t\twriter.removeSelectionAttribute( 'restrictedEditingException' );\n\n\t\t\t\t\tif ( !( focus.isEqual( exceptionStart ) || focus.isEqual( exceptionEnd ) ) ) {\n\t\t\t\t\t\twriter.removeAttribute( 'restrictedEditingException', writer.createRange( exceptionStart, exceptionEnd ) );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tfor ( const range of ranges ) {\n\t\t\t\t\tif ( valueToSet ) {\n\t\t\t\t\t\twriter.setAttribute( 'restrictedEditingException', valueToSet, range );\n\t\t\t\t\t} else {\n\t\t\t\t\t\twriter.removeAttribute( 'restrictedEditingException', range );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t} );\n\t}\n}\n","/**\n * @license Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\n\n/**\n * @module restricted-editing/restrictededitingmode\n */\n\nimport { Plugin } from 'ckeditor5/src/core';\n\nimport RestrictedEditingModeEditing from './restrictededitingmodeediting';\nimport RestrictedEditingModeUI from './restrictededitingmodeui';\n\nimport '../theme/restrictedediting.css';\n\n/**\n * The restricted editing mode plugin.\n *\n * This is a \"glue\" plugin which loads the following plugins:\n *\n * * The {@link module:restricted-editing/restrictededitingmodeediting~RestrictedEditingModeEditing restricted mode editing feature}.\n * * The {@link module:restricted-editing/restrictededitingmodeui~RestrictedEditingModeUI restricted mode UI feature}.\n *\n * @extends module:core/plugin~Plugin\n */\nexport default class RestrictedEditingMode extends Plugin {\n\t/**\n\t * @inheritDoc\n\t */\n\tstatic get pluginName() {\n\t\treturn 'RestrictedEditingMode';\n\t}\n\n\t/**\n\t * @inheritDoc\n\t */\n\tstatic get requires() {\n\t\treturn [ RestrictedEditingModeEditing, RestrictedEditingModeUI ];\n\t}\n}\n\n/**\n * The configuration of the restricted editing mode feature. Introduced by the\n * {@link module:restricted-editing/restrictededitingmode~RestrictedEditingMode} feature.\n *\n * Read more in {@link module:restricted-editing/restrictededitingmode~RestrictedEditingModeConfig}.\n *\n * @member {module:restricted-editing/restrictededitingmode~RestrictedEditingModeConfig}\n * module:core/editor/editorconfig~EditorConfig#restrictedEditing\n */\n\n/**\n * The configuration of the restricted editing mode feature.\n * The option is used by the {@link module:restricted-editing/restrictededitingmode~RestrictedEditingMode} feature.\n *\n *\t\tClassicEditor\n *\t\t\t.create( {\n * \t\t\t\trestrictedEditing: {\n * \t\t\t\t\tallowedCommands: [ 'bold', 'link', 'unlink' ],\n * \t\t\t\t\tallowedAttributes: [ 'bold', 'linkHref' ]\n * \t\t\t\t}\n *\t\t\t} )\n *\t\t\t.then( ... )\n *\t\t\t.catch( ... );\n *\n * See {@link module:core/editor/editorconfig~EditorConfig all editor options}.\n *\n * @interface module:restricted-editing/restrictededitingmode~RestrictedEditingModeConfig\n */\n\n/**\n * The command names allowed in non-restricted areas of the content.\n *\n * Defines which feature commands should be enabled in the restricted editing mode. The commands used for typing and deleting text\n * (`'input'`, `'delete'` and `'deleteForward'`) are allowed by the feature inside non-restricted regions and do not need to be defined.\n *\n * **Note**: The restricted editing mode always allows to use the restricted mode navigation commands as well as `'undo'` and `'redo'`\n * commands.\n *\n * The default value is:\n *\n *\t\tconst restrictedEditingConfig = {\n *\t\t\tallowedCommands: [ 'bold', 'italic', 'link', 'unlink' ]\n *\t\t};\n *\n * To make a command always enabled (also outside non-restricted areas) use\n * {@link module:restricted-editing/restrictededitingmodeediting~RestrictedEditingModeEditing#enableCommand} method.\n *\n * @member {Array.<String>} module:restricted-editing/restrictededitingmode~RestrictedEditingModeConfig#allowedCommands\n */\n\n/**\n * The text attribute names allowed when pasting content ot non-restricted areas.\n *\n * The default value is:\n *\n *\t\tconst restrictedEditingConfig = {\n *\t\t\tallowedAttributes: [ 'bold', 'italic', 'linkHref' ]\n *\t\t};\n *\n * @member {Array.<String>} module:restricted-editing/restrictededitingmode~RestrictedEditingModeConfig#allowedAttributes\n */\n","/**\n * @license Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\n\n/**\n * @module restricted-editing/restrictededitingmode/converters\n */\n\nimport { Matcher } from 'ckeditor5/src/engine';\n\nimport { getMarkerAtPosition } from './utils';\n\nconst HIGHLIGHT_CLASS = 'restricted-editing-exception_selected';\n\n/**\n * Adds a visual highlight style to a restricted editing exception that the selection is anchored to.\n *\n * The highlight is turned on by adding the `.restricted-editing-exception_selected` class to the\n * exception in the view:\n *\n * * The class is removed before the conversion starts, as callbacks added with the `'highest'` priority\n * to {@link module:engine/conversion/downcastdispatcher~DowncastDispatcher} events.\n * * The class is added in the view post-fixer, after other changes in the model tree are converted to the view.\n *\n * This way, adding and removing the highlight does not interfere with conversion.\n *\n * @param {module:core/editor/editor~Editor} editor\n */\nexport function setupExceptionHighlighting( editor ) {\n\tconst view = editor.editing.view;\n\tconst model = editor.model;\n\tconst highlightedMarkers = new Set();\n\n\t// Adding the class.\n\tview.document.registerPostFixer( writer => {\n\t\tconst modelSelection = model.document.selection;\n\n\t\tconst marker = getMarkerAtPosition( editor, modelSelection.anchor );\n\n\t\tif ( !marker ) {\n\t\t\treturn;\n\t\t}\n\n\t\tfor ( const viewElement of editor.editing.mapper.markerNameToElements( marker.name ) ) {\n\t\t\twriter.addClass( HIGHLIGHT_CLASS, viewElement );\n\t\t\thighlightedMarkers.add( viewElement );\n\t\t}\n\t} );\n\n\t// Removing the class.\n\teditor.conversion.for( 'editingDowncast' ).add( dispatcher => {\n\t\t// Make sure the highlight is removed on every possible event, before conversion is started.\n\t\tdispatcher.on( 'insert', removeHighlight, { priority: 'highest' } );\n\t\tdispatcher.on( 'remove', removeHighlight, { priority: 'highest' } );\n\t\tdispatcher.on( 'attribute', removeHighlight, { priority: 'highest' } );\n\t\tdispatcher.on( 'selection', removeHighlight, { priority: 'highest' } );\n\n\t\tfunction removeHighlight() {\n\t\t\tview.change( writer => {\n\t\t\t\tfor ( const item of highlightedMarkers.values() ) {\n\t\t\t\t\twriter.removeClass( HIGHLIGHT_CLASS, item );\n\t\t\t\t\thighlightedMarkers.delete( item );\n\t\t\t\t}\n\t\t\t} );\n\t\t}\n\t} );\n}\n\n/**\n * A post-fixer that prevents removing a collapsed marker from the document.\n *\n * @param {module:core/editor/editor~Editor} editor\n * @returns {Function}\n */\nexport function resurrectCollapsedMarkerPostFixer( editor ) {\n\t// This post-fixer shouldn't be necessary after https://github.com/ckeditor/ckeditor5/issues/5778.\n\treturn writer => {\n\t\tlet changeApplied = false;\n\n\t\tfor ( const { name, data } of editor.model.document.differ.getChangedMarkers() ) {\n\t\t\tif ( name.startsWith( 'restrictedEditingException' ) && data.newRange && data.newRange.root.rootName == '$graveyard' ) {\n\t\t\t\twriter.updateMarker( name, {\n\t\t\t\t\trange: writer.createRange( writer.createPositionAt( data.oldRange.start ) )\n\t\t\t\t} );\n\n\t\t\t\tchangeApplied = true;\n\t\t\t}\n\t\t}\n\n\t\treturn changeApplied;\n\t};\n}\n\n/**\n * A post-fixer that extends a marker when the user types on its boundaries.\n *\n * @param {module:core/editor/editor~Editor} editor\n * @returns {Function}\n */\nexport function extendMarkerOnTypingPostFixer( editor ) {\n\t// This post-fixer shouldn't be necessary after https://github.com/ckeditor/ckeditor5/issues/5778.\n\treturn writer => {\n\t\tlet changeApplied = false;\n\n\t\tfor ( const change of editor.model.document.differ.getChanges() ) {\n\t\t\tif ( change.type == 'insert' && change.name == '$text' ) {\n\t\t\t\tchangeApplied = _tryExtendMarkerStart( editor, change.position, change.length, writer ) || changeApplied;\n\t\t\t\tchangeApplied = _tryExtendMarkedEnd( editor, change.position, change.length, writer ) || changeApplied;\n\t\t\t}\n\t\t}\n\n\t\treturn false;\n\t};\n}\n\n/**\n * A view highlight-to-marker conversion helper.\n *\n * @param {Object} config Conversion configuration.\n * @param {module:engine/view/matcher~MatcherPattern} [config.view] A pattern matching all view elements which should be converted. If not\n * set, the converter will fire for every view element.\n * @param {String|module:engine/model/element~Element|Function} config.model The name of the model element, a model element\n * instance or a function that takes a view element and returns a model element. The model element will be inserted in the model.\n * @param {module:utils/priorities~PriorityString} [config.converterPriority='normal'] Converter priority.\n */\nexport function upcastHighlightToMarker( config ) {\n\treturn dispatcher => dispatcher.on( 'element:span', ( evt, data, conversionApi ) => {\n\t\tconst { writer } = conversionApi;\n\n\t\tconst matcher = new Matcher( config.view );\n\t\tconst matcherResult = matcher.match( data.viewItem );\n\n\t\t// If there is no match, this callback should not do anything.\n\t\tif ( !matcherResult ) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst match = matcherResult.match;\n\n\t\t// Force consuming element's name (taken from upcast helpers elementToElement converter).\n\t\tmatch.name = true;\n\n\t\tconst { modelRange: convertedChildrenRange } = conversionApi.convertChildren( data.viewItem, data.modelCursor );\n\t\tconversionApi.consumable.consume( data.viewItem, match );\n\n\t\tconst markerName = config.model( data.viewItem );\n\t\tconst fakeMarkerStart = writer.createElement( '$marker', { 'data-name': markerName } );\n\t\tconst fakeMarkerEnd = writer.createElement( '$marker', { 'data-name': markerName } );\n\n\t\t// Insert in reverse order to use converter content positions directly (without recalculating).\n\t\twriter.insert( fakeMarkerEnd, convertedChildrenRange.end );\n\t\twriter.insert( fakeMarkerStart, convertedChildrenRange.start );\n\n\t\tdata.modelRange = writer.createRange(\n\t\t\twriter.createPositionBefore( fakeMarkerStart ),\n\t\t\twriter.createPositionAfter( fakeMarkerEnd )\n\t\t);\n\t\tdata.modelCursor = data.modelRange.end;\n\t} );\n}\n\n// Extend marker if change detected on marker's start position.\nfunction _tryExtendMarkerStart( editor, position, length, writer ) {\n\tconst markerAtStart = getMarkerAtPosition( editor, position.getShiftedBy( length ) );\n\n\tif ( markerAtStart && markerAtStart.getStart().isEqual( position.getShiftedBy( length ) ) ) {\n\t\twriter.updateMarker( markerAtStart, {\n\t\t\trange: writer.createRange( markerAtStart.getStart().getShiftedBy( -length ), markerAtStart.getEnd() )\n\t\t} );\n\n\t\treturn true;\n\t}\n\n\treturn false;\n}\n\n// Extend marker if change detected on marker's end position.\nfunction _tryExtendMarkedEnd( editor, position, length, writer ) {\n\tconst markerAtEnd = getMarkerAtPosition( editor, position );\n\n\tif ( markerAtEnd && markerAtEnd.getEnd().isEqual( position ) ) {\n\t\twriter.updateMarker( markerAtEnd, {\n\t\t\trange: writer.createRange( markerAtEnd.getStart(), markerAtEnd.getEnd().getShiftedBy( length ) )\n\t\t} );\n\n\t\treturn true;\n\t}\n\n\treturn false;\n}\n","/**\n * @license Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\n\n/**\n * @module restricted-editing/restrictededitingmode/utils\n */\n\n/**\n * Returns a single \"restricted-editing-exception\" marker at a given position. Contrary to\n * {@link module:engine/model/markercollection~MarkerCollection#getMarkersAtPosition}, it returnd a marker also when the postion is\n * equal to one of the marker's start or end positions.\n *\n * @param {module:core/editor/editor~Editor} editor\n * @param {module:engine/model/position~Position} position\n * @returns {module:engine/model/markercollection~Marker|undefined} marker\n */\nexport function getMarkerAtPosition( editor, position ) {\n\tfor ( const marker of editor.model.markers ) {\n\t\tconst markerRange = marker.getRange();\n\n\t\tif ( isPositionInRangeBoundaries( markerRange, position ) ) {\n\t\t\tif ( marker.name.startsWith( 'restrictedEditingException:' ) ) {\n\t\t\t\treturn marker;\n\t\t\t}\n\t\t}\n\t}\n}\n\n/**\n * Checks if the position is fully contained in the range. Positions equal to range start or end are considered \"in\".\n *\n * @param {module:engine/model/range~Range} range\n * @param {module:engine/model/position~Position} position\n * @returns {Boolean}\n */\nexport function isPositionInRangeBoundaries( range, position ) {\n\treturn (\n\t\trange.containsPosition( position ) ||\n\t\trange.end.isEqual( position ) ||\n\t\trange.start.isEqual( position )\n\t);\n}\n\n/**\n * Checks if the selection is fully contained in the marker. Positions on marker boundaries are considered \"in\".\n *\n *\t\t<marker>[]foo</marker> -> true\n *\t\t<marker>f[oo]</marker> -> true\n *\t\t<marker>f[oo</marker> ba]r -> false\n *\t\t<marker>foo</marker> []bar -> false\n *\n * @param {module:engine/model/selection~Selection} selection\n * @param {module:engine/model/markercollection~Marker} marker\n * @returns {Boolean}\n */\nexport function isSelectionInMarker( selection, marker ) {\n\tif ( !marker ) {\n\t\treturn false;\n\t}\n\n\tconst markerRange = marker.getRange();\n\n\tif ( selection.isCollapsed ) {\n\t\treturn isPositionInRangeBoundaries( markerRange, selection.focus );\n\t}\n\n\treturn markerRange.containsRange( selection.getFirstRange(), true );\n}\n","/**\n * @license Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\n\n/**\n * @module restricted-editing/restrictededitingmodeediting\n */\n\nimport { Plugin } from 'ckeditor5/src/core';\n\nimport RestrictedEditingNavigationCommand from './restrictededitingmodenavigationcommand';\nimport {\n\textendMarkerOnTypingPostFixer,\n\tresurrectCollapsedMarkerPostFixer,\n\tsetupExceptionHighlighting,\n\tupcastHighlightToMarker\n} from './restrictededitingmode/converters';\nimport { getMarkerAtPosition, isSelectionInMarker } from './restrictededitingmode/utils';\n\nconst COMMAND_FORCE_DISABLE_ID = 'RestrictedEditingMode';\n\n/**\n * The restricted editing mode editing feature.\n *\n * * It introduces the exception marker group that renders to `<span>` elements with the `restricted-editing-exception` CSS class.\n * * It registers the `'goToPreviousRestrictedEditingException'` and `'goToNextRestrictedEditingException'` commands.\n * * It also enables highlighting exception markers that are selected.\n *\n * @extends module:core/plugin~Plugin\n */\nexport default class RestrictedEditingModeEditing extends Plugin {\n\t/**\n\t * @inheritDoc\n\t */\n\tstatic get pluginName() {\n\t\treturn 'RestrictedEditingModeEditing';\n\t}\n\n\t/**\n\t * @inheritDoc\n\t */\n\tconstructor( editor ) {\n\t\tsuper( editor );\n\n\t\teditor.config.define( 'restrictedEditing', {\n\t\t\tallowedCommands: [ 'bold', 'italic', 'link', 'unlink' ],\n\t\t\tallowedAttributes: [ 'bold', 'italic', 'linkHref' ]\n\t\t} );\n\n\t\t/**\n\t\t * Command names that are enabled outside the non-restricted regions.\n\t\t *\n\t\t * @type {Set.<String>}\n\t\t * @private\n\t\t */\n\t\tthis._alwaysEnabled = new Set( [ 'undo', 'redo' ] );\n\n\t\t/**\n\t\t * Commands allowed in non-restricted areas.\n\t\t *\n\t\t * Commands always enabled combine typing feature commands: `'typing'`, `'delete'` and `'deleteForward'` with commands defined\n\t\t * in the feature configuration.\n\t\t *\n\t\t * @type {Set<string>}\n\t\t * @private\n\t\t */\n\t\tthis._allowedInException = new Set( [ 'input', 'delete', 'deleteForward' ] );\n\t}\n\n\t/**\n\t * @inheritDoc\n\t */\n\tinit() {\n\t\tconst editor = this.editor;\n\t\tconst editingView = editor.editing.view;\n\t\tconst allowedCommands = editor.config.get( 'restrictedEditing.allowedCommands' );\n\n\t\tallowedCommands.forEach( commandName => this._allowedInException.add( commandName ) );\n\n\t\tthis._setupConversion();\n\t\tthis._setupCommandsToggling();\n\t\tthis._setupRestrictions();\n\n\t\t// Commands & keystrokes that allow navigation in the content.\n\t\teditor.commands.add( 'goToPreviousRestrictedEditingException', new RestrictedEditingNavigationCommand( editor, 'backward' ) );\n\t\teditor.commands.add( 'goToNextRestrictedEditingException', new RestrictedEditingNavigationCommand( editor, 'forward' ) );\n\t\teditor.keystrokes.set( 'Tab', getCommandExecuter( editor, 'goToNextRestrictedEditingException' ) );\n\t\teditor.keystrokes.set( 'Shift+Tab', getCommandExecuter( editor, 'goToPreviousRestrictedEditingException' ) );\n\t\teditor.keystrokes.set( 'Ctrl+A', getSelectAllHandler( editor ) );\n\n\t\teditingView.change( writer => {\n\t\t\tfor ( const root of editingView.document.roots ) {\n\t\t\t\twriter.addClass( 'ck-restricted-editing_mode_restricted', root );\n\t\t\t}\n\t\t} );\n\t}\n\n\t/**\n\t * Makes the given command always enabled in the restricted editing mode (regardless\n\t * of selection location).\n\t *\n\t * To enable some commands in non-restricted areas of the content use\n\t * {@link module:restricted-editing/restrictededitingmode~RestrictedEditingModeConfig#allowedCommands} configuration option.\n\t *\n\t * @param {String} commandName Name of the command to enable.\n\t */\n\tenableCommand( commandName ) {\n\t\tconst command = this.editor.commands.get( commandName );\n\n\t\tcommand.clearForceDisabled( COMMAND_FORCE_DISABLE_ID );\n\n\t\tthis._alwaysEnabled.add( commandName );\n\t}\n\n\t/**\n\t * Sets up the restricted mode editing conversion:\n\t *\n\t * * ucpast & downcast converters,\n\t * * marker highlighting in the edting area,\n\t * * marker post-fixers.\n\t *\n\t * @private\n\t */\n\t_setupConversion() {\n\t\tconst editor = this.editor;\n\t\tconst model = editor.model;\n\t\tconst doc = model.document;\n\n\t\t// The restricted editing does not attach additional data to the zones so there's no need for smarter markers managing.\n\t\t// Also, the markers will only be created when loading the data.\n\t\tlet markerNumber = 0;\n\n\t\teditor.conversion.for( 'upcast' ).add( upcastHighlightToMarker( {\n\t\t\tview: {\n\t\t\t\tname: 'span',\n\t\t\t\tclasses: 'restricted-editing-exception'\n\t\t\t},\n\t\t\tmodel: () => {\n\t\t\t\tmarkerNumber++; // Starting from restrictedEditingException:1 marker.\n\n\t\t\t\treturn `restrictedEditingException:${ markerNumber }`;\n\t\t\t}\n\t\t} ) );\n\n\t\t// Currently the marker helpers are tied to other use-cases and do not render a collapsed marker as highlight.\n\t\t// That's why there are 2 downcast converters for them:\n\t\t// 1. The default marker-to-highlight will wrap selected text with `<span>`.\n\t\teditor.conversion.for( 'downcast' ).markerToHighlight( {\n\t\t\tmodel: 'restrictedEditingException',\n\t\t\t// Use callback to return new object every time new marker instance is created - otherwise it will be seen as the same marker.\n\t\t\tview: () => {\n\t\t\t\treturn {\n\t\t\t\t\tname: 'span',\n\t\t\t\t\tclasses: 'restricted-editing-exception',\n\t\t\t\t\tpriority: -10\n\t\t\t\t};\n\t\t\t}\n\t\t} );\n\n\t\t// 2. But for collapsed marker we need to render it as an element.\n\t\t// Additionally the editing pipeline should always display a collapsed marker.\n\t\teditor.conversion.for( 'editingDowncast' ).markerToElement( {\n\t\t\tmodel: 'restrictedEditingException',\n\t\t\tview: ( markerData, { writer } ) => {\n\t\t\t\treturn writer.createUIElement( 'span', {\n\t\t\t\t\tclass: 'restricted-editing-exception restricted-editing-exception_collapsed'\n\t\t\t\t} );\n\t\t\t}\n\t\t} );\n\n\t\teditor.conversion.for( 'dataDowncast' ).markerToElement( {\n\t\t\tmodel: 'restrictedEditingException',\n\t\t\tview: ( markerData, { writer } ) => {\n\t\t\t\treturn writer.createEmptyElement( 'span', {\n\t\t\t\t\tclass: 'restricted-editing-exception'\n\t\t\t\t} );\n\t\t\t}\n\t\t} );\n\n\t\tdoc.registerPostFixer( extendMarkerOnTypingPostFixer( editor ) );\n\t\tdoc.registerPostFixer( resurrectCollapsedMarkerPostFixer( editor ) );\n\t\tmodel.markers.on( 'update:restrictedEditingException', ensureNewMarkerIsFlat( editor ) );\n\n\t\tsetupExceptionHighlighting( editor );\n\t}\n\n\t/**\n\t * Setups additional editing restrictions beyond command toggling:\n\t *\n\t * * delete content range trimming\n\t * * disabling input command outside exception marker\n\t * * restricting clipboard holder to text only\n\t * * restricting text attributes in content\n\t *\n\t * @private\n\t */\n\t_setupRestrictions() {\n\t\tconst editor = this.editor;\n\t\tconst model = editor.model;\n\t\tconst selection = model.document.selection;\n\t\tconst viewDoc = editor.editing.view.document;\n\t\tconst clipboard = editor.plugins.get( 'ClipboardPipeline' );\n\n\t\tthis.listenTo( model, 'deleteContent', restrictDeleteContent( editor ), { priority: 'high' } );\n\n\t\tconst inputCommand = editor.commands.get( 'input' );\n\n\t\t// The restricted editing might be configured without input support - ie allow only bolding or removing text.\n\t\t// This check is bit synthetic since only tests are used this way.\n\t\tif ( inputCommand ) {\n\t\t\tthis.listenTo( inputCommand, 'execute', disallowInputExecForWrongRange( editor ), { priority: 'high' } );\n\t\t}\n\n\t\t// Block clipboard outside exception marker on paste and drop.\n\t\tthis.listenTo( clipboard, 'contentInsertion', evt => {\n\t\t\tif ( !isRangeInsideSingleMarker( editor, selection.getFirstRange() ) ) {\n\t\t\t\tevt.stop();\n\t\t\t}\n\t\t} );\n\n\t\t// Block clipboard outside exception marker on cut.\n\t\tthis.listenTo( viewDoc, 'clipboardOutput', ( evt, data ) => {\n\t\t\tif ( data.method == 'cut' && !isRangeInsideSingleMarker( editor, selection.getFirstRange() ) ) {\n\t\t\t\tevt.stop();\n\t\t\t}\n\t\t}, { priority: 'high' } );\n\n\t\tconst allowedAttributes = editor.config.get( 'restrictedEditing.allowedAttributes' );\n\t\tmodel.schema.addAttributeCheck( onlyAllowAttributesFromList( allowedAttributes ) );\n\t\tmodel.schema.addChildCheck( allowTextOnlyInClipboardHolder );\n\t}\n\n\t/**\n\t * Sets up the command toggling which enables or disables commands based on the user selection.\n\t *\n\t * @private\n\t */\n\t_setupCommandsToggling() {\n\t\tconst editor = this.editor;\n\t\tconst model = editor.model;\n\t\tconst doc = model.document;\n\n\t\tthis._disableCommands();\n\n\t\tthis.listenTo( doc.selection, 'change', this._checkCommands.bind( this ) );\n\t\tthis.listenTo( doc, 'change:data', this._checkCommands.bind( this ) );\n\t}\n\n\t/**\n\t * Checks if commands should be enabled or disabled based on the current selection.\n\t *\n\t * @private\n\t */\n\t_checkCommands() {\n\t\tconst editor = this.editor;\n\t\tconst selection = editor.model.document.selection;\n\n\t\tif ( selection.rangeCount > 1 ) {\n\t\t\tthis._disableCommands();\n\n\t\t\treturn;\n\t\t}\n\n\t\tconst marker = getMarkerAtPosition( editor, selection.focus );\n\n\t\tthis._disableCommands();\n\n\t\tif ( isSelectionInMarker( selection, marker ) ) {\n\t\t\tthis._enableCommands( marker );\n\t\t}\n\t}\n\n\t/**\n\t * Enables commands in non-restricted regions.\n\t *\n\t * @returns {module:engine/model/markercollection~Marker} marker\n\t * @private\n\t */\n\t_enableCommands( marker ) {\n\t\tconst editor = this.editor;\n\n\t\tfor ( const [ commandName, command ] of editor.commands ) {\n\t\t\tif ( !command.affectsData || this._alwaysEnabled.has( commandName ) ) {\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\t// Enable ony those commands that are allowed in the exception marker.\n\t\t\tif ( !this._allowedInException.has( commandName ) ) {\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\t// Do not enable 'delete' and 'deleteForward' commands on the exception marker boundaries.\n\t\t\tif ( isDeleteCommandOnMarkerBoundaries( commandName, editor.model.document.selection, marker.getRange() ) ) {\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tcommand.clearForceDisabled( COMMAND_FORCE_DISABLE_ID );\n\t\t}\n\t}\n\n\t/**\n\t * Disables commands outside non-restricted regions.\n\t *\n\t * @private\n\t */\n\t_disableCommands() {\n\t\tconst editor = this.editor;\n\n\t\tfor ( const [ commandName, command ] of editor.commands ) {\n\t\t\tif ( !command.affectsData || this._alwaysEnabled.has( commandName ) ) {\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tcommand.forceDisabled( COMMAND_FORCE_DISABLE_ID );\n\t\t}\n\t}\n}\n\n// Helper method for executing enabled commands only.\nfunction getCommandExecuter( editor, commandName ) {\n\treturn ( data, cancel ) => {\n\t\tconst command = editor.commands.get( commandName );\n\n\t\tif ( command.isEnabled ) {\n\t\t\teditor.execute( commandName );\n\t\t\tcancel();\n\t\t}\n\t};\n}\n\n// Helper for handling Ctrl+A keydown behaviour.\nfunction getSelectAllHandler( editor ) {\n\treturn ( data, cancel ) => {\n\t\tconst model = editor.model;\n\t\tconst selection = editor.model.document.selection;\n\t\tconst marker = getMarkerAtPosition( editor, selection.focus );\n\n\t\tif ( !marker ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// If selection range is inside a restricted editing exception, select text only within the exception.\n\t\t//\n\t\t// Note: Second Ctrl+A press is also blocked and it won't select the entire text in the editor.\n\t\tconst selectionRange = selection.getFirstRange();\n\t\tconst markerRange = marker.getRange();\n\n\t\tif ( markerRange.containsRange( selectionRange, true ) || selection.isCollapsed ) {\n\t\t\tcancel();\n\n\t\t\tmodel.change( writer => {\n\t\t\t\twriter.setSelection( marker.getRange() );\n\t\t\t} );\n\t\t}\n\t};\n}\n\n// Additional rule for enabling \"delete\" and \"deleteForward\" commands if selection is on range boundaries:\n//\n// Does not allow to enable command when selection focus is:\n// - is on marker start - \"delete\" - to prevent removing content before marker\n// - is on marker end - \"deleteForward\" - to prevent removing content after marker\nfunction isDeleteCommandOnMarkerBoundaries( commandName, selection, markerRange ) {\n\tif ( commandName == 'delete' && markerRange.start.isEqual( selection.focus ) ) {\n\t\treturn true;\n\t}\n\n\t// Only for collapsed selection - non-collapsed selection that extends over a marker is handled elsewhere.\n\tif ( commandName == 'deleteForward' && selection.isCollapsed && markerRange.end.isEqual( selection.focus ) ) {\n\t\treturn true;\n\t}\n\n\treturn false;\n}\n\n// Ensures that model.deleteContent() does not delete outside exception markers ranges.\n//\n// The enforced restrictions are:\n// - only execute deleteContent() inside exception markers\n// - restrict passed selection to exception marker\nfunction restrictDeleteContent( editor ) {\n\treturn ( evt, args ) => {\n\t\tconst [ selection ] = args;\n\n\t\tconst marker = getMarkerAtPosition( editor, selection.focus ) || getMarkerAtPosition( editor, selection.anchor );\n\n\t\t// Stop method execution if marker was not found at selection focus.\n\t\tif ( !marker ) {\n\t\t\tevt.stop();\n\n\t\t\treturn;\n\t\t}\n\n\t\t// Collapsed selection inside exception marker does not require fixing.\n\t\tif ( selection.isCollapsed ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Shrink the selection to the range inside exception marker.\n\t\tconst allowedToDelete = marker.getRange().getIntersection( selection.getFirstRange() );\n\n\t\t// Some features uses selection passed to model.deleteContent() to set the selection afterwards. For this we need to properly modify\n\t\t// either the document selection using change block...\n\t\tif ( selection.is( 'documentSelection' ) ) {\n\t\t\teditor.model.change( writer => {\n\t\t\t\twriter.setSelection( allowedToDelete );\n\t\t\t} );\n\t\t}\n\t\t// ... or by modifying passed selection instance directly.\n\t\telse {\n\t\t\tselection.setTo( allowedToDelete );\n\t\t}\n\t};\n}\n\n// Ensures that input command is executed with a range that is inside exception marker.\n//\n// This restriction is due to fact that using native spell check changes text outside exception marker.\nfunction disallowInputExecForWrongRange( editor ) {\n\treturn ( evt, args ) => {\n\t\tconst [ options ] = args;\n\t\tconst { range } = options;\n\n\t\t// Only check \"input\" command executed with a range value.\n\t\t// Selection might be set in exception marker but passed range might point elsewhere.\n\t\tif ( !range ) {\n\t\t\treturn;\n\t\t}\n\n\t\tif ( !isRangeInsideSingleMarker( editor, range ) ) {\n\t\t\tevt.stop();\n\t\t}\n\t};\n}\n\nfunction isRangeInsideSingleMarker( editor, range ) {\n\tconst markerAtStart = getMarkerAtPosition( editor, range.start );\n\tconst markerAtEnd = getMarkerAtPosition( editor, range.end );\n\n\treturn markerAtStart && markerAtEnd && markerAtEnd === markerAtStart;\n}\n\n// Checks if new marker range is flat. Non-flat ranges might appear during upcast conversion in nested structures, ie tables.\n//\n// Note: This marker fixer only consider case which is possible to create using StandardEditing mode plugin.\n// Markers created by developer in the data might break in many other ways.\n//\n// See #6003.\nfunction ensureNewMarkerIsFlat( editor ) {\n\tconst model = editor.model;\n\n\treturn ( evt, marker, oldRange, newRange ) => {\n\t\tif ( !oldRange && !newRange.isFlat ) {\n\t\t\tmodel.change( writer => {\n\t\t\t\tconst start = newRange.start;\n\t\t\t\tconst end = newRange.end;\n\n\t\t\t\tconst startIsHigherInTree = start.path.length > end.path.length;\n\n\t\t\t\tconst fixedStart = startIsHigherInTree ? newRange.start : writer.createPositionAt( end.parent, 0 );\n\t\t\t\tconst fixedEnd = startIsHigherInTree ? writer.createPositionAt( start.parent, 'end' ) : newRange.end;\n\n\t\t\t\twriter.updateMarker( marker, {\n\t\t\t\t\trange: writer.createRange( fixedStart, fixedEnd )\n\t\t\t\t} );\n\t\t\t} );\n\t\t}\n\t};\n}\n\nfunction onlyAllowAttributesFromList( allowedAttributes ) {\n\treturn ( context, attributeName ) => {\n\t\tif ( context.startsWith( '$clipboardHolder' ) ) {\n\t\t\treturn allowedAttributes.includes( attributeName );\n\t\t}\n\t};\n}\n\nfunction allowTextOnlyInClipboardHolder( context, childDefinition ) {\n\tif ( context.startsWith( '$clipboardHolder' ) ) {\n\t\treturn childDefinition.name === '$text';\n\t}\n}\n","/**\n * @license Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\n\n/**\n * @module restricted-editing/restrictededitingmodenavigationcommand\n */\n\nimport { Command } from 'ckeditor5/src/core';\n\n/**\n * The command that allows navigation across the exceptions in the edited document.\n *\n * @extends module:core/command~Command\n */\nexport default class RestrictedEditingModeNavigationCommand extends Command {\n\t/**\n\t * Creates an instance of the command.\n\t *\n\t * @param {module:core/editor/editor~Editor} editor The editor instance.\n\t * @param {String} direction The direction that the command works. Can be either `'forward'` or `'backward'`.\n\t */\n\tconstructor( editor, direction ) {\n\t\tsuper( editor );\n\n\t\t// It does not affect data so should be enabled in read-only mode and in restricted editing mode.\n\t\tthis.affectsData = false;\n\n\t\t/**\n\t\t * The direction of the command. Can be `'forward'` or `'backward'`.\n\t\t *\n\t\t * @readonly\n\t\t * @private\n\t\t * @member {String}\n\t\t */\n\t\tthis._direction = direction;\n\t}\n\n\t/**\n\t * @inheritDoc\n\t */\n\trefresh() {\n\t\tthis.isEnabled = this._checkEnabled();\n\t}\n\n\t/**\n\t * Executes the command.\n\t *\n\t * @fires execute\n\t */\n\texecute() {\n\t\tconst position = getNearestExceptionRange( this.editor.model, this._direction );\n\n\t\tthis.editor.model.change( writer => {\n\t\t\twriter.setSelection( position );\n\t\t} );\n\t}\n\n\t/**\n\t * Checks whether the command can be enabled in the current context.\n\t *\n\t * @private\n\t * @returns {Boolean} Whether the command should be enabled.\n\t */\n\t_checkEnabled() {\n\t\treturn !!getNearestExceptionRange( this.editor.model, this._direction );\n\t}\n}\n\n// Returns the range of the exception marker closest to the last position of the\n// model selection.\n//\n// @param {module:engine/model/model~Model} model\n// @param {String} direction Either \"forward\" or \"backward\".\n// @returns {module:engine/model/range~Range|null}\nfunction getNearestExceptionRange( model, direction ) {\n\tconst selection = model.document.selection;\n\tconst selectionPosition = selection.getFirstPosition();\n\tconst markerRanges = [];\n\n\t// Get all exception marker positions that start after/before the selection position.\n\tfor ( const marker of model.markers.getMarkersGroup( 'restrictedEditingException' ) ) {\n\t\tconst markerRange = marker.getRange();\n\n\t\t// Checking parent because there two positions <paragraph>foo^</paragraph><paragraph>^bar</paragraph>\n\t\t// are touching but they will represent different markers.\n\t\tconst isMarkerRangeTouching =\n\t\t\tselectionPosition.isTouching( markerRange.start ) && selectionPosition.hasSameParentAs( markerRange.start ) ||\n\t\t\tselectionPosition.isTouching( markerRange.end ) && selectionPosition.hasSameParentAs( markerRange.end );\n\n\t\t// <paragraph>foo <marker≥b[]ar</marker> baz</paragraph>\n\t\t// <paragraph>foo <marker≥b[ar</marker> ba]z</paragraph>\n\t\t// <paragraph>foo <marker≥bar</marker>[] baz</paragraph>\n\t\t// <paragraph>foo []<marker≥bar</marker> baz</paragraph>\n\t\tif ( markerRange.containsPosition( selectionPosition ) || isMarkerRangeTouching ) {\n\t\t\tcontinue;\n\t\t}\n\n\t\tif ( direction === 'forward' && markerRange.start.isAfter( selectionPosition ) ) {\n\t\t\tmarkerRanges.push( markerRange );\n\t\t} else if ( direction === 'backward' && markerRange.end.isBefore( selectionPosition ) ) {\n\t\t\tmarkerRanges.push( markerRange );\n\t\t}\n\t}\n\n\tif ( !markerRanges.length ) {\n\t\treturn null;\n\t}\n\n\t// Get the marker closest to the selection position among many. To know that, we need to sort\n\t// them first.\n\treturn markerRanges.sort( ( rangeA, rangeB ) => {\n\t\tif ( direction === 'forward' ) {\n\t\t\treturn rangeA.start.isAfter( rangeB.start ) ? 1 : -1;\n\t\t} else {\n\t\t\treturn rangeA.start.isBefore( rangeB.start ) ? 1 : -1;\n\t\t}\n\t} ).shift();\n}\n","/**\n * @license Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\n\n/**\n * @module restricted-editing/restrictededitingmodeui\n */\n\nimport { Plugin } from 'ckeditor5/src/core';\nimport { Model, createDropdown, addListToDropdown } from 'ckeditor5/src/ui';\nimport { Collection } from 'ckeditor5/src/utils';\n\nimport lockIcon from '../theme/icons/contentlock.svg';\n\n/**\n * The restricted editing mode UI feature.\n *\n * It introduces the `'restrictedEditing'` dropdown that offers tools to navigate between exceptions across\n * the document.\n *\n * @extends module:core/plugin~Plugin\n */\nexport default class RestrictedEditingModeUI extends Plugin {\n\t/**\n\t * @inheritDoc\n\t */\n\tstatic get pluginName() {\n\t\treturn 'RestrictedEditingModeUI';\n\t}\n\n\t/**\n\t * @inheritDoc\n\t */\n\tinit() {\n\t\tconst editor = this.editor;\n\t\tconst t = editor.t;\n\n\t\teditor.ui.componentFactory.add( 'restrictedEditing', locale => {\n\t\t\tconst dropdownView = createDropdown( locale );\n\t\t\tconst listItems = new Collection();\n\n\t\t\tlistItems.add( this._getButtonDefinition(\n\t\t\t\t'goToPreviousRestrictedEditingException',\n\t\t\t\tt( 'Previous editable region' ),\n\t\t\t\t'Shift+Tab'\n\t\t\t) );\n\t\t\tlistItems.add( this._getButtonDefinition(\n\t\t\t\t'goToNextRestrictedEditingException',\n\t\t\t\tt( 'Next editable region' ),\n\t\t\t\t'Tab'\n\t\t\t) );\n\n\t\t\taddListToDropdown( dropdownView, listItems );\n\n\t\t\tdropdownView.buttonView.set( {\n\t\t\t\tlabel: t( 'Navigate editable regions' ),\n\t\t\t\ticon: lockIcon,\n\t\t\t\ttooltip: true,\n\t\t\t\tisEnabled: true,\n\t\t\t\tisOn: false\n\t\t\t} );\n\n\t\t\tthis.listenTo( dropdownView, 'execute', evt => {\n\t\t\t\teditor.execute( evt.source._commandName );\n\t\t\t\teditor.editing.view.focus();\n\t\t\t} );\n\n\t\t\treturn dropdownView;\n\t\t} );\n\t}\n\n\t/**\n\t * Returns a definition of the navigation button to be used in the dropdown.\n\t *\n\t * @private\n\t * @param {String} commandName The name of the command that the button represents.\n\t * @param {String} label The translated label of the button.\n\t * @param {String} keystroke The button keystroke.\n\t * @returns {module:ui/dropdown/utils~ListDropdownItemDefinition}\n\t */\n\t_getButtonDefinition( commandName, label, keystroke ) {\n\t\tconst editor = this.editor;\n\t\tconst command = editor.commands.get( commandName );\n\t\tconst definition = {\n\t\t\ttype: 'button',\n\t\t\tmodel: new Model( {\n\t\t\t\tlabel,\n\t\t\t\twithText: true,\n\t\t\t\tkeystroke,\n\t\t\t\twithKeystroke: true,\n\t\t\t\t_commandName: commandName\n\t\t\t} )\n\t\t};\n\n\t\tdefinition.model.bind( 'isEnabled' ).to( command, 'isEnabled' );\n\n\t\treturn definition;\n\t}\n}\n","/**\n * @license Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\n\n/**\n * @module restricted-editing/standardeditingmode\n */\n\nimport { Plugin } from 'ckeditor5/src/core';\n\nimport StandardEditingModeEditing from './standardeditingmodeediting';\nimport StandardEditingModeUI from './standardeditingmodeui';\n\nimport '../theme/restrictedediting.css';\n\n/**\n * The standard editing mode plugin.\n *\n * This is a \"glue\" plugin that loads the following plugins:\n *\n * * The {@link module:restricted-editing/standardeditingmodeediting~StandardEditingModeEditing standard mode editing feature}.\n * * The {@link module:restricted-editing/standardeditingmodeui~StandardEditingModeUI standard mode UI feature}.\n *\n * @extends module:core/plugin~Plugin\n */\nexport default class StandardEditingMode extends Plugin {\n\t/**\n\t * @inheritDoc\n\t */\n\tstatic get pluginName() {\n\t\treturn 'StandardEditingMode';\n\t}\n\n\tstatic get requires() {\n\t\treturn [ StandardEditingModeEditing, StandardEditingModeUI ];\n\t}\n}\n","/**\n * @license Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\n\n/**\n * @module restricted-editing/standardeditingmodeediting\n */\n\nimport { Plugin } from 'ckeditor5/src/core';\n\nimport RestrictedEditingExceptionCommand from './restrictededitingexceptioncommand';\n\n/**\n * The standard editing mode editing feature.\n *\n * * It introduces the `restrictedEditingException` text attribute that is rendered as\n * a `<span>` element with the `restricted-editing-exception` CSS class.\n * * It registers the `'restrictedEditingException'` command.\n *\n * @extends module:core/plugin~Plugin\n */\nexport default class StandardEditingModeEditing extends Plugin {\n\t/**\n\t * @inheritDoc\n\t */\n\tstatic get pluginName() {\n\t\treturn 'StandardEditingModeEditing';\n\t}\n\n\t/**\n\t * @inheritDoc\n\t */\n\tinit() {\n\t\tconst editor = this.editor;\n\n\t\teditor.model.schema.extend( '$text', { allowAttributes: [ 'restrictedEditingException' ] } );\n\n\t\teditor.conversion.for( 'upcast' ).elementToAttribute( {\n\t\t\tmodel: 'restrictedEditingException',\n\t\t\tview: {\n\t\t\t\tname: 'span',\n\t\t\t\tclasses: 'restricted-editing-exception'\n\t\t\t}\n\t\t} );\n\n\t\teditor.conversion.for( 'downcast' ).attributeToElement( {\n\t\t\tmodel: 'restrictedEditingException',\n\t\t\tview: ( modelAttributeValue, { writer } ) => {\n\t\t\t\tif ( modelAttributeValue ) {\n\t\t\t\t\t// Make the restricted editing <span> outer-most in the view.\n\t\t\t\t\treturn writer.createAttributeElement( 'span', { class: 'restricted-editing-exception' }, { priority: -10 } );\n\t\t\t\t}\n\t\t\t}\n\t\t} );\n\n\t\teditor.commands.add( 'restrictedEditingException', new RestrictedEditingExceptionCommand( editor ) );\n\n\t\teditor.editing.view.change( writer => {\n\t\t\tfor ( const root of editor.editing.view.document.roots ) {\n\t\t\t\twriter.addClass( 'ck-restricted-editing_mode_standard', root );\n\t\t\t}\n\t\t} );\n\t}\n}\n","/**\n * @license Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\n\n/**\n * @module restricted-editing/standardeditingmodeui\n */\n\nimport { Plugin } from 'ckeditor5/src/core';\nimport { ButtonView } from 'ckeditor5/src/ui';\n\nimport unlockIcon from '../theme/icons/contentunlock.svg';\n\n/**\n * The standard editing mode UI feature.\n *\n * It introduces the `'restrictedEditingException'` button that marks text as unrestricted for editing.\n *\n * @extends module:core/plugin~Plugin\n */\nexport default class StandardEditingModeUI extends Plugin {\n\t/**\n\t * @inheritDoc\n\t */\n\tinit() {\n\t\tconst editor = this.editor;\n\t\tconst t = editor.t;\n\n\t\teditor.ui.componentFactory.add( 'restrictedEditingException', locale => {\n\t\t\tconst command = editor.commands.get( 'restrictedEditingException' );\n\t\t\tconst view = new ButtonView( locale );\n\n\t\t\tview.set( {\n\t\t\t\ticon: unlockIcon,\n\t\t\t\ttooltip: true,\n\t\t\t\tisToggleable: true\n\t\t\t} );\n\n\t\t\tview.bind( 'isOn', 'isEnabled' ).to( command, 'value', 'isEnabled' );\n\t\t\tview.bind( 'label' ).to( command, 'value', value => {\n\t\t\t\treturn value ? t( 'Disable editing' ) : t( 'Enable editing' );\n\t\t\t} );\n\n\t\t\tthis.listenTo( view, 'execute', () => {\n\t\t\t\teditor.execute( 'restrictedEditingException' );\n\t\t\t\teditor.editing.view.focus();\n\t\t\t} );\n\n\t\t\treturn view;\n\t\t} );\n\t}\n}\n","module.exports = (__webpack_require__(/*! dll-reference CKEditor5.dll */ \"dll-reference CKEditor5.dll\"))(\"./src/core.js\");","module.exports = (__webpack_require__(/*! dll-reference CKEditor5.dll */ \"dll-reference CKEditor5.dll\"))(\"./src/engine.js\");","module.exports = (__webpack_require__(/*! dll-reference CKEditor5.dll */ \"dll-reference CKEditor5.dll\"))(\"./src/ui.js\");","module.exports = (__webpack_require__(/*! dll-reference CKEditor5.dll */ \"dll-reference CKEditor5.dll\"))(\"./src/utils.js\");","module.exports = CKEditor5.dll;","// The module cache\nvar __webpack_module_cache__ = {};\n\n// The require function\nfunction __webpack_require__(moduleId) {\n\t// Check if module is in cache\n\tvar cachedModule = __webpack_module_cache__[moduleId];\n\tif (cachedModule !== undefined) {\n\t\treturn cachedModule.exports;\n\t}\n\t// Create a new module (and put it into the cache)\n\tvar module = __webpack_module_cache__[moduleId] = {\n\t\tid: moduleId,\n\t\t// no module.loaded needed\n\t\texports: {}\n\t};\n\n\t// Execute the module function\n\t__webpack_modules__[moduleId](module, module.exports, __webpack_require__);\n\n\t// Return the exports of the module\n\treturn module.exports;\n}\n\n","// getDefaultExport function for compatibility with non-harmony modules\n__webpack_require__.n = (module) => {\n\tvar getter = module && module.__esModule ?\n\t\t() => (module['default']) :\n\t\t() => (module);\n\t__webpack_require__.d(getter, { a: getter });\n\treturn getter;\n};","// define getter functions for harmony exports\n__webpack_require__.d = (exports, definition) => {\n\tfor(var key in definition) {\n\t\tif(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n\t\t\tObject.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n\t\t}\n\t}\n};","__webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))","// define __esModule on exports\n__webpack_require__.r = (exports) => {\n\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n\t}\n\tObject.defineProperty(exports, '__esModule', { value: true });\n};","/**\n * @license Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\n\n/**\n * @module restricted-editing\n */\n\nexport { default as RestrictedEditingMode } from './restrictededitingmode';\nexport { default as RestrictedEditingModeEditing } from './restrictededitingmodeediting';\nexport { default as RestrictedEditingModeUI } from './restrictededitingmodeui';\nexport { default as StandardEditingMode } from './standardeditingmode';\nexport { default as StandardEditingModeEditing } from './standardeditingmodeediting';\nexport { default as StandardEditingModeUI } from './standardeditingmodeui';\n"],"sourceRoot":""}
|