来自碧蓝航线海事局
模块:舰娘图鉴导航是一段LUA脚本,用于实现图鉴导航的相关功能。

你可以通过#invoke指令来调用这个模块中的函数。

增添舰船信息

添加舰船基本信息

模块:舰娘数据中添加舰船的ID、阵营(nationality)、类型(type)、稀有度(rarity)、是否具有改造(transform)。

(没有改造可以省略transform的书写。)

例如:

["卡辛"] = { id = 101031, nationality = 1, type = 1, rarity = 2, transform = true },

上面代码的含义为:卡辛,ID为101031,阵营为白鹰,船型为驱逐舰,稀有度为普通,拥有船体改造。

添加舰船型号信息

模块:舰娘数据/型号中增加舰船的ID、级别(class_des)、类型描述(type_des)、舷号(pennant_code)、同级舰船的序号(serial_no)

例如:

["神风"] = { id = 301301, class_des = "神风级", type_des = "驱逐舰", pennant_code = nil, serial_no = 1 },

上面代码的含义为:神风,ID为301301,神风级驱逐舰,无舷号,是神风级的首舰。

这里的type_des = "驱逐舰"只用于显示,而不用于划分舰船类型,因此也可以填写为“轻型驱逐舰”或“护卫舰”等。

添加新的阵营

模块:舰娘数据中的表p.nation_data中添加阵营编号和阵营名称。

例如:

p.nation_data = {
	[1] = '白鹰',
	[2] = '皇家',
	[3] = '重樱',
	[4] = '铁血',
	[5] = '东煌',
	[10] = '格里芬与克鲁格',
}

上面代码添加了编号为10,名为“格里芬与克鲁格”的阵营。 注意标点符号,尤其是引号和逗号。

在这个页面中的表p.nation_data.prints中添加阵营编号和阵营英文缩写。

例如:

p.nation_data.prints = {
	[1] = "us",
	[2] = "en",
	[3] = "jp",
	[4] = "de",
	[5] = "cn",
	[10] = "gk",
}

上面代码将“格里芬与克鲁格”的阵营英文设为“gk”。

在这个页面中的表p.ship_data中修改舰船的阵营(nationality)属性,将其设为新的阵营编号。

例如:

["纳甘左轮"] = { id = 1001031, nationality = 10, type = 1, rarity = 2 },

上面代码将纳甘左轮的阵营设为了10,即“格里芬与克鲁格”阵营。

函数列表

显示带颜色的舰船链接

函数名
ShowNavItem显示项目
参数
参数#1 - 舰船的名称

代码:

 {{#invoke: 舰娘图鉴导航|ShowNavItem|独角兽}}
 {{#invoke: 舰娘图鉴导航|显示项目|彗星}}
 {{#invoke: 舰娘图鉴导航|显示项目|不存在的舰船}}
显示为
独角兽
彗星
不存在的舰船

显示某种类型的所有舰船链接

函数名
ShowNavListInType依类型显示导航列表
参数
参数#1 - 舰船类型(驱逐、轻巡等)

示例代码

 {{#invoke:舰娘图鉴导航|依类型显示导航列表|战列}}
显示为
• 腓特烈大帝
• 佐治亚• 君主• 出云• 加斯科涅
• 北卡罗来纳• 华盛顿• 南达科他• 马萨诸塞• 阿拉巴马• 厌战• 英王乔治五世• 威尔士亲王• 约克公爵• 长门• 加贺BB• 三笠• 俾斯麦• 提尔比茨• 利托里奥• 让·巴尔• 加斯科涅(μ兵装)• 绊爱·SuperGamer
• 亚利桑那• 科罗拉多• 马里兰• 西弗吉尼亚• 伊丽莎白女王• 纳尔逊• 罗德尼• 陆奥• 朱利奥·凯撒
• 宾夕法尼亚• 田纳西• 加利福尼亚• 扶桑• 山城• 伊势• 日向• 加富尔伯爵
• 内华达• 俄克拉荷马

显示整个图鉴导航

函数名
ShowNavTableContent显示导航列表

代码:

{{折叠面板|标题=图鉴导航|选项=3|主框=1|样式=primary}}
{{#invoke:舰娘图鉴导航| 显示导航列表}}
{{折叠面板|内容结束}}

显示为:

驱逐 • 北风
• 埃尔德里奇 • 夕立 • 雪风 • 江风 • Z46 • 凯旋 • 恶毒 • 试作型布里MKII • 群白之心 • 猫音 • 白上吹雪
• 莫里 • 查尔斯·奥斯本 • 拉菲 • 尼古拉斯 • 马拉尼 • 格伦维尔 • 萤火虫 • 勇敢 • 标枪 • 吸血鬼 • 无敌 • 火枪手 • 吹雪 • 绫波 • 时雨 • 野分 • 新月 • 春月 • 宵月 • 卷波 • Z1 • Z2 • Z23 • Z25 • Z35 • Z36 • 鞍山 • 抚顺 • 长春 • 太原 • 龙骑兵 • 鲁莽 • 倔强 • 泛用型布里 • 布兰 • 22 • 33 • 绊爱 • 夏色祭
• 杜威 • 格里德利 • 弗莱彻 • 撒切尔 • 本森 • 西姆斯 • 哈曼 • 贝利 • 拉德福特 • 杰金斯 • 布什 • 黑泽伍德 • 贝奇 • 霍比 • 科尔克 • 金伯利 • 艾尔温 • 斯坦利 • 斯莫利 • 女将 • 阿卡司塔 • 热心 • 命运女神 • 猎人 • 天后 • 丘比特 • 泽西 • 回声 •  •  •  • 白露 • 阳炎 • 初春 • 若叶 • 初霜 • 有明 • 夕暮 • 黑潮 • 亲潮 • 神风 • 松风 • 文月 • 长月 • 清波 • 浦风 • 矶风 • 滨风 • 谷风 • 朝潮 • 大潮 • 满潮 • 荒潮 • 旗风 • Z18 • Z19 • 福尔班 • 勒马尔
• 卡辛 • 唐斯 • 克雷文 • 麦考尔 • 奥利克 • 富特 • 斯彭斯 • 小猎兔犬 • 大斗犬 • 彗星 • 新月 • 小天鹅 • 狐提 • 不知火 • 睦月 • 如月 • 卯月 • 水无月 • 三日月 • Z20 • Z21

轻巡 • 西雅图 • 海王星
• 圣地亚哥 • 蒙彼利埃 • 贝尔法斯特 • 天狼星 • 确捷 • 阿芙乐尔 • 绀紫之心 • 露露缇耶
• 海伦娜 • 克利夫兰 • 哥伦比亚 • 圣路易斯 • 丹佛 • 小海伦娜 • 小克利夫兰 • 小圣地亚哥 • 伯明翰 • 克利夫兰(μ兵装) • 谢菲尔德 • 爱丁堡 • 欧若拉 • 小贝法 • 黑太子 • 谢菲尔德(μ兵装) • 夕张 • 最上 • 三隈 • 神通 • 阿贺野 • 逸仙 • 宁海 • 平海 • 埃米尔·贝尔汀 • 涅普顿
• 布鲁克林 • 菲尼克斯 • 亚特兰大 • 朱诺 • 火奴鲁鲁 • 孟菲斯 • 康克德 • 圣胡安 • 阿基里斯 • 阿贾克斯 • 南安普顿 • 阿瑞托莎 • 加拉蒂亚 • 斐济 • 牙买加 • 纽卡斯尔 • 库拉索 • 杓鹬 • 格拉斯哥 • 五十铃 • 川内 • 那珂 • 莱比锡
• 奥马哈 • 罗利 • 里士满 • 利安得 • 长良 • 阿武隈 • 柯尼斯堡 • 卡尔斯鲁厄 • 科隆

重巡 • 伊吹 • 罗恩 • 路易九世
• 明尼阿波利斯 • 巴尔的摩 • 高雄 • 爱宕 • 摩耶 • 鸟海 • 欧根亲王 • 扎拉 • 圣黑之心 • 久远 • 绊爱·Elegant
• 休斯敦 • 印第安纳波利斯 • 阿斯托利亚 • 昆西 • 文森斯 • 威奇塔 • 伦敦 • 多塞特郡 • 约克 • 埃克塞特 • 足柄 • 铃谷 • 希佩尔海军上将 • 德意志 • 斯佩伯爵海军上将 • 希佩尔海军上将(μ兵装) • 诺瓦露 • 百鬼绫目
• 北安普敦 • 芝加哥 • 波特兰 • 什罗普郡 • 肯特 • 萨福克 • 诺福克 • 苏塞克斯 • 妙高 • 那智 • 特伦托
• 彭萨科拉 • 盐湖城 • 古鹰 • 加古 • 青叶 • 衣笠

战巡 • 胡德 • 天城
• 声望 • 金刚 • 比叡 • 榛名 • 雾岛 • 小比叡 • 沙恩霍斯特 • 格奈森瑙 • 敦刻尔克
• 反击

战列 • 腓特烈大帝
• 佐治亚 • 君主 • 出云 • 加斯科涅
• 北卡罗来纳 • 华盛顿 • 南达科他 • 马萨诸塞 • 阿拉巴马 • 厌战 • 英王乔治五世 • 威尔士亲王 • 约克公爵 • 长门 • 加贺BB • 三笠 • 俾斯麦 • 提尔比茨 • 利托里奥 • 让·巴尔 • 加斯科涅(μ兵装) • 绊爱·SuperGamer
• 亚利桑那 • 科罗拉多 • 马里兰 • 西弗吉尼亚 • 伊丽莎白女王 • 纳尔逊 • 罗德尼 • 陆奥 • 朱利奥·凯撒
• 宾夕法尼亚 • 田纳西 • 加利福尼亚 • 扶桑 • 山城 • 伊势 • 日向 • 加富尔伯爵
• 内华达 • 俄克拉荷马

轻航 • 半人马
• 独立 • 巴丹 • 独角兽 • 追赶者 • 凤翔 • 龙骧 • 乌璐露 • 萨拉娜 • 紫咲诗音
• 长岛 • 飞鹰 • 隼鹰 • 祥凤
• 博格 • 兰利 • 突击者 • 竞技神

航母 • 企业 • 埃塞克斯 • 邦克山 • 香格里拉 • 光辉 • 胜利 • 可畏 • 赤城 • 加贺 • 翔鹤 • 瑞鹤 • 大凤 • 赤城(μ兵装) • 齐柏林伯爵 • 翡绿之心 • 绊爱·Anniversary • 时乃空
• 列克星敦 • 萨拉托加 • 约克城 • 大黄蜂 • 皇家方舟 • 光荣 • 苍龙 • 飞龙 • 小赤城 • 小齐柏林 • 贝露 • 芙米露露 • 大神澪
• 胡蜂

潜艇 • 大青花鱼 • 棘鳍 • 伊19 • 伊168 • U-81 • U-47 • U-101 • 湊阿库娅
• 鲦鱼 • 伊26 • 伊58 • 伊25 • 伊56 • U-557 • U-556 • U-73 • U-522 • U-110 • 絮库夫

维修 • 明石
• 女灶神

重炮 • 黑暗界 • 恐怖 • 阿贝克隆比

潜母 • 伊13

超巡 • 吾妻


显示带标签页的导航面板

函数名
ShowNavTabTable显示标签页导航面板


显示带标签页、按型号划分的导航面板

函数名
ShowShipClassNavPannel显示舰船型号导航面板

代码:

{{#invoke:舰娘图鉴导航| 显示舰船型号导航面板}}

显示为:

驱逐 马汉级驱逐舰 • 卡辛 • 唐斯
格里德利级驱逐舰 • 格里德利 • 克雷文 • 麦考尔 • 莫里
弗莱彻级驱逐舰 • 弗莱彻 • 查尔斯·奥斯本 • 撒切尔 • 奥利克 • 富特 • 斯彭斯 • 拉德福特 • 杰金斯 • 尼古拉斯 • 布什 • 黑泽伍德 • 贝奇 • 金伯利 • 马拉尼 • 斯坦利 • 斯莫利
本森级驱逐舰 • 本森 • 拉菲 • 贝利 • 霍比 • 科尔克
西姆斯级驱逐舰 • 西姆斯 • 哈曼
坎农级护航驱逐舰 • 埃尔德里奇
法拉格特级驱逐舰 • 杜威 • 艾尔温
轻巡 亚特兰大级轻巡洋舰 • 亚特兰大 • 朱诺 • 圣地亚哥 • 小圣地亚哥 • 圣胡安
奥马哈级轻巡洋舰 • 奥马哈 • 罗利 • 里士满 • 孟菲斯 • 康克德
布鲁克林级轻巡洋舰 • 布鲁克林 • 菲尼克斯 • 海伦娜 • 火奴鲁鲁 • 圣路易斯 • 小海伦娜
克利夫兰级轻巡洋舰 • 克利夫兰 • 哥伦比亚 • 蒙彼利埃 • 丹佛 • 小克利夫兰 • 伯明翰 • 克利夫兰(μ兵装)
伍斯特级原型方案轻巡洋舰 • 西雅图
重巡 彭萨科拉级重巡洋舰 • 彭萨科拉 • 盐湖城
北安普顿级重巡洋舰 • 北安普敦 • 芝加哥 • 休斯敦
波特兰级重巡洋舰 • 波特兰 • 印第安纳波利斯
威奇塔级重巡洋舰 • 威奇塔
新奥尔良级重巡洋舰 • 阿斯托利亚 • 昆西 • 文森斯 • 明尼阿波利斯
巴尔的摩级重巡洋舰 • 巴尔的摩
战列 内华达级战列舰 • 内华达 • 俄克拉荷马
宾夕法尼亚级战列舰 • 宾夕法尼亚 • 亚利桑那
田纳西级战列舰 • 田纳西 • 加利福尼亚
科罗拉多级战列舰 • 科罗拉多 • 马里兰 • 西弗吉尼亚
北卡罗来纳级战列舰 • 北卡罗来纳 • 华盛顿
南达科他级战列舰 • 南达科他 • 马萨诸塞 • 阿拉巴马
衣阿华级原型方案Ⅳ战列舰 • 佐治亚
轻航 长岛级护航航空母舰 • 长岛
博格级护航航空母舰 • 博格
航空母舰 • 兰利 • 突击者
独立级轻型航空母舰 • 独立 • 巴丹
航母 列克星敦级航空母舰 • 列克星敦 • 萨拉托加
约克城级航空母舰 • 约克城 • 企业 • 大黄蜂
胡蜂级航空母舰 • 胡蜂
埃塞克斯级航空母舰 • 埃塞克斯 • 邦克山 • 香格里拉
潜艇 猫鲨级潜艇 • 鲦鱼 • 大青花鱼 • 棘鳍
维修 维修舰 • 女灶神
驱逐 A级驱逐舰 • 女将 • 阿卡司塔 • 热心
B级驱逐舰 • 小猎兔犬 • 大斗犬
C级驱逐舰 • 彗星 • 新月 • 小天鹅
F级驱逐舰 • 狐提 • 命运女神
G级驱逐舰 • 格伦维尔 • 萤火虫
H级驱逐舰 • 勇敢 • 猎人
旧V级驱逐舰 • 吸血鬼
J级驱逐舰 • 标枪 • 天后 • 丘比特 • 泽西
M级驱逐舰 • 无敌 • 火枪手
E级驱逐舰 • 回声
轻巡 利安得级轻巡洋舰 • 利安得 • 阿基里斯 • 阿贾克斯
南安普顿级轻巡洋舰 • 南安普顿 • 谢菲尔德 • 纽卡斯尔 • 谢菲尔德(μ兵装) • 格拉斯哥
阿瑞托莎级轻巡洋舰 • 阿瑞托莎 • 加拉蒂亚 • 欧若拉
斐济级轻巡洋舰 • 斐济 • 牙买加
爱丁堡级轻巡洋舰 • 爱丁堡 • 贝尔法斯特 • 小贝法
黛朵级轻巡洋舰 • 天狼星 • 黑太子
谷物女神级轻巡洋舰 • 库拉索 • 杓鹬
确捷级轻巡洋舰 • 确捷
海王星级轻巡洋舰 • 海王星
重巡 伦敦级重巡洋舰 • 伦敦 • 什罗普郡 • 苏塞克斯
肯特级重巡洋舰 • 肯特 • 萨福克
诺福克级重巡洋舰 • 诺福克 • 多塞特郡
约克级重巡洋舰 • 约克 • 埃克塞特
战巡 声望级战列巡洋舰 • 声望 • 反击
海军上将级战列巡洋舰 • 胡德
战列 伊丽莎白女王级战列舰 • 伊丽莎白女王 • 厌战
纳尔逊级战列舰 • 纳尔逊 • 罗德尼
乔治五世级战列舰 • 英王乔治五世 • 威尔士亲王 • 约克公爵
乔治五世级设计案战列舰 • 君主
轻航 竞技神级航空母舰 • 竞技神
轻型航空母舰 • 独角兽
半人马级航空母舰 • 半人马
攻击者级护航航空母舰 • 追赶者
航母 航空母舰 • 皇家方舟
光辉级航空母舰 • 光辉 • 胜利 • 可畏
勇敢级航空母舰 • 光荣
重炮 黑暗界级浅水重炮舰 • 黑暗界 • 恐怖
罗伯茨级浅水重炮舰 • 阿贝克隆比
驱逐 特I型吹雪级驱逐舰 • 吹雪
特II型绫波级驱逐舰 • 绫波
特III型晓级驱逐舰 •  •  • 
白露级驱逐舰 • 白露 • 夕立 • 时雨 • 江风
阳炎级驱逐舰 • 雪风 • 阳炎 • 不知火 • 野分 • 黑潮 • 亲潮 • 浦风 • 矶风 • 滨风 • 谷风
初春级驱逐舰 • 初春 • 若叶 • 初霜 • 有明 • 夕暮
神风级驱逐舰 • 神风 • 松风 • 旗风
睦月级驱逐舰 • 睦月 • 如月 • 卯月 • 水无月 • 文月 • 长月 • 三日月
秋月级驱逐舰 • 新月 • 春月 • 宵月
朝潮级驱逐舰 • 朝潮 • 大潮 • 满潮 • 荒潮
夕云级驱逐舰 • 清波 • 卷波
超秋月级驱逐舰 • 北风
轻巡 夕张级轻巡洋舰 • 夕张
长良级轻巡洋舰 • 长良 • 五十铃 • 阿武隈
最上级轻(重)巡洋舰 • 最上 • 三隈
川内级轻巡洋舰 • 川内 • 神通 • 那珂
阿贺野级轻巡洋舰 • 阿贺野
重巡 古鹰级重巡洋舰 • 古鹰 • 加古
青叶级重巡洋舰 • 青叶 • 衣笠
妙高级重巡洋舰 • 妙高 • 那智 • 足柄
高雄级重巡洋舰 • 高雄 • 爱宕 • 摩耶 • 鸟海
最上级铃谷型重巡洋舰 • 铃谷
伊吹级重巡洋舰 • 伊吹
战巡 金刚级战列巡洋舰 • 金刚 • 比叡 • 榛名 • 雾岛 • 小比叡
天城级战列巡洋舰 • 天城
战列 扶桑级战列舰 • 扶桑 • 山城
伊势级战列舰 • 伊势 • 日向
长门级战列舰 • 长门 • 陆奥
加贺级战列舰 • 加贺BB
敷岛级战列舰 • 三笠
大和级设计案战列舰 • 出云
轻航 飞鹰级航空母舰 • 飞鹰 • 隼鹰
祥凤级航空母舰 • 祥凤
轻型航空母舰 • 凤翔 • 龙骧
航母 (一航战)航空母舰 • 赤城 • 加贺 • 小赤城 • 赤城(μ兵装)
(二航战)航空母舰 • 苍龙 • 飞龙
翔鹤级航空母舰 • 翔鹤 • 瑞鹤
大凤级航空母舰 • 大凤
潜艇 巡潜乙型潜艇 • 伊19 • 伊26 • 伊25
巡潜乙型改二型潜艇 • 伊58 • 伊56
海大VI型a潜艇 • 伊168
维修 维修舰 • 明石
潜母 巡潜甲型改二型潜水空母 • 伊13
超巡 B65超甲型巡洋舰 • 吾妻
驱逐 1934型驱逐舰 • Z1 • Z2
1936型驱逐舰 • Z18 • Z19 • Z20 • Z21
1936A型驱逐舰 • Z23 • Z25
1936B型驱逐舰 • Z35 • Z36
1936C型驱逐舰 • Z46
轻巡 柯尼斯堡级轻巡洋舰 • 柯尼斯堡 • 卡尔斯鲁厄 • 科隆
莱比锡级轻巡洋舰 • 莱比锡
重巡 希佩尔海军上将级重巡洋舰 • 希佩尔海军上将 • 欧根亲王 • 希佩尔海军上将(μ兵装)
德意志级装甲巡洋舰 • 德意志 • 斯佩伯爵海军上将
(WG假想)1938年型重巡洋舰 • 罗恩
战巡 沙恩霍斯特级战列巡洋舰 • 沙恩霍斯特 • 格奈森瑙
战列 俾斯麦级战列舰 • 俾斯麦 • 提尔比茨
H-39战列舰 • 腓特烈大帝
航母 航空母舰 • 齐柏林伯爵 • 小齐柏林
潜艇 VIIC型潜艇 • U-81 • U-557 • U-556
VIIB型潜艇 • U-47 • U-73 • U-101
IXC型潜艇 • U-522
IXB型潜艇 • U-110
驱逐 鞍山级驱逐舰 • 鞍山 • 抚顺 • 长春 • 太原
轻巡 轻巡洋舰 • 逸仙
宁海级轻巡洋舰 • 宁海 • 平海
驱逐 士兵级驱逐舰 • 龙骑兵
重巡 特伦托级重巡洋舰 • 特伦托
扎拉级重巡洋舰 • 扎拉
战列 维托里奥·维内托级战列舰 • 利托里奥
加富尔伯爵级战列舰 • 加富尔伯爵 • 朱利奥·凯撒
轻巡 帕拉达级防护巡洋舰 • 阿芙乐尔
驱逐 空想级大型驱逐舰 • 凯旋
机敏级驱逐舰 • 福尔班
大胆级驱逐舰 • 鲁莽 • 倔强
轻巡 布雷巡洋舰 • 埃米尔·贝尔汀
重巡 C5设计案重巡洋舰 • 路易九世
潜艇 巡洋潜艇 • 絮库夫
驱逐 机敏级驱逐舰 • 勒马尔
空想级大型驱逐舰 • 恶毒
战巡 敦刻尔克级战列巡洋舰 • 敦刻尔克
战列 黎塞留级战列舰 • 让·巴尔 • 加斯科涅(μ兵装) • 加斯科涅
驱逐 其他舰船 • 泛用型布里 • 试作型布里MKII
驱逐 群白 • 布兰 • 群白之心
轻巡 绀紫 • 涅普顿 • 绀紫之心
重巡 圣黑 • 诺瓦露 • 圣黑之心
航母 翡绿 • 贝露 • 翡绿之心
驱逐 BILI • 22 • 33
驱逐 传颂之物 • 猫音
轻巡 传颂之物 • 露露缇耶
重巡 传颂之物 • 久远
轻航 传颂之物 • 乌璐露 • 萨拉娜
航母 传颂之物 • 芙米露露
驱逐 KizunaAI • 绊爱
重巡 KizunaAI • 绊爱·Elegant
战列 KizunaAI • 绊爱·SuperGamer
航母 KizunaAI • 绊爱·Anniversary
驱逐 Hololive • 白上吹雪 • 夏色祭
重巡 Hololive • 百鬼绫目
轻航 Hololive • 紫咲诗音
航母 Hololive • 时乃空 • 大神澪
潜艇 Hololive • 湊阿库娅

--------------------------------------------------
--	TODO:
--	
--------------------------------------------------



--------------------------------------------------
--	调用模块:舰娘数据
--------------------------------------------------
local p = require('模块:舰娘数据')
local mSI = require('模块:舰娘图标')

--------------------------------------------------
--	公开函数
--------------------------------------------------

-- 显示一个导航项目,参数#1 - 船名
p.ShowNavItem = function(frame)
	local data = { dye = 3, transform = 1,}
	data.ship = normalizeShipName(frame.args[1])	
	return mSI.ParseShipTextOnly(data)
end
p["显示项目"] = p.ShowNavItem

-- 显示一段导航列表,参数#1 - 舰船类型
p.ShowNavListInType = function(frame)
	local ship_type = parseShipType(frame.args[1]) or 1;
	local list = getShipListInType(ship_type)
	if #list < 1 then return '' end
	local last_rare = p.ship_data[list[1]].rarity
	for i = 1, #list do
		local ship = list[i]
		local rare = p.ship_data[ship].rarity
		list[i] = ('•&nbsp;[[%s|<span style="color:%s;">%s</span>]]'):format(
					ship, rarityToColor(rare), ship
				)
		if rare ~= last_rare then
			list[i] = '<br/>'..list[i]
			last_rare = rare
		end
	end
	return table.concat(list)
end
p["依类型显示导航列表"] = p.ShowNavListInType 

--显示所有改造的舰船列表
p.ShowNavListOfKai = function(frame)
	local list = {}
	for ship, data in pairs(p.ship_data) do
		if data.transform then
			table.insert(list, data)
			data.name = ship
		end
	end
	
	table.sort(list, function(a, b)
		if a.rarity ~= b.rarity then
			return a.rarity > b.rarity
		elseif a.nationality ~= b.nationality then 
			return a.nationality < b.nationality 
		elseif a.type ~= b.type then 
			return a.type > b.type
		else
			return a.id < b.id
		end
	end)
	
	if #list < 1 then return '' end
	
	local last_rare = list[1].rarity
	local data = { dye = 2, transform = 3 }
	for i = 1, #list do
		local ship = list[i]
		local rare = ship.rarity
		data.ship = ship.name
		list[i] = '•&nbsp;'.. mSI.ParseShipTextOnly(data)..' '
		
		if rare ~= last_rare then
			list[i] = '<br/>'..list[i]
			last_rare = rare
		end
	end
	return table.concat(list)
end
p["依改造显示导航列表"] = p.ShowNavListOfKai 

-- 显示整个导航区域
p.ShowNavTableContent = function(frame)
	local content = [[
{| style="width:100%;" class="table-ShowNavTableContent"
]]
	local table_line = [[
|-
! style="width:8%%;text-align:center" | %s
| %s
|-
| colspan=2|
----
]]	-- {1} = 驱逐、战列等;{2} = 舰船列表
	local postfix = [[
|} ]]

	--当前页面的名称
	local current_title = normalizeShipName(mw.title.getCurrentTitle().text)
	
	local data = {}
	--分类汇总
	for k, v in pairs(p.ship_data) do
		data[v.type] = data[v.type] or {}
		table.insert(data[v.type], k)
	end
	--遍历每个舰船类型
	for ship_type, ship_list in pairs(data) do
		--排序(稀有度高,国家编号小,舰船编号小)
		table.sort(ship_list, function(x,y)
			local tx = p.ship_data[x]
			local ty = p.ship_data[y]
			if tx.rarity ~= ty.rarity then 
				return tx.rarity > ty.rarity 
			end
			if tx.nationality ~= ty.nationality then 
				return tx.nationality < ty.nationality 
			end
			return tx.id < ty.id
		end)
		
		--记录最后一个稀有度,用于按稀有度换行
		local last_rare = #ship_list > 0
				and p.ship_data[ship_list[1]].rarity
				or 0
		
		--遍历每个舰船
		local tmp = { dye = 3, transform = 1,}
		for i = 1, #ship_list do
			local ship = ship_list[i]
			tmp.ship = ship						--舰娘名称
			tmp.rarity = p.ship_data[ship].rarity 		--舰娘稀有度
			
			local html = mSI.ParseShipTextOnly(tmp);
			ship_list[i] = ('•&nbsp;%s '):format(html);
			
			if tmp.rarity ~= last_rare then
				ship_list[i] = '<br/>'..ship_list[i]
				last_rare = tmp.rarity
			end
		end
		
		content = content..table_line:format(
						typeIdToName(ship_type),
						table.concat(ship_list)
					);
	end
	
	return content..postfix
end
p["显示导航列表"] =p.ShowNavTableContent 

--显示带标签页的导航面板
p.ShowNavTabTable = function(frame)

	--当前页面的名称
	local curShip = normalizeShipName(mw.title.getCurrentTitle().text)
	local curNation = p.ship_data[curShip] and p.ship_data[curShip].nationality or 1
	
	local ship_data = p.ship_data	
	
	--分类汇总
	local data = {}
	for k, v in pairs(p.ship_data) do
		data[v.nationality] = data[v.nationality] or {}
		data[v.nationality][v.type] = data[v.nationality][v.type] or {}
		table.insert(data[v.nationality][v.type], k)
	end
	
	
	--标签页
	local args = {
		theme = 'primary',
		label_style = nil,
		[1] = { 
			title = '皇家',
			text = '胡德 厌战 反击 etc',
			id = 'en',
			active = 1
		}
	}
	
	--整理表data的索引
	local nation_list = {}
	for nation, _ in pairs(data) do
		table.insert(nation_list, nation)
	end
	table.sort(nation_list)
	
	--遍历所有阵营
	for index, nation in ipairs(nation_list) do
		local ship_list = data[nation]
		
		--表格开始
		local content = [[

{| style="width:100%;" class="table-ShowNavTabTable"
]]
		--遍历每一个类型
		for ship_type = 1, 13 do
			local list = ship_list[ship_type]
			if list and #list > 0 then
				
				--遍历每个舰船
				local tmp = { dye = 3, transform = 1,}
				for i = 1, #list do
					local ship = list[i]
					tmp.ship = ship						--舰娘名称
					
					local html = mSI.ParseShipTextOnly(tmp);
					list[i] = ('•&nbsp;%s '):format(html);
				end
				
				--表头
				content = content..[[
|-
! ]] .. typeIdToName(ship_type) .. [[

| ]] .. table.concat(list) .. '\n'
						
			end
		end
		--表格结束
		content = content.. '|}\n'
		
		args[index] = {
			title = nationIdToName(nation),
			text = content,
			id = 'Nav-'..nationIdToEn(nation):upper(),
			active = curNation == nation
		}
	end
	
	
	local mTBP = require('Module:选项卡面板')
	return mTBP.GenerateWholePanel(args)
end
p["显示标签页导航面板"]=p.ShowNavTabTable

--显示带标签页、按型号划分的导航面板
p.ShowShipClassNavPannel = function(frame, shipHtmlSerializer)

	--将舰娘名字转换为有样式的HTML文本
	shipHtmlSerializer = shipHtmlSerializer or function(ship)
		return ('•&nbsp;%s '):format(
			mSI.ParseShipTextOnly({ 
				dye = 3, 
				transform = 1,
				ship = ship
				})
		)
	end

	--当前页面的名称
	local curShip = normalizeShipName(mw.title.getCurrentTitle().text)
	local curNation = p.ship_data[curShip] and p.ship_data[curShip].nationality or 1
	
	--加载模块
	local mSDC = require('模块:舰娘数据/型号')
	local ship_data_class = mSDC.ship_data_class
	local ship_data = p.ship_data
		
	--分类汇总
	local data = {}
	for ship, v in pairs(ship_data) do
		data[v.nationality] = data[v.nationality] or {}
		data[v.nationality][v.type] = data[v.nationality][v.type] or {}
		
		--当ship_data中有该舰船,而ship_data_class中没有时
		if not ship_data_class[ship] then
			mw.log("ShowShipClassNavPannel> ship_data_class中缺少ship_data中记录的舰船-"..ship)
			ship_data_class[ship] = {id = v.id}
		end
		
		
		local v2 = ship_data_class[ship]
		local class = v2.class_des or '其他'
		data[v.nationality][v.type][class] = 
				data[v.nationality][v.type][class] or {}
		
		table.insert(data[v.nationality][v.type][class], ship)
	end
	
	--标签页面板参数
	local args = {
		theme = 'primary',
		label_style = 'font-weight:bolder; padding:0.5em 0.6em;',
		[1] = { 
			title = '皇家',
			text = '胡德 厌战 反击 etc',
			id = 'en',
			active = 1
		}
	}
	
	--整理表data的索引
	local nation_list = {}
	for nation, _ in pairs(data) do
		table.insert(nation_list, nation)
	end
	table.sort(nation_list)
	
	--遍历所有阵营
	for index, nation in ipairs(nation_list) do
		
		--表格开始
		local content = [[

<table class="table-ShowShipClassNavPannel" width="100%">
]]
		
		--遍历所有舰船类型
		for stype = 1, table.maxn(data[nation]) do
			
			if data[nation][stype] then
				--对舰船级别排序
				local class_list = {}
				
				for key, _ in pairs(data[nation][stype]) do
					table.insert(class_list, key)
				end
				
				table.sort(class_list, function(a,b)
						if a == '其他' then
							return false
						elseif b == '其他' then
							return true
						end
						local shipA = data[nation][stype][a][1]
						local shipB = data[nation][stype][b][1]
						return ship_data_class[shipA].id 
							< ship_data_class[shipB].id
					end
				)
				
				
				--舰船类型表头
				if stype > 1 then
					content = content .. ([[
<tr class="tr-top">
<th class="th-ship-type" rowspan="%s">%s
</th>
]]):format(#class_list, typeIdToName(stype))
				else
					content = content .. ([[
<tr class="tr-top">
<th class="th-ship-type" rowspan="%s">%s
</th>
]]):format(#class_list, typeIdToName(stype))
				end
				
				
				--遍历所有舰船级别
				for i, class in ipairs(class_list) do
					local ship_list = data[nation][stype][class]
					local ship_v = ship_data_class[ship_list[1]]
					local class_name = class == '其他' and '其他舰船' 
								or ship_v.type_des and ('%s<span class="ship-class-postfix">%s</span>'):format(class, ship_v.type_des)
								or class
					
					--对舰船进行排序
					table.sort(ship_list, function(a,b)
							return ship_data[a].id < ship_data[b].id
						end
					)
					
					--遍历每一艘船
					for j = 1, #ship_list do
						--解析为HTML文本
						ship_list[j] = shipHtmlSerializer(ship_list[j]);
					end
						
					
					--舰船级别表头 / 内容
					if i > 1 then
						content = content .. ([[
<tr>
<th class="th-ship-class">%s
</th>
<td>%s
</td>
</tr>
]]):format(class_name, table.concat(ship_list))
					else
						content = content .. ([[
<th class="th-ship-class">%s
</th>
<td>%s
</td>
</tr>
]]):format(class_name, table.concat(ship_list))
					
					end
					
				end
			end
		end
		
		--表格结束
		content = content.. '</table>\n'
		
		args[index] = {
			title = nationIdToName(nation),
			text = content,
			id = 'Nav-'..nationIdToEn(nation):upper(),
			active = curNation == nation
			}
	end
	
	
	local mTBP = require('Module:选项卡面板')
	return mTBP.GenerateWholePanel(args)
end
p['显示舰船型号导航面板'] = function(frame)

	local handler = frame.args[1] and mw.text.trim(frame.args[1])
	handler = handler and mSI[handler];
	local serializer;
	if (handler) then
		local ff = mw.getCurrentFrame();
		ff.args = parseArgument(frame);
	
		serializer = function(ship)
			frame.args[1] = ship;
			return (' %s '):format(
					handler(ff)
				)
		end
	end
	
	return p.ShowShipClassNavPannel(frame, serializer);
end

--------------------------------------------------
--	测试函数
--------------------------------------------------

p['测试'] = function(frame)
	mw.log('测试', frame[1])
	
	local foo = p[frame[1]]
	if not foo then
		local msg = ('函数%s不存在!'):format(frame[1] or 'nil')
		mw.log(msg)
		return msg
	end
	
	return mw.text.nowiki(foo(frame))
end


--------------------------------------------------
--	私有函数
--------------------------------------------------
--解析传入参数——去空白符+转换数字
function parseArgument(frame)
	local arg = {}
	for k, v in pairs(frame.args) do
		arg[k] = tonumber(v) or Text.trim(v)
	end
	return arg
end

function getShipListInType(shipType)
	local ret = {}
	for k, v in pairs(p.ship_data) do
		if v.type == shipType then
			table.insert(ret,k)
		end
	end
	--排序
	table.sort(ret, function(x,y)
		local tx = p.ship_data[x]
		local ty = p.ship_data[y]
		if tx.rarity ~= ty.rarity then 
			return tx.rarity > ty.rarity 
		end
		if tx.nationality ~= ty.nationality then 
			return tx.nationality < ty.nationality 
		end
		return tx.id < ty.id
	end)
	return ret
end

function parseShipType(text)
	if type(text) == 'number' then return number end
	text = trim(text)
	
	for id, stype in pairs(p.type_data) do
		if text == stype then
			return id
		end
	end
	
	return text == '轻航' and 6		--轻航
		or text == '轻母' and 6
		or text == '正航' and 7		--正航
		or text == '航母' and 7
		or text == '空母' and 7
		or nil
end

function typeIdToName(id)
	return p.TypeIdToName(id,  '未知')
end

function nationIdToName(id)
	return p.NationIdToName(id, '未知')
end

function nationIdToEn(id)
	return p.nation_data.prints[id] or 'nil'
end

function rarityToColor(n)
	return mSI.RarityToColor(n)
end

function trim(str)
	if not str then return '' end
	return mw.text.trim(str)
end

function normalizeShipName(str)
	return p.NormalizeShipName(trim(str or '') or '')
end


return p