@ckeditor/ckeditor5-paste-from-office 31.1.0 → 32.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/LICENSE.md CHANGED
@@ -2,7 +2,7 @@ Software License Agreement
2
2
  ==========================
3
3
 
4
4
  **CKEditor 5 paste from Office feature** – https://github.com/ckeditor/ckeditor5-paste-from-office <br>
5
- Copyright (c) 2003-2021, [CKSource](http://cksource.com) Frederico Knabben. All rights reserved.
5
+ Copyright (c) 2003-2022, [CKSource](http://cksource.com) Holding sp. z o.o. 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
 
@@ -14,4 +14,4 @@ Where not otherwise indicated, all CKEditor content is authored by CKSource engi
14
14
  Trademarks
15
15
  ----------
16
16
 
17
- **CKEditor** is a trademark of [CKSource](http://cksource.com) Frederico Knabben. All other brand and product names are trademarks, registered trademarks or service marks of their respective holders.
17
+ **CKEditor** is a trademark of [CKSource](http://cksource.com) Holding sp. z o.o. All other brand and product names are trademarks, registered trademarks or service marks of their respective holders.
@@ -1,5 +1,4 @@
1
1
  /*!
2
- * @license Copyright (c) 2003-2021, CKSource - Frederico Knabben. All rights reserved.
2
+ * @license Copyright (c) 2003-2022, CKSource - Frederico Knabben. All rights reserved.
3
3
  * For licensing, see LICENSE.md.
4
- */
5
- window.CKEditor5=window.CKEditor5||{},window.CKEditor5.pasteFromOffice=function(e){var t={};function n(r){if(t[r])return t[r].exports;var i=t[r]={i:r,l:!1,exports:{}};return e[r].call(i.exports,i,i.exports,n),i.l=!0,i.exports}return n.m=e,n.c=t,n.d=function(e,t,r){n.o(e,t)||Object.defineProperty(e,t,{enumerable:!0,get:r})},n.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},n.t=function(e,t){if(1&t&&(e=n(e)),8&t)return e;if(4&t&&"object"==typeof e&&e&&e.__esModule)return e;var r=Object.create(null);if(n.r(r),Object.defineProperty(r,"default",{enumerable:!0,value:e}),2&t&&"string"!=typeof e)for(var i in e)n.d(r,i,function(t){return e[t]}.bind(null,i));return r},n.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return n.d(t,"a",t),t},n.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},n.p="",n(n.s=4)}([function(e,t,n){e.exports=n(1)("./src/engine.js")},function(e,t){e.exports=CKEditor5.dll},function(e,t,n){e.exports=n(1)("./src/core.js")},function(e,t,n){e.exports=n(1)("./src/clipboard.js")},function(e,t,n){"use strict";n.r(t),n.d(t,"PasteFromOffice",(function(){return b}));var r=n(2),i=n(3),o=n(0);function s(e,t){if(!e.childCount)return;const n=new o.UpcastWriter(e.document),r=function(e,t){const n=t.createRangeIn(e),r=new o.Matcher({name:/^p|h\d+$/,styles:{"mso-list":/.*/}}),i=[];for(const e of n)if("elementStart"===e.type&&r.match(e.item)){const t=a(e.item);i.push({element:e.item,id:t.id,order:t.order,indent:t.indent})}return i}(e,n);if(!r.length)return;let i=null,s=1;r.forEach((e,a)=>{const u=function(e,t){if(!e)return!0;if(e.id!==t.id)return t.indent-e.indent!=1;const n=t.element.previousSibling;if(!n)return!0;return r=n,!(r.is("element","ol")||r.is("element","ul"));var r}(r[a-1],e),f=u?null:r[a-1],d=(m=e,(p=f)?m.indent-p.indent:m.indent-1);var p,m;if(u&&(i=null,s=1),!i||0!==d){const r=function(e,t){const n=new RegExp(`@list l${e.id}:level${e.indent}\\s*({[^}]*)`,"gi"),r=/mso-level-number-format:([^;]{0,100});/gi,i=n.exec(t);let o="decimal",s="ol";if(i&&i[1]){const t=r.exec(i[1]);if(t&&t[1]&&(o=t[1].trim(),s="bullet"!==o&&"image"!==o?"ol":"ul"),"bullet"===o){const t=function(e){const t=function(e){if(e.getChild(0).is("$text"))return null;for(const t of e.getChildren()){if(!t.is("element","span"))continue;const e=t.getChild(0);return e.is("$text")?e:e.getChild(0)}}(e);if(!t)return null;const n=t._data;if("o"===n)return"circle";if("·"===n)return"disc";if("§"===n)return"square";return null}(e.element);t&&(o=t)}}return{type:s,style:c(o)}}(e,t);if(i){if(e.indent>s){const e=i.getChild(i.childCount-1),t=e.getChild(e.childCount-1);i=l(r,t,n),s+=1}else if(e.indent<s){const t=s-e.indent;i=function(e,t){const n=e.getAncestors({parentFirst:!0});let r=null,i=0;for(const e of n)if("ul"!==e.name&&"ol"!==e.name||i++,i===t){r=e;break}return r}(i,t),s=parseInt(e.indent)}}else i=l(r,e.element,n);e.indent<=s&&(i.is("element",r.type)||(i=n.rename(r.type,i)))}const g=function(e,t){return function(e,t){const n=new o.Matcher({name:"span",styles:{"mso-list":"Ignore"}}),r=t.createRangeIn(e);for(const e of r)"elementStart"===e.type&&n.match(e.item)&&t.remove(e.item)}(e,t),t.rename("li",e)}(e.element,n);n.appendChild(g,i)})}function c(e){switch(e){case"arabic-leading-zero":return"decimal-leading-zero";case"alpha-upper":return"upper-alpha";case"alpha-lower":return"lower-alpha";case"roman-upper":return"upper-roman";case"roman-lower":return"lower-roman";case"circle":case"disc":case"square":return e;default:return null}}function l(e,t,n){const r=t.parent,i=n.createElement(e.type),o=r.getChildIndex(t)+1;return n.insertChild(o,i,r),e.style&&n.setStyle("list-style-type",e.style,i),i}function a(e){const t={},n=e.getStyle("mso-list");if(n){const e=n.match(/(^|\s{1,100})l(\d+)/i),r=n.match(/\s{0,100}lfo(\d+)/i),i=n.match(/\s{0,100}level(\d+)/i);e&&r&&i&&(t.id=e[2],t.order=r[1],t.indent=i[1])}return t}const u=/id=("|')docs-internal-guid-[-0-9a-f]+("|')/i;class f{constructor(e){this.document=e}isActive(e){return u.test(e)}execute(e){const t=new o.UpcastWriter(this.document),{body:n}=e._parsedData;!function(e,t){for(const n of e.getChildren())if(n.is("element","b")&&"normal"===n.getStyle("font-weight")){const r=e.getChildIndex(n);t.remove(n),t.insertChild(r,n.getChildren(),e)}}(n,t),function(e,t){for(const n of t.createRangeIn(e)){const e=n.item;if(e.is("element","li")){const n=e.getChild(0);n&&n.is("element","p")&&t.unwrapElement(n)}}}(n,t),e.content=n}}function d(e,t){if(!e.childCount)return;const n=new o.UpcastWriter;!function(e,t,n){const r=n.createRangeIn(t),i=new o.Matcher({name:"img"}),s=[];for(const t of r)if(i.match(t.item)){const n=t.item,r=n.getAttribute("v:shapes")?n.getAttribute("v:shapes").split(" "):[];r.length&&r.every(t=>e.indexOf(t)>-1)?s.push(n):n.getAttribute("src")||s.push(n)}for(const e of s)n.remove(e)}(function(e,t){const n=t.createRangeIn(e),r=new o.Matcher({name:/v:(.+)/}),i=[];for(const e of n){if("elementStart"!=e.type)continue;const t=e.item,n=t.previousSibling&&t.previousSibling.name||null;r.match(t)&&t.getAttribute("o:gfxdata")&&"v:shapetype"!==n&&i.push(e.item.getAttribute("id"))}return i}(e,n),e,n),function(e,t){const n=t.createRangeIn(e),r=new o.Matcher({name:/v:(.+)/}),i=[];for(const e of n)"elementStart"==e.type&&r.match(e.item)&&i.push(e.item);for(const e of i)t.remove(e)}(e,n);const r=function(e,t){const n=t.createRangeIn(e),r=new o.Matcher({name:"img"}),i=[];for(const e of n)r.match(e.item)&&e.item.getAttribute("src").startsWith("file://")&&i.push(e.item);return i}(e,n);r.length&&function(e,t,n){if(e.length===t.length)for(let i=0;i<e.length;i++){const o=`data:${t[i].type};base64,${r=t[i].hex,btoa(r.match(/\w{2}/g).map(e=>String.fromCharCode(parseInt(e,16))).join(""))}`;n.setAttribute("src",o,e[i])}var r}(r,function(e){if(!e)return[];const t=/{\\pict[\s\S]+?\\bliptag-?\d+(\\blipupi-?\d+)?({\\\*\\blipuid\s?[\da-fA-F]+)?[\s}]*?/,n=new RegExp("(?:("+t.source+"))([\\da-fA-F\\s]+)\\}","g"),r=e.match(n),i=[];if(r)for(const e of r){let n=!1;e.includes("\\pngblip")?n="image/png":e.includes("\\jpegblip")&&(n="image/jpeg"),n&&i.push({hex:e.replace(t,"").replace(/[^\da-fA-F]/g,""),type:n})}return i}(t),n)}const p=/<meta\s*name="?generator"?\s*content="?microsoft\s*word\s*\d+"?\/?>/i,m=/xmlns:o="urn:schemas-microsoft-com/i;class g{constructor(e){this.document=e}isActive(e){return p.test(e)||m.test(e)}execute(e){const{body:t,stylesString:n}=e._parsedData;s(t,n),d(t,e.dataTransfer.getData("text/rtf")),e.content=t}}function h(e){return e.replace(/<span(?: class="Apple-converted-space"|)>(\s+)<\/span>/g,(e,t)=>1===t.length?" ":Array(t.length+1).join("  ").substr(0,t.length))}function y(e,t){const n=new DOMParser,r=function(e){return h(h(e)).replace(/(<span\s+style=['"]mso-spacerun:yes['"]>[^\S\r\n]*?)[\r\n]+([^\S\r\n]*<\/span>)/g,"$1$2").replace(/<span\s+style=['"]mso-spacerun:yes['"]><\/span>/g,"").replace(/ <\//g," </").replace(/ <o:p><\/o:p>/g," <o:p></o:p>").replace(/<o:p>(&nbsp;|\u00A0)<\/o:p>/g,"").replace(/>([^\S\r\n]*[\r\n]\s*)</g,"><")}(function(e){const t=e.indexOf("</body>");if(t<0)return e;const n=e.indexOf("</html>",t+"</body>".length);return e.substring(0,t+"</body>".length)+(n>=0?e.substring(n):"")}(e=e.replace(/<!--\[if gte vml 1]>/g,""))),i=n.parseFromString(r,"text/html");!function(e){e.querySelectorAll("span[style*=spacerun]").forEach(e=>{const t=e.innerText.length||0;e.innerHTML=Array(t+1).join("  ").substr(0,t)})}(i);const s=i.body.innerHTML,c=function(e,t){const n=new o.ViewDocument(t),r=new o.DomConverter(n,{renderingMode:"data"}),i=e.createDocumentFragment(),s=e.body.childNodes;for(;s.length>0;)i.appendChild(s[0]);return r.domToView(i,{skipComments:!0})}(i,t),l=function(e){const t=[],n=[],r=Array.from(e.getElementsByTagName("style"));for(const e of r)e.sheet&&e.sheet.cssRules&&e.sheet.cssRules.length&&(t.push(e.sheet),n.push(e.innerHTML));return{styles:t,stylesString:n.join(" ")}}(i);return{body:c,bodyString:s,styles:l.styles,stylesString:l.stylesString}}class b extends r.Plugin{static get pluginName(){return"PasteFromOffice"}static get requires(){return[i.ClipboardPipeline]}init(){const e=this.editor,t=e.editing.view.document,n=[];n.push(new g(t)),n.push(new f(t)),e.plugins.get("ClipboardPipeline").on("inputTransformation",(e,r)=>{if(r._isTransformedWithPasteFromOffice)return;const i=r.dataTransfer.getData("text/html"),o=n.find(e=>e.isActive(i));o&&(r._parsedData=y(i,t.stylesProcessor),o.execute(r),r._isTransformedWithPasteFromOffice=!0)},{priority:"high"})}}}]);
4
+ */(()=>{var e={945:(e,t,n)=>{e.exports=n(79)("./src/clipboard.js")},704:(e,t,n)=>{e.exports=n(79)("./src/core.js")},492:(e,t,n)=>{e.exports=n(79)("./src/engine.js")},79:e=>{"use strict";e.exports=CKEditor5.dll}},t={};function n(r){var s=t[r];if(void 0!==s)return s.exports;var i=t[r]={exports:{}};return e[r](i,i.exports,n),i.exports}n.d=(e,t)=>{for(var r in t)n.o(t,r)&&!n.o(e,r)&&Object.defineProperty(e,r,{enumerable:!0,get:t[r]})},n.o=(e,t)=>Object.prototype.hasOwnProperty.call(e,t),n.r=e=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})};var r={};(()=>{"use strict";n.r(r),n.d(r,{PasteFromOffice:()=>b});var e=n(704),t=n(945),s=n(492);function i(e,t){if(!e.childCount)return;const n=new s.UpcastWriter(e.document),r=function(e,t){const n=t.createRangeIn(e),r=new s.Matcher({name:/^p|h\d+$/,styles:{"mso-list":/.*/}}),i=[];for(const e of n)if("elementStart"===e.type&&r.match(e.item)){const t=a(e.item);i.push({element:e.item,id:t.id,order:t.order,indent:t.indent})}return i}(e,n);if(!r.length)return;let i=null,l=1;r.forEach(((e,a)=>{const u=function(e,t){if(!e)return!0;if(e.id!==t.id)return t.indent-e.indent!=1;const n=t.element.previousSibling;if(!n)return!0;return r=n,!(r.is("element","ol")||r.is("element","ul"));var r}(r[a-1],e),f=u?null:r[a-1],p=(m=e,(d=f)?m.indent-d.indent:m.indent-1);var d,m;if(u&&(i=null,l=1),!i||0!==p){const r=function(e,t){const n=new RegExp(`@list l${e.id}:level${e.indent}\\s*({[^}]*)`,"gi"),r=/mso-level-number-format:([^;]{0,100});/gi,s=/mso-level-start-at:\s{0,100}([0-9]{0,10})\s{0,100};/gi,i=n.exec(t);let c="decimal",a="ol",l=null;if(i&&i[1]){const t=r.exec(i[1]);if(t&&t[1]&&(c=t[1].trim(),a="bullet"!==c&&"image"!==c?"ol":"ul"),"bullet"===c){const t=function(e){const t=function(e){if(e.getChild(0).is("$text"))return null;for(const t of e.getChildren()){if(!t.is("element","span"))continue;const e=t.getChild(0);return e.is("$text")?e:e.getChild(0)}}(e);if(!t)return null;const n=t._data;if("o"===n)return"circle";if("·"===n)return"disc";if("§"===n)return"square";return null}(e.element);t&&(c=t)}else{const e=s.exec(i[1]);e&&e[1]&&(l=parseInt(e[1]))}}return{type:a,startIndex:l,style:o(c)}}(e,t);if(i){if(e.indent>l){const e=i.getChild(i.childCount-1),t=e.getChild(e.childCount-1);i=c(r,t,n),l+=1}else if(e.indent<l){const t=l-e.indent;i=function(e,t){const n=e.getAncestors({parentFirst:!0});let r=null,s=0;for(const e of n)if("ul"!==e.name&&"ol"!==e.name||s++,s===t){r=e;break}return r}(i,t),l=parseInt(e.indent)}}else i=c(r,e.element,n);e.indent<=l&&(i.is("element",r.type)||(i=n.rename(r.type,i)))}const g=function(e,t){return function(e,t){const n=new s.Matcher({name:"span",styles:{"mso-list":"Ignore"}}),r=t.createRangeIn(e);for(const e of r)"elementStart"===e.type&&n.match(e.item)&&t.remove(e.item)}(e,t),t.rename("li",e)}(e.element,n);n.appendChild(g,i)}))}function o(e){if(e.startsWith("arabic-leading-zero"))return"decimal-leading-zero";switch(e){case"alpha-upper":return"upper-alpha";case"alpha-lower":return"lower-alpha";case"roman-upper":return"upper-roman";case"roman-lower":return"lower-roman";case"circle":case"disc":case"square":return e;default:return null}}function c(e,t,n){const r=t.parent,s=n.createElement(e.type),i=r.getChildIndex(t)+1;return n.insertChild(i,s,r),e.style&&n.setStyle("list-style-type",e.style,s),e.startIndex&&e.startIndex>1&&n.setAttribute("start",e.startIndex,s),s}function a(e){const t={},n=e.getStyle("mso-list");if(n){const e=n.match(/(^|\s{1,100})l(\d+)/i),r=n.match(/\s{0,100}lfo(\d+)/i),s=n.match(/\s{0,100}level(\d+)/i);e&&r&&s&&(t.id=e[2],t.order=r[1],t.indent=s[1])}return t}const l=/id=("|')docs-internal-guid-[-0-9a-f]+("|')/i;class u{constructor(e){this.document=e}isActive(e){return l.test(e)}execute(e){const t=new s.UpcastWriter(this.document),{body:n}=e._parsedData;!function(e,t){for(const n of e.getChildren())if(n.is("element","b")&&"normal"===n.getStyle("font-weight")){const r=e.getChildIndex(n);t.remove(n),t.insertChild(r,n.getChildren(),e)}}(n,t),function(e,t){for(const n of t.createRangeIn(e)){const e=n.item;if(e.is("element","li")){const n=e.getChild(0);n&&n.is("element","p")&&t.unwrapElement(n)}}}(n,t),e.content=n}}function f(e,t){if(!e.childCount)return;const n=new s.UpcastWriter,r=function(e,t){const n=t.createRangeIn(e),r=new s.Matcher({name:/v:(.+)/}),i=[];for(const e of n){if("elementStart"!=e.type)continue;const t=e.item,n=t.previousSibling&&t.previousSibling.name||null;r.match(t)&&t.getAttribute("o:gfxdata")&&"v:shapetype"!==n&&i.push(e.item.getAttribute("id"))}return i}(e,n);!function(e,t,n){const r=n.createRangeIn(t),i=new s.Matcher({name:"img"}),o=[];for(const t of r)if(i.match(t.item)){const n=t.item,r=n.getAttribute("v:shapes")?n.getAttribute("v:shapes").split(" "):[];r.length&&r.every((t=>e.indexOf(t)>-1))?o.push(n):n.getAttribute("src")||o.push(n)}for(const e of o)n.remove(e)}(r,e,n),function(e,t){const n=t.createRangeIn(e),r=new s.Matcher({name:/v:(.+)/}),i=[];for(const e of n)"elementStart"==e.type&&r.match(e.item)&&i.push(e.item);for(const e of i)t.remove(e)}(e,n);const i=function(e,t){const n=t.createRangeIn(e),r=new s.Matcher({name:"img"}),i=[];for(const e of n)r.match(e.item)&&e.item.getAttribute("src").startsWith("file://")&&i.push(e.item);return i}(e,n);i.length&&function(e,t,n){if(e.length===t.length)for(let r=0;r<e.length;r++){const s=`data:${t[r].type};base64,${p(t[r].hex)}`;n.setAttribute("src",s,e[r])}}(i,function(e){if(!e)return[];const t=/{\\pict[\s\S]+?\\bliptag-?\d+(\\blipupi-?\d+)?({\\\*\\blipuid\s?[\da-fA-F]+)?[\s}]*?/,n=new RegExp("(?:("+t.source+"))([\\da-fA-F\\s]+)\\}","g"),r=e.match(n),s=[];if(r)for(const e of r){let n=!1;e.includes("\\pngblip")?n="image/png":e.includes("\\jpegblip")&&(n="image/jpeg"),n&&s.push({hex:e.replace(t,"").replace(/[^\da-fA-F]/g,""),type:n})}return s}(t),n)}function p(e){return btoa(e.match(/\w{2}/g).map((e=>String.fromCharCode(parseInt(e,16)))).join(""))}const d=/<meta\s*name="?generator"?\s*content="?microsoft\s*word\s*\d+"?\/?>/i,m=/xmlns:o="urn:schemas-microsoft-com/i;class g{constructor(e){this.document=e}isActive(e){return d.test(e)||m.test(e)}execute(e){const{body:t,stylesString:n}=e._parsedData;i(t,n),f(t,e.dataTransfer.getData("text/rtf")),e.content=t}}function h(e){return e.replace(/<span(?: class="Apple-converted-space"|)>(\s+)<\/span>/g,((e,t)=>1===t.length?" ":Array(t.length+1).join("  ").substr(0,t.length)))}function y(e,t){const n=new DOMParser,r=function(e){return h(h(e)).replace(/(<span\s+style=['"]mso-spacerun:yes['"]>[^\S\r\n]*?)[\r\n]+([^\S\r\n]*<\/span>)/g,"$1$2").replace(/<span\s+style=['"]mso-spacerun:yes['"]><\/span>/g,"").replace(/ <\//g," </").replace(/ <o:p><\/o:p>/g," <o:p></o:p>").replace(/<o:p>(&nbsp;|\u00A0)<\/o:p>/g,"").replace(/>([^\S\r\n]*[\r\n]\s*)</g,"><")}(function(e){const t="</body>",n="</html>",r=e.indexOf(t);if(r<0)return e;const s=e.indexOf(n,r+t.length);return e.substring(0,r+t.length)+(s>=0?e.substring(s):"")}(e=e.replace(/<!--\[if gte vml 1]>/g,""))),i=n.parseFromString(r,"text/html");!function(e){e.querySelectorAll("span[style*=spacerun]").forEach((e=>{const t=e.innerText.length||0;e.innerHTML=Array(t+1).join("  ").substr(0,t)}))}(i);const o=i.body.innerHTML,c=function(e,t){const n=new s.ViewDocument(t),r=new s.DomConverter(n,{renderingMode:"data"}),i=e.createDocumentFragment(),o=e.body.childNodes;for(;o.length>0;)i.appendChild(o[0]);return r.domToView(i,{skipComments:!0})}(i,t),a=function(e){const t=[],n=[],r=Array.from(e.getElementsByTagName("style"));for(const e of r)e.sheet&&e.sheet.cssRules&&e.sheet.cssRules.length&&(t.push(e.sheet),n.push(e.innerHTML));return{styles:t,stylesString:n.join(" ")}}(i);return{body:c,bodyString:o,styles:a.styles,stylesString:a.stylesString}}class b extends e.Plugin{static get pluginName(){return"PasteFromOffice"}static get requires(){return[t.ClipboardPipeline]}init(){const e=this.editor,t=e.editing.view.document,n=[];n.push(new g(t)),n.push(new u(t)),e.plugins.get("ClipboardPipeline").on("inputTransformation",((e,r)=>{if(r._isTransformedWithPasteFromOffice)return;const s=r.dataTransfer.getData("text/html"),i=n.find((e=>e.isActive(s)));i&&(r._parsedData=y(s,t.stylesProcessor),i.execute(r),r._isTransformedWithPasteFromOffice=!0)}),{priority:"high"})}}})(),(window.CKEditor5=window.CKEditor5||{}).pasteFromOffice=r})();
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@ckeditor/ckeditor5-paste-from-office",
3
- "version": "31.1.0",
3
+ "version": "32.0.0",
4
4
  "description": "Paste from Office feature for CKEditor 5.",
5
5
  "keywords": [
6
6
  "ckeditor",
@@ -12,33 +12,33 @@
12
12
  ],
13
13
  "main": "src/index.js",
14
14
  "dependencies": {
15
- "ckeditor5": "^31.1.0"
15
+ "ckeditor5": "^32.0.0"
16
16
  },
17
17
  "devDependencies": {
18
- "@ckeditor/ckeditor5-basic-styles": "^31.1.0",
19
- "@ckeditor/ckeditor5-clipboard": "^31.1.0",
20
- "@ckeditor/ckeditor5-cloud-services": "^31.1.0",
21
- "@ckeditor/ckeditor5-core": "^31.1.0",
22
- "@ckeditor/ckeditor5-dev-utils": "^26.0.0",
23
- "@ckeditor/ckeditor5-easy-image": "^31.1.0",
24
- "@ckeditor/ckeditor5-engine": "^31.1.0",
25
- "@ckeditor/ckeditor5-editor-classic": "^31.1.0",
26
- "@ckeditor/ckeditor5-enter": "^31.1.0",
27
- "@ckeditor/ckeditor5-font": "^31.1.0",
28
- "@ckeditor/ckeditor5-heading": "^31.1.0",
29
- "@ckeditor/ckeditor5-image": "^31.1.0",
30
- "@ckeditor/ckeditor5-link": "^31.1.0",
31
- "@ckeditor/ckeditor5-list": "^31.1.0",
32
- "@ckeditor/ckeditor5-page-break": "^31.1.0",
33
- "@ckeditor/ckeditor5-paragraph": "^31.1.0",
34
- "@ckeditor/ckeditor5-table": "^31.1.0",
35
- "@ckeditor/ckeditor5-theme-lark": "^31.1.0",
36
- "@ckeditor/ckeditor5-utils": "^31.1.0",
37
- "webpack": "^4.43.0",
38
- "webpack-cli": "^3.3.11"
18
+ "@ckeditor/ckeditor5-basic-styles": "^32.0.0",
19
+ "@ckeditor/ckeditor5-clipboard": "^32.0.0",
20
+ "@ckeditor/ckeditor5-cloud-services": "^32.0.0",
21
+ "@ckeditor/ckeditor5-core": "^32.0.0",
22
+ "@ckeditor/ckeditor5-dev-utils": "^27.1.0",
23
+ "@ckeditor/ckeditor5-easy-image": "^32.0.0",
24
+ "@ckeditor/ckeditor5-engine": "^32.0.0",
25
+ "@ckeditor/ckeditor5-editor-classic": "^32.0.0",
26
+ "@ckeditor/ckeditor5-enter": "^32.0.0",
27
+ "@ckeditor/ckeditor5-font": "^32.0.0",
28
+ "@ckeditor/ckeditor5-heading": "^32.0.0",
29
+ "@ckeditor/ckeditor5-image": "^32.0.0",
30
+ "@ckeditor/ckeditor5-link": "^32.0.0",
31
+ "@ckeditor/ckeditor5-list": "^32.0.0",
32
+ "@ckeditor/ckeditor5-page-break": "^32.0.0",
33
+ "@ckeditor/ckeditor5-paragraph": "^32.0.0",
34
+ "@ckeditor/ckeditor5-table": "^32.0.0",
35
+ "@ckeditor/ckeditor5-theme-lark": "^32.0.0",
36
+ "@ckeditor/ckeditor5-utils": "^32.0.0",
37
+ "webpack": "^5.58.1",
38
+ "webpack-cli": "^4.9.0"
39
39
  },
40
40
  "engines": {
41
- "node": ">=12.0.0",
41
+ "node": ">=14.0.0",
42
42
  "npm": ">=5.7.1"
43
43
  },
44
44
  "author": "CKSource (http://cksource.com/)",
@@ -1,5 +1,5 @@
1
1
  /**
2
- * @license Copyright (c) 2003-2021, CKSource - Frederico Knabben. All rights reserved.
2
+ * @license Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved.
3
3
  * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license
4
4
  */
5
5
 
@@ -1,5 +1,5 @@
1
1
  /**
2
- * @license Copyright (c) 2003-2021, CKSource - Frederico Knabben. All rights reserved.
2
+ * @license Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved.
3
3
  * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license
4
4
  */
5
5
 
@@ -87,7 +87,7 @@ export function unwrapParagraphInListItem( documentFragment, writer ) {
87
87
  const element = value.item;
88
88
 
89
89
  if ( element.is( 'element', 'li' ) ) {
90
- // Google Docs allows on single paragraph inside LI.
90
+ // Google Docs allows for single paragraph inside LI.
91
91
  const firstChild = element.getChild( 0 );
92
92
 
93
93
  if ( firstChild && firstChild.is( 'element', 'p' ) ) {
@@ -155,17 +155,20 @@ function findAllItemLikeElements( documentFragment, writer ) {
155
155
  // @param {String} stylesString CSS stylesheet.
156
156
  // @returns {Object} result
157
157
  // @returns {String} result.type List type, could be `ul` or `ol`.
158
+ // @returns {Number} result.startIndex List start index, valid only for ordered lists.
158
159
  // @returns {String|null} result.style List style, for example: `decimal`, `lower-roman`, etc. It is extracted
159
160
  // directly from Word stylesheet and adjusted to represent proper values for the CSS `list-style-type` property.
160
161
  // If it cannot be adjusted, the `null` value is returned.
161
162
  function detectListStyle( listLikeItem, stylesString ) {
162
163
  const listStyleRegexp = new RegExp( `@list l${ listLikeItem.id }:level${ listLikeItem.indent }\\s*({[^}]*)`, 'gi' );
163
164
  const listStyleTypeRegex = /mso-level-number-format:([^;]{0,100});/gi;
165
+ const listStartIndexRegex = /mso-level-start-at:\s{0,100}([0-9]{0,10})\s{0,100};/gi;
164
166
 
165
167
  const listStyleMatch = listStyleRegexp.exec( stylesString );
166
168
 
167
169
  let listStyleType = 'decimal'; // Decimal is default one.
168
170
  let type = 'ol'; // <ol> is default list.
171
+ let startIndex = null;
169
172
 
170
173
  if ( listStyleMatch && listStyleMatch[ 1 ] ) {
171
174
  const listStyleTypeMatch = listStyleTypeRegex.exec( listStyleMatch[ 1 ] );
@@ -185,11 +188,18 @@ function detectListStyle( listLikeItem, stylesString ) {
185
188
  if ( bulletedStyle ) {
186
189
  listStyleType = bulletedStyle;
187
190
  }
191
+ } else {
192
+ const listStartIndexMatch = listStartIndexRegex.exec( listStyleMatch[ 1 ] );
193
+
194
+ if ( listStartIndexMatch && listStartIndexMatch[ 1 ] ) {
195
+ startIndex = parseInt( listStartIndexMatch[ 1 ] );
196
+ }
188
197
  }
189
198
  }
190
199
 
191
200
  return {
192
201
  type,
202
+ startIndex,
193
203
  style: mapListStyleDefinition( listStyleType )
194
204
  };
195
205
  }
@@ -197,7 +207,7 @@ function detectListStyle( listLikeItem, stylesString ) {
197
207
  // Tries to extract the `list-style-type` value based on the marker element for bulleted list.
198
208
  //
199
209
  // @param {module:engine/view/element~Element} element
200
- // @returns {module:engine/view/element~Element|null}
210
+ // @returns {String|null}
201
211
  function findBulletedListStyle( element ) {
202
212
  const listMarkerElement = findListMarkerNode( element );
203
213
 
@@ -254,9 +264,11 @@ function findListMarkerNode( element ) {
254
264
  // @param {String|null} value
255
265
  // @returns {String|null}
256
266
  function mapListStyleDefinition( value ) {
267
+ if ( value.startsWith( 'arabic-leading-zero' ) ) {
268
+ return 'decimal-leading-zero';
269
+ }
270
+
257
271
  switch ( value ) {
258
- case 'arabic-leading-zero':
259
- return 'decimal-leading-zero';
260
272
  case 'alpha-upper':
261
273
  return 'upper-alpha';
262
274
  case 'alpha-lower':
@@ -274,7 +286,7 @@ function mapListStyleDefinition( value ) {
274
286
  }
275
287
  }
276
288
 
277
- // Creates empty list of a given type and inserts it after a specified element.
289
+ // Creates an empty list of a given type and inserts it after a specified element.
278
290
  //
279
291
  // @param {Object} listStyle List style object which determines the type of newly created list.
280
292
  // Usually a result of `detectListStyle()` function.
@@ -295,6 +307,10 @@ function insertNewEmptyList( listStyle, element, writer ) {
295
307
  writer.setStyle( 'list-style-type', listStyle.style, list );
296
308
  }
297
309
 
310
+ if ( listStyle.startIndex && listStyle.startIndex > 1 ) {
311
+ writer.setAttribute( 'start', listStyle.startIndex, list );
312
+ }
313
+
298
314
  return list;
299
315
  }
300
316
 
@@ -1,5 +1,5 @@
1
1
  /**
2
- * @license Copyright (c) 2003-2021, CKSource - Frederico Knabben. All rights reserved.
2
+ * @license Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved.
3
3
  * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license
4
4
  */
5
5
 
@@ -1,5 +1,5 @@
1
1
  /**
2
- * @license Copyright (c) 2003-2021, CKSource - Frederico Knabben. All rights reserved.
2
+ * @license Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved.
3
3
  * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license
4
4
  */
5
5
 
@@ -1,5 +1,5 @@
1
1
  /**
2
- * @license Copyright (c) 2003-2021, CKSource - Frederico Knabben. All rights reserved.
2
+ * @license Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved.
3
3
  * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license
4
4
  */
5
5
 
package/src/index.js CHANGED
@@ -1,5 +1,5 @@
1
1
  /**
2
- * @license Copyright (c) 2003-2021, CKSource - Frederico Knabben. All rights reserved.
2
+ * @license Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved.
3
3
  * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license
4
4
  */
5
5
 
@@ -1,5 +1,5 @@
1
1
  /**
2
- * @license Copyright (c) 2003-2021, CKSource - Frederico Knabben. All rights reserved.
2
+ * @license Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved.
3
3
  * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license
4
4
  */
5
5
 
@@ -1,5 +1,5 @@
1
1
  /**
2
- * @license Copyright (c) 2003-2021, CKSource - Frederico Knabben. All rights reserved.
2
+ * @license Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved.
3
3
  * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license
4
4
  */
5
5
 
@@ -1,5 +1,5 @@
1
1
  /**
2
- * @license Copyright (c) 2003-2021, CKSource - Frederico Knabben. All rights reserved.
2
+ * @license Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved.
3
3
  * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license
4
4
  */
5
5
 
@@ -1,5 +1,5 @@
1
1
  /**
2
- * @license Copyright (c) 2003-2021, CKSource - Frederico Knabben. All rights reserved.
2
+ * @license Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved.
3
3
  * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license
4
4
  */
5
5