123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149 |
- import DOMPurify from 'dompurify';
- /**
- * 换算数据大小
- * @param {number} size
- * @returns {string} 换算后的数据大小,两位小数带单位
- */
- export function conversionSize(size) {
- let _size = size;
- const units = ['B', 'KB', 'MB', 'GB'];
- let factor = 0;
- while (_size > 1024 && factor < units.length - 1) {
- _size /= 1024;
- factor += 1;
- }
- return `${_size.toFixed(2)}${units[factor]}`;
- }
- export const tone_data = [
- ['ā', 'á', 'ǎ', 'à', 'a'],
- ['ō', 'ó', 'ǒ', 'ò', 'o'],
- ['ē', 'é', 'ě', 'è', 'e'],
- ['ī', 'í', 'ǐ', 'ì', 'i'],
- ['ū', 'ú', 'ǔ', 'ù', 'u'],
- ['ǖ', 'ǘ', 'ǚ', 'ǜ', 'ü'],
- ['ǖ', 'ǘ', 'ǚ', 'ǜ', 'ü'],
- ['Ā', 'Á', 'Â', 'À', 'A'],
- ['Ō', 'Ó', 'Ô', 'Ò', 'O'],
- ['Ē', 'É', 'Ê', 'È', 'E'],
- ['Ī', 'Í', 'Î', 'Ì', 'I'],
- ['Ū', 'Ú', 'Û', 'Ù', 'U'],
- ];
- /**
- * 添加声调
- * @param {Number} number
- * @param {String} con
- * @returns String
- */
- export function addTone(number, con) {
- const zmList = ['a', 'o', 'e', 'i', 'u', 'v', 'ü', 'A', 'O', 'E', 'I', 'U'];
- let cons = con;
- if (number) {
- for (let i = 0; i < zmList.length; i++) {
- let zm = zmList[i];
- if (con.includes(zm)) {
- let zm2 = tone_data[i][number - 1];
- if (con.includes('iu')) {
- zm2 = tone_data[4][number - 1];
- cons = con.replace('u', zm2);
- } else if (con.includes('ui')) {
- zm2 = tone_data[3][number - 1];
- cons = con.replace('i', zm2);
- } else if (/yv|jv|qv|xv/.test(con)) {
- zm2 = tone_data[4][number - 1];
- cons = con.replace('v', zm2);
- } else if (/yü|jü|qü|xü/.test(con)) {
- zm2 = tone_data[4][number - 1];
- cons = con.replace('ü', zm2);
- } else {
- cons = con.replace(zm, zm2);
- }
- break;
- }
- }
- }
- return cons;
- }
- export function handleToneValue(valItem) {
- let numList = [];
- if (/[A-Za-zü]+\d/g.test(valItem)) {
- valItem.split('').forEach((item, i) => {
- if (/\d/.test(item)) {
- let numIndex = numList.length === 0 ? 0 : numList[numList.length - 1].index;
- let con = valItem.substring(numIndex, i).replace(/\d/g, '');
- numList.push({
- number: item,
- con,
- });
- }
- });
- } else {
- numList = [];
- }
- return numList.length === 0 ? [{ con: valItem }] : numList;
- }
- // 全屏方法兼容
- export function fullScreenCompatibility(dom) {
- if (dom.requestFullscreen) {
- return dom.requestFullscreen();
- } else if (dom.webkitRequestFullScreen) {
- return dom.webkitRequestFullScreen();
- } else if (dom.mozRequestFullScreen) {
- return dom.mozRequestFullScreen();
- }
- return dom.msRequestFullscreen();
- }
- /**
- * @description 退出全屏方法兼容
- */
- export function exitFullScreenCompatibility() {
- if (document.exitFullscreen) {
- return document.exitFullscreen();
- } else if (document.webkitExitFullscreen) {
- return document.webkitExitFullscreen();
- } else if (document.mozCancelFullScreen) {
- return document.mozCancelFullScreen();
- }
- return document.msExitFullscreen();
- }
- /**
- * @description 切换全屏
- * @param {HTMLElement} dom 需要全屏的元素
- * @return {Promise<void>}
- */
- export function toggleFullScreen(dom) {
- if (document.fullscreenElement === null) {
- fullScreenCompatibility(dom);
- } else {
- exitFullScreenCompatibility();
- }
- }
- /**
- * @description 计算数组的深度
- * @param {Array} arr 需要计算深度的数组
- * @returns {Number} 数组的深度
- */
- export function getArrayDepth(arr) {
- if (!Array.isArray(arr)) return 0;
- if (arr.length === 0) return 1;
- return 1 + Math.max(...arr.map((item) => (Array.isArray(item) ? getArrayDepth(item) : 0)));
- }
- /**
- * 过滤 html,防止 xss 攻击
- * @param {string} html 需要过滤的html
- * @returns {string} 过滤后的html
- */
- export function sanitizeHTML(html) {
- return DOMPurify.sanitize(html);
- }
|