本网站正在建设中(~ ̄▽ ̄)~
- 你好~!欢迎来到中文歌声合成个人收集站-VCPedia.cn!
- 若发现页面信息有误或投稿至本站,请联系管理员。
MediaWiki:Gadget-vcep.js
跳到导航
跳到搜索
注意:在发布之后,您可能需要清除浏览器缓存才能看到所作出的变更的影响。
- Firefox或Safari:按住Shift的同时单击刷新,或按Ctrl-F5或Ctrl-R(Mac为⌘-R)
- Google Chrome:按Ctrl-Shift-R(Mac为⌘-Shift-R)
- Internet Explorer或Edge:按住Ctrl的同时单击刷新,或按Ctrl-F5
- Opera:按 Ctrl-F5。
- /*<pre>*/
- /*
- *名称:VC Editor Plus (简称VCEP)
- *原作者:商火
- *现修改者:MilkBoy
- *版本号:Beta 2.0
- *功能描述:辅助VC编辑者的工具集合
- */
- "use strict";
- var __extends = (this && this.__extends) || (function () {
- var extendStatics = function (d, b) {
- extendStatics = Object.setPrototypeOf ||
- ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
- function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };
- return extendStatics(d, b);
- };
- return function (d, b) {
- if (typeof b !== "function" && b !== null)
- throw new TypeError("Class extends value " + String(b) + " is not a constructor or null");
- extendStatics(d, b);
- function __() { this.constructor = d; }
- d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
- };
- })();
- var __assign = (this && this.__assign) || function () {
- __assign = Object.assign || function(t) {
- for (var s, i = 1, n = arguments.length; i < n; i++) {
- s = arguments[i];
- for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
- t[p] = s[p];
- }
- return t;
- };
- return __assign.apply(this, arguments);
- };
- $(function () {
- console.log('VCEP初始化成功')
- var button = $("<div></div>").addClass("vcep-button").text("启动VCEP");
- $(".wrapper").append(button);
- var api = mw.api;
- var UPlist = [
- { data: "A-39", label: "A-39" },
- { data: "Ace丨Zero", label: "Ace丨Zero" },
- { data: "Adam_K", label: "Adam_K" },
- { data: "AfterLight余晖", label: "AfterLight余晖" },
- { data: "ANK", label: "ANK" },
- { data: "AnnyJuly", label: "AnnyJuly" },
- { data: "A叔", label: "A叔" },
- { data: "阿碇司令", label: "阿碇司令" },
- { data: "阿良良木健", label: "阿良良木健" },
- { data: "阿萨", label: "阿萨" },
- { data: "阿妍Ayan", label: "阿妍Ayan" },
- { data: "阿原Adam", label: "阿原Adam" },
- { data: "安陵影钦", label: "安陵影钦" },
- { data: "暗猫", label: "暗猫の祝福" },
- { data: "BK小鹿", label: "BK小鹿" },
- { data: "白光Raphaelwalty", label: "白光Raphaelwalty" },
- { data: "Boxstar", label: "Boxstar" },
- { data: "崩坏(P主)", label: "崩坏Sovietsy" },
- { data: "白夜_P", label: "白夜ビャクヤ" },
- { data: "半只金蓝", label: "半只金蓝" },
- { data: "北山薇", label: "北山薇" },
- { data: "被遗忘者的哀伤", label: "被遗忘者的哀伤" },
- { data: "不安琪", label: "不安琪" },
- { data: "不鱼", label: "不鱼(电鱼)" },
- { data: "CARDINAL星海", label: "CARDINAL星海" },
- { data: "cnsouka", label: "cnsouka" },
- { data: "Cokoon", label: "Cokoon" },
- { data: "COP", label: "COP" },
- { data: "Creuzer", label: "Creuzer" },
- { data: "沧弦落尘", label: "沧弦落尘" },
- { data: "茶茶P", label: "茶茶P" },
- { data: "蝉c", label: "蝉c" },
- { data: "沉林川", label: "沉林川(贤狼Husky)" },
- { data: "晨鹊", label: "晨鹊" },
- { data: "樗儿", label: "樗儿(つろP)" },
- { data: "初繁言", label: "初繁言" },
- { data: "纯白", label: "纯白" },
- { data: "磁带君", label: "磁带君" },
- { data: "DBRT", label: "DBRT" },
- { data: "Ddickky", label: "Ddickky" },
- { data: "Dec顾令", label: "Dec顾令" },
- { data: "DELA", label: "DELA" },
- { data: "Digger", label: "Digger" },
- { data: "DOS:Error#", label: "DOS:Error#" },
- { data: "大古", label: "大♂古" },
- { data: "大九", label: "大九_LN" },
- { data: "敌门", label: "敌门" },
- { data: "董糖", label: "董糖" },
- { data: "动点P", label: "动点P" },
- { data: "豆腐P", label: "豆腐P" },
- { data: "度娘你要闹哪样", label: "度娘你要闹哪样" },
- { data: "ediq", label: "ediq" },
- { data: "Evalia", label: "Evalia" },
- { data: "厄诺末利P", label: "厄诺末利P(异常矢量/AnomalyVector)" },
- { data: "米库喵", label: "恩雅NYA(米库喵)" },
- { data: "饭后AfterDinner", label: "饭后AfterDinner" },
- { data: "饭団子P", label: "饭団子P" },
- { data: "风守miNado", label: "风守miNado" },
- { data: "枫音Atsuko", label: "枫音Atsuko" },
- { data: "负二价-", label: "负二价-" },
- { data: "gfcjyb", label: "gfcjyb" },
- { data: "GhostFinal", label: "GhostFinal" },
- { data: "G.K", label: "G.K" },
- { data: "Grid格子", label: "Grid格子" },
- { data: "钢铁信徒", label: "钢铁信徒" },
- { data: "鸽稀拉", label: "鸽稀拉(公兔)" },
- { data: "卦者灵风", label: "卦者灵风" },
- { data: "鬼面P", label: "鬼面P" },
- { data: "果汁涼菜", label: "果汁涼菜" },
- { data: "Haru.jpg", label: "Haru.jpg(Napstina)" },
- { data: "H.K.君", label: "H.K.君" },
- { data: "哈士奇P", label: "哈士奇P" },
- { data: "海格P", label: "海格P" },
- { data: "海仔儿", label: "海仔儿" },
- { data: "海鲜面", label: "海鲜面" },
- { data: "寒天集萤", label: "寒天集萤" },
- { data: "灰儿白", label: "灰儿白" },
- { data: "皓月(P主)", label: "皓月" },
- { data: "黑白P", label: "黒白P" },
- { data: "黑方Serge", label: "黑方Serge" },
- { data: "黑猫非猫", label: "黑猫非猫" },
- { data: "合目", label: "合目" },
- { data: "泓", label: "泓" },
- { data: "宏宇", label: "宏宇" },
- { data: "花间有鹿来", label: "花间有鹿来" },
- { data: "花儿不哭", label: "花儿不哭" },
- { data: "花之祭P", label: "花之祭P" },
- { data: "夥星P", label: "夥星P" },
- { data: "Hanssler", label: "Hanssler" },
- { data: "iKz", label: "iKz" },
- { data: "ilem", label: "ilem" },
- { data: "inoki", label: "inoki" },
- { data: "JINX什仲", label: "JINX什仲" },
- { data: "JUSF周存", label: "JUSF周存" },
- { data: "纪远", label: "纪远" },
- { data: "绛舞乱丸", label: "绛舞乱丸" },
- { data: "简单的一个φ", label: "简单的一个φ" },
- { data: "举烛", label: "举烛" },
- { data: "九ミ", label: "九ミ" },
- { data: "玖蝶", label: "玖蝶" },
- { data: "倔强的苦力怕", label: "倔强的苦力怕" },
- { data: "教科书之敌P", label: "教科书之敌P" },
- { data: "甲板边缘", label: "甲板边缘" },
- { data: "Karane", label: "Karane" },
- { data: "KBShinya", label: "KBShinya(塔库)" },
- { data: "Kevinz", label: "Kevinz" },
- { data: "Kide", label: "Kide" },
- { data: "KoiNs", label: "KoiNs" },
- { data: "Kolaa", label: "Kolaa" },
- { data: "KyuRu", label: "KyuRu" },
- { data: "考拉姬", label: "考拉姬" },
- { data: "跨海星尘", label: "跨海星尘" },
- { data: "葵花fa", label: "葵花fa" },
- { data: "空气凝Klean", label: "空气凝Klean" },
- { data: "Lanber", label: "Lanber" },
- { data: "lemon夹子", label: "lemon夹子" },
- { data: "licis", label: "licis" },
- { data: "litterzy", label: "litterzy" },
- { data: "Li Zong", label: "Li Zong" },
- { data: "lizzz", label: "lizzz" },
- { data: "LJC", label: "LJC" },
- { data: "LS", label: "LS" },
- { data: "LKs", label: "LKs" },
- { data: "Lthis", label: "Lthis" },
- { data: "Luna", label: "LunaSafari" },
- { data: "烂兔子P", label: "烂兔子P" },
- { data: "狼姬", label: "狼姬" },
- { data: "理科生天依酱", label: "理科生天依酱" },
- { data: "林墨白", label: "林墨白" },
- { data: "泠鸢yousa", label: "泠鸢yousa" },
- { data: "流绪", label: "流绪" },
- { data: "柳延之", label: "柳延之" },
- { data: "胧(音乐人)", label: "胧" },
- { data: "泷arisa", label: "泷arisa" },
- { data: "乱心", label: "乱心" },
- { data: "陆柒柒", label: "陆柒柒" },
- { data: "立入禁止", label: "立入禁止" },
- { data: "洛微", label: "洛微" },
- { data: "绿无", label: "绿无" },
- { data: "磷元素P", label: "磷元素P" },
- { data: "李阿充", label: "李阿充" },
- { data: "MACHWOLF", label: "MACHWOLF" },
- { data: "MeLo", label: "MeLo" },
- { data: "麦当叔劳劳", label: "麦当叔劳劳" },
- { data: "猫腿子P", label: "猫腿子P" },
- { data: "毛毛虫P", label: "毛毛虫P" },
- { data: "萌蛇", label: "萌蛇" },
- { data: "汨罗河童", label: "汨罗河童" },
- { data: "棉花P", label: "棉花P" },
- { data: "冥凰", label: "冥凰" },
- { data: "苗库里Owo", label: "苗库里Owo" },
- { data: "墨白茜兔", label: "墨白茜兔" },
- { data: "墨蓝酱油", label: "墨蓝酱油" },
- { data: "陌然", label: "陌然(MoreanP)" },
- { data: "墨雨清秋", label: "墨雨清秋" },
- { data: "莫与人辩", label: "莫与人辩" },
- { data: "木变石", label: "木变石" },
- { data: "KitanoNani", label: "なななななに" },
- { data: "Nekock·LK", label: "Nekock·LK" },
- { data: "拿破仑白克", label: "拿破仑白克" },
- { data: "纳兰寻风", label: "纳兰寻风" },
- { data: "南语", label: "南语" },
- { data: "闹闹", label: "闹闹" },
- { data: "鸟爷ToriSama", label: "鸟爷ToriSama" },
- { data: "浓缩排骨", label: "浓缩排骨" },
- { data: "OQQ", label: "OQQ" },
- { data: "平安夜的噩梦", label: "平安夜的噩梦" },
- { data: "PoKeR", label: "PoKeR" },
- { data: "PTX", label: "PTX" },
- { data: "QGRay", label: "QGRay" },
- { data: "祈哀", label: "祈哀" },
- { data: "迁梦狸", label: "迁梦狸" },
- { data: "铅笔", label: "铅笔" },
- { data: "潜移默化P", label: "潜移默化P" },
- { data: "芹菜猪肉大馄饨", label: "芹菜猪肉大馄饨" },
- { data: "溱绫西陌", label: "溱绫西陌" },
- { data: "清风疾行", label: "清风疾行" },
- { data: "清风之恋", label: "清风之恋" },
- { data: "青蓝", label: "青蓝" },
- { data: "情侶の敵p", label: "情侶の敵p" },
- { data: "清水夕日", label: "清水ユウヒ(脊獣)" },
- { data: "靘", label: "靘(青色P)" },
- { data: "Ryuu", label: "Ryuu" },
- { data: "冉语优", label: "冉语优" },
- { data: "瑞安Ryan", label: "瑞安Ryan" },
- { data: "46", label: "46" },
- { data: "Skyghost-", label: "Skyghost-" },
- { data: "Siren", label: "Siren" },
- { data: "Snail_蜗牛P", label: "Snail_蜗牛P" },
- { data: "Snoi", label: "Snoi" },
- { data: "SolPie", label: "SolPie" },
- { data: "Srgreen", label: "Srgreen" },
- { data: "St", label: "St" },
- { data: "St.K4N3", label: "St.K4N3" },
- { data: "Suya", label: "Suya" },
- { data: "Sya", label: "Sya" },
- { data: "叁咉", label: "叁咉" },
- { data: "桑葚上的猴子", label: "桑葚上的猴子" },
- { data: "杉田朗", label: "杉田朗" },
- { data: "神曦_LunA", label: "神曦_LunA" },
- { data: "失明少女(VOCALOID职人)", label: "失明少女" },
- { data: "舒自均", label: "舒自均" },
- { data: "水琹P", label: "水琹P" },
- { data: "霜凝玥", label: "霜凝玥" },
- { data: "水螅-Hydra", label: "水螅-Hydra" },
- { data: "四维空间中的二维生物", label: "四维空间中的二维生物" },
- { data: "逝羽", label: "逝羽" },
- { data: "苏逸", label: "苏逸(人形兎)" },
- { data: "溯回", label: "溯回" },
- { data: "T2o", label: "T2o" },
- { data: "Tamlite", label: "Tamlite" },
- { data: "停電前夜", label: "停電前夜" },
- { data: "teac", label: "teac" },
- { data: "ToToo", label: "ToToo" },
- { data: "Tuno桐音", label: "Tuno桐音" },
- { data: "提糯Tino", label: "提糯Tino" },
- { data: "他城P", label: "他城P(復一)" },
- { data: "一般社员汤", label: "湯ん" },
- { data: "唐乐林", label: "唐乐林" },
- { data: "天儿", label: "天儿" },
- { data: "天然衰", label: "天然衰" },
- { data: "天使盐", label: "天使盐" },
- { data: "跳蝻", label: "跳蝻" },
- { data: "桐叶_tongye", label: "桐叶_tongye" },
- { data: "瞳荧", label: "瞳荧" },
- { data: "U0__", label: "U0__" },
- { data: "UtaeP", label: "UtaeP" },
- { data: "Wing翼", label: "Wing翼" },
- { data: "WL", label: "WL" },
- { data: "WOVOP", label: "WOVOP" },
- { data: "王朝", label: "王朝" },
- { data: "薇采之依", label: "薇采之依" },
- { data: "味素", label: "味素" },
- { data: "文祖小t", label: "文祖小t" },
- { data: "乌龟Sui", label: "乌龟Sui" },
- { data: "无刃妖影", label: "无刃妖影" },
- { data: "西涼若若", label: "西涼若若" },
- { data: "西门振", label: "西门振" },
- { data: "希望索任合资", label: "希望索任合资" },
- { data: "枭目moku", label: "枭目moku" },
- { data: "小荳(P主)", label: "小荳" },
- { data: "小新Xin-Kun", label: "小新Xin-Kun" },
- { data: "小野道", label: "小野道" },
- { data: "小熠IVAC", label: "小熠IVAC" },
- { data: "小宇Cosmos", label: "小宇Cosmos" },
- { data: "邪叫教主", label: "邪叫教主" },
- { data: "星辉", label: "星辉" },
- { data: "星葵", label: "星葵" },
- { data: "星璇(P主)", label: "星璇" },
- { data: "萧家暮雨", label: "萧家暮雨" },
- { data: "杏花包子", label: "杏花包子" },
- { data: "YGY", label: "YGY" },
- { data: "鱼丸君", label: "鱼丸君" },
- { data: "ykykyukai", label: "ykykyukai" },
- { data: "野良犬P", label: "野良犬P" },
- { data: "壹繠", label: "壹繠" },
- { data: "一碗热汤", label: "一碗热汤" },
- { data: "伊水_Uryan", label: "伊水_Uryan" },
- { data: "伊野奏", label: "伊野奏" },
- { data: "依溪禾", label: "依溪禾" },
- { data: "萤失Hinano", label: "萤失Hinano" },
- { data: "影随龙风", label: "影随龙风" },
- { data: "犹狩", label: "犹狩" },
- { data: "喻川YuChuan", label: "喻川YuChuan" },
- { data: "御江", label: "御江" },
- { data: "雨狸", label: "雨狸" },
- { data: "雨霖仙", label: "雨霖仙" },
- { data: "雨巷独酌", label: "雨巷独酌" },
- { data: "裕剑流", label: "裕剑流" },
- { data: "媛天徵", label: "媛天徵" },
- { data: "原野婆婆纳", label: "原野婆婆纳" },
- { data: "幽寂", label: "幽寂" },
- { data: "运佳BlackberryP", label: "运佳BlackberryP" },
- { data: "壹零1-Zero", label: "壹零1-Zero" },
- { data: "月时学怍", label: "月时学怍" },
- { data: "盐水是言和水", label: "盐水是言和水" },
- { data: "源智大人", label: "源智大人" },
- { data: "Zeno", label: "Zeno" },
- { data: "Z新豪", label: "Z新豪" },
- { data: "战场原妖精", label: "战场原妖精" },
- { data: "折v", label: "折v" },
- { data: "郑射虎", label: "郑射虎" },
- { data: "正弦函数P", label: "正弦函数P" },
- { data: "正义铃", label: "正义铃" },
- { data: "著小生", label: "著小生" },
- { data: "周小蚕", label: "周小蚕" },
- { data: "砖厂浪人", label: "砖厂浪人" },
- { data: "紫P", label: "紫P" },
- { data: "紫荆7x", label: "紫荆7x" },
- { data: "籽三", label: "籽三" },
- { data: "兰音", label: "兰音" },
- { data: "ZOMiG", label: "ZOMiG" },
- { data: "瞾天p", label: "瞾天p" },
- { data: "坐标P", label: "坐标P" },
- { data: "团队", label: "团队" },
- { data: "半木生工作室", label: "半木生工作室" },
- { data: "彼方人偶", label: "彼方人偶" },
- { data: "不动声社", label: "不动声社" },
- { data: "不羁阁", label: "不羁阁" },
- { data: "初灵社", label: "初灵社" },
- { data: "COIN原创音乐工作室", label: "COIN原创音乐工作室" },
- { data: "ChiliChill", label: "ChiliChill" },
- { data: "大手组", label: "大手组" },
- { data: "Days幻梦年华乐团", label: "Days幻梦年华乐团" },
- { data: "贰茶社", label: "贰茶社" },
- { data: "覆域原创音乐工作室", label: "覆域原创音乐工作室" },
- { data: "GMN公会", label: "GMN公会" },
- { data: "瓜果瓜秧电视台", label: "瓜果瓜秧电视台" },
- { data: "赫尔辛根默斯肯社", label: "赫尔辛根默斯肯社" },
- { data: "幻茶会", label: "幻茶会" },
- { data: "幻月音乐团", label: "幻月音乐团" },
- { data: "静夜社", label: "静夜社" },
- { data: "空色幻奏", label: "空色幻奏" },
- { data: "灵寰社", label: "灵寰社" },
- { data: "离时社", label: "离时社" },
- { data: "LittleMusic Studio", label: "LittleMusic Studio" },
- { data: "龙皇漫音社", label: "龙皇漫音社" },
- { data: "陌云阁", label: "陌云阁" },
- { data: "奶牛组", label: "奶牛组" },
- { data: "凝曙轩", label: "凝曙轩" },
- { data: "NEBULOSA凩星社", label: "NEBULOSA凩星社" },
- { data: "北京福托科技开发有限责任公司", label: "平行四界Quadimension" },
- { data: "奇音社", label: "奇音社" },
- { data: "清文社", label: "清文社" },
- { data: "沙雕教", label: "沙雕教" },
- { data: "上京急电RECORDS", label: "上京急电RECORDS" },
- { data: "Signal-E", label: "Signal-E" },
- { data: "Sodatune", label: "Sodatune" },
- { data: "踏云社", label: "踏云社" },
- { data: "vanguard sound", label: "vanguard sound" },
- { data: "V音研", label: "V音研" },
- { data: "无名社", label: "无名社" },
- { data: "捂脸社", label: "捂脸社" },
- { data: "Xylose木糖醇", label: "Xylose木糖醇" },
- { data: "汐音社", label: "汐音社" },
- { data: "喜灰Doujin社", label: "喜灰Doujin社" },
- { data: "音喵工场", label: "音喵工场" },
- { data: "银渊社", label: "银渊社" },
- { data: "咏吟轩", label: "咏吟轩" },
- { data: "DJ Ninja", label: "DJ Ninja" },
- { data: "Hydra", label: "Hydra" },
- { data: "火蜥", label: "火蜥" },
- { data: "玖玲P", label: "玖玲P" },
- { data: "Karma(P主)", label: "Karma" },
- { data: "林檎desu", label: "林檎desu" },
- { data: "MAT", label: "MAT" },
- { data: "Mimi Neko", label: "Mimi Neko" },
- { data: "Mini", label: "Mini" },
- { data: "Project Winehouse", label: "Project Winehouse" },
- { data: "SEleA", label: "SEleA" },
- { data: "Sky Flight & Kright Wing", label: "Sky Flight & Kright Wing" },
- { data: "S2", label: "S2" },
- { data: "YIN", label: "YIN" },
- { data: "Hong Kong Vocaloid Independent Producers", label: "H.K.V.I.P" },
- { data: "VelecTi", label: "VelecTi" },
- { data: "Hoskey", label: "Hoskey" },
- { data: "yoyo幫尼", label: "yoyo幫尼" },
- { data: "鳴櫻", label: "鳴櫻" },
- { data: "茶米dav", label: "茶米dav" },
- { data: "XL", label: "XL" },
- { data: "BTM", label: "BTM" },
- { data: "阿六軒", label: "阿六軒" },
- { data: "惟(ゆい)", label: "惟(ゆい)" },
- { data: "雪楓Yuki", label: "雪楓Yuki" },
- { data: "天琴魅歌", label: "天琴魅歌" },
- { data: "神隱楓P", label: "神隱楓P" },
- { data: "檸檬酸P", label: "檸檬酸P" },
- { data: "月犬P", label: "月犬P" },
- { data: "VSPOT", label: "VSPOT" },
- { data: "閒雜人等", label: "閒雜人等" },
- { data: "BE pharma.", label: "BE pharma." },
- { data: "K楓悅", label: "K楓悅" },
- { data: "晴空和音", label: "晴空和音" },
- { data: "天雨路滑製作委員會", label: "天雨路滑製作委員會" },
- { data: "LMSP", label: "LMSP" },
- { data: "Dr.Yun", label: "Dr.Yun" },
- { data: "天水香", label: "天水香" },
- ];
- var Singerlist = [
- { data: "洛天依" },
- { data: "言和" },
- { data: "乐正绫" },
- { data: "乐正龙牙" },
- { data: "墨清弦" },
- { data: "徵羽摩柯" },
- { data: "星尘" },
- ];
- // 临时函数
- function wgULS(str1, str2) {
- return str1;
- }
- // 菜单页面类
- var MenuPage = /** @class */ (function (_super) {
- __extends(MenuPage, _super);
- function MenuPage(name, config) {
- var _this = this;
- config = Object.assign({ label: "Sample page" }, __assign({ expanded: false }, config));
- _this = _super.call(this, name, config) || this;
- _this.label = config.label;
- _this.level = config.level;
- _this.icon = config.icon;
- if (_this.$element.is(":empty")) {
- _this.$element.text(_this.label);
- }
- return _this;
- }
- MenuPage.prototype.setupOutlineItem = function () {
- _super.prototype.setupOutlineItem.call(this);
- this.outlineItem.setMovable(true).setRemovable(true).setIcon(this.icon).setLevel(this.level).setLabel(this.label);
- };
- return MenuPage;
- }(OO.ui.PageLayout));
- var Field = /** @class */ (function (_super) {
- __extends(Field, _super);
- function Field(widget, label, config) {
- if (label === void 0) { label = null; }
- if (config === void 0) { config = null; }
- return _super.call(this, widget, __assign({ label: label }, config)) || this;
- }
- return Field;
- }(OO.ui.FieldLayout));
- // 简介页面
- var InfoPage = new MenuPage("info", {
- label: wgULS("简介", "簡介"),
- icon: "info",
- content: [
- $("<p>")
- .text("VC Editor Plus(以下简称VCEP)是")
- .append($("<a>").attr("href", "/User:空翊/萌百VC编辑团队", "title", "User:空翊/萌百VC编辑团队").text("萌百VC区编辑组"))
- .append("成员")
- .append($("<a>").attr("href", "/User:商火").attr("title", "User:商火").text("商火"))
- .append("开发,由前维护员")
- .append($("<a>").attr("href", "/User:喵萝酱").attr("title", "User:喵萝酱").text("喵萝酱"))
- .append("和现维护员")
- .append($("<a>").attr("href", "/User:MilkBoy").attr("title", "User:MilkBoy").text("MilkBoy"))
- .append("进行更新和维护,面向VC区编辑者进行泛VC(中文歌声合成软件)条目等相关工作的辅助工具,目前仍处于开发状态。"),
- $("<p>").text("VCEP基于JavaScript,请确保您的浏览器开启了JavaScript功能。"),
- $("<p>").text("在使用过程中出现的任何问题和意见,请使用QQ或邮箱联系本人。"),
- ],
- });
- // 通用代码生成界面
- var SongTitle = new OO.ui.TextInputWidget({
- required: true,
- placeholder: "请输入歌曲名",
- });
- SongTitle.setValidityFlag(false);
- var SongTitleForValidation = new Field(SongTitle, "歌曲名");
- SongTitle.$input.on("blur", function () {
- if (SongTitle.getValue() === "") {
- SongTitleForValidation.setErrors(["请填写歌曲名"]);
- SongTitle.setValidityFlag(false);
- }
- else {
- SongTitleForValidation.setErrors([]);
- SongTitle.setValidityFlag(true);
- }
- });
- var BilibiliVideo = new OO.ui.TextInputWidget({
- required: true,
- placeholder: "请输入B站视频番号(aid/bvid),以av或BV开头",
- });
- BilibiliVideo.setValidityFlag(false);
- var BilibiliVideoForValidation = new Field(BilibiliVideo, "B站视频番号");
- BilibiliVideo.$input.on("blur", function () {
- if (BilibiliVideo.getValue() === "") {
- BilibiliVideoForValidation.setErrors(["请填写此字段"]);
- BilibiliVideo.setValidityFlag(false);
- }
- else if (BilibiliVideo.getValue().match(/^(av\d{1,16}|BV1[0-9A-Za-z]{2}4[0-9A-Za-z]{3}1[0-9A-Za-z]{3})$/)) {
- BilibiliVideoForValidation.setErrors([]);
- BilibiliVideo.setValidityFlag(true);
- }
- else {
- BilibiliVideoForValidation.setErrors(["请输入正确的格式"]);
- BilibiliVideo.setValidityFlag(false);
- }
- });
- var NiconicoVideo = new OO.ui.TextInputWidget({
- disabled: true,
- placeholder: "请输入N站视频番号",
- });
- var NiconicoVideoCheck = new OO.ui.CheckboxInputWidget({
- selected: false,
- }).on("change", function () {
- NiconicoVideo.setDisabled(!NiconicoVideoCheck.isSelected());
- NiconicoVideo.setRequired(NiconicoVideoCheck.isSelected());
- NiconicoVideo.setValidityFlag(!NiconicoVideoCheck.isSelected());
- });
- var NiconicoVideoForValidation = new OO.ui.ActionFieldLayout(NiconicoVideo, NiconicoVideoCheck, { label: "N站视频番号" });
- NiconicoVideoCheck.$element.addClass("vcep-checkbox");
- var YoutubeVideo = new OO.ui.TextInputWidget({
- disabled: true,
- placeholder: "请输入Youtube视频ID",
- });
- var YoutubeVideoCheck = new OO.ui.CheckboxInputWidget({
- selected: false,
- }).on("change", function () {
- YoutubeVideo.setDisabled(!YoutubeVideoCheck.isSelected());
- YoutubeVideo.setRequired(YoutubeVideoCheck.isSelected());
- YoutubeVideo.setValidityFlag(!YoutubeVideoCheck.isSelected());
- });
- var YoutubeVideoForValidation = new OO.ui.ActionFieldLayout(YoutubeVideo, YoutubeVideoCheck, { label: "Youtube视频ID" });
- YoutubeVideoCheck.$element.addClass("vcep-checkbox");
- var Uploader = new OO.ui.ComboBoxInputWidget({
- required: true,
- validate: "non-empty",
- placeholder: "请输入UP主",
- options: UPlist,
- menu: { filterFromInput: true },
- });
- Uploader.setValidityFlag(false);
- var UploaderForValidation = new Field(Uploader, "UP主");
- Uploader.$input.on("blur", function () {
- if (Uploader.getValue() === "") {
- UploaderForValidation.setErrors(["请选择一名UP主"]);
- Uploader.setValidityFlag(false);
- }
- else {
- UploaderForValidation.setErrors([]);
- Uploader.setValidityFlag(true);
- }
- });
- var UploadTime = new OO.ui.TextInputWidget({
- required: true,
- placeholder: "请输入日期(格式:yyyy-mm-dd,例如 2023-12-3 或 2023-9-05)",
- });
- UploadTime.setValidityFlag(false);
- var UploadTimeForValidation = new Field(UploadTime, "上传时间");
- UploadTime.$input.on("blur", function () {
- var value = UploadTime.getValue();
- if (value === "") {
- UploadTimeForValidation.setErrors(["请填写投稿日期"]);
- UploadTime.setValidityFlag(false);
- // console.log(UploadTime.hasFlag("ValidationError"));
- }
- else {
- var match = value.match(/^(\d{4})-(0?[1-9]|1[0-2])-(0?[1-9]|[12][0-9]|3[01])$/);
- if (match) {
- // 提取年、月、日并转换为数字
- var year = parseInt(match[1]);
- var month = parseInt(match[2]);
- var day = parseInt(match[3]);
- // 创建 Date 对象验证
- var date = new Date(year, month - 1, day);
- var isValid = date.getFullYear() === year && date.getMonth() === month - 1 && date.getDate() === day;
- if (isValid) {
- UploadTimeForValidation.setErrors([]);
- UploadTime.setValidityFlag(true);
- }
- else {
- UploadTimeForValidation.setErrors(["日期不存在"]);
- UploadTime.setValidityFlag(false);
- }
- }
- else {
- UploadTimeForValidation.setErrors(["日期格式错误,请使用 yyyy-mm-dd 格式"]);
- UploadTime.setValidityFlag(false);
- }
- }
- });
- var Singer = new OO.ui.MenuTagMultiselectWidget({
- allowArbitrary: true,
- options: Singerlist,
- });
- function SingerCheck() {
- if (Singer.getValue().length === 0) {
- SingerForValidation.setErrors(["请至少选择一名歌姬"]);
- }
- else {
- SingerForValidation.setErrors([]);
- }
- }
- Singer.on('add', SingerCheck);
- Singer.on('remove', SingerCheck);
- var SingerForValidation = new Field(Singer, "演唱歌姬");
- var PictureChoose = new OO.ui.RadioSelectInputWidget({
- options: [
- { data: "upload", label: "上传图片" },
- { data: "choose", label: "选择现有图片" },
- ],
- }).on("change", function (item) {
- if (item === "upload") {
- PictureUploader.setDisabled(false);
- PictureSource.toggle(true);
- PictureCategory.toggle(true);
- PictureUploadButton.toggle(true);
- }
- else {
- PictureUploader.setDisabled(true);
- PictureSource.toggle(false);
- PictureCategory.toggle(false);
- PictureUploadButton.toggle(false);
- }
- });
- var PictureChooseForValidation = new Field(PictureChoose, "封面图片选择");
- var PictureSource = new Field(new OO.ui.TextInputWidget({
- placeholder: "请输入图片来源",
- }), "图片来源");
- var PictureCategory = new Field(new OO.ui.TextInputWidget({
- placeholder: "请输入图片分类",
- }), "图片分类");
- var PictureUploader = new OO.ui.SelectFileInputWidget({
- accept: ["image/*"],
- showDropTarget: true,
- placeholder: "请选择封面图片",
- }).on('change', function () {
- PictureTitle.setValue(PictureUploader.getFilename());
- PictureName = PictureUploader.getFilename();
- FileNameCheck();
- });
- var PictureUploaderForValidation = new Field(PictureUploader, "封面图片上传");
- var PictureUploadButton = new Field(new OO.ui.ButtonWidget({
- label: "上传图片",
- flags: ["primary", "progressive"],
- }).on("click", function () {
- PictureUploadHint.toggle(false);
- PictureUploadProgress.toggle(true);
- PictureUploader.setDisabled(true);
- PictureUploadButton.getField().setDisabled(true);
- PictureCategory.getField().setDisabled(true);
- PictureSource.getField().setDisabled(true);
- PictureTitle.setDisabled(true);
- PictureChoose.setDisabled(true);
- api.get({
- action: 'query',
- meta: 'tokens',
- type: 'csrf'
- }).then(function (data) {
- var token = data.query.tokens.crsftoken;
- var formData = new FormData();
- formData.append('action', 'upload');
- formData.append('format', 'json');
- formData.append('filename', PictureTitle.getValue());
- formData.append('file', PictureUploader.getValue()[0]);
- formData.append('token', token);
- return api.postWithToken('csrf', {
- action: 'upload',
- format: 'json',
- file: PictureUploader.getValue()[0],
- filename: PictureTitle.getValue(),
- token: token,
- }, formData);
- }).then(function (response) {
- PictureUploadHint.toggle(true);
- console.log('上传成功:', response);
- if (response.upload.result === 'Success') {
- PictureUploadHint.setType('success');
- PictureUploadHint.setLabel("上传成功");
- }
- else {
- PictureUploadHint.setType('error');
- PictureUploadHint.setLabel("上传失败");
- }
- }).catch(function (error) {
- console.error('上传失败:', error);
- PictureUploadHint.setType('error');
- PictureUploadHint.setLabel("上传失败");
- }).finally(function () {
- PictureUploadProgress.toggle(false);
- PictureUploadProgress.toggle(false);
- PictureUploader.setDisabled(false);
- PictureUploadButton.getField().setDisabled(false);
- PictureCategory.getField().setDisabled(false);
- PictureSource.getField().setDisabled(false);
- PictureTitle.setDisabled(false);
- PictureChoose.setDisabled(false);
- });
- console.log(PictureSource);
- }), "上传图片", { help: "请确保图片来源和分类已填写" });
- var PictureName = '';
- var PictureTitle = new OO.ui.TextInputWidget({
- required: true,
- validate: "non-empty",
- placeholder: "请输入图片标题,带后缀名",
- }).on('blur', function () {
- if (PictureTitle.getValue() !== PictureName) {
- FileNameCheck();
- }
- PictureName = PictureTitle.getValue();
- });
- PictureTitle.setValidityFlag(false);
- var PictureTitleForValidation = new Field(PictureTitle, "封面图片标题");
- PictureTitle.$input.on("blur", function () {
- var value = PictureTitle.getValue();
- var allowedExtensions = /\.(jpg|jpeg|png|gif|webp|bmp|svg)$/i; // 支持的后缀列表
- var validFilename = /^[^\/*?"<>|]+$/; // 禁止文件名非法字符
- if (value === "") {
- PictureTitleForValidation.setErrors(["请填写图片标题"]);
- }
- else if (!validFilename.test(value.split(".")[0])) {
- PictureTitleForValidation.setErrors(['文件名含非法字符(/*?"<>|)']);
- }
- else if (!value.includes(".")) {
- PictureTitleForValidation.setErrors(["缺少文件后缀名"]);
- }
- else if (!allowedExtensions.test(value)) {
- PictureTitleForValidation.setErrors(["仅支持 jpg/jpeg/png/gif/webp/bmp/svg 格式"]);
- }
- else {
- PictureTitleForValidation.setErrors([]); // 验证通过
- }
- });
- var PictureInfo = new OO.ui.TextInputWidget();
- var Introduction = new OO.ui.MultilineTextInputWidget({
- rows: 5,
- autosize: true,
- placeholder: "请输入额外简介描述,可以输入wikitext",
- });
- var Lyrics = new OO.ui.MultilineTextInputWidget({
- required: true,
- rows: 8,
- autosize: true,
- placeholder: "请输入歌词,可以输入wikitext",
- validate: "non-empty",
- });
- Lyrics.setValidityFlag(false);
- var LyricsForValidation = new Field(Lyrics, "歌词");
- Lyrics.$input.on("blur", function () {
- if (Lyrics.getValue() === "") {
- LyricsForValidation.setErrors(["请填写歌词"]);
- Lyrics.setValidityFlag(false);
- }
- else {
- LyricsForValidation.setErrors([]);
- Lyrics.setValidityFlag(true);
- }
- });
- var PictureUploadProgress = new OO.ui.ProgressBarWidget({
- progress: false
- });
- PictureUploadProgress.toggle(false);
- var Result = new OO.ui.MultilineTextInputWidget({
- rows: 10,
- autosize: true,
- placeholder: "生成的代码将会显示在这里",
- disabled: true,
- });
- var ResultButton = new OO.ui.ButtonWidget({
- label: "生成代码",
- flags: ["primary", "progressive"],
- }).on("click", updateResult);
- var PictureNameProgress = new OO.ui.ProgressBarWidget({
- progress: false
- });
- PictureNameProgress.toggle(false);
- var PictureNameHint = new OO.ui.MessageWidget({
- showClose: true,
- });
- var PictureUploadHint = new OO.ui.MessageWidget({
- showClose: true,
- });
- PictureNameHint.toggle(false);
- var ResultHint = new OO.ui.MessageWidget({
- showClose: true
- });
- ResultHint.toggle(false);
- var CodeGenPage = new MenuPage("codegen", {
- label: wgULS("通用代码生成", "通用代碼生成"),
- icon: "code",
- content: [
- SongTitleForValidation,
- BilibiliVideoForValidation,
- NiconicoVideoForValidation,
- YoutubeVideoForValidation,
- UploaderForValidation,
- UploadTimeForValidation,
- SingerForValidation,
- PictureChooseForValidation,
- PictureUploaderForValidation,
- PictureNameProgress,
- PictureNameHint,
- PictureSource,
- PictureCategory,
- PictureTitleForValidation,
- PictureUploadProgress,
- PictureUploadButton,
- new Field(PictureInfo, "封面图片描述"),
- new Field(Introduction, "简介"),
- LyricsForValidation,
- new Field(ResultButton, "生成代码"),
- ResultHint,
- new Field(Result, "生成结果"),
- ],
- });
- function FileNameCheck() {
- PictureUploader.setDisabled(true);
- PictureTitle.setDisabled(true);
- PictureNameProgress.toggle(true);
- var Filename = PictureTitle.getValue();
- api.get({
- "action": "query",
- "format": "json",
- "list": "allimages",
- "utf8": 1,
- "aifrom": Filename,
- "aito": Filename,
- "ailimit": "1"
- }).then(function (data) {
- var res = JSON.parse(data);
- if (res.query.allimages.length !== 0) {
- PictureNameHint.toggle(true);
- PictureNameHint.setType("error");
- PictureNameHint.setLabel("文件名已存在,请更换文件名");
- PictureTitle.setValidityFlag(false);
- }
- else {
- PictureNameHint.toggle(false);
- PictureTitle.setValidityFlag(true);
- }
- }).finally(function () {
- PictureUploader.setDisabled(false);
- PictureTitle.setDisabled(false);
- PictureNameProgress.toggle(false);
- });
- }
- function FormatDate() {
- var date = UploadTime.getValue();
- var _a = date.split("-"), year = _a[0], month = _a[1], day = _a[2];
- var dateObj = new Date(Number(year), Number(month) - 1, Number(day));
- return "".concat(dateObj.getFullYear(), "\u5E74").concat(dateObj.getMonth() + 1, "\u6708").concat(dateObj.getDate(), "\u65E5");
- }
- function FormCheck() {
- SongTitle.blur();
- BilibiliVideo.blur();
- NiconicoVideo.blur();
- YoutubeVideo.blur();
- Uploader.blur();
- UploadTime.blur();
- PictureTitle.blur();
- Lyrics.blur();
- if (Singer.getValue().length === 0) {
- SingerForValidation.setErrors(["请至少选择一名歌姬"]);
- }
- else {
- SingerForValidation.setErrors([]);
- }
- var _SongTitle = SongTitleForValidation.$messages.html() === '';
- var _BilibiliVideo = BilibiliVideoForValidation.$messages.html() === '';
- var _NiconicoVideo = NiconicoVideoForValidation.$messages.html() === '';
- var _YoutubeVideo = YoutubeVideoForValidation.$messages.html() === '';
- var _Uploader = UploaderForValidation.$messages.html() === '';
- var _UploadTime = UploadTimeForValidation.$messages.html() === '';
- var _Singer = SingerForValidation.$messages.html() === '';
- var _PictureTitle = PictureTitleForValidation.$messages.html() === '';
- var _Lyrics = LyricsForValidation.$messages.html() === '';
- if (!_SongTitle || !_BilibiliVideo || !_NiconicoVideo || !_YoutubeVideo || !_Uploader || !_UploadTime || !_Singer || !_PictureTitle || !_Lyrics) {
- return false;
- }
- else {
- return true;
- }
- }
- function updateResult() {
- ResultHint.toggle(true);
- if (!FormCheck()) {
- ResultHint.setType("error");
- ResultHint.setLabel("请检查表单必填项是否填写正确");
- return;
- }
- ResultHint.setType('success');
- ResultHint.setLabel("代码生成成功,已复制到剪贴板");
- var _SongTitle = SongTitle.getValue();
- var _BilibiliVideo = BilibiliVideo.getValue();
- var _NiconicoVideo = NiconicoVideo.getValue();
- var _YoutubeVideo = YoutubeVideo.getValue();
- var _Uploader = "[[".concat(Uploader.getValue(), "]]");
- var _UploadTime = FormatDate();
- var _Singer = Singer.getValue()
- .map(function (item) { return (item = "[[".concat(item, "]]")); })
- .join("、");
- var _PictureTitle = PictureTitle.getValue();
- var _PictureInfo = PictureInfo.getValue();
- var _Introduction = Introduction.getValue();
- var _Lyrics = Lyrics.getValue();
- var TemplateResult = "{{VOCALOID_Songbox\n|image = ".concat(_PictureTitle).concat(_PictureInfo ? "\n|\u56FE\u7247\u4FE1\u606F = ".concat(_PictureInfo) : "", "\n|\u6F14\u5531 = ").concat(_Singer, "\n|\u6B4C\u66F2\u540D\u79F0 = ").concat(_SongTitle, "\n|UP\u4E3B = ").concat(_Uploader, "\n|bb_id = ").concat(_BilibiliVideo, "\n|\u6295\u7A3F\u65F6\u95F4 = ").concat(_UploadTime, "\n|\u518D\u751F = {{BilibiliCount|id=").concat(_BilibiliVideo, "}}\n}}");
- var IntroductionResult = "== \u7B80\u4ECB ==\n\u300A'''".concat(_SongTitle, "'''\u300B\u662F").concat(_Uploader, "\u4E8E").concat(_UploadTime, "\u6295\u7A3F\u81F3[[bilibili]]\u7684[[VOCALOID]]\u4E2D\u6587\u539F\u521B\u6B4C\u66F2\uFF0C\u7531").concat(_Singer, "\u6F14\u5531\u3002\u622A\u81F3\u76EE\u524D\u5DF2\u6709{{BilibiliCount|id=").concat(_BilibiliVideo, "}}\u6B21\u89C2\u770B\uFF0C{{BilibiliCount|id=").concat(_BilibiliVideo, "|type=4}}\u4EBA\u6536\u85CF\u3002").concat(_Introduction ? "\n\n".concat(_Introduction) : "");
- var SongResult = "== \u6B4C\u66F2 ==\n{{BilibiliVideo|id=".concat(_BilibiliVideo, "}}");
- var LyricResult = "== \u6B4C\u8BCD ==\n<poem>\n".concat(_Lyrics, "\n</poem>");
- var EndnoteResult = "== \u6CE8\u91CA ==\n<references/>\n[[\u5206\u7C7B:\u4E2D\u56FD\u97F3\u4E50\u4F5C\u54C1]]";
- var ResultString = "".concat(TemplateResult, "\n\n").concat(IntroductionResult, "\n\n").concat(SongResult, "\n\n").concat(LyricResult, "\n\n").concat(EndnoteResult);
- Result.setValue(ResultString);
- navigator.clipboard.writeText(ResultString);
- }
- // 快捷访问页面
- var LinkPage = new MenuPage("link", {
- label: wgULS("快捷访问", "快捷訪問"),
- icon: "link",
- content: [
- $("<ul>")
- .append($("<li>").append($("<a>").attr("href", "/Special:特殊页面").text("Special:特殊页面")))
- .append($("<li>").append($("<a>").attr("href", "/Category:帮助").text("Category:帮助")))
- .append($("<li>").append($("<a>").attr("href", "/Category:格式模板").text("Category:格式模板")))
- .append($("<li>")
- .append($("<b>").text("api"))
- .append("-B站数据获得网址(")
- .append($("<a>")
- .attr("href", "https://www.mywiki.cn/dgck81lnn/index.php/%E5%93%94%E5%93%A9%E5%93%94%E5%93%A9API%E8%AF%A6%E8%A7%A3")
- .text("食用说明"))
- .append(")")
- .append($("<ul>")
- .append($("<li>").append($("<a>")
- .attr("href", "https://api.bilibili.com/archive_stat/stat?aid=")
- .text("B站数据获得网址(av版,请输入纯数字)")))
- .append($("<li>").append($("<a>").attr("href", "https://api.bilibili.com/x/web-interface/view?bvid=").text("B站数据获得网址(BV版)")))))
- .append($("<li>")
- .append("相关")
- .append($("<b>").text("讨论页面"))
- .append($("<ul>").append($("<li>").append($("<a>").attr("href", "/Talk:VOCALOID中文殿堂曲").text("VOCALOID中文殿堂曲"))))),
- $("<ul>")
- .append($("<li>").append($("<b>").text("导航/题头模板")))
- .append($("<ul>")
- .text("VOCALOID中文")
- .append($("<ul>")
- .append($("<li>")
- .append($("<a>").attr("href", "/Template:VOCALOID中文殿堂曲导航").text("殿堂曲导航"))
- .append("/")
- .append($("<a>").attr("href", "/Template:VOCALOID中文殿堂曲题头").text("殿堂曲题头")))
- .append($("<li>")
- .append($("<a>").attr("href", "/Template:VOCALOID中文传说曲导航").text("传说曲导航"))
- .append("/")
- .append($("<a>").attr("href", "/Template:VOCALOID中文传说曲题头").text("传说曲题头")))
- .append($("<li>")
- .append($("<a>").attr("href", "/Template:VOCALOID中文神话曲导航").text("神话曲导航"))
- .append("/")
- .append($("<a>").attr("href", "/Template:VOCALOID中文神话曲题头").text("神话曲题头")))))
- .append($("<ul>")
- .text("UTAU中文")
- .append($("<ul>")
- .append($("<li>")
- .append($("<a>").attr("href", "/Template:UTAU中文殿堂曲导航").text("殿堂曲导航"))
- .append("/")
- .append($("<a>").attr("href", "/Template:UTAU中文殿堂曲题头").text("殿堂曲题头")))
- .append($("<li>")
- .append($("<a>").attr("href", "/Template:UTAU中文传说曲导航").text("传说曲导航"))
- .append("/")
- .append($("<a>").attr("href", "/Template:UTAU中文传说曲题头").text("传说曲题头")))))
- .append($("<ul>")
- .text("Synthesizer V中文")
- .append($("<ul>")
- .append($("<li>")
- .append($("<a>").attr("href", "/Template:Synthesizer V中文殿堂曲导航").text("殿堂曲导航"))
- .append("/")
- .append($("<a>").attr("href", "/Template:Synthesizer V中文殿堂曲题头").text("殿堂曲题头")))
- .append($("<li>")
- .append($("<a>").attr("href", "/Template:Synthesizer V中文传说曲导航").text("传说曲导航"))
- .append("/")
- .append($("<a>").attr("href", "/Template:Synthesizer V中文传说曲题头").text("传说曲题头")))))
- .append($("<li>").append($("<a>").attr("href", "/User:商火/课室").text("Wiki语言进阶教程")))
- .append($("<li>").append($("<a>").attr("href", "/User:JackBlock/渐变色使用").text("渐变色使用整理")))
- .append($("<li>").append($("<a>").attr("href", "/User:喵萝酱/P主颜色").text("P主模板颜色汇整")))
- .append($("<li>").append($("<a>").attr("href", "/VOCALOID中文殿堂曲/VC编辑指引").text("VC编辑指引")))
- .append($("<li>").append($("<a>").attr("href", "/VOCALOID中文殿堂曲/VC编辑指引/VC之P主相关收录规则").text("VC之P主相关收录规则"))),
- $("<ul>")
- .append($("<li>").append($("<b>").text("歌姬模板")))
- .append($("<ul>")
- .text("VOCALOID")
- .append($("<ul>")
- .append($("<li>").append($("<a>").attr("href", "/Template:洛天依").text("Template:洛天依")))
- .append($("<li>").append($("<a>").attr("href", "/Template:言和").text("Template:言和")))
- .append($("<li>").append($("<a>").attr("href", "/Template:乐正绫").text("Template:乐正绫")))
- .append($("<li>").append($("<a>").attr("href", "/Template:乐正龙牙").text("Template:乐正龙牙")))
- .append($("<li>").append($("<a>").attr("href", "/Template:徵羽摩柯").text("Template:徵羽摩柯")))
- .append($("<li>").append($("<a>").attr("href", "/Template:墨清弦").text("Template:墨清弦")))
- .append($("<li>").append($("<a>").attr("href", "/Template:初音未来(中文)").text("Template:初音未来(中文)")))
- .append($("<li>").append($("<a>").attr("href", "/Template:心华").text("Template:心华")))
- .append($("<li>").append($("<a>").attr("href", "/Template:星尘").text("Template:星尘")))
- .append($("<li>").append($("<a>").attr("href", "/Template:悦成").text("Template:悦成")))
- .append($("<li>").append($("<a>").attr("href", "/Template:章楚楚").text("Template:章楚楚")))))
- .append($("<ul>")
- .text("Synthesizer V")
- .append($("<ul>")
- .append($("<li>").append($("<a>").attr("href", "/Template:艾可").text("Template:艾可")))
- .append($("<li>").append($("<a>").attr("href", "/Template:赤羽").text("Template:赤羽")))
- .append($("<li>").append($("<a>").attr("href", "/Template:诗岸").text("Template:诗岸")))
- .append($("<li>").append($("<a>").attr("href", "/Template:苍穹(平行四界)").text("Template:苍穹")))
- .append($("<li>").append($("<a>").attr("href", "/Template:海伊").text("Template:海伊")))
- .append($("<li>").append($("<a>").attr("href", "/Template:牧心").text("Template:牧心")))
- .append($("<li>").append($("<a>").attr("href", "/Template:Minus").text("Template:Minus")))
- .append($("<li>").append($("<a>").attr("href", "/Template:心华").text("Template:心华")))))
- .append($("<ul>")
- .text("Sharpkey")
- .append($("<ul>")
- .append($("<li>").append($("<a>").attr("href", "/Template:幻晓伊").text("Template:幻晓伊")))
- .append($("<li>").append($("<a>").attr("href", "/Template:琪亚娜 卡斯兰娜").text("Template:琪亚娜 卡斯兰娜")))
- .append($("<li>").append($("<a>").attr("href", "/Template:元筱").text("Template:元筱")))))
- .append($("<ul>")
- .text("MUTA")
- .append($("<ul>")
- .append($("<li>").append($("<a>").attr("href", "/Template:嫣汐").text("Template:嫣汐")))
- .append($("<li>").append($("<a>").attr("href", "/Template:琥珀虚颜").text("Template:琥珀虚颜")))
- .append($("<li>").append($("<a>").attr("href", "/Template:未央").text("Template:未央"))))),
- ],
- });
- var pages = [InfoPage, CodeGenPage, LinkPage];
- // 主菜单类
- var Menu = /** @class */ (function (_super) {
- __extends(Menu, _super);
- function Menu() {
- return _super !== null && _super.apply(this, arguments) || this;
- }
- Menu.prototype.initialize = function () {
- _super.prototype.initialize.call(this);
- this.bookletLayout = new OO.ui.BookletLayout({
- expanded: true,
- outlined: true,
- }).addPages(pages);
- this.$body.append(this.bookletLayout.$element);
- };
- Menu.prototype.getBodyHeight = function () {
- return 600;
- };
- Menu.prototype.makeItems = function () {
- return [0, 1, 2, 3, 4].map(function (val) {
- return new OO.ui.MenuOptionWidget({
- data: val,
- label: String(val),
- });
- });
- };
- Menu.prototype.getActionProcess = function (action) {
- var _this = this;
- if (action) {
- return new OO.ui.Process(function () {
- _this.close({ action: action });
- });
- }
- return _super.prototype.getActionProcess.call(this, action);
- };
- Menu.static = {
- name: "vcep",
- title: "VC Editor Plus",
- size: "larger",
- actions: [{ action: "cancel", label: "Cancel", flags: ["safe", "close"] }],
- };
- return Menu;
- }(OO.ui.ProcessDialog));
- // 窗口管理器
- var windowManager = new OO.ui.WindowManager();
- $(document.body).append(windowManager.$element);
- var dialog = new Menu();
- windowManager.addWindows([dialog]);
- button.on("click", function () {
- windowManager.openWindow(dialog);
- });
- });
- /*</pre>*/