Mapaler / EhTagTranslator

将e绅士页面TAG换成中文,最全数据库。
GNU General Public License v3.0
536 stars 60 forks source link

ETS新功能讨论 #23

Closed xioxin closed 5 years ago

xioxin commented 7 years ago

用的html5原生提示组件 chrome 支持中英文搜索 但是如果搜到的结果很多会比较卡 https://user-images.githubusercontent.com/5716100/30069114-65786c42-9225-11e7-8632-8b4eb53e04e0.png

firefox 只支持中文搜索 确定后英文进入搜素框 https://user-images.githubusercontent.com/5716100/30069288-f4dff2f6-9225-11e7-9786-488ba499e4af.png

你们可以体验一下

链接控制功能

开启注射器 #/ets-set-config?syringe=true 禁用注射器 #/ets-set-config?syringe=false

打开菜单 #/ets-open-menu 打开配置菜单 #/ets-open-option 重置设置 有提示 #/ets-reset-config 开始更新并保存(有UI) #/ets-auto-update

直接在控制台里执行 wikiUpdate() 可以直接执行更新 无UI

新功能V2 种子直接复制磁力链 image

xioxin commented 7 years ago

问题是结尾没有添加竖线 https://github.com/Mapaler/EhTagTranslator/wiki/parody/_compare/5cf66c44038cb431247a63b3bfde4dbd8f165a9a...0efd1c1f16a4e1afe3b99468021e653cded36ebe

OpportunityLiu commented 7 years ago

github 的 markdown 引擎纠错能力太强了

Mapaler commented 7 years ago

显示原文没用了

Mapaler commented 7 years ago

我觉得你的脚本还没算正式发布,就我们几个在测试,所以配置升级那段代码可以不需要的。

另外数据库分析,末尾是h的解析应该也不用吧,目前没人用这个吧,等下次重新整理的时候把wiki里那段话也删了。

Mapaler commented 7 years ago

有个问题想咨询一下,就是如果旧的设置是

{
  a:1,
  b:2,
  c:3,
}

然后我新增了功能

{
  a:1,
  b:2,
  c:3,
  d:4,
  e:5,
}

又需要保留原有设置的时候,你会怎么处理这个。

xioxin commented 7 years ago

简单啊

    var defaultConfig = {...};
    var etbConfig = GM_getValue('config');
    for(var i in defaultConfig){
        if(typeof etbConfig[i] === "undefined"){
            etbConfig[i] = defaultConfig[i];
        }
    }
Mapaler commented 7 years ago

这个想法不错,我现在一直用的 Object.assign ,你觉得哪种更好?

另外这种对于

{
  a:1,
  b:2,
  c:{
    d:1,
    e:[
      "aa",
      "bb",
    ],
  },
}

这种的就有些问题了。 我其实不是单独的一个设置对象,而是每个对象有一些方法,所以希望只把配置文件读入进来,但是不要覆盖掉子对象内的方法。

保存这个对象的时候,那些方法不会保存成字符串,重新加载用Object.assign就会把本来有方法的子对象用没有方法的对象给替换掉,于是我现在是一个一个配置的读的,超麻烦。

xioxin commented 7 years ago

没看明白

Mapaler commented 7 years ago

那么首先Object.assign代码要简化一些,有没有什么缺点?

xioxin commented 7 years ago

问题是 Object.assign 是浅拷贝 多层对象的时候

Mapaler commented 7 years ago

怎么是深拷贝?

我的代码目前是这样 image 15 其实我是想写成这样,就像那些官方的Array函数一样,最好还是mask[0]直接调用的就是mask.masklist[0],但是搞不来。

mask: {
    add: function(name, logic, content) {
        var mask = {
            name: name,
            logic: logic,
            content: content,
        };
        this.masklist.push(mask);
        return mask;
    },
    remove: function(index) {
        this.masklist.splice(index, 1);
    },
    masklist: [
        mask1,
        mask2,
        ...
    ],
},

后来因为储存到本地字符串对象变成只剩下masklist,没有了add与remove方法,所以我就只好改到了外面,好像还是有问题,所以我最后变成了每项设置都写一句读取。

xioxin commented 7 years ago

不考虑兼容的话 可以创建一个类 基于Array


    class maskHelper extends Array {
        constructor(...array) {
            super(...array);
        }
        add (name, logic, content) {
            var mask = {
                name: name,
                logic: logic,
                content: content,
            };
            this.push(mask);
            return mask;
        }
        remove(index) {
            return this.splice(index, 1);
        }
    }

    var mask = new maskHelper();
    mask.add('name','logic','content');
    console.log(mask[0]);
    //{name: "name", logic: "logic", content: "content"}

    //快速将一个数据 还原为maskHelper类
    var oldData = [
        {name: "name1", logic: "logic", content: "content"},
        {name: "name2", logic: "logic", content: "content"},
        {name: "name3", logic: "logic", content: "content"}
    ];
    //注意oldData前的三个点 意思是将数组拆分开 每个数组项 对应每个参数项传递
    // new Array(1,2,3,4) 等于 new Array(...[1,2,3,4])
    var mask2 = new maskHelper(...oldData);
    mask2.add('name4','logic','content');
    console.log(mask2);
 /*   [
        {
            "name": "name1",
            "logic": "logic",
            "content": "content"
        },
        {
            "name": "name2",
            "logic": "logic",
            "content": "content"
        },
        {
            "name": "name3",
            "logic": "logic",
            "content": "content"
        },
        {
            "name": "name4",
            "logic": "logic",
            "content": "content"
        }
    ]*/
xioxin commented 7 years ago

如果考虑兼容的话 可以直接给array添加方法

Mapaler commented 7 years ago

你用的这是ES6的?看不懂啊😂我还一直在研究Object.create()呢,没有原型这一块的入门教程,太难理解了。

Mapaler commented 7 years ago

一般火狐不支持的都是用的webkit前缀,Chrome上很多W3C代码必须加webkit前缀才能用

xioxin commented 7 years ago

问题出在过渡效果插件上 被沙盒影响 导致一些事件可能绑定不上 导致过渡不执行 框框也就不显示了

xioxin commented 7 years ago

原本打算用 https://material.angularjs.org/latest/demo/menu 组建做的 是不是很炫酷

Mapaler commented 7 years ago

开车,实用才是最重要的啦。你的代码全部用JS加载,本来就会卡一些,还搞些炫酷的东西,我家里的笔记本上就是幻灯片。那个框架那么多文件,比你自身的代码多多了,每个页面都加载完全没必要。 而且你还可以限制一下启用页面,比如查看大图的页面我有时会点开很多,所有页面都加载ETS没必要。

Mapaler commented 7 years ago

我觉得最好的体验是融入,虽然效果很棒,但是如果不是功能的需要而UI差太多的话,会破坏和谐感。 你的那个Tag介绍的UI就做的很和谐 image 1

我最开始做PUBD的时候也是尽量使用的网站原生CSS,UI很有融入感。 设置界面 后来重新写的模拟视窗UI,拖动起来就是卡卡的,不过颜色我还是贴近网站原生的。这个是因为以前在动漫东东做主题对视窗有很深的感情。 程序运行图

Mapaler commented 7 years ago

这个AngularJS Material的特效,完全可以做APP了,到时候WEB APP API出来了,完全可以直接JS开发APP了。现在也可以做一些不怎么需要本地内容的东西。不过手机上火狐比较卡。

Mapaler commented 7 years ago

对了,你的ETS代码的协议还没说是什么,GPL?Mozilla?

xioxin commented 7 years ago

项目现在是GPL 就GPL就可以 油猴子脚本本身不存在闭源的情况 我一般是使用 MIT

Mapaler commented 7 years ago

GPL仅限于我的ETB,Wiki应该用Wiki那种协议吧我不是很懂就没写。MIT也太开放了,现在国内的环境用MIT就是把自己放在了舆论的下风,别人可以随便盗用标榜原创。 https://www.ithome.com/html/it/324505.htm 这个事件的作者开始是Apache协议,发现被盗用后才临时改的协议(在微博上看到的)。

我的FastCopy-M就被无知之人说是盗用别人的呀,加了后门呀什么什么的,他还为了怼我自己跑去进行标准资源汉化,这种可烦了。

Mapaler commented 7 years ago

你有没有用过IndexedDB,用来储存大量的数据如何?TAG这么多有没有必要用这个? https://developer.mozilla.org/zh-CN/docs/Web/API/IndexedDB_API

xioxin commented 7 years ago

问题是跨域数据存储 你那里读取数据存在性能问题吗?

xioxin commented 7 years ago

EhTagSyringe Load Tags: 19.779052734375ms EhTagSyringe Infusion: 0.25390625ms 20ms 速度很快

Mapaler commented 7 years ago

LocalStorange没有遇到性能问题,我只是在想可不可以把TAG图片用数据库缓存下来,节省流量。LocalStorange有容量限制

Mapaler commented 7 years ago

其实最终目的是做一个osu!风格的网站主页,需要缓存大量歌曲。

xioxin commented 7 years ago

一般情况只需要将http头的缓存时间设置很长 实际缓存交给浏览器来管理 就行 自己管理更容易出岔子

xioxin commented 7 years ago

玩没玩过eratoho这种纯文本的小黄油 我有计划将这个软件的剧本文件 编译成js文件 让代码跑到浏览器里

Mapaler commented 7 years ago

没有,所以完全不知道你说的是什么

Mapaler commented 7 years ago

我说的那个歌曲播放器的话,是想做成用户可以自己上传歌曲这种类型的,所以需要本地储存。

Mapaler commented 7 years ago

image 1 JSON输出加了个统计

xioxin commented 7 years ago

哦那确实

Mapaler commented 7 years ago

https://www.bilibili.com/video/av8767076/ 我之前探究那个节拍到底是怎么做到的,一直不成功。

后来找到了原理后,又懒得进一步研究下去了

不会算法,不知道怎么算对数

xioxin commented 7 years ago

网页端的频谱分析我写过

Mapaler commented 7 years ago

我研究了游戏的原理,不仅仅是频谱,还有地图文件本身自带的BPM数。是这两个叠加的。但是怎么让这两个叠加的变动保持在某个范围,让饼的跳动变得很带感,就是需要研究的了。

Mapaler commented 7 years ago

一个无声的曲子,有BPM,饼也会规律的跳,一个曲子BPM超大(让其BPM相关的变化很慢),就是按照频谱来跳的,但是就是不知道怎么让频谱那种变化显示出来。有的时候频谱跳动很大,如果用这个作为变化分母,就会减小大部分中间段的差异。

xioxin commented 7 years ago

你打算上传osu的地图文件吗 那样还需要js解压zip

Mapaler commented 7 years ago

zip的库也有的,不过那个暂时不用考虑,最优先的肯定只是曲子mp3、背景jpg、BPM和高潮数据的地图,这三个文件就够了,先把这个完善了才行吧。

毕竟能不能看到带感的动画最是最关键的。

OpportunityLiu commented 7 years ago

弄个 GitHub badge 把统计显示在 readme 上如何

Mapaler commented 7 years ago

不知道那是啥,你会搞的话可以搞

Mapaler commented 6 years ago

image 2

xioxin commented 6 years ago

新功能! 种子下载列表直接复制磁力链 image

OpportunityLiu commented 6 years ago

这样生成的magnet真的能用吗

xioxin commented 6 years ago

可以啊 我以前一直都是这么用的 以前是 写的脚本读取我剪切板里的链接 获取40位16进制字符 拼接磁力链头 发送到远程下载器 用了一年了吧 当时偶然发现种子文件名就是磁力链的hash

OpportunityLiu commented 6 years ago

问题magnet依赖DHT,对于这种近PT的东西效果会很差的吧

OpportunityLiu commented 6 years ago

反正我用FDM是死活找不到tracker的

Mapaler commented 6 years ago

磁力本来就是种子的hash 值,但是只是文件名的hash值吗?不应该是种子文件本身的hash吗?

Mapaler commented 6 years ago

我觉得试验性功能最好另开一个脚本或者放在开发分支,不然出错后就会让整个脚本失效。

你新添加的功能都跟翻译tag几乎没有代码上的重合,让他们互相影响,其实是不明智的。 如果是我,我会选择开发成不同的脚本。这样需要关闭某个功能也更加方便。