此頁面為 Module:NavboxV2 的說明文件

這是{{NavboxV2}}的Lua實現代碼。

簡介

編輯

合併了{{Navbox}}相關的一系列模板。融合了{{Navbox}}的行式、{{Navbox subgroup}}的子代模塊包含、{{Navbox with columns}}的列式,{{Navbox with collapsible groups}})的摺疊行式。

改寫自模塊:Navbox(oldid=42280913)。

設計用途

編輯

Category:引用模板後大小超過限制的頁面中,有相當一部分頁面是由於{{Navbox}}模板超載導致。

  • 根據WP:模板限制中「嵌套展開」的說法,相同頁面的多次嵌套調用是會被分次統計的(例如:頁面A嵌入頁面B,頁面B嵌入頁面C,頁面C相對頁面A統計到的展開字節數是被計算了2次)。而現在Navbox的子代塊、列式,摺疊行式的實現都是基於Navbox行式的模板調用或類似樣式結構迭代,這樣就符合內部多次調用Navbox的條件,頁面很容易會超過模版展開後大小的限制。
  • 其次,實際上Lua的運行限制條件相當寬裕,50MB的內存限制,10秒的運行時限制,很多頁面實際使用只在十分之一左右或以下,可以被大量壓榨性能。

所以將Navbox所有的實現全部以Lua實現,希望能騰出解釋器運行量到Lua運行量,降低解析器觸發展開後大小限制的可能。

效果

編輯
在對於包含一層子Navbox的情況,展開後大小下降最多有50~60%左右。

對比例子

編輯
項目 {{Navbox}}系列,參考基準 本模板
Template:哈利波特 Special:固定鏈接/60036259 User:Cwek/工作室2/Navbox/T:哈利波特
Template:廣州 Special:固定鏈接/60035252 User:Cwek/工作室2/Navbox/T:廣州
Template:廣州地鐵車站 Special:固定鏈接/59586101 User:Cwek/工作室2/Navbox/T:廣州地鐵
Template:粵港澳大灣區公共交通 Special:固定鏈接/59654656 User:Cwek/工作室2/Navbox/T:粵港澳大灣區公共交通
Template:JR東日本的車輛 Special:固定鏈接/61531803 Special:固定鏈接/62385808
Template:中華人民共和國廣播電視付費頻道 Special:固定鏈接/77500465 Special:固定鏈接/77504799

參數

編輯

與{{Navbox}}系列模板基本兼容。但新增部分參數填入:

  • type:Navbox的類型,對應值為vertical(對應{{Navbox}})、horizontal(對應{{Navbox with columns}})、vertical_collapsible(對應{{Navbox with collapsible groups}}),默認值為vertical
  • border:Navbox的隱藏參數,用於控制Navbox的邊框機制,來使子Navbox能被嵌入到父Navbox的值字段(例如listcol等)中,實際對應{{Navbox subgroup}}或{{Navbox|child}}的實現機制。對應值為childsubgroup任一個。
在本模板添加子Navbox層時,必須傳入這兩個參數,這是本模板區分是否存在子Navbox層的依賴。本模板首層Navbox層無需添加border,按需添加type
  • removeGroupPadding:用於區別{{Navbox|child}}和{{Navbox subgroup}},後者在Groupn字段的單元格增加一組padding的配置,適用於子Navbox層。任意值,存在則可,為移除該padding配置(對應{{Navbox|child}})。

方便複製的代碼:

| <list/content>-type = vertical | horizontal | vertical_collapsible
| <list/content>-border = child| subgroup 

自{{Navbox}}系列模板轉換

編輯

將原有嵌入{{Navbox}}系列模板的值字段listn(其他類同)改為listn-,並作為相應嵌套子Navbox模板的參數的前綴來加入,使這些模板嵌套轉換為扁平化的一層模板參數。

例子
{{Navbox}}系列 本模板
{{Navbox
|name = Navbox/doc
|state = expanded
|image = {{{image}}}
|imageleft = {{{imageleft}}}
|title = {{{title}}}
|above = {{{above}}}
|group1 = {{{group1}}}
|list1 = {{Navbox subgroup
 | title = {{{list1-title}}}
 | above = {{{list1-above}}}
 | below = {{{list1-below}}}
 | imageleft = {{{list1-imageleft}}}
 | image = {{{list1-image}}}
 | group1 = {{{list1-group1}}}
 | list1  = {{{list1-list1}}}
 | group2 = {{{list1-group2}}}
 | list2  = {{{list1-list2}}}
}}
|group2 = {{{group2}}}
|list2 = {{Navbox subgroup
| group1 = {{{list2-group1}}}
| list1  = {{{list2-list1}}}
| group2 = {{{list2-group2}}}
| list2  = {{{list2-list2}}}
}}
|below = {{{below}}}
}}
{{NavboxV2
|name = Navbox/doc
|state = expanded
|image = {{{image}}}
|imageleft = {{{imageleft}}}
|title = {{{title}}}
|above = {{{above}}}
<!--  list1 -->
|group1 = {{{group1}}}
<!-- list1-sub-->
|list1-type =vertical <!--作为list1的子Navbox层,全部相应参数加上对应前缀“list1-”,下同,如此类推 -->
|list1-border=child
|list1-title = {{{list1-title}}}
|list1-above = {{{list1-above}}}
|list1-below = {{{list1-below}}}
|list1-imageleft = {{{list1-imageleft}}}
|list1-image = {{{list1-image}}}
|list1-group1 = {{{list1-group1}}}
|list1-list1  = {{{list1-list1}}}
|list1-group2 = {{{list1-group2}}}
|list1-list2  = {{{list1-list2}}}
<!--  list2 -->
|group2 = {{{group2}}}
<!-- list2-sub-->
|list2-type =vertical <!--作为list2的子Navbox层,全部相应参数加上对应前缀“list2-”,下同,如此类推 -->
|list2-border=child
|list2-group1 = {{{list2-group1}}}
|list2-list1  = {{{list2-list1}}}
|list2-group2 = {{{list2-group2}}}
|list2-list2  = {{{list2-list2}}}
<!--end-->
|below = {{{below}}}
}}

轉換注意

編輯

由於{{Navbox}}系列的實現較為複雜和涉及自我嵌套,本模板的實現也為此做了對應兼容性調整,可能會出現一些參數被過度透傳(可能在樣式控制部分,原因是原有設計通過控制參數傳入來隔離,而本設計為了使參數扁平化,導致部分這些參數無法隔離)。而且模板參數非常依賴命名規律,在轉換替換前,請進行testcase檢查,確認轉換後能與原來的樣式、功能基本一致,才應用轉換。如果出現問題,請保留案例並聯繫本模板維護編輯協助處理,或者放棄

雖然可以在值字段(例如listcol等)重新嵌入{{Navbox}}系列模板,但這和原有做法一樣,失去了本模板降低解析器限制的作用,不建議這樣做。