模板:NavboxV2

本頁使用了標題或全文手工轉換
勤求古訓,博采眾方
於 2022年5月14日 (六) 00:24 由 入我相思门留言 | 貢獻 所做的修訂 (创建页面,内容为“<includeonly>{{#invoke:NavboxV2|navbox|MainTemplateName=Template:NavboxV2}}</includeonly><noinclude> {{documentation|模块:NavboxV2/doc}} Category:导航模板 </noinclude>”)
(差異) ←上個修訂 | 最新修訂 (差異) | 下個修訂→ (差異)
文件圖示 模板文件[檢視] [編輯] [歷史] [清除快取]

簡介

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

改寫自模塊:Navbox

設計用途

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

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

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

效果

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

對比例子

參數

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

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

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

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

例子
{{Navbox}}系列 本模板
{{Navbox
|name = Navbox/doc
|state = uncollapsed
|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 = uncollapsed
|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}}系列模板,但這和原有做法一樣,失去了本模板降低解析器限制的作用,不建議這樣做。