@ckeditor/ckeditor5-word-count 38.0.1 → 38.1.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/build/word-count.js +1 -1
- package/package.json +2 -26
- package/src/wordcount.d.ts +2 -1
- package/src/wordcount.js +18 -8
package/build/word-count.js
CHANGED
|
@@ -2,4 +2,4 @@
|
|
|
2
2
|
/*!
|
|
3
3
|
* @license Copyright (c) 2003-2023, CKSource Holding sp. z o.o. All rights reserved.
|
|
4
4
|
* For licensing, see LICENSE.md.
|
|
5
|
-
*/(()=>{var t={
|
|
5
|
+
*/(()=>{var t={704:(t,e,r)=>{t.exports=r(79)("./src/core.js")},273:(t,e,r)=>{t.exports=r(79)("./src/ui.js")},209:(t,e,r)=>{t.exports=r(79)("./src/utils.js")},79:t=>{"use strict";t.exports=CKEditor5.dll}},e={};function r(o){var n=e[o];if(void 0!==n)return n.exports;var i=e[o]={exports:{}};return t[o](i,i.exports,r),i.exports}r.d=(t,e)=>{for(var o in e)r.o(e,o)&&!r.o(t,o)&&Object.defineProperty(t,o,{enumerable:!0,get:e[o]})},r.o=(t,e)=>Object.prototype.hasOwnProperty.call(t,e),r.r=t=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(t,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(t,"__esModule",{value:!0})};var o={};(()=>{"use strict";r.r(o),r.d(o,{WordCount:()=>z});var t=r(704),e=r(273),n=r(209);function i(t){if(t.is("$text")||t.is("$textProxy"))return t.data;const e=t;let r="",o=null;for(const t of e.getChildren()){const e=i(t);o&&o.is("element")&&(r+="\n"),r+=e,o=t}return r}const s=function(t){var e=typeof t;return null!=t&&("object"==e||"function"==e)};const c="object"==typeof global&&global&&global.Object===Object&&global;var a="object"==typeof self&&self&&self.Object===Object&&self;const u=c||a||Function("return this")();const d=function(){return u.Date.now()};var l=/\s/;const f=function(t){for(var e=t.length;e--&&l.test(t.charAt(e)););return e};var h=/^\s+/;const p=function(t){return t?t.slice(0,f(t)+1).replace(h,""):t};const g=u.Symbol;var v=Object.prototype,b=v.hasOwnProperty,w=v.toString,y=g?g.toStringTag:void 0;const _=function(t){var e=b.call(t,y),r=t[y];try{t[y]=void 0;var o=!0}catch(t){}var n=w.call(t);return o&&(e?t[y]=r:delete t[y]),n};var m=Object.prototype.toString;const j=function(t){return m.call(t)};var x=g?g.toStringTag:void 0;const O=function(t){return null==t?void 0===t?"[object Undefined]":"[object Null]":x&&x in Object(t)?_(t):j(t)};const T=function(t){return null!=t&&"object"==typeof t};const C=function(t){return"symbol"==typeof t||T(t)&&"[object Symbol]"==O(t)};var S=/^[-+]0x[0-9a-f]+$/i,E=/^0b[01]+$/i,N=/^0o[0-7]+$/i,W=parseInt;const P=function(t){if("number"==typeof t)return t;if(C(t))return NaN;if(s(t)){var e="function"==typeof t.valueOf?t.valueOf():t;t=s(e)?e+"":e}if("string"!=typeof t)return 0===t?t:+t;t=p(t);var r=E.test(t);return r||N.test(t)?W(t.slice(2),r?2:8):S.test(t)?NaN:+t};var R=Math.max,V=Math.min;const L=function(t,e,r){var o,n,i,c,a,u,l=0,f=!1,h=!1,p=!0;if("function"!=typeof t)throw new TypeError("Expected a function");function g(e){var r=o,i=n;return o=n=void 0,l=e,c=t.apply(i,r)}function v(t){var r=t-u;return void 0===u||r>=e||r<0||h&&t-l>=i}function b(){var t=d();if(v(t))return w(t);a=setTimeout(b,function(t){var r=e-(t-u);return h?V(r,i-(t-l)):r}(t))}function w(t){return a=void 0,p&&o?g(t):(o=n=void 0,c)}function y(){var t=d(),r=v(t);if(o=arguments,n=this,u=t,r){if(void 0===a)return function(t){return l=t,a=setTimeout(b,e),f?g(t):c}(u);if(h)return clearTimeout(a),a=setTimeout(b,e),g(u)}return void 0===a&&(a=setTimeout(b,e)),c}return e=P(e)||0,s(r)&&(f=!!r.leading,i=(h="maxWait"in r)?R(P(r.maxWait)||0,e):i,p="trailing"in r?!!r.trailing:p),y.cancel=function(){void 0!==a&&clearTimeout(a),l=0,o=u=n=a=void 0},y.flush=function(){return void 0===a?c:w(d())},y};const A=function(t,e,r){var o=!0,n=!0;if("function"!=typeof t)throw new TypeError("Expected a function");return s(r)&&(o="leading"in r?!!r.leading:o,n="trailing"in r?!!r.trailing:n),L(t,e,{leading:o,maxWait:e,trailing:n})};const M=function(t,e){return function(r){return t(e(r))}}(Object.getPrototypeOf,Object);var I=Function.prototype,K=Object.prototype,$=I.toString,k=K.hasOwnProperty,U=$.call(Object);const D=function(t){if(!T(t)||"[object Object]"!=O(t))return!1;var e=M(t);if(null===e)return!0;var r=k.call(e,"constructor")&&e.constructor;return"function"==typeof r&&r instanceof r&&$.call(r)==U};const F=function(t){return T(t)&&1===t.nodeType&&!D(t)};class z extends t.Plugin{constructor(t){super(t),this.set("characters",0),this.set("words",0),Object.defineProperties(this,{characters:{get(){return this.characters=this._getCharacters(this._getText())}},words:{get(){return this.words=this._getWords(this._getText())}}}),this.set("_wordsLabel",void 0),this.set("_charactersLabel",void 0),this._config=t.config.get("wordCount")||{},this._outputView=void 0,this._wordsMatchRegExp=n.env.features.isRegExpUnicodePropertySupported?new RegExp("([\\p{L}\\p{N}]+\\S?)+","gu"):/([a-zA-Z0-9À-ž]+\S?)+/gu}static get pluginName(){return"WordCount"}init(){this.editor.model.document.on("change:data",A(this._refreshStats.bind(this),250)),"function"==typeof this._config.onUpdate&&this.on("update",((t,e)=>{this._config.onUpdate(e)})),F(this._config.container)&&this._config.container.appendChild(this.wordCountContainer)}destroy(){this._outputView&&(this._outputView.element.remove(),this._outputView.destroy()),super.destroy()}get wordCountContainer(){const t=this.editor,r=t.t,o=t.config.get("wordCount.displayWords"),n=t.config.get("wordCount.displayCharacters"),i=e.Template.bind(this,this),s=[];return this._outputView||(this._outputView=new e.View,(o||void 0===o)&&(this.bind("_wordsLabel").to(this,"words",(t=>r("Words: %0",t))),s.push({tag:"div",children:[{text:[i.to("_wordsLabel")]}],attributes:{class:"ck-word-count__words"}})),(n||void 0===n)&&(this.bind("_charactersLabel").to(this,"characters",(t=>r("Characters: %0",t))),s.push({tag:"div",children:[{text:[i.to("_charactersLabel")]}],attributes:{class:"ck-word-count__characters"}})),this._outputView.setTemplate({tag:"div",attributes:{class:["ck","ck-word-count"]},children:s}),this._outputView.render()),this._outputView.element}_getText(){let t="";for(const e of this.editor.model.document.getRootNames())""!==t&&(t+="\n"),t+=i(this.editor.model.document.getRoot(e));return t}_getCharacters(t){return t.replace(/\n/g,"").length}_getWords(t){return(t.match(this._wordsMatchRegExp)||[]).length}_refreshStats(){const t=this._getText(),e=this.words=this._getWords(t),r=this.characters=this._getCharacters(t);this.fire("update",{words:e,characters:r})}}})(),(window.CKEditor5=window.CKEditor5||{}).wordCount=o})();
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@ckeditor/ckeditor5-word-count",
|
|
3
|
-
"version": "38.0
|
|
3
|
+
"version": "38.1.0",
|
|
4
4
|
"description": "Word and character count feature for CKEditor 5.",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"ckeditor",
|
|
@@ -13,26 +13,7 @@
|
|
|
13
13
|
"main": "src/index.js",
|
|
14
14
|
"dependencies": {
|
|
15
15
|
"lodash-es": "^4.17.15",
|
|
16
|
-
"ckeditor5": "
|
|
17
|
-
},
|
|
18
|
-
"devDependencies": {
|
|
19
|
-
"@ckeditor/ckeditor5-basic-styles": "^38.0.1",
|
|
20
|
-
"@ckeditor/ckeditor5-block-quote": "^38.0.1",
|
|
21
|
-
"@ckeditor/ckeditor5-core": "^38.0.1",
|
|
22
|
-
"@ckeditor/ckeditor5-dev-utils": "^37.0.0",
|
|
23
|
-
"@ckeditor/ckeditor5-editor-classic": "^38.0.1",
|
|
24
|
-
"@ckeditor/ckeditor5-engine": "^38.0.1",
|
|
25
|
-
"@ckeditor/ckeditor5-enter": "^38.0.1",
|
|
26
|
-
"@ckeditor/ckeditor5-image": "^38.0.1",
|
|
27
|
-
"@ckeditor/ckeditor5-link": "^38.0.1",
|
|
28
|
-
"@ckeditor/ckeditor5-list": "^38.0.1",
|
|
29
|
-
"@ckeditor/ckeditor5-paragraph": "^38.0.1",
|
|
30
|
-
"@ckeditor/ckeditor5-table": "^38.0.1",
|
|
31
|
-
"@ckeditor/ckeditor5-theme-lark": "^38.0.1",
|
|
32
|
-
"@ckeditor/ckeditor5-utils": "^38.0.1",
|
|
33
|
-
"typescript": "^4.8.4",
|
|
34
|
-
"webpack": "^5.58.1",
|
|
35
|
-
"webpack-cli": "^4.9.0"
|
|
16
|
+
"ckeditor5": "38.1.0"
|
|
36
17
|
},
|
|
37
18
|
"engines": {
|
|
38
19
|
"node": ">=16.0.0",
|
|
@@ -56,10 +37,5 @@
|
|
|
56
37
|
"ckeditor5-metadata.json",
|
|
57
38
|
"CHANGELOG.md"
|
|
58
39
|
],
|
|
59
|
-
"scripts": {
|
|
60
|
-
"dll:build": "webpack",
|
|
61
|
-
"build": "tsc -p ./tsconfig.json",
|
|
62
|
-
"postversion": "npm run build"
|
|
63
|
-
},
|
|
64
40
|
"types": "src/index.d.ts"
|
|
65
41
|
}
|
package/src/wordcount.d.ts
CHANGED
|
@@ -83,7 +83,7 @@ export default class WordCount extends Plugin {
|
|
|
83
83
|
/**
|
|
84
84
|
* @inheritDoc
|
|
85
85
|
*/
|
|
86
|
-
static get pluginName():
|
|
86
|
+
static get pluginName(): "WordCount";
|
|
87
87
|
/**
|
|
88
88
|
* @inheritDoc
|
|
89
89
|
*/
|
|
@@ -104,6 +104,7 @@ export default class WordCount extends Plugin {
|
|
|
104
104
|
* ```
|
|
105
105
|
*/
|
|
106
106
|
get wordCountContainer(): HTMLElement;
|
|
107
|
+
private _getText;
|
|
107
108
|
/**
|
|
108
109
|
* Determines the number of characters in the current editor's model.
|
|
109
110
|
*/
|
package/src/wordcount.js
CHANGED
|
@@ -51,12 +51,12 @@ export default class WordCount extends Plugin {
|
|
|
51
51
|
Object.defineProperties(this, {
|
|
52
52
|
characters: {
|
|
53
53
|
get() {
|
|
54
|
-
return (this.characters = this._getCharacters());
|
|
54
|
+
return (this.characters = this._getCharacters(this._getText()));
|
|
55
55
|
}
|
|
56
56
|
},
|
|
57
57
|
words: {
|
|
58
58
|
get() {
|
|
59
|
-
return (this.words = this._getWords());
|
|
59
|
+
return (this.words = this._getWords(this._getText()));
|
|
60
60
|
}
|
|
61
61
|
}
|
|
62
62
|
});
|
|
@@ -169,18 +169,27 @@ export default class WordCount extends Plugin {
|
|
|
169
169
|
}
|
|
170
170
|
return this._outputView.element;
|
|
171
171
|
}
|
|
172
|
+
_getText() {
|
|
173
|
+
let txt = '';
|
|
174
|
+
for (const rootName of this.editor.model.document.getRootNames()) {
|
|
175
|
+
if (txt !== '') {
|
|
176
|
+
// Add a delimiter, so words from each root are treated independently.
|
|
177
|
+
txt += '\n';
|
|
178
|
+
}
|
|
179
|
+
txt += modelElementToPlainText(this.editor.model.document.getRoot(rootName));
|
|
180
|
+
}
|
|
181
|
+
return txt;
|
|
182
|
+
}
|
|
172
183
|
/**
|
|
173
184
|
* Determines the number of characters in the current editor's model.
|
|
174
185
|
*/
|
|
175
|
-
_getCharacters() {
|
|
176
|
-
const txt = modelElementToPlainText(this.editor.model.document.getRoot());
|
|
186
|
+
_getCharacters(txt) {
|
|
177
187
|
return txt.replace(/\n/g, '').length;
|
|
178
188
|
}
|
|
179
189
|
/**
|
|
180
190
|
* Determines the number of words in the current editor's model.
|
|
181
191
|
*/
|
|
182
|
-
_getWords() {
|
|
183
|
-
const txt = modelElementToPlainText(this.editor.model.document.getRoot());
|
|
192
|
+
_getWords(txt) {
|
|
184
193
|
const detectedWords = txt.match(this._wordsMatchRegExp) || [];
|
|
185
194
|
return detectedWords.length;
|
|
186
195
|
}
|
|
@@ -191,8 +200,9 @@ export default class WordCount extends Plugin {
|
|
|
191
200
|
* @fires update
|
|
192
201
|
*/
|
|
193
202
|
_refreshStats() {
|
|
194
|
-
const
|
|
195
|
-
const
|
|
203
|
+
const txt = this._getText();
|
|
204
|
+
const words = this.words = this._getWords(txt);
|
|
205
|
+
const characters = this.characters = this._getCharacters(txt);
|
|
196
206
|
this.fire('update', {
|
|
197
207
|
words,
|
|
198
208
|
characters
|