diff --git a/.npmignore b/.gitignore
similarity index 80%
rename from .npmignore
rename to .gitignore
index 1536975..504afef 100644
--- a/.npmignore
+++ b/.gitignore
@@ -1,4 +1,2 @@
node_modules/
package-lock.json
-
-.idea/
diff --git a/CHANGELOG.md b/CHANGELOG.md
index a1d9611..54bd5c0 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,5 +1,14 @@
# Pika JS
+## 0.1.5 2023-06-21
+
+1. Update document
+2. Remove `CalcMinMain` to `Pikajs.calcMinMain`
+3. Remove `InvalidInfo` to `Pikajs.invalidInfo`
+4. Remove `PassQCalc` to `Pikajs.passQCalc`
+5. Update `Pikajs.splitAnimationElement` to `Pikajs.splitContent`
+6. Add `Pikajs.splitContentWithParity`
+
## 0.1.4 2023-04-21
1. Update document
diff --git a/DOCUMENT.md b/DOCUMENT.md
index 8cb7105..13e44fb 100644
--- a/DOCUMENT.md
+++ b/DOCUMENT.md
@@ -1,6 +1,61 @@
# Pika JS document
-## `PikaJS`
+## `Pikajs`
+
+### `calcMinMain`
+
+Calculate `min-height` and fill it in the style of the `main`, and ensure that main fills the entire page.
+
+```js
+window.addEventListener('load', (event) => {
+ Pikajs.calcMinMain();
+});
+```
+
+### `calcMinMain(parentNode)`
+
+Calculate `min-height` and fill it in the style of the `main`, and ensure that main fills the entire page.
+
+```js
+window.addEventListener('load', (event) => {
+ let app = document.getElementById('app');
+ Pikajs.calcMinMain(app);
+});
+```
+
+### `invalidInfo(inputId='',inputEId='', regex='', message='')`
+
+Add or remove a `p` tag with `inputEId` below the tag to display validation information.
+
+like this:
+
+```html
+
+
+
+
+```
+
+### `passQCalc(pass='')`
+
+Password Quality Calculator, if the value is greater than 80, it is a strong password.
+
+Async like this:
+
+```js
+async function pqcalc(pass='') {
+ return await Pikajs.passQCalc(pass);
+}
+
+pqcalc('P422w0Rd').then((result) => {
+ document.getElementById("rank").innerText = result;
+});
+```
### `getSelectorHeight(selector='')`
@@ -72,19 +127,19 @@ Get browser dark mode
Return undefined is unsupported, true is dark mode, false is light mode
-### `splitAnimationElement(animEleText="")`
+### `splitContent(content = "", separator = "", splitTag = "")`
-Split animation element text
+Split content
Convert like
`test`
to
-`test`
+`test`
```javascript
const animaEles = document.body.querySelectorAll(".animEles");
animaEles.forEach((e) => {
- Pikajs.splitAnimationElement(e.innerHTML)
+ Pikajs.splitContent(e.innerHTML, "", "em")
.then(function (event) {
e.innerHTML = event;
})
@@ -94,56 +149,24 @@ animaEles.forEach((e) => {
});
```
-## `CalcMinMain`
+### `splitContentWithParity(content = "", separator = "", splitTag = "", evenClass = "", oddClass = "")`
-Calculate `min-height` and fill it in the style of the `main`, and ensure that main fills the entire page.
+Split content with parity
-```js
-window.addEventListener('load', (event) => {
- CalcMinMain();
-});
-```
-
-## `CalcMinMain(parentNode)`
-
-Calculate `min-height` and fill it in the style of the `main`, and ensure that main fills the entire page.
-
-```js
-window.addEventListener('load', (event) => {
- let app = document.getElementById('app');
- CalcMinMain(app);
-});
-```
-
-## `InvalidInfo(inputId='',inputEId='', regex='', message='')`
-
-Add or remove a `p` tag with `inputEId` below the tag to display validation information.
-
-like this:
-```html
-
-
-
-
-```
-
-## `PassQCalc(pass='')`
-
-Password Quality Calculator, if the value is greater than 80, it is a strong password.
-
-Async like this:
-
-```js
-async function pqcalc(pass='') {
- return await PassQCalc(pass);
-}
+Convert like
+`test`
+to
+`test`
-pqcalc('P422w0Rd').then((result) => {
- document.getElementById("rank").innerText = result;
+```javascript
+const animaEles = document.body.querySelectorAll(".animEles");
+animaEles.forEach((e) => {
+ Pikajs.splitContent(e.innerHTML, "", "em", "even", "odd")
+ .then(function (event) {
+ e.innerHTML = event;
+ })
+ .catch(function (error) {
+ console.log(error);
+ });
});
```
diff --git a/README.md b/README.md
index 43b34e8..0f73679 100644
--- a/README.md
+++ b/README.md
@@ -18,7 +18,7 @@ A function toolkit.
-
+
```
OR
@@ -27,7 +27,7 @@ OR
-
+
```
## Development Version
@@ -38,7 +38,7 @@ OR
-
+
```
## Document
diff --git a/dist/pika.min.js b/dist/pika.min.js
index 493ccdc..376a1e2 100644
--- a/dist/pika.min.js
+++ b/dist/pika.min.js
@@ -1,2 +1,2 @@
-/*! Pika-js v0.1.3 (https://github.com/leonardwoo/pika-js) | Licensed under MIT (https://github.com/leonardwoo/pika-js/blob/main/LICENSE) */
-"use strict";class Pikajs{constructor(){}static _height(t){if(null==t)return-1;let e=t.clientHeight;return(null==e||e<0)&&(e=-1),e}static getSelectorHeight(t){return getSelectorHeight(document,t)}static getSelectorHeight(t,e){const r=t.querySelector(e),a=this._height(r);return a<0?0:a}static hasSelectionHeight(){return this.hasSelectionHeight(document)}static hasSelectionHeight(t){const e=t.getElementsByTagName("section")[0];return!(this._height(e)<0)}static isPassword(t=""){return/^[\x21-\x7E]{8,20}$/g.test(t)}static checkRepeat(t=""){let e=0;for(let r=0;r=0?t.match(e).length:0}static isUpperChar(t=""){return/\p{Lu}+/gu.match(t).length>0}static isLowerChar(t=""){return/\p{Ll}+/gu.match(t).length>0}static isDigit(t=""){return/\p{Nd}+/gu.match(t).length>0}static isPunctuation(t=""){return/\p{P}+/gu.match(t).length>0}static isWhiteSpace(t=""){return/\s+/gu.match(t).length>0}static base64ToArrayBuffer(t){const e=window.atob(t);return this.stringToArrayBuffer(e)}static arrayBufferToBase64(t){const e=this.arrayBufferToString(t);return window.btoa(e)}static stringToArrayBuffer(t){const e=new Uint8Array(t.length);for(let r=0;r{e+=""+t+""})),e+="",e}}function CalcMinMain(){CalcMinMain(document)}function CalcMinMain(t){let e=Pikajs.getSelectorHeight(t,"header"),r=Pikajs.hasSelectionHeight(t)?0:Pikajs.getSelectorHeight(t,"footer");t.querySelector("main").style.setProperty("min-height","calc(100vh - "+(e+r)+"px)")}function InvalidInfo(t="",e="",r="",a=""){const n=document.getElementById(t);let i=document.getElementById(e);r.test(n.value)?null!=i&&n.parentNode.removeChild(i):null==i?(i=document.createElement("p"),i.setAttribute("id",e),i.innerText=a,n.parentNode.appendChild(i)):i.innerText=a}function PassQCalc(t=""){let e=0;e+=t.length>8?4:0,e+=2*(t.length-Pikajs.checkChar(t,/[a-z]/g)),e+=3*(t.length-Pikajs.checkChar(t,/[A-Z]/g)),e+=2*(t.length-Pikajs.checkChar(t,/[0-9]/g)),e+=6*Pikajs.checkChar(t,/((?=["!\\\"#$%&\'()*+,-./:;<=>?@[\]^_`{|}~"])[^A-Za-z0-9])/g),e-=2*Pikajs.checkChar(t,/[A-Z]{3,}/g),e-=2*Pikajs.checkChar(t,/[a-z]{3,}/g),e-=2*Pikajs.checkChar(t,/[0-9]{3,}/g),e-=2*Pikajs.checkChar(t,/["!\\\"#$%&\'()*+,-./:;<=>?@[\]^_`{|}~"]{3,}/g);const r=Pikajs.checkRepeat(t);return e-=r*(r-1),e<=0?0:e}
\ No newline at end of file
+/*! Pika-js | MIT License | https://github.com/leonardwoo/pika-js */
+"use strict";class Pikajs{constructor(){}static _height(t){if(null==t)return-1;let e=t.clientHeight;return(null==e||e<0)&&(e=-1),e}static calcMinMain(){calcMinMain(document)}static calcMinMain(t){let e=getSelectorHeight(t,"header"),r=hasSelectionHeight(t)?0:getSelectorHeight(t,"footer");t.querySelector("main").style.setProperty("min-height","calc(100vh - "+(e+r)+"px)")}static invalidInfo(t="",e="",r="",c=""){const a=document.getElementById(t);let i=document.getElementById(e);r.test(a.value)?null!=i&&a.parentNode.removeChild(i):null==i?(i=document.createElement("p"),i.setAttribute("id",e),i.innerText=c,a.parentNode.appendChild(i)):i.innerText=c}static passQCalc(t=""){let e=0;e+=t.length>8?4:0,e+=2*(t.length-checkChar(t,/[a-z]/g)),e+=3*(t.length-checkChar(t,/[A-Z]/g)),e+=2*(t.length-checkChar(t,/[0-9]/g)),e+=6*checkChar(t,/((?=["!\\\"#$%&\'()*+,-./:;<=>?@[\]^_`{|}~"])[^A-Za-z0-9])/g),e-=2*checkChar(t,/[A-Z]{3,}/g),e-=2*checkChar(t,/[a-z]{3,}/g),e-=2*checkChar(t,/[0-9]{3,}/g),e-=2*checkChar(t,/["!\\\"#$%&\'()*+,-./:;<=>?@[\]^_`{|}~"]{3,}/g);const r=checkRepeat(t);return e-=r*(r-1),e<=0?0:e}static getSelectorHeight(t){return getSelectorHeight(document,t)}static getSelectorHeight(t,e){const r=t.querySelector(e),c=this._height(r);return c<0?0:c}static hasSelectionHeight(){return this.hasSelectionHeight(document)}static hasSelectionHeight(t){const e=t.getElementsByTagName("section")[0];return!(this._height(e)<0)}static hasArticleHeight(){return this.hasArticleHeight(document)}static hasArticleHeight(t){const e=t.getElementsByTagName("article")[0];return!(this._height(e)<0)}static isPassword(t=""){return/^[\x21-\x7E]{8,20}$/g.test(t)}static checkRepeat(t=""){let e=0;for(let r=0;r=0?t.match(e).length:0}static isUpperChar(t=""){return/\p{Lu}+/gu.match(t).length>0}static isLowerChar(t=""){return/\p{Ll}+/gu.match(t).length>0}static isDigit(t=""){return/\p{Nd}+/gu.match(t).length>0}static isPunctuation(t=""){return/\p{P}+/gu.match(t).length>0}static isWhiteSpace(t=""){return/\s+/gu.match(t).length>0}static base64ToArrayBuffer(t){const e=window.atob(t);return this.stringToArrayBuffer(e)}static arrayBufferToBase64(t){const e=this.arrayBufferToString(t);return window.btoa(e)}static stringToArrayBuffer(t){const e=new Uint8Array(t.length);for(let r=0;r{c+="<"+r+">"+t+""+r+">"})),c)}static async splitContentWithParity(t="",e="",r="",c="",a=""){let i="";if(""==r)return t;const n=""==c?"":' class="'+c+'"',h=""==a?"":' class="'+a+'"';var s=0;return t.split(e).forEach((t=>{i+="<"+r+(s%2==0?n:h)+">"+t+""+r+">",s++})),i}}
\ No newline at end of file
diff --git a/dist/pika.min.js.map b/dist/pika.min.js.map
index ae9e05e..90589ce 100644
--- a/dist/pika.min.js.map
+++ b/dist/pika.min.js.map
@@ -1 +1 @@
-{"version":3,"names":["Pikajs","constructor","static","element","elementHeight","clientHeight","selector","getSelectorHeight","document","parentNode","s","querySelector","sh","this","_height","hasSelectionHeight","e","getElementsByTagName","pass","test","text","count","i","length","regex","search","match","base64","binaryString","window","atob","stringToArrayBuffer","arraybuffer","binary","arrayBufferToString","btoa","str","bytes","Uint8Array","charCodeAt","buffer","String","fromCharCode","apply","darkMode","matchMedia","matches","animEleText","target","split","forEach","CalcMinMain","headerHeight","footerHeight","style","setProperty","InvalidInfo","inputId","inputEId","message","validInput","getElementById","inputEi","value","removeChild","createElement","setAttribute","innerText","appendChild","PassQCalc","rankScore","checkChar","rn","checkRepeat"],"sources":["src/pika.js","src/index.js"],"mappings":"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"}
\ No newline at end of file
+{"version":3,"names":["Pikajs","constructor","static","element","elementHeight","clientHeight","calcMinMain","document","parentNode","headerHeight","getSelectorHeight","footerHeight","hasSelectionHeight","querySelector","style","setProperty","inputId","inputEId","regex","message","validInput","getElementById","inputEi","test","value","removeChild","createElement","setAttribute","innerText","appendChild","pass","rankScore","length","checkChar","rn","checkRepeat","selector","s","sh","this","_height","e","getElementsByTagName","hasArticleHeight","text","count","i","search","match","base64","binaryString","window","atob","stringToArrayBuffer","arraybuffer","binary","arrayBufferToString","btoa","str","bytes","Uint8Array","charCodeAt","buffer","String","fromCharCode","apply","darkMode","matchMedia","matches","content","separator","splitTag","target","split","forEach","evenClass","oddClass","evenAttr","oddAttr"],"sources":["src/pika.js"],"mappings":"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"}
\ No newline at end of file
diff --git a/package.json b/package.json
index f95231d..bfb0bbb 100644
--- a/package.json
+++ b/package.json
@@ -1,10 +1,10 @@
{
"name": "@leonardwoo/pika-js",
- "version": "0.1.4",
+ "version": "0.1.5",
"description": "A function toolkit.",
"main": "dist/pika.min.js",
"scripts": {
- "compress": "terser src/pika.js src/index.js -o dist/pika.min.js -c -m --comments --source-map"
+ "compress": "terser src/pika.js -o dist/pika.min.js -c -m --comments --source-map"
},
"repository": {
"type": "git",
diff --git a/src/index.js b/src/index.js
deleted file mode 100644
index 87ead99..0000000
--- a/src/index.js
+++ /dev/null
@@ -1,111 +0,0 @@
-/*
- * Copyright 2023 Leonard Woo.
- *
- * Permission is hereby granted, free of charge, to any person obtaining a copy
- * of this software and associated documentation files (the "Software"), to deal
- * in the Software without restriction, including without limitation the rights
- * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
- * copies of the Software, and to permit persons to whom the Software is
- * furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included in all
- * copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
- * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
- * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
- * SOFTWARE.
- */
-
-"use strict";
-
-/**
- * Automatic calculator main tag min-height on screen
- *
- * @author Leonard Woo
- * @constructor
- */
-function CalcMinMain() {
- CalcMinMain(document);
-}
-
-/**
- * Automatic calculator main tag min-height on screen under parent node
- *
- * @param parentNode parent node
- * @author Leonard Woo
- * @constructor
- */
-function CalcMinMain(parentNode) {
- let headerHeight = Pikajs.getSelectorHeight(parentNode, 'header');
- let selectionHeight = Pikajs.hasSelectionHeight(parentNode);
- let footerHeight = selectionHeight? 0: Pikajs.getSelectorHeight(parentNode, 'footer');
- let main = parentNode.querySelector('main');
- main.style.setProperty('min-height', 'calc(100vh - ' + (headerHeight + footerHeight) + 'px)');
-}
-
-/**
- * Add message under the input tag with regex
- *
- * @param inputId input tag id
- * @param inputEId input error message id with p tag
- * @param regex regex
- * @param message message
- * @author Leonard Woo
- * @constructor
- */
-function InvalidInfo(inputId='',inputEId='', regex='', message='') {
- const validInput = document.getElementById(inputId);
- let inputEi = document.getElementById(inputEId);
- if (!regex.test(validInput.value)) {
- if (inputEi == null) {
- inputEi = document.createElement('p');
- inputEi.setAttribute('id', inputEId);
- inputEi.innerText = message;
- validInput.parentNode.appendChild(inputEi);
- } else {
- inputEi.innerText = message;
- }
- } else {
- if (inputEi != null) {
- validInput.parentNode.removeChild(inputEi);
- }
- }
-}
-
-/**
- * Calculator password quality
- *
- * @param pass password text
- * @returns {number} quality score
- * @author Leonard Woo
- * @constructor
- */
-function PassQCalc(pass='') {
- let rankScore = 0;
-
- rankScore += (pass.length > 8)? 4: 0;
- rankScore += (pass.length - Pikajs.checkChar(pass, /[a-z]/g)) * 2;
- rankScore += (pass.length - Pikajs.checkChar(pass, /[A-Z]/g)) * 3;
- rankScore += (pass.length - Pikajs.checkChar(pass, /[0-9]/g)) * 2;
- rankScore += Pikajs.checkChar(pass, /((?=["!\\\"#$%&\'()*+,-./:;<=>?@[\]^_`{|}~"])[^A-Za-z0-9])/g) * 6;
-
- rankScore -= Pikajs.checkChar(pass, /[A-Z]{3,}/g) * 2;
- rankScore -= Pikajs.checkChar(pass, /[a-z]{3,}/g) * 2;
- rankScore -= Pikajs.checkChar(pass, /[0-9]{3,}/g) * 2;
- rankScore -= Pikajs.checkChar(pass, /["!\\\"#$%&\'()*+,-./:;<=>?@[\]^_`{|}~"]{3,}/g) * 2;
-
- const rn = Pikajs.checkRepeat(pass);
- rankScore -= rn * (rn - 1);
-
- if (rankScore <= 0) {
- return 0;
- // } else if (rankScore > 100) {
- // return 100;
- } else {
- return rankScore;
- }
-}
diff --git a/src/pika.js b/src/pika.js
index cc4831e..59268fa 100644
--- a/src/pika.js
+++ b/src/pika.js
@@ -1,270 +1,380 @@
-/*
- * Copyright 2023 Leonard Woo.
- *
- * Permission is hereby granted, free of charge, to any person obtaining a copy
- * of this software and associated documentation files (the "Software"), to deal
- * in the Software without restriction, including without limitation the rights
- * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
- * copies of the Software, and to permit persons to whom the Software is
- * furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included in all
- * copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
- * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
- * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
- * SOFTWARE.
- */
-
-/*! Pika-js v0.1.3 (https://github.com/leonardwoo/pika-js) | Licensed under MIT (https://github.com/leonardwoo/pika-js/blob/main/LICENSE) */
-
+/*! Pika-js | MIT License | https://github.com/leonardwoo/pika-js */
"use strict";
/**
- * Pika js class
+ * Pikajs class
*
* @author Leonard Woo
*/
class Pikajs {
- constructor() {}
-
- // get element height, if element is null return -1
- static _height(element) {
- if (element == null) {
- return -1;
- }
- let elementHeight = element.clientHeight;
- if (elementHeight == null || elementHeight < 0) {
- elementHeight = -1;
- }
- return elementHeight;
- }
+ constructor() {}
- /**
- * Get element selector height
- *
- * @param selector element selector
- * @returns {number} height
- */
- static getSelectorHeight(selector) {
- return getSelectorHeight(document, selector);
+ // get element height, if element is null return -1
+ static _height(element) {
+ if (element == null) {
+ return -1;
}
-
- /**
- * Get element selector height under parent node
- *
- * @param parentNode parent node
- * @param selector element selector
- * @returns {number} height
- */
- static getSelectorHeight(parentNode, selector) {
- const s = parentNode.querySelector(selector);
- const sh = this._height(s);
- return (sh < 0? 0: sh);
+ let elementHeight = element.clientHeight;
+ if (elementHeight == null || elementHeight < 0) {
+ elementHeight = -1;
}
+ return elementHeight;
+ }
- /**
- * Has section tag
- *
- * @returns {boolean} true is find last section tag
- */
- static hasSelectionHeight() {
- return this.hasSelectionHeight(document)
- }
+ /**
+ * Automatic calculator main tag min-height on screen
+ */
+ static calcMinMain() {
+ calcMinMain(document);
+ }
- /**
- * Has section tag under parent node
- *
- * @param parentNode parent node
- * @returns {boolean} true is find last section tag
- */
- static hasSelectionHeight(parentNode) {
- const e = parentNode.getElementsByTagName("section")[0];
- const eh = this._height(e);
- return !(eh < 0);
- }
+ /**
+ * Automatic calculator main tag min-height on screen under parent node
+ *
+ * @param parentNode parent node
+ */
+ static calcMinMain(parentNode) {
+ let headerHeight = getSelectorHeight(parentNode, 'header');
+ let selectionHeight = hasSelectionHeight(parentNode);
+ let footerHeight = selectionHeight ? 0 : getSelectorHeight(parentNode, 'footer');
+ let main = parentNode.querySelector('main');
+ main.style.setProperty('min-height', 'calc(100vh - ' + (headerHeight + footerHeight) + 'px)');
+ }
- /**
- * Is password (only ASCII printable characters without space)
- *
- * @param pass password text
- * @returns {boolean} true is yes
- */
- static isPassword(pass = "") {
- // ASCII printable characters, letters, digits, punctuation marks, and a few miscellaneous symbols.
- // But without space.
- const regex = /^[\x21-\x7E]{8,20}$/g;
- return regex.test(pass);
+ /**
+ * Add message under the input tag with regex
+ *
+ * @param {string} [inputId=''] input tag id
+ * @param {string} [inputEId=''] input error message id with p tag
+ * @param {string} [regex=''] regex
+ * @param {string} [message=''] message
+ */
+ static invalidInfo(inputId = '', inputEId = '', regex = '', message = '') {
+ const validInput = document.getElementById(inputId);
+ let inputEi = document.getElementById(inputEId);
+ if (!regex.test(validInput.value)) {
+ if (inputEi == null) {
+ inputEi = document.createElement('p');
+ inputEi.setAttribute('id', inputEId);
+ inputEi.innerText = message;
+ validInput.parentNode.appendChild(inputEi);
+ } else {
+ inputEi.innerText = message;
+ }
+ } else {
+ if (inputEi != null) {
+ validInput.parentNode.removeChild(inputEi);
+ }
}
+ }
- /**
- * Check repeat character
- *
- * @param text text
- * @returns {number} repeat character number
- */
- static checkRepeat(text = "") {
- let count = 0;
- for (let i = 0; i < text.length - 1; i++) {
- if (text[i] === text[i + 1]) {
- count++;
- }
- }
- return count;
- }
+ /**
+ * Calculator password quality
+ *
+ * @param {string} [pass=''] password text
+ * @returns {number} quality score
+ */
+ static passQCalc(pass = '') {
+ let rankScore = 0;
- /**
- * Check character with regex
- *
- * @param text text
- * @param regex regex
- * @returns {number} If it is greater than 0, it is the number of regular strings
- */
- static checkChar(text = "", regex = "") {
- if (text.search(regex) >= 0) {
- return text.match(regex).length;
- }
- return 0;
- }
+ rankScore += (pass.length > 8) ? 4 : 0;
+ rankScore += (pass.length - checkChar(pass, /[a-z]/g)) * 2;
+ rankScore += (pass.length - checkChar(pass, /[A-Z]/g)) * 3;
+ rankScore += (pass.length - checkChar(pass, /[0-9]/g)) * 2;
+ rankScore += checkChar(pass, /((?=["!\\\"#$%&\'()*+,-./:;<=>?@[\]^_`{|}~"])[^A-Za-z0-9])/g) * 6;
- /**
- * Is uppercase letter character
- *
- * @param text text
- * @returns {boolean} true is has uppercase character
- */
- static isUpperChar(text = "") {
- const regex = /\p{Lu}+/gu;
- return regex.match(text).length > 0;
- }
+ rankScore -= checkChar(pass, /[A-Z]{3,}/g) * 2;
+ rankScore -= checkChar(pass, /[a-z]{3,}/g) * 2;
+ rankScore -= checkChar(pass, /[0-9]{3,}/g) * 2;
+ rankScore -= checkChar(pass, /["!\\\"#$%&\'()*+,-./:;<=>?@[\]^_`{|}~"]{3,}/g) * 2;
- /**
- * Is lowercase letter character
- *
- * @param text text
- * @returns {boolean} true is has lowercase character
- */
- static isLowerChar(text = "") {
- const regex = /\p{Ll}+/gu;
- return regex.match(text).length > 0;
- }
+ const rn = checkRepeat(pass);
+ rankScore -= rn * (rn - 1);
- /**
- * Is digit character
- *
- * @param text text
- * @returns {boolean} true is has digit character
- */
- static isDigit(text = "") {
- const regex = /\p{Nd}+/gu;
- return regex.match(text).length > 0;
- }
+ return rankScore <= 0? 0: rankScore;
+ }
- /**
- * Is punctuation character
- *
- * @param text text
- * @returns {boolean} true is has punctuation character
- */
- static isPunctuation(text = "") {
- const regex = /\p{P}+/gu;
- return regex.match(text).length > 0;
- }
+ /**
+ * Get element selector height
+ *
+ * @param selector element selector
+ * @returns {number} height
+ */
+ static getSelectorHeight(selector) {
+ return getSelectorHeight(document, selector);
+ }
- /**
- * Is white space character
- *
- * @param text text
- * @returns {boolean} true is has white space character
- */
- static isWhiteSpace(text = "") {
- const regex = /\s+/gu;
- return regex.match(text).length > 0;
- }
+ /**
+ * Get element selector height under parent node
+ *
+ * @param parentNode parent node
+ * @param selector element selector
+ * @returns {number} height, if selector height less then 0 return 0
+ */
+ static getSelectorHeight(parentNode, selector) {
+ const s = parentNode.querySelector(selector);
+ const sh = this._height(s);
+ return (sh < 0 ? 0 : sh);
+ }
+
+ /**
+ * Has section tag
+ *
+ * @returns {boolean} true if find last section tag
+ */
+ static hasSelectionHeight() {
+ return this.hasSelectionHeight(document)
+ }
+
+ /**
+ * Has section tag under parent node
+ *
+ * @param parentNode parent node
+ * @returns {boolean} true if find last section tag
+ */
+ static hasSelectionHeight(parentNode) {
+ const e = parentNode.getElementsByTagName("section")[0];
+ const eh = this._height(e);
+ return !(eh < 0);
+ }
+
+ /**
+ * Has article tag
+ *
+ * @returns {boolean} true if find last article tag
+ */
+ static hasArticleHeight() {
+ return this.hasArticleHeight(document)
+ }
- // window.btoa(""); // encode a string
- // window.atob(""); // decode the string
-
- /**
- * Decode Base64 to byte buffer
- *
- * @param base64 base64 text
- * @returns {ArrayBufferLike} byte buffer
- */
- static base64ToArrayBuffer(base64) {
- const binaryString = window.atob(base64);
- return this.stringToArrayBuffer(binaryString);
+ /**
+ * Has article tag under parent node
+ *
+ * @param parentNode parent node
+ * @returns {boolean} true if find last article tag
+ */
+ static hasArticleHeight(parentNode) {
+ const e = parentNode.getElementsByTagName("article")[0];
+ const eh = this._height(e);
+ return !(eh < 0);
+ }
+
+ /**
+ * Is password (only ASCII printable characters without space)
+ *
+ * @param {string} [pass=""] password text, length is bewteen 8 to 20
+ * @returns {boolean} true if text is password
+ */
+ static isPassword(pass = "") {
+ // ASCII printable characters, letters, digits, punctuation marks, and a few miscellaneous symbols.
+ // But without space.
+ const regex = /^[\x21-\x7E]{8,20}$/g;
+ return regex.test(pass);
+ }
+
+ /**
+ * Check repeat character
+ *
+ * @param {string} [text=""] text
+ * @returns {number} repeat character number
+ */
+ static checkRepeat(text = "") {
+ let count = 0;
+ for (let i = 0; i < text.length - 1; i++) {
+ if (text[i] === text[i + 1]) {
+ count++;
+ }
}
+ return count;
+ }
- /**
- * Encode byte buffer to Base64
- *
- * @param arraybuffer byte buffer
- * @returns {string} base64 text
- */
- static arrayBufferToBase64(arraybuffer) {
- const binary = this.arrayBufferToString(arraybuffer);
- return window.btoa(binary);
+ /**
+ * Check character with regex
+ *
+ * @param {string} [text=""] text
+ * @param {string} [regex=""] regex
+ * @returns {number} If it is greater than 0, it is the number of regular strings
+ */
+ static checkChar(text = "", regex = "") {
+ if (text.search(regex) >= 0) {
+ return text.match(regex).length;
}
+ return 0;
+ }
+
+ /**
+ * Is uppercase letter character
+ *
+ * @param {string} [text=""] text
+ * @returns {boolean} true is has uppercase character
+ */
+ static isUpperChar(text = "") {
+ // A-Z
+ const regex = /\p{Lu}+/gu;
+ return regex.match(text).length > 0;
+ }
+
+ /**
+ * Is lowercase letter character
+ *
+ * @param {string} [text=""] text
+ * @returns {boolean} true is has lowercase character
+ */
+ static isLowerChar(text = "") {
+ // a-z
+ const regex = /\p{Ll}+/gu;
+ return regex.match(text).length > 0;
+ }
- /**
- * Convert string to byte buffer
- *
- * @param str string
- * @returns {ArrayBufferLike} byte buffer
- */
- static stringToArrayBuffer(str) {
- const bytes = new Uint8Array(str.length);
- for (let i = 0; i < str.length; i++) {
- bytes[i] = str.charCodeAt(i);
- }
- return bytes.buffer;
+ /**
+ * Is digit character
+ *
+ * @param {string} [text=""] text
+ * @returns {boolean} true is has digit character
+ */
+ static isDigit(text = "") {
+ // 0-9
+ const regex = /\p{Nd}+/gu;
+ return regex.match(text).length > 0;
+ }
+
+ /**
+ * Is punctuation character
+ *
+ * @param {string} [text=""] text
+ * @returns {boolean} true is has punctuation character
+ */
+ static isPunctuation(text = "") {
+ // [\x21-\x2F\x3A-\x40\x5B-\x60\x7B-\x7E]
+ const regex = /\p{P}+/gu;
+ return regex.match(text).length > 0;
+ }
+
+ /**
+ * Is white space character
+ *
+ * @param {string} [text=""] text
+ * @returns {boolean} true is has white space character
+ */
+ static isWhiteSpace(text = "") {
+ // space tab
+ const regex = /\s+/gu;
+ return regex.match(text).length > 0;
+ }
+
+ // window.btoa(""); // encode a string
+ // window.atob(""); // decode the string
+
+ /**
+ * Decode Base64 to byte buffer
+ *
+ * @param {string} base64 base64 text
+ * @returns {ArrayBufferLike} byte buffer
+ */
+ static base64ToArrayBuffer(base64) {
+ const binaryString = window.atob(base64);
+ return this.stringToArrayBuffer(binaryString);
+ }
+
+ /**
+ * Encode byte buffer to Base64
+ *
+ * @param arraybuffer byte buffer
+ * @returns {string} base64 text
+ */
+ static arrayBufferToBase64(arraybuffer) {
+ const binary = this.arrayBufferToString(arraybuffer);
+ return window.btoa(binary);
+ }
+
+ /**
+ * Convert string to byte buffer
+ *
+ * @param {string} str string
+ * @returns {ArrayBufferLike} byte buffer
+ */
+ static stringToArrayBuffer(str) {
+ const bytes = new Uint8Array(str.length);
+ for (let i = 0; i < str.length; i++) {
+ bytes[i] = str.charCodeAt(i);
}
+ return bytes.buffer;
+ }
+
+ /**
+ * Convert byte buffer to string
+ *
+ * @param arraybuffer byte buffer
+ * @returns {string} string
+ */
+ static arrayBufferToString(arraybuffer) {
+ return String.fromCharCode.apply(null, new Uint8Array(arraybuffer));
+ }
- /**
- * Convert byte buffer to string
- *
- * @param arraybuffer byte buffer
- * @returns {string} string
- */
- static arrayBufferToString(arraybuffer) {
- return String.fromCharCode.apply(null, new Uint8Array(arraybuffer));
+ /**
+ * Get browser dark mode
+ *
+ * @returns {undefined} undefined is unsupported, true is dark mode, false is light mode
+ */
+ static getDarkMode() {
+ let darkMode = undefined;
+ if (window.matchMedia('(prefers-color-scheme)').matches) {
+ darkMode = window.matchMedia('(prefers-color-scheme: dark)').matches;
}
+ return darkMode;
+ }
- /**
- * Get browser dark mode
- *
- * @returns {undefined} undefined is unsupported, true is dark mode, false is light mode
- */
- static getDarkMode() {
- let darkMode = undefined;
- if (window.matchMedia('(prefers-color-scheme)').matches) {
- darkMode = window.matchMedia('(prefers-color-scheme: dark)').matches;
- }
- return darkMode;
+ /**
+ * Split content
+ *
+ * like
+ * @code test
+ * to
+ * @code test
+ *
+ * @param {string} [content=""] element content
+ * @param {string} [separator=""] content separator char
+ * @param {string} [splitTag=""] split tag name
+ * @returns {string} target html with splitTag tags
+ */
+ static async splitContent(content = "", separator = "", splitTag = "") {
+ let target = "";
+ if (splitTag.length < 1) {
+ return content;
}
+ content.split(separator).forEach((s) => {
+ target += "<"+ splitTag + ">" + s + "" + splitTag + ">";
+ });
+ return target;
+ }
- /**
- * Split animation element text
- *
- * like
- * @code test
- * to
- * @code test
- *
- * @param animEleText animation element
- * @returns target element with span and em tags
- */
- static async splitAnimationElement(animEleText="") {
- let target = "";
- animEleText.split("").forEach((s) => {
- target += "" + s + "";
- });
- target += "";
- return target;
+ /**
+ * Split content with parity
+ *
+ * like
+ * @code test
+ * to
+ * @code test
+ *
+ * @param {string} [content=""] element content
+ * @param {string} [separator=""] content separator char
+ * @param {string} [splitTag=""] split tag name
+ * @param {string} [evenClass=""] even tag class name
+ * @param {string} [oddClass=""] odd tag class name
+ * @returns {string} target html with splitTag tags
+ */
+ static async splitContentWithParity(content = "", separator = "", splitTag = "", evenClass = "", oddClass = "") {
+ let target = "";
+ if (splitTag == "") {
+ return content;
}
+ const evenAttr = (evenClass == "")? "": " class=\"" + evenClass + "\"";
+ const oddAttr = (oddClass == "")? "": " class=\"" + oddClass + "\"";
+ var i = 0;
+ content.split(separator).forEach((e) => {
+ target += "<"+ splitTag + ((i%2 == 0)? evenAttr: oddAttr) + ">" + e + "" + splitTag + ">";
+ i++;
+ });
+ return target;
+ }
}