维基百科讨论:HanAssist
添加话题外观
Dabao qian在话题“在其他wiki上使用”中的最新留言:21天前
HanAssist第四版
[编辑]- 下列討論已經關閉,請勿修改。如有任何意見,請在合適的討論頁提出,而非再次編輯本討論。
HanAssist是一个wgULS及类似函数的替代品。旧版本文档请参见Wikipedia:HanAssist。
仓库地址:https://github.com/diskdance/HanAssist
第四版API本体变化不大,主要是调用方式:
- 杜绝了污染全局空间的问题。原先API会暴露到全局空间(
mw.libs),现在采用了ResourceLoader的模块化设计。小工具需要先添加HanAssist的依赖,然后按照如下方式使用:用户脚本则需要动态加载:const { conv, convByVar, batchConv } = require('ext.gadget.HanAssist'); // 注意大小写 // 对应wgULS conv( { hans: '一天一苹果,医生远离我。', hant: '一天一蘋果,醫生遠離我。' } ); // 对应wgUVS convByVar( { hans: '一天一苹果,医生远离我。', hant: '一天一蘋果,醫生遠離我。' } ); // 批量处理 mw.messages.set( batchConv( { 'article': { hans: '条目', hant: '條目' }, 'category': { hans: '分类', hant: '分類' }, 'categories': { hans: '分类', hant: '分類' }, 'image': { hans: '文件', hant: '檔案' }, 'images': { hans: '文件', hant: '檔案' }, 'minute': '分', 'minutes': '分', 'second': '秒', 'seconds': '秒', 'week': '周', 'weeks': '周', 'search': { hans: '搜索', hant: '搜尋' }, 'SearchHint': { hans: '搜索包含$1的页面', hant: '搜尋包含$1的頁面' }, 'web': { hans: '站点', hant: '站點' }, } ) ); mw.msg( 'categories' ); mw.msg( 'SearchHint', 'Apple' );
其他的加载方式不保证可用。mw.loader.using( 'ext.gadget.HanAssist' ).then( ( require ) => { const { conv, convByVar } = require( 'ext.gadget.HanAssist' ); // 在此处使用 } );
- 函数采用更直观的命名方式。
- 现在在传入不合法的参数的时候会给出警告信息。
以上。--碟之舞📀💿 2023年7月26日 (三) 10:20 (UTC)
- 小工具已经部署到中文Beta Cluster,各位可以先试试效果。--碟之舞📀💿 2023年7月26日 (三) 10:22 (UTC)
- “其他的加载方式不保证可用。”意味着旧脚本需要维护更新?会有人来做吗。--YFdyh000(留言) 2023年7月26日 (三) 15:22 (UTC)
- 不是这个意思。--碟之舞📀💿 2023年7月27日 (四) 03:33 (UTC)
- (-)反对,使用v4的載入法將導致該腳本必須以非常糟糕的方式(技術細節:v4載入法必然需要將HanAssist注入ResourceLoader才能使用,變成如果要在無此小工具的站點載入將必須汙染ResourceLoader)才能被站外引用,這顯然不是一個合適的作法--SunAfterRain 2023年7月27日 (四) 15:15 (UTC)
- (+)支持--Taeas(留言) 2023年7月28日 (五) 05:36 (UTC)
- 上方所述的问题已经解决,如果没有问题的话能否开始公示?--碟之舞📀💿 2023年8月2日 (三) 13:21 (UTC)
- 我觉得可以。--Taeas(留言) 2023年8月3日 (四) 02:04 (UTC)
- 部署方案:
- 从中文维基百科测试集群处复制此小工具的源代码和小工具定义。
- 移除
site-lib中wgU*S的相关内容,由HanAssist接管,可参考测试集群配置。 - 将
ext.gadget.HanAssist添加为site-lib的依赖项。
公示7日,2023年8月11日 (五) 03:44 (UTC) 結束,抄送@Xiplus、@安忆- 以上。--碟之舞📀💿 2023年8月4日 (五) 03:43 (UTC)
- 本討論已關閉,請勿修改。如有任何意見,請在合適的討論頁提出,而非再次編輯本討論。
在其他wiki上使用
[编辑]有些wiki项目(例如中文维基教科书)仍然采用老旧的wgU*S作为脚本字词转换系统,如果在这些项目上按照文档中的用法直接跨站加载中文维基百科的HanAssist,则用户工具就会因为无法改写wgULS全局变量而报错退出。针对这种跨维基使用的脚本,目前建议的做法是自行加载SunAfterRain放在元维基的HanAssist分支版本。例如:
function implWrapper( ...args ) {
if ( typeof mw.loader.impl === 'function' ) {
return mw.loader.impl( function () {
return args;
} );
}
return mw.loader.implement.apply( mw.loader, args );
}
async function loadHanAssist() {
const moduleName = 'userscript.MyGadget.HanAssist';
if ( mw.loader.getState( 'ext.gadget.HanAssist' ) ) {
mw.loader.register( moduleName, null, [ 'ext.gadget.HanAssist' ] );
await mw.loader.using( 'ext.gadget.HanAssist' );
implWrapper(
moduleName + '@',
{
main: 'index.js',
files: {
'index.js': ( require, module ) => {
module.exports = require( 'ext.gadget.HanAssist' );
}
}
}
);
if ( mw.loader.getState( moduleName ) === 'missing' ) {
mw.loader.state( { [ moduleName ]: 'loaded' } );
}
} else {
mw.loader.register( moduleName, null, [] );
implWrapper(
moduleName + '@',
[ 'https://meta.wikimedia.org/w/index.php?title=User:SunAfterRain/js/HanAssist.js&action=raw&ctype=text/javascript' ]
);
await mw.loader.using( moduleName );
}
const require = await mw.loader.using( moduleName );
return require( moduleName );
}
( async () => {
const { conv } = await loadHanAssist();
// 在此处使用
} )();
(这里的内容就当我随手记的笔记吧)--Dabao qian℡ 2026年10月18日 (日) 19:30 (UTC)
- 千萬別學我去hack mw.loader啊,
mw.loader.register、mw.loader.state、mw.loader.impl(及以前的mw.loader.implement)都是private api啊
囧rz……--SunAfterRain 2026年10月19日 (一) 16:28 (UTC)
- 改成原生fetch就可以确保100%不污染RL以及不使用私有API。--Dabao qian℡ 2026年10月21日 (三) 21:22 (UTC)