Initial commit

This commit is contained in:
net909
2023-09-28 16:21:06 +08:00
parent 498772eb04
commit ba7be004c0
640 changed files with 87745 additions and 0 deletions
+17
View File
@@ -0,0 +1,17 @@
<?php
/**
* 字数统计与排版
*/
namespace plugin\utility\text_count;
use app\Plugin;
class App extends Plugin
{
public function index()
{
return $this->view();
}
}
+221
View File
@@ -0,0 +1,221 @@
{extend name="common/plugin_layout" /}
{block name="title"}{$plugin.title} - {:config_get('title')}{/block}
{block name="main"}
<div class="container-xl" id="app">
<div class="col-sm-12 col-md-10 center-block">
<div class="card card-preview">
<div class="card-inner mt-3">
<div class="nya-title nk-ibx-action-item progress-rating">
<span class="nk-menu-text font-weight-bold">在线字数统计与排版</span>
</div>
<div class="row">
<div class="col-sm-12 col-md-8">
<div class="form-group">
<div class="form-control-wrap">
<textarea id="content" class="form-control" rows="13"></textarea>
</div>
</div>
<div class="row pt-2 pb-1">
<div class="col-3">
<button class="btn btn-dim btn-outline-primary btn-block card-link" onclick="count()">
统计字数
</button>
</div>
<div class="col-3">
<div class="btn-group">
<button class="btn btn-dim btn-outline-primary btn-block card-link" onclick="format()">一键排版</button>
<button type="button" class="btn btn-dim btn-outline-primary dropdown-toggle dropdown-toggle-split" id="dropdownMenuReference" data-toggle="dropdown" aria-expanded="false" data-reference="parent">
<em class="icon ni ni-chevron-down"></em>
</button>
<div class="dropdown-menu" aria-labelledby="dropdownMenuReference">
<a href="javascript:;" onclick="noSpace()" class="dropdown-item">去行尾空格</a>
<a href="javascript:;" onclick="noEmptyLines()" class="dropdown-item">删除空行</a>
</div>
</div>
</div>
<div class="col-3">
<button class="btn btn-dim btn-outline-primary btn-block card-link" onclick="copytext()">
复制
</button>
</div>
<div class="col-3">
<button class="btn btn-dim btn-outline-primary btn-block card-link" onclick="reset()">
<em class="icon ni ni-reload"></em>清空
</button>
</div>
</div>
</div>
<div class="col-sm-12 col-md-4">
<table class="table table-bordered table-hover">
<tbody><tr>
<td style="width: 100px">总字数</td>
<td>
<span id="id_total">0</span> (个)</td></tr>
<tr>
<td>总行数</td>
<td>
<span id="id_part">0</span> (行)</td></tr>
<tr>
<td class="">中文字数</td>
<td class="">
<span id="id_c_total">0</span> (个)</td></tr>
<tr>
<td class="">中文标点</td>
<td class="">
<span id="id_c_punctuation">0</span> (个)</td></tr>
<tr>
<td class="">字母个数</td>
<td class="">
<span id="id_e_total">0</span> (个)</td></tr>
<tr>
<td class="">单词个数</td>
<td class="">
<span id="id_e_words">0</span> (个)</td></tr>
<tr>
<td class="">英文标点</td>
<td class="">
<span id="id_e_punctuation">0</span> (个)</td></tr>
<tr>
<td class="">数字个数</td>
<td class="">
<span id="id_n_total">0</span> (个)</td></tr>
<tr>
<td class="">数字组</td>
<td class="">
<span id="id_n_words">0</span> (个)</td></tr>
</tbody>
</table>
</div>
</div>
</div>
</div>
</div>
</div>
{/block}
{block name="script"}
<script>
var contentObj = $('#content');
contentObj.bind('input propertychange change',
function() {
count();
});
// 一键统计
function count() {
var content = contentObj.val().replace(/\r\n/g, "\n"); // 完整的内容
var str = content.replace(/\n/g, ''); // 纯粹字符
var Chinese_characters = content.match(/[\u4e00-\u9fa5]/g) || []; // 中文字符
var phrase = content.match(/\b\w+\b/g) || []; // 数字+字母
var group_number = content.match(/\b\d+\b/g) || []; // 数字
var letter = str.match(/[A-Za-z]/g) || []; // 英文字母
var number = str.match(/[0-9]/g) || []; // 数字
// 英文标点
var half_punctuation = str.match(/[|\~|\`|\!|\@|\#|\$|\%|\^|\&|\*|\(|\)|\-|\_|\+|\=|\||\\|\[|\]|\{|\}|\;|\:|\"|\'|\,|\<|\.|\>|\/|\?]/g) || [];
// 中文字符总数
var Chinese_all = 0;
for (var i = 0; i < str.length; i++) {
var c = str.charAt(i);
if (c.match(/[^\x00-\xff]/)) Chinese_all++;
}
// 计算段落数
var part = 0;
var s_ma = content.split("\n");
for (var i = 0; i < s_ma.length; i++) {
if (s_ma[i].length > 0) part++;
}
// 字符总数
$('#id_total').html(str.length);
// 汉字数
$('#id_c_total').html(Chinese_characters.length);
// 中文标点
$('#id_c_punctuation').html(Chinese_all - Chinese_characters.length);
// 英文字数
$('#id_e_total').html(letter.length);
// 英文标点
$('#id_e_punctuation').html(half_punctuation.length);
// 英文单词
$('#id_e_words').html(phrase.length - group_number.length);
// 数字单词
$('#id_n_words').html(group_number.length);
// 数字字符
$('#id_n_total').html(number.length);
// 行数
$('#id_part').html(part);
}
// 清除行尾空格
function noSpace() {
var str = contentObj.val().replace(/\r\n/g, "\n").replace(/\n/g, "[mk~换行]");
var m = str.split("[mk~换行]");
var ma = [];
var len = m.length;
for (var i = 0; i < len; i++) {
ma.push(m[i].replace(/(\s*$)/g, ""));
}
contentObj.val(ma.join("\r\n"));
count(); // 重新统计字数
}
// 一键排版
function format() {
var str = contentObj.val().replace(/[\r\n]+/g, "[mk~换行]").replace(/[\n\n]+/g, "[mk~换行]").replace(/[\n]+/g, "[mk~换行]");
var m = str.split("[mk~换行]");
var ma = [];
var len = m.length;
for (var i = 0; i < len; i++) {
ma.push('  ' + m[i].replace(/(^\s*)|(\s*$)/g, "")); // 缩进,去行尾空格
}
contentObj.val(ma.join("\r\n\r\n")); // 段落换行
count(); // 重新统计字数
}
// 删除空行
function noEmptyLines() {
var str = contentObj.val().replace(/[\r\n]+/g, "[mk~换行]").replace(/[\n\n]+/g, "[mk~换行]").replace(/[\n]+/g, "[mk~换行]");
var m = str.split("[mk~换行]");
contentObj.val(m.join("\r\n")); // 段落换行
count(); // 重新统计字数
}
// 半角转全角
function format4() {
var body = document.getElementById("thebody").value;
for (var ii = 0; 100 > ii; ii++) {
body = body.replace(" ", ""); //去除全角空格
body = body.replace(",", ""); //替换英文标点
body = body.replace("......", "……");
body = body.replace("。。。。。。", "……");
body = body.replace("?", "");
body = body.replace(".", "。");
body = body.replace(";", "");
body = body.replace(":", "");
body = body.replace("!", "");
body = body.replace("(", "");
body = body.replace(")", "");
body = body.replace("----", "——");
body = body.replace("--", "——");
body = body.replace("[", "");
body = body.replace("]", "");
}
document.getElementById("thebody").value = body;
}
function copytext(){
if(contentObj.val() == '') return;
$("#content").select();
document.execCommand("Copy");
layer.msg('复制成功', {icon:1, time:600})
}
function reset(){
contentObj.val('');
count()
}
</script>
{/block}