no message

This commit is contained in:
hellcat 2025-07-16 18:55:53 +08:00
parent aeff16682e
commit 9320dfdcc8
13 changed files with 721 additions and 231 deletions

51
app/Models/Option.php Executable file
View File

@ -0,0 +1,51 @@
<?php
namespace App\Models;
use Illuminate\Database\Eloquent\Model;
class Option extends Model
{
protected $table = 'option';
public $timestamps = false;
public static function _hit($sThisName, $k)
{
$v = self::where("this_name", $sThisName)->where("k", $k)->first()?->v;
return $v;
}
public static function _list($sThisName)
{
$oSelf = self::where("this_name", $sThisName)->get();
return self::_filterList($oSelf);
}
// public static function _limit($sThisName, $iSkip, $iTake)
// {
// $oSelf = self::where("this_name", $sThisName)->skip($iSkip)->take($iTake)->get();
//
// return self::__filterList($oSelf);
// }
public static function _filter($oOption)
{
$arr = [];
$arr[$oOption->this_name."#".$oOption->k] = $oOption->v;
return $arr;
}
public static function _filterList($oOption)
{
$arr = [];
foreach ($oOption as $oOptionRow) {
$arr[] = self::_filter($oOptionRow);
}
return $arr;
}
}

View File

@ -1,207 +1,30 @@
<?php
namespace App\Services\TG\Hook\Mod;
use App\Models\Blade as ModelBlade;
use App\Services\TG\Hook\Mod\DDT;
class Blade extends Base {
private function subStr($string, $length = 50) {
if (strlen($string) > $length) {
return mb_substr($string, 0, $length) . '...'; // 添加省略号
}
return $string;
}
private function _filter($oBladeRow)
{
$oBladeRow->content = $this->subStr($oBladeRow->content);
unset($oBladeRow->id);
return $oBladeRow;
}
private function filter($oBlade, $sMod = "row")
private $oDDT;
public function __construct($aUpdate)
{
if ($sMod == "row") {
$oBlade = $this->_filter($oBlade);
} else if ($sMod == "list") {
foreach ($oBlade as &$oBladeRow) {
$oBladeRow = $this->_filter($oBladeRow);
}
}
return $oBlade;
$this->oDDT = new DDT(new ModelBlade());
$this->oDDT->_setPrimaryKey("code"); // 可选默认id
$this->oDDT->_setStrField(["content"]); // 可选,指定长文本字段
$this->oDDT->_setThisName("blade"); // 必须me用正常就是类名只不过后期没准改名所以就这里写死
}
public function List()
public function __call($sName, $aArg)
{
$oBlade = ModelBlade::all();
$oBlade = $this->filter($oBlade, "list");
return $this->toJson($oBlade);
}
public function Find($aParam)
{
$sField = $aParam["aOption"][1] ?? "id";
$sValue = $aParam["aArg"][1] ?? false;
return $this->oDDT->$sName($aArg[0]);
if ($sValue == "?") {
return "/blade#find__{field?} {value}";
}
$oBlade = ModelBlade::where($sField, $sValue)->first();
return $this->toJson($oBlade);
}
public function Content($aParam)
{
$sField = $aParam["aOption"][1] ?? "code";
$sValue = $aParam["aArg"][1] ?? false;
if ($sValue == "?") {
return "/blade#content__{field?} {value}";
}
$oBlade = ModelBlade::where($sField, $sValue)->first();
return $oBlade->content;
}
public function Like($aParam)
{
$sField = $aParam["aOption"][1] ?? false;
$sValue = $aParam["aArg"][1] ?? false;
if ($sValue == "?") {
return "/blade#like__{field} {value}";
}
if (!$sField) {
return "需要field";
}
if (!$sValue) {
return "需要value";
}
$oBlade = ModelBlade::where($sField, "like", "%".$sValue."%")->get();
$oBlade = $this->filter($oBlade);
return $this->toJson($oBlade);
}
public function Add($aParam)
{
$sCode = $aParam["aArg"][1] ?? false;
if ($sCode == "?") {
return "/blade#add <code>";
}
if (!$sCode) {
return "需要code";
}
$bExists = ModelBlade::where("code", $sCode)->exists();
if ($bExists) {
return "code以存在";
}
$oBlade = new ModelBlade();
$oBlade->code = $sCode;
$oBlade->save();
$aParam["aOption"][1] = "code";
$aParam["aArg"][1] = $sCode;
return $this->Find($aParam);
}
public function Del($aParam)
{
$sCode = $aParam["aArg"][1] ?? false;
$sWhereField = $aParam["aOption"][1] ?? false;
if ($sCode == "?") {
return "/blade#del__<whereField> <code>";
}
if (!$sCode) {
return "需要code";
}
$oBlade = ModelBlade::where("code", $sCode);
if (!$oBlade->exists()) {
return "没有这个code";
}
$r = $oBlade->delete();
return $r;
}
public function Set($aParam)
{
$sSetValue = $aParam["aArg"] ?? false;
$sSetValue = implode(" ", $sSetValue);
if ($sSetValue == "?") {
$tmp = "/blade#set__<whereField>__<WhereValue>__<setField> <setValue>";
$tmp .= "\n /blade#set__<code>__<setField> <serValue>";
return $tmp;
}
// 有第三参数说明是findSet模式
if (isset($aParam["aOption"][3])) {
$sWhereField = $aParam["aOption"][1] ?? false;
$sWhereValue = $aParam["aOption"][2] ?? false;
$sSetField = $aParam["aOption"][3] ?? false;
$sMod = "findSet";
} else {
$sWhereField = "code";
$sWhereValue = $aParam["aOption"][1] ?? false;
$sSetField = $aParam["aOption"][2] ?? false;
$sMod = "set";
}
if (!$sWhereField) {
return "需要whereField";
}
if (!$sWhereValue) {
return "需要whereValue";
}
if (!$sSetField) {
return "需要setValue";
}
$oBlade = ModelBlade::where($sWhereField, $sWhereValue)->get();
if ($oBlade->isEmpty()) {
return "没找到这个blade";
}
$i = 0;
foreach ($oBlade as $oBladeRow) {
$oBladeRow->$sSetField = $sSetValue;
$oBladeRow->save();
$i++;
}
if ($i == 1) {
$aParam["aOption"][1] = "code";
$aParam["aArg"][1] = $oBladeRow->code;
return $this->find($aParam);
}
return "影响".$i."条数据";
}
}

View File

@ -0,0 +1,207 @@
<?php
namespace App\Services\TG\Hook\Mod;
use App\Models\Blade as ModelBlade;
class Blade extends Base {
private function subStr($string, $length = 50) {
if (strlen($string) > $length) {
return mb_substr($string, 0, $length) . '...'; // 添加省略号
}
return $string;
}
private function _filter($oBladeRow)
{
$oBladeRow->content = $this->subStr($oBladeRow->content);
unset($oBladeRow->id);
return $oBladeRow;
}
private function filter($oBlade, $sMod = "row")
{
if ($sMod == "row") {
$oBlade = $this->_filter($oBlade);
} else if ($sMod == "list") {
foreach ($oBlade as &$oBladeRow) {
$oBladeRow = $this->_filter($oBladeRow);
}
}
return $oBlade;
}
public function List()
{
$oBlade = ModelBlade::all();
$oBlade = $this->filter($oBlade, "list");
return $this->toJson($oBlade);
}
public function Find($aParam)
{
$sField = $aParam["aOption"][1] ?? "id";
$sValue = $aParam["aArg"][1] ?? false;
if ($sValue == "?") {
return "/blade#find__{field?} {value}";
}
$oBlade = ModelBlade::where($sField, $sValue)->first();
return $this->toJson($oBlade);
}
public function Content($aParam)
{
$sField = $aParam["aOption"][1] ?? "code";
$sValue = $aParam["aArg"][1] ?? false;
if ($sValue == "?") {
return "/blade#content__{field?} {value}";
}
$oBlade = ModelBlade::where($sField, $sValue)->first();
return $oBlade->content;
}
public function Like($aParam)
{
$sField = $aParam["aOption"][1] ?? false;
$sValue = $aParam["aArg"][1] ?? false;
if ($sValue == "?") {
return "/blade#like__{field} {value}";
}
if (!$sField) {
return "需要field";
}
if (!$sValue) {
return "需要value";
}
$oBlade = ModelBlade::where($sField, "like", "%".$sValue."%")->get();
$oBlade = $this->filter($oBlade);
return $this->toJson($oBlade);
}
public function Add($aParam)
{
$sCode = $aParam["aArg"][1] ?? false;
if ($sCode == "?") {
return "/blade#add <code>";
}
if (!$sCode) {
return "需要code";
}
$bExists = ModelBlade::where("code", $sCode)->exists();
if ($bExists) {
return "code以存在";
}
$oBlade = new ModelBlade();
$oBlade->code = $sCode;
$oBlade->save();
$aParam["aOption"][1] = "code";
$aParam["aArg"][1] = $sCode;
return $this->Find($aParam);
}
public function Del($aParam)
{
$sCode = $aParam["aArg"][1] ?? false;
$sWhereField = $aParam["aOption"][1] ?? false;
if ($sCode == "?") {
return "/blade#del__<whereField> <code>";
}
if (!$sCode) {
return "需要code";
}
$oBlade = ModelBlade::where("code", $sCode);
if (!$oBlade->exists()) {
return "没有这个code";
}
$r = $oBlade->delete();
return $r;
}
public function Set($aParam)
{
$sSetValue = $aParam["aArg"] ?? false;
$sSetValue = implode(" ", $sSetValue);
if ($sSetValue == "?") {
$tmp = "/blade#set__<whereField>__<WhereValue>__<setField> <setValue>";
$tmp .= "\n /blade#set__<code>__<setField> <serValue>";
return $tmp;
}
// 有第三参数说明是findSet模式
if (isset($aParam["aOption"][3])) {
$sWhereField = $aParam["aOption"][1] ?? false;
$sWhereValue = $aParam["aOption"][2] ?? false;
$sSetField = $aParam["aOption"][3] ?? false;
$sMod = "findSet";
} else {
$sWhereField = "code";
$sWhereValue = $aParam["aOption"][1] ?? false;
$sSetField = $aParam["aOption"][2] ?? false;
$sMod = "set";
}
if (!$sWhereField) {
return "需要whereField";
}
if (!$sWhereValue) {
return "需要whereValue";
}
if (!$sSetField) {
return "需要setValue";
}
$oBlade = ModelBlade::where($sWhereField, $sWhereValue)->get();
if ($oBlade->isEmpty()) {
return "没找到这个blade";
}
$i = 0;
foreach ($oBlade as $oBladeRow) {
$oBladeRow->$sSetField = $sSetValue;
$oBladeRow->save();
$i++;
}
if ($i == 1) {
$aParam["aOption"][1] = "code";
$aParam["aArg"][1] = $oBladeRow->code;
return $this->find($aParam);
}
return "影响".$i."条数据";
}
}

View File

@ -6,6 +6,7 @@ namespace App\Services\TG\Hook\Mod;
//use App\Services\TomTool\Http;
//use App\Models\BladeJctj as ModelBladeJctj;
use App\Models\Me as ModelMe;
use App\Models\Option as ModelOption;
class DDT extends Base {
@ -13,15 +14,16 @@ class DDT extends Base {
public $sPrimaryKey = "id";
public $iStrMaxLen = 50;
public $aStrField = [];
public $sMe;
public $sThisName;
public function __construct($oModelSelf)
public function __construct($oModelSelf = false)
{
$this->_setModel($oModelSelf);
}
//// 定义系列
public function _setStrMaxLen($iStrMaxLen)
{
$this->iStrMaxLen = $iStrMaxLen;
@ -32,11 +34,130 @@ class DDT extends Base {
$this->aStrField = $aStrField;
}
public function _setMe($sMe)
public function _setThisName($sThisName)
{
$this->sMe = $sMe;
$this->sThisName = $sThisName;
}
public function _setModel($oModelSelf)
{
$this->oModelSelf = $oModelSelf;
}
public function _setPrimaryKey($key)
{
$this->sPrimaryKey = $key;
}
//// 定义系列 end
//// option 系列
public function option($aParam)
{
$aOption = ModelOption::_list($this->sThisName);
return $this->toJson($aOption);
}
public function optionAdd($aParam)
{
$k = $aParam["aArg"][1] ?? false;
$v = $aParam["aArg"][2] ?? false;
if ($k == "?") {
return "#optionAdd {k} {v}";
}
if (!$k) {
return "需要k";
}
if (!$v) {
return "需要v";
}
$oOption = new ModelOption();
$oOption->this_name = $this->sThisName;
$oOption->k = $k;
$oOption->v = $v;
$oOption->save();
return $this->toJson(ModelOption::_filter($oOption));
}
public function optionSet($aParam)
{
$k = $aParam["aOption"][1] ?? false;
$v = $aParam["aArg"][1] ?? false;
if ($v == "?") {
return "#optionSet__{k} {v}";
}
if (!$k) {
return "需要k";
}
if (!$v) {
return "需要v";
}
$oOption = ModelOption::where("this_name", $this->sThisName)->where("k", $k)->first();
if (!$oOption) {
return "没找到这个";
}
$oOption->v = $v;
$oOption->save();
return $this->toJson(ModelOption::_filter($oOption));
}
public function optionDel($aParam)
{
$k = $aParam["aArg"][1] ?? false;
$is_done = $aParam["is_done"] ?? false;
if ($k == "?") {
return "#optionDel {k}";
}
if (!$k) {
return "需要k";
}
$oOption = ModelOption::where("this_name", $this->sThisName)->where("k", $k)->first();
if (!$oOption) {
return "没找到这个";
}
if ($is_done === false) {
$sMsg = "匹配以下确认用optionDelDone()。";
$sOption = $this->toJson($oOption);
return $sMsg."\n\n".$sOption;
} else if ($is_done === true) {
$r = $oOption->delete();
return $r;
}
}
public function optionDelDone($aParam)
{
$aParam["is_done"] = true;
return $this->optionDel($aParam);
}
//// option 系列 end
//// 辅助系列
private function filterList($oSelfList)
{
foreach ($oSelfList as &$oSelfListRow) {
@ -67,10 +188,16 @@ class DDT extends Base {
return $str;
}
//// 辅助系列 end
//// me系列
public function me()
{
$oMe = ModelMe::where("class", $this->sMe)->get();
$oMe = ModelMe::where("class", $this->sThisName)->get();
if ($oMe->isEmpty()) {
return "";
}
return $this->meToStr_list($oMe);
}
@ -89,7 +216,7 @@ class DDT extends Base {
}
$oMe = new ModelMe();
$oMe->class = $this->sMe;
$oMe->class = $this->sThisName;
$oMe->rag = $sRag;
$oMe->save();
@ -184,6 +311,7 @@ class DDT extends Base {
return "删除".$i."条数据";
}
}
//// me系列 end
private function filterRow($oSelfRow)
{
@ -205,16 +333,6 @@ class DDT extends Base {
return $input;
}
public function _setModel($oModelSelf)
{
$this->oModelSelf = $oModelSelf;
}
public function _setPrimaryKey($key)
{
$this->sPrimaryKey = $key;
}
public function list()
{
@ -434,7 +552,9 @@ class DDT extends Base {
// tomd($sTable, 1);
// $columns = \DB::select("SHOW FULL COLUMNS FROM blade");
$columns = \DB::select("SHOW CREATE TABLE `{$sTable}`");
tomd($columns[0]->{"Create Table"}, 1);
return $this->toJson($columns[0]->{"Create Table"});
// tomd($columns[0]->{"Create Table"}, 1);
}
}

View File

@ -0,0 +1,44 @@
<?php
namespace App\Services\TG\Hook\Mod;
//use App\Models\Article as ModelArticle;
class Db extends Base {
public function sql($aParam)
{
if ($aParam["aArg"][1] == "?") {
return "/db#sql {value}";
}
$aValue = $aParam["aArg"];
$sValue = implode(" ", $aValue);
$r = \DB::statement($sValue);
return $r;
}
public function me()
{
$str = "
添加字段ALTER TABLE `ship` ADD `good_test` TEXT DEFAULT NULL AFTER `api_huodong`
删除字段ALTER TABLE `ship` DROP COLUMN `good_test`
修改字段ALTER TABLE `ship` MODIFY `good_test` VARCHAR(255) DEFAULT NULL
";
return $str;
}
public function showCreateTable($aParam)
{
$sValue = $aParam["aArg"][1] ?? false;
$columns = \DB::select("SHOW CREATE TABLE `{$sValue}`");
return $columns[0]->{"Create Table"};
}
}

View File

@ -16,7 +16,7 @@ class Jctj extends Base {
$this->oDDT = new DDT(new ModelBladeJctj());
$this->oDDT->_setPrimaryKey("id"); // 可选默认id
$this->oDDT->_setStrField(["content"]); // 可选,指定长文本字段
$this->oDDT->_setMe("jctj"); // 必须me用正常就是类名只不过后期没准改名所以就这里写死
$this->oDDT->_setThisName("jctj"); // 必须me用正常就是类名只不过后期没准改名所以就这里写死
}

View File

@ -16,6 +16,7 @@ class JctjOption extends Base {
$this->aUpdate = $aUpdate;
$this->oDDT = new DDT(new ModelBladeJctjOption());
$this->oDDT->_setPrimaryKey("k");
$this->oDDT->_setThisName("jctj_option");
// $this->oDDT->_setStrField(["content"]);
}

View File

@ -0,0 +1,231 @@
<?php
namespace App\Services\TG\Hook\Mod;
//use App\Models\BladeJctj as ModelBladeJctj;
use App\Services\TG\Hook\Mod\DDT;
use App\Models\option as ModelOption;
class Upload extends Base {
private $oDDT;
public function __construct($aUpdate)
{
$this->oDDT = new DDT();
$this->oDDT->_setPrimaryKey("id"); // 可选默认id
// $this->oDDT->_setStrField(["content"]); // 可选,指定长文本字段
$this->oDDT->_setThisName("upload"); // 必须me用正常就是类名只不过后期没准改名所以就这里写死
}
public function __call($sName, $aArg)
{
return $this->oDDT->$sName($aArg[0]);
}
public function limit($aParam)
{
$iSkip = $aParam["aArg"][1] ?? 0;
$iTake = $aParam["aArg"][2] ?? 0;
$sLike = $aParam["like"] ?? '';
$isDel = $aParam["is_del"] ?? false;
if ($iSkip == "?") {
return "#limit {skip} {take}";
}
if (!$iTake) {
$iTake = ModelOption::_hit("upload", "limit");
}
// if (!$iSkip) {
// return "需要skip";
// }
if (!$iTake) {
return "需要take";
}
$t = $this->getFileList($iSkip, $iTake, $sLike, $isDel);
return $t;
}
public function page($aParam)
{
$iPage = $aParam["aArg"][1] ?? 1;
$sLike = $aParam["like"] ?? '';
if ($iPage == "?") {
return "#page {page:defaut=1}";
}
$iLimit = ModelOption::_hit("upload", "limit") ?? 0;
if (!$iLimit) {
return "需要option里的limit值";
}
$iPageTrue = $iPage - 1;
$iSkip = $iPageTrue * $iLimit;
$aParam["aArg"][1] = $iSkip;
$aParam["aArg"][2] = $iLimit;
return $this->limit($aParam);
}
public function like($aParam)
{
$iPage = $aParam["aOption"][1] ?? 1;
$sLike = $aParam["aArg"][1] ?? false;
// $is_del = $aParam
if ($sLike == "?") {
return "#like {like}";
}
if (!$sLike) {
return "需要like";
}
$aParam["like"] = $sLike;
$aParam["aArg"][1] = $iPage;
$aParam["aOption"] = [];
return $this->page($aParam);
}
public function list($aParam)
{
return $this->page($aParam);
}
public function del($aParam)
{
$sName = $aParam["aArg"][1] ?? false;
if ($sName == "?") {
return "#del {name}";
}
if (!$sName) {
return "需要name";
}
$filePath = 'upload/'.$sName; // 替换为你要删除的文件路径
if (file_exists($filePath)) {
if (unlink($filePath)) {
return "文件已成功删除。";
} else {
return "删除文件时出错。";
}
} else {
return "文件不存在。";
}
}
public function show($aParam)
{
$sName = $aParam["aArg"][1] ?? false;
if ($sName == "?") {
return "#show {name}";
}
if (!$sName) {
return "需要name";
}
$str = "";
$str .= $sName."\n\n";
$str .= "<img src='/upload/".$sName."'>";
return $str;
}
public function likeDel($aParam)
{
$aParam["is_del"] = true;
return $this->like($aParam);
}
private function getFileList($skip = 0, $take = 10, $searchTerm = '', $is_del = false) // 添加 is_del 参数
{
$directory = 'upload';
if (is_dir($directory)) {
$str = "";
$str .= "<table>";
$str .= "<tr><th>NO</th><th>文件名</th><th>预览</th></tr>"; // 添加表头
$files = scandir($directory);
$count = 0; // 计数器
$id = 1; // ID 从1开始
$countDel = 0;
foreach ($files as $file) {
// 排除当前目录(.)和上级目录(..
if ($file !== '.' && $file !== '..') {
// 如果提供了搜索关键字,检查文件名是否包含该关键字
if ($searchTerm && stripos($file, $searchTerm) === false) {
continue; // 不包含关键字则跳过
}
// 如果 is_del 为 true删除匹配的文件
if ($is_del) {
$filePath = $directory . '/' . $file;
if (file_exists($filePath)) {
unlink($filePath); // 删除文件
$countDel++;
}
continue; // 删除后跳过当前循环
}
// 跳过指定数量的文件
if ($count < $skip) {
$count++;
continue; // 跳过当前循环
}
// 检查是否超过取的限制
if ($count >= $skip + $take) {
break; // 超过限制则退出循环
}
$str .= "<tr>";
$str .= "<td>".$id."</td>"; // 输出 ID
$str .= "<td>".$file."</td>";
$str .= "<td><img height='50px' src='./upload/".$file."'></td>";
$str .= "</tr>";
$count++; // 增加计数
$id++; // 增加 ID
}
}
$str .= "</table>";
if ($is_del === true) {
return $countDel;
} else {
return $str;
}
} else {
return "目录不存在。";
}
}
}

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

View File

@ -19,7 +19,7 @@ pre {
}
.cmd_text {
width:380px;
width:500px;
// font-size:16px;
//background-color:#222;
// border:1px solid cyan;
@ -185,24 +185,20 @@ a{
<div class="menu_top">
<a href="/cmd/image/upload">图片上传</a>
</div>
<table class="cmd_table">
<table id="cmd_table" class="cmd_table">
<tr>
<td>
<input class="cmd_user cmd_input cmd_enter" id="cmd_user" value="tom">
<input class="cmd_site cmd_input cmd_enter" id="cmd_site" value="master">
<input class="cmd_hook cmd_input cmd_enter" id="cmd_hook" value="">
<input class="cmd_user cmd_input" id="cmd_user" value="tom">
<input class="cmd_site cmd_input" id="cmd_site" value="master">
<input class="cmd_hook cmd_input" id="cmd_hook" value="">
<input id="cmd_option" class="cmd_option cmd_input">
</td>
</tr>
<tr>
<td>
<input id="cmd_text" class="cmd_text cmd_input cmd_enter">
<input id="cmd_option" class="cmd_option cmd_input">
<!--
<button><i class="fa fa-plus"></i> 添加</button>
<input type="button" value="普通按钮">
-->
<input id="cmd_text" name="cmd_text" class="cmd_text cmd_input cmd_enter">
</td>
<tr>
</tr>
</table>
@ -250,7 +246,8 @@ a{
<script>
$(document).ready(function(){
$('#cmd_text').focus();
$('input[name="cmd_text"]').first().focus();
bind();
function toggleArea(type)
{
@ -283,11 +280,23 @@ $(document).ready(function(){
$("#cmd_r").show();
}
if (type == "+") {
var cmd_text_clone = $("#cmd_text").clone();
cmd_text_clone.val('');
cmd_text_clone.attr('id', 'cmd_text_' + Date.now());
$("#cmd_table").append("<tr class='clone'><td></td></tr>");
$("#cmd_table tr:last td").append(cmd_text_clone);
bind();
}
if (type == "-") {
$("#cmd_table tbody tr.clone:last").remove();
}
}
function submit(enterType)
function submit(input, enterType)
{
var value = $("#cmd_text").val();
var value = input.val();
var site = $("#cmd_site").val();
var hook = $("#cmd_hook").val();
var area = $("#cmd_area").val();
@ -362,14 +371,18 @@ $(document).ready(function(){
});
$('.cmd_enter').keypress(function(e){
if(e.which == 13){ // 检测回车键
toggleArea($("#cmd_option").val());
submit("input");
}
});
function bind() {
$('.cmd_enter').keypress(function(e){
if(e.which == 13){ // 检测回车键
//toggleArea($("#cmd_option").val());
submit($(this), "input");
}
});
}
});