aardio 文档

aardio 范例: CURL 转 aardio 代码

请参考 curl 转 inet.http | 基于 string.curlParse

/*
请参考 curl 转 inet.http: https://www.aardio.com/zh-cn/doc/example/Network/inet/curlParse.html
基于 string.curlParse: https://www.aardio.com/zh-cn/doc/library-reference/string/curlParse.html
*/
import win.ui;
import win.ui.simpleWindow;
import win.ui.tooltip;
import fonts.fontAwesome;
import win.clip;
import web.form.simpleMarkdown;
import web.rest.curlParse;
/*DSG{{*/
var winform = win.form(text="CURL 转 aardio 代码";right=1019;bottom=619;bgcolor=0xFFFFFF;border="none")
winform.add(
btnClear={cls="plus";text="清空";left=120;top=574;right=205;bottom=607;align="left";color=0x666666;db=1;dl=1;font=LOGFONT(h=-13);iconStyle={align="left";font=LOGFONT(h=-14;name='FontAwesome');padding={left=13}};iconText='\uF12D';notify=1;textPadding={left=38};z=8};
btnConvert={cls="plus";text="转换代码";left=695;top=572;right=823;bottom=605;align="left";bgcolor=0xF65C8B;color=0xFFFFFF;db=1;dr=1;font=LOGFONT(h=-14;weight=600);iconStyle={align="left";font=LOGFONT(h=-16;name='FontAwesome');padding={left=18}};iconText='\uF061';notify=1;textPadding={left=42};z=9};
btnCopy={cls="plus";text="复制代码";left=863;top=572;right=983;bottom=605;align="left";bgcolor=0x81B910;color=0xFFFFFF;db=1;dr=1;font=LOGFONT(h=-13;weight=600);iconStyle={align="left";font=LOGFONT(h=-14;name='FontAwesome');padding={left=15}};iconText='\uF0C5';notify=1;textPadding={left=42};z=10};
btnPaste={cls="plus";text="粘贴";left=30;top=574;right=115;bottom=607;align="left";color=0x666666;db=1;dl=1;font=LOGFONT(h=-13);iconStyle={align="left";font=LOGFONT(h=-14;name='FontAwesome');padding={left=13}};iconText='\uF0EA';notify=1;textPadding={left=38};z=7};
chkCeanHeaders={cls="plus";text="精简请求头";left=415;top=574;right=540;bottom=605;align="left";db=1;dl=1;font=LOGFONT(h=-15);iconStyle={align="left";font=LOGFONT(h=-15;name='FontAwesome')};iconText='\uF0C8 ';notify=1;textPadding={left=24};z=14};
chkUserAgent={cls="plus";text="User-Agent";left=288;top=574;right=407;bottom=605;align="left";db=1;dl=1;font=LOGFONT(h=-15);iconStyle={align="left";font=LOGFONT(h=-15;name='FontAwesome')};iconText='\uF0C8 ';notify=1;textPadding={left=24};z=13};
customOutput={cls="custom";left=474;top=62;right=990;bottom=558;db=1;dl=1;dr=1;dt=1;z=6};
editInput={cls="richedit";left=30;top=62;right=463;bottom=558;db=1;dl=1;dt=1;edge=1;hscroll=1;multiline=1;vscroll=1;z=5};
inputPanel={cls="bkplus";left=15;top=62;right=462;bottom=558;bgcolor=0xFAFAFA;border=1;db=1;dl=1;dt=1;z=4};
lnkDocument={cls="syslink";text="文档指南";left=600;top=578;right=652;bottom=604;align="center";center=1;db=1;dr=1;transparent=1;z=12};
splitter={cls="splitter";left=466;top=62;right=471;bottom=558;db=1;dl=1;dt=1;frame=1;z=11};
titleBar={cls="bkplus";left=0;top=0;right=1020;bottom=52;bgcolor=0xCF5C8B;dl=1;dr=1;dt=1;z=1};
titleIcon={cls="bkplus";text='\uF120';left=18;top=12;right=48;bottom=42;color=0xFFFFFF;dl=1;dt=1;font=LOGFONT(h=-22;name='FontAwesome');z=2};
titleText={cls="bkplus";text="CURL(bash) 转 aardio 代码(web.rest)";left=52;top=12;right=401;bottom=42;align="left";color=0xFFFFFF;dl=1;dt=1;font=LOGFONT(h=-18;weight=600);z=3}
)
/*}}*/

// 初始化 Markdown 视图
var wb = web.form.simpleMarkdown(winform.customOutput);
var lastGeneratedCode = ""; // 记录最后生成的代码

// 转换逻辑
winform.btnConvert.oncommand = function(id,event){
    var curl = winform.editInput.text;
    if(!#string.trim(curl)){
        winform.msgbox("请先输入 CURL 命令", "提示");
        winform.editInput.setFocus()
        return;
    }

    // 禁用按钮并显示动画
    winform.btnConvert.disabledText = {'\uF254';'\uF251';'\uF252';'\uF253';'\uF250'}

    wb.setMarkdown("")
    wb.showLoading('正在转换 cURL 命令为 aardio 代码 ...');

    // 异步解析(避免界面卡死)
    thread.invoke( 
        function(winform,wb,curl){
            import web.rest.curlParse;
            var code, err = web.rest.curlParse(curl,{
                userAgent = winform.chkUserAgent.checked;
                cleanHeaders = winform.chkCeanHeaders.checked;
            });

            winform.btnConvert.disabledText = null;
            if(!code){  
                wb.showError(err : "转换失败,请检查格式");
                return;
            }

            wb.writeDelta('```aardio\n')
            winform.lastGeneratedCode = code;

            for(line in string.lines(code)){  
               wb.writeDelta(line+'\n');  
            }
            wb.writeDelta( '\n```');
            wb.writeDelta(null)

        },winform,wb,curl
    )
}

// 粘贴
winform.btnPaste.oncommand = function(id,event){
    var text = win.clip.read();
    if(#text){
        winform.editInput.text = text;
        winform.editInput.setFocus();
    }
}

// 清空
winform.btnClear.oncommand = function(id,event){
    winform.editInput.text = "";
    wb.write("");
    lastGeneratedCode = "";
    winform.editInput.setFocus();
}

// 复制
winform.btnCopy.oncommand = function(id,event){
    if(!#winform.lastGeneratedCode){
        winform.msgbox("没有可复制的代码", "提示");
        return;
    }

    win.clip.write(winform.lastGeneratedCode);

    var originalText = winform.btnCopy.text;
    var originalIcon = winform.btnCopy.iconText;
    winform.btnCopy.text = "已复制";
    winform.btnCopy.iconText = '\uF00C';

    winform.setTimeout(function(){
        winform.btnCopy.text = originalText;
        winform.btnCopy.iconText = originalIcon;
    }, 1000)
}

// 快捷键 
winform.editInput.onOk = function(ctrl,alt,shift){ 
    if(ctrl){
        winform.btnConvert.oncommand();
        return true;
    }   
}

// 分割条关联
winform.splitter.split(winform.editInput, winform.customOutput);

// 按钮皮肤设置(使用 0xAARRGGBB 格式颜色)
winform.btnConvert.skin({
    background={
        default=0xFFCF5C8B;
        hover=0xFFE06C9B;
        active=0xFFBF4C7B;
        disabled=0xFFCCCCCC
    };
    color={default=0xFFFFFFFF};
    border={default={radius=4}}
})

var graySkin = {
    background={
        default=0xFFF2F2F2;
        hover=0xFFE5E5E5;
        active=0xFFD9D9D9
    };
    color={default=0xFF666666};
    border={radius=4;color=0xFFDBDBDB;width=1}
}
winform.btnPaste.skin(graySkin);
winform.btnClear.skin(graySkin);

winform.btnCopy.skin({
    background={
        default=0xFF81B910;
        hover=0xFF91C920;
        active=0xFF71A900
    };
    color={default=0xFFFFFFFF};
    border={default={radius=4}}
})

wb.write("### 操作步骤
👈 请在左侧粘贴 **cURL(bash)** 命令,点击 **转换代码** 或按 `Ctrl + Enter`。

### 快捷转换
1. 复制 **cURL(base)** 命令
2. aardio 编辑器右键菜单点 <mark>粘贴并更正</mark> 或按 `Ctrl+Shift+V`。  
也会自动转换 `curl` 命令为 aardio 代码。

### AI 转换
1. 打开 `问 AI` 助手
2. 直接发送 **cURL(base)** 命令 

> 示例 <a href='javascript:void(0)' onclick='javascript:external.post()'>» 发送 POST 请求</a> <a href='javascript:void(0)' onclick='javascript:external.get()'>» 发送 GET 请求</a>  <a href='javascript:void(0)' onclick='javascript:external.cookies()'>» 指定 Cookies</a> 
");

wb.external = {
    get = function(){
        winform.editInput.text = /*
curl "https://httpbin.org/anything/api/v1/users?status=active" \
  -H "Authorization: Bearer sk-my-secret-token" \
  -H "Accept: application/json"
        */
    };
    post = function(){
        winform.editInput.text = /*
curl -X POST "https://httpbin.org/anything/chat/completions" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "gpt-4",
    "messages": [
      {"role": "system", "content": "You are a coding assistant."},
      {"role": "user", "content": "Hello aardio!"}
    ],
    "temperature": 0.7
  }'
        */
    } 
    cookies = function(){
        winform.editInput.text = /*
curl -H "Accept: application/json" \
  -b "name=value; name2=value2" https://httpbin.org/cookies
        */
    };
}

win.ui.simpleWindow(winform);
winform.show();

var text = win.clip.read();
if(web.rest.curlParse.test(text)){
    winform.editInput.text = text;
}
else{
    winform.editInput.setFocus()
}

winform.lnkDocument.link =  "https://www.aardio.com/zh-cn/doc/library-guide/std/web/rest/client.html";
winform.lnkDocument.onHyperlinkClick = function(nmSysLink,url,id,index){
    import ide;
    ide.openDocument("https://www.aardio.com/zh-cn/doc/library-guide/std/web/rest/client.html")
}

winform.chkCeanHeaders.checked = true;
winform.chkCeanHeaders.skin({
    color={
        active=0xFF00FF00;
        default=0xFF000000;
        disabled=0xEE666666;
        hover=0xFFFF0000        
    };
    checked={
        iconText='\uF14A'       
    }
})

winform.chkUserAgent.skin({
    color={
        active=0xFF00FF00;
        default=0xFF000000;
        disabled=0xEE666666;
        hover=0xFFFF0000        
    };
    checked={
        iconText='\uF14A'       
    }
})

win.loopMessage();
Markdown 格式