模板:NavboxV2
簡介
合併了{{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的值欄位(例如list
、col
等)中,實際對應{{Navbox subgroup}}的實現機制。對應值為child
、subgroup
任一個。
- 在本模板添加子Navbox層時,必須傳入這兩個參數,這是本模板區分是否存在子Navbox層的依賴。本模板首層Navbox層無需添加
border
,按需添加type
。
- 在本模板添加子Navbox層時,必須傳入這兩個參數,這是本模板區分是否存在子Navbox層的依賴。本模板首層Navbox層無需添加
removeGroupPadding
:用於區別{{Navbox|child}}和{{Navbox subgroup}},後者在Groupn欄位的單元格增加一組padding的配置,適用於子Navbox層。任意值,存在則可,為移除該padding配置(對應{{Navbox|child}})。
將原有嵌入{{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檢查,確認轉換後能與原來的樣式、功能基本一致,才應用轉換。如果出現問題,請保留案例並聯繫本模板維護編輯協助處理,或者放棄。
雖然可以在值欄位(例如list
、col
等)重新嵌入{{Navbox}}系列模板,但這和原有做法一樣,失去了本模板降低解析器限制的作用,不建議這樣做。
上述文件嵌入自Module:NavboxV2/doc。 (編輯 | 歷史) 編者可以在本模板的沙盒 (建立 | 鏡像)和測試樣例 (建立)頁面進行實驗。 本模板的子頁面。 |