上一主题 下一主题
ScriptCat,新一代的脚本管理器脚本站,与全世界分享你的用户脚本油猴脚本开发指南教程目录
12下一页
返回列表 发新帖

脚本猫UI库API设计提案

[复制链接]
  • TA的每日心情
    开心
    2024-3-13 10:14
  • 签到天数: 211 天

    [LV.7]常住居民III

    295

    主题

    3919

    回帖

    3838

    积分

    管理员

    积分
    3838

    管理员荣誉开发者油中2周年生态建设者喜迎中秋油中3周年挑战者 lv2

    发表于 2023-6-20 15:51:20 | 显示全部楼层 | 阅读模式

    起因

    image.png

    开发者群中@steven026 一直提起此事,在群中讨论许久,最终决定做一个初版,然后交由@steven026 进行维护

    API设计

    本次主要想看看大家关于这个API的设计想法,库使用@require引用,并不内置脚本猫扩展。

    下面是API设计,关于其它想法可以在后面提出

    // ==UserScript==
    // @name         脚本猫UI库
    // @namespace    https://bbs.tampermonkey.net.cn/
    // @version      0.1.0
    // @description  基于Arco做的UI库, 用于快速开发脚本的UI界面
    // @author       You
    // @match        https://bbs.tampermonkey.net.cn/
    // ==/UserScript==
    
    const data = CAT_UI.data({});
    
    CAT_UI.create({
        home: "/home",
        routes: [{
            // page1
            path: "/home",
            render() {
                return [
                    CAT_UI.Text("脚本猫的UI框架"),
                    CAT_UI.Button("我是按钮", () => {
                        alert("我被点击了,你输入了: " + data.input);
                    }),
                    CAT_UI.Input(data.input),
                ];
            },
        }],
    });
    
    CAT_UI.create({
        render() {
            return [
                CAT_UI.Text("脚本猫的UI框架"),
                CAT_UI.Button("我是按钮", () => {
                    alert("我被点击了,你输入了: " + data.input);
                }),
                CAT_UI.Input(data.input),
            ];
        },
    });
    
    CAT_UI.create({
        home: "/home",
        routes: [{
            // page1
            path: "/home",
            render: [
                { type: "text", text: "脚本猫的UI框架" },
                { type: "button", text: "我是按钮", click: () => { alert("我被点击了,你输入了: " + data.input) } },
                { type: "input", value: data.input },
            ]
        }],
    });
    
    CAT_UI.create({
        render: [
            { type: "text", text: "脚本猫的UI框架" },
            { type: "button", text: "我是按钮", click: () => { alert("我被点击了,你输入了: " + data.input) } },
            { type: "input", value: data.input },
        ]
    });
    
    已有1人评分好评 油猫币 理由
    潘钜森 + 1 + 1 ggnb!

    查看全部评分 总评分:好评 +1  油猫币 +1 

    上不慕古,下不肖俗。为疏为懒,不敢为狂。为拙为愚,不敢为恶。/ 微信公众号:一之哥哥
  • TA的每日心情
    奋斗
    2023-6-12 15:07
  • 签到天数: 6 天

    [LV.2]偶尔看看I

    7

    主题

    94

    回帖

    155

    积分

    荣誉开发者

    积分
    155

    荣誉开发者油中2周年生态建设者喜迎中秋

    发表于 2023-6-20 15:52:48 | 显示全部楼层
    我支持道哥
    回复

    使用道具 举报

  • TA的每日心情
    慵懒
    10 小时前
  • 签到天数: 640 天

    [LV.9]以坛为家II

    30

    主题

    536

    回帖

    1413

    积分

    荣誉开发者

    积分
    1413

    荣誉开发者新人进步奖油中2周年生态建设者新人报道挑战者 lv2油中3周年喜迎中秋

    发表于 2023-6-20 15:52:52 | 显示全部楼层
    我不是 我没有 别瞎说.jpg
    回复

    使用道具 举报

  • TA的每日心情
    开心
    2023-2-28 23:59
  • 签到天数: 191 天

    [LV.7]常住居民III

    637

    主题

    5214

    回帖

    6089

    积分

    管理员

    非物质文化遗产社会摇传承人

    积分
    6089

    荣誉开发者管理员油中2周年生态建设者喜迎中秋

    发表于 2023-6-20 15:53:27 | 显示全部楼层
    我觉得短期不用特别考虑路由的问题
    先搓出来一个最简的render
    混的人。
    ------------------------------------------
    進撃!永遠の帝国の破壊虎---李恒道

    入驻了爱发电https://afdian.net/a/lihengdao666
    个人宣言:この世界で私に胜てる人とコードはまだ生まれていません。死ぬのが怖くなければ来てください。
    回复

    使用道具 举报

  • TA的每日心情
    开心
    2024-3-13 10:14
  • 签到天数: 211 天

    [LV.7]常住居民III

    295

    主题

    3919

    回帖

    3838

    积分

    管理员

    积分
    3838

    管理员荣誉开发者油中2周年生态建设者喜迎中秋油中3周年挑战者 lv2

    发表于 2023-6-20 15:53:57 | 显示全部楼层
    李恒道 发表于 2023-6-20 15:53
    我觉得短期不用特别考虑路由的问题
    先搓出来一个最简的render

    嗯,是的,初版不考虑路由
    上不慕古,下不肖俗。为疏为懒,不敢为狂。为拙为愚,不敢为恶。/ 微信公众号:一之哥哥
    回复

    使用道具 举报

  • TA的每日心情
    开心
    2024-2-27 14:20
  • 签到天数: 88 天

    [LV.6]常住居民II

    22

    主题

    97

    回帖

    306

    积分

    荣誉开发者

    积分
    306

    油中2周年新人报道荣誉开发者生态建设者

    发表于 2023-6-20 18:51:28 | 显示全部楼层
    button有计划进入支持promise吗
    回复

    使用道具 举报

  • TA的每日心情
    无聊
    2023-11-2 17:37
  • 签到天数: 275 天

    [LV.8]以坛为家I

    114

    主题

    453

    回帖

    974

    积分

    荣誉开发者

    积分
    974

    荣誉开发者油中2周年卓越贡献生态建设者

    发表于 2023-6-20 18:54:34 | 显示全部楼层
    我同意!!!!
    接脚本定制
    I frequently record, because want to leave something.
    回复

    使用道具 举报

  • TA的每日心情
    慵懒
    2022-3-8 11:41
  • 签到天数: 2 天

    [LV.1]初来乍到

    22

    主题

    862

    回帖

    1361

    积分

    荣誉开发者

    积分
    1361

    荣誉开发者卓越贡献油中2周年生态建设者油中3周年挑战者 lv2

    发表于 2023-6-20 21:18:27 | 显示全部楼层
    链式调用怎么样?也不难设计:
    1. CAT_UI.create({
    2.     render() {
    3.         return CAT_UI
    4.             .Text("脚本猫的UI框架")
    5.             .Button("我是按钮", () => {
    6.                 alert("我被点击了。");
    7.             })
    8.     }
    9. });
    复制代码
    1. var CAT_UI = {
    2.     create() {},
    3.     Text(...args) {
    4.         const text = createElement('text', ...args);
    5.         return new CAT_NODELIST(text);
    6.     },
    7.     Button(...args) {
    8.         const button = createElement('button', ...args);
    9.         return new CAT_NODELIST(button);
    10.     },
    11. };

    12. class CAT_NODELIST {
    13.     constructor(node) {
    14.         this.nodeList = [node];
    15.     }
    16.     Text(...args) {
    17.         const text = createElement('text', ...args);
    18.         this.nodeList.push(text);
    19.         return this;
    20.     }
    21.     Button(...args) {
    22.         const button = createElement('button', ...args);
    23.         this.nodeList.push(button);
    24.         return this;
    25.     }
    26. }
    复制代码
    回复

    使用道具 举报

  • TA的每日心情
    开心
    2024-3-13 10:14
  • 签到天数: 211 天

    [LV.7]常住居民III

    295

    主题

    3919

    回帖

    3838

    积分

    管理员

    积分
    3838

    管理员荣誉开发者油中2周年生态建设者喜迎中秋油中3周年挑战者 lv2

    发表于 2023-6-21 10:19:01 | 显示全部楼层
    cxxjackie 发表于 2023-6-20 21:18
    链式调用怎么样?也不难设计:

    看起来也不错,都差不太多,本质上感觉都是同一种设计思路

    不过链式的这样好像有点坑

    例如像有多层的情况,这会按照调用顺序,直接加到后面了:

    1. CAT_UI.create({
    2.     render() {
    3.         return CAT_UI
    4.             .Text("脚本猫的UI框架")
    5.             .Button("我是按钮", () => {
    6.                 alert("我被点击了。");
    7.             })
    8.             .Space(
    9.                 CAT_UI
    10.                     .Text("第二层")
    11.                     .Button("按钮")
    12.             );
    13.     }
    14. });
    复制代码

    点评

    对于后面打算的路由设计(多页面)也不好处理  发表于 2023-6-21 10:19
    上不慕古,下不肖俗。为疏为懒,不敢为狂。为拙为愚,不敢为恶。/ 微信公众号:一之哥哥
    回复

    使用道具 举报

  • TA的每日心情
    慵懒
    2022-3-8 11:41
  • 签到天数: 2 天

    [LV.1]初来乍到

    22

    主题

    862

    回帖

    1361

    积分

    荣誉开发者

    积分
    1361

    荣誉开发者卓越贡献油中2周年生态建设者油中3周年挑战者 lv2

    发表于 2023-6-21 22:44:07 | 显示全部楼层
    王一之 发表于 2023-6-21 10:19
    看起来也不错,都差不太多,本质上感觉都是同一种设计思路

    不过链式的这样好像有点坑

    应该不会吧,嵌套的都是新的CAT_NODELIST实例,不是同一个,最多再加个处理,当参数是CAT_NODELIST时嵌套成多维数组,最后再一起渲染。感觉这个跟你的第一种写法应该是一致的,只是我不太喜欢写一堆CAT_UI的做法,能省则省。
    回复

    使用道具 举报

    发表回复

    本版积分规则

    快速回复 返回顶部 返回列表