Difference between revisions of "Template:Card table"
(Added an above section) |
Dinoguy1000 (talk | contribs) (decrease padding for natural sorting of "Number" cards to 4 digits (none have a higher number than 1000)) |
||
(43 intermediate revisions by 6 users not shown) | |||
Line 1: | Line 1: | ||
− | {{ | + | {{ #if: {{{label21|}}}{{{data21|}}}{{{class21|}}}{{{rowclass21|}}} |
− | |||
| <div class="error">Error: too many rows!</div>[[Category:Card table transclusions with too many rows]] | | <div class="error">Error: too many rows!</div>[[Category:Card table transclusions with too many rows]] | ||
− | }}<div class="card-table {{ #if: {{{bodyclass|}}} | {{{bodyclass}}} | blank-card }}" style="{{{bodystyle|}}}"> | + | }}<!-- |
+ | image validation code | ||
+ | for width: | ||
+ | * width defaults to 200, but can be changed (via {{{width}}}) up to a hard limit of 400 | ||
+ | * used width is the smallest of 400, {{{width|200}}}, and native width | ||
+ | default image is Back-EN.png, but templates can override this via {{{default_image}}} if they want | ||
+ | templates can also force the image to link to a different page (or override the default upload link if the image isn't uploaded) via {{{image_link}}}, though care should be taken since MediaViewer is disabled for images with a custom link | ||
+ | -->{{ #vardefine: $ct_pagename | {{Normalized pagename}} | ||
+ | }}{{ #vardefine: $ct_main | {{ #if: {{{main|}}} | {{{main}}} | {{ #var: $main }} }} | ||
+ | }}{{ #if: {{{image_raw|}}} | ||
+ | | <!-- template handles everything; skip all image validation --> | ||
+ | | {{ #vardefine: $ct_image | {{PAGENAME:{{{image|}}}}} | ||
+ | }}{{ #if: {{ #var: $ct_image }} | {{ #vardefine: $ct_image_native_width | {{ #imgw: {{ #var: $ct_image }} }} }}{{ #set: Card image = {{ #var: $ct_image }} }} | ||
+ | }}{{ #ifeq: {{ #var: $ct_image_native_width }} | 0 | ||
+ | | {{ #vardefine: $ct_image_upload_url | ||
+ | | {{fullurl:Special:Upload|wpDestFile={{ #var: $ct_image }}&wpUploadDescription={{ urlencode: {{((}}OCG-TCG card image | ||
+ | {{!}} name = {{ #var: $ct_pagename }} | ||
+ | {{))}} }}}} | ||
+ | }}{{ #vardefine: $ct_image }}{{ #vardefine: $ct_image_native_width }} | ||
+ | }}{{ #if: {{ #var: $ct_image_native_width }} | ||
+ | || {{ #vardefine: $ct_default_image | {{ #if: {{{default_image|}}} | {{{default_image}}} | Back-EN.png }} | ||
+ | }}{{ #vardefine: $ct_image_native_width | {{ #imgw: {{ #var: $ct_default_image }} }} }} | ||
+ | }}{{ #vardefine: $ct_image_width | {{ #explode: {{ #replace: {{{width|}}} | px }} | x }} | ||
+ | }}{{ #vardefine: $ct_image_width | {{ #iferror: {{ #expr: {{ #var: $ct_image_width | 200 }} }} | 200 }} | ||
+ | }}{{ #vardefine: $ct_image_width | {{ #invoke: math | min | 400 | {{ #var: $ct_image_width }} | {{ #var: $ct_image_native_width }} }} | ||
+ | }}{{ #ifeq: {{ #var: $ct_image_width }} | {{ #var: $ct_image_native_width }} | {{ #vardefine: $ct_image_width }} | ||
+ | }} | ||
+ | }}<!-- | ||
+ | <templatestyles src="Template:Card table/styles.css"/> | ||
+ | -->{{{templatestyles|}}}<!-- | ||
+ | --><div class="card-table {{ #if: {{{bodyclass|}}} | {{{bodyclass}}} | blank-card }}" style="{{{bodystyle|}}}"> | ||
{{ #if: {{{title<includeonly>|</includeonly>}}} | | {{ #if: {{{title<includeonly>|</includeonly>}}} | | ||
− | <div class="heading | + | <div class="heading" style="{{{titlestyle|}}}"><div>{{{title}}}</div></div> |
}} | }} | ||
{{ #if: {{{above<includeonly>|</includeonly>}}} | <div class="above">{{{above}}}</div> }} | {{ #if: {{{above<includeonly>|</includeonly>}}} | <div class="above">{{{above}}}</div> }} | ||
− | <div class=" | + | <div class="card-table-columns"> |
− | + | <div class="imagecolumn" data-max_width="{{ #var: $ct_image_width | {{ #var: $ct_image_native_width }} }}">{{ #if: {{{image_raw|}}} | |
− | + | | {{{image_raw}}} | |
− | + | | <div class="cardtable-main_image-wrapper">[[File:{{ #var: $ct_image | {{ #var: $ct_default_image }} }}{{ #if: {{ #var: $ct_image_width }} | {{!}}{{ #var: $ct_image_width }}px }}{{ #if: {{{image_link|}}}{{ #var: $ct_image_upload_url }} | {{!}}link={{ #if: {{{image_link|}}} | {{{image_link}}} | {{ #var: $ct_image_upload_url }} }} }}]]</div> | |
− | + | }}{{ #if: {{{below_image<includeonly>|</includeonly>}}} | <div class="belowimage hlist"> | |
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
{{{below_image}}}</div> }} | {{{below_image}}}</div> }} | ||
− | + | </div> | |
− | + | <div class="infocolumn"> | |
− | + | <table class="innertable"> | |
− | {{ | + | {{ #if:{{{data1|}}} |
− | + | | <tr class="{{{rowclass1|}}}">{{ #if:{{{label1|}}} | |
− | + | | <th scope="row" style="text-align: left;">{{{label1}}}</th> | |
− | + | <td class="{{{class1|}}}"> | |
− | + | | <td colspan="2" class="{{{class1|}}}" style="text-align: center;"> | |
− | + | }} | |
− | + | {{{data1}}}</td></tr> | |
− | + | }}{{ #if:{{{data2|}}} | |
− | + | | <tr class="{{{rowclass2|}}}">{{ #if:{{{label2|}}} | |
− | + | | <th scope="row" style="text-align: left;">{{{label2}}}</th> | |
− | + | <td class="{{{class2|}}}"> | |
− | + | | <td colspan="2" class="{{{class2|}}}" style="text-align: center;"> | |
− | + | }} | |
− | + | {{{data2}}}</td></tr> | |
− | + | }}{{ #if:{{{data3|}}} | |
− | }}{{ | + | | <tr class="{{{rowclass3|}}}">{{ #if:{{{label3|}}} |
− | + | | <th scope="row" style="text-align: left;">{{{label3}}}</th> | |
− | + | <td class="{{{class3|}}}"> | |
− | + | | <td colspan="2" class="{{{class3|}}}" style="text-align: center;"> | |
− | + | }} | |
− | + | {{{data3}}}</td></tr> | |
− | + | }}{{ #if:{{{data4|}}} | |
− | + | | <tr class="{{{rowclass4|}}}">{{ #if:{{{label4|}}} | |
− | + | | <th scope="row" style="text-align: left;">{{{label4}}}</th> | |
− | + | <td class="{{{class4|}}}"> | |
− | + | | <td colspan="2" class="{{{class4|}}}" style="text-align: center;"> | |
− | + | }} | |
− | + | {{{data4}}}</td></tr> | |
− | + | }}{{ #if:{{{data5|}}} | |
− | + | | <tr class="{{{rowclass5|}}}">{{ #if:{{{label5|}}} | |
− | }}{{ | + | | <th scope="row" style="text-align: left;">{{{label5}}}</th> |
− | + | <td class="{{{class5|}}}"> | |
− | + | | <td colspan="2" class="{{{class5|}}}" style="text-align: center;"> | |
− | + | }} | |
− | + | {{{data5}}}</td></tr> | |
− | + | }}{{ #if:{{{data6|}}} | |
− | + | | <tr class="{{{rowclass6|}}}">{{ #if:{{{label6|}}} | |
− | + | | <th scope="row" style="text-align: left;">{{{label6}}}</th> | |
− | + | <td class="{{{class6|}}}"> | |
− | + | | <td colspan="2" class="{{{class6|}}}" style="text-align: center;"> | |
− | + | }} | |
− | + | {{{data6}}}</td></tr> | |
− | + | }}{{ #if:{{{data7|}}} | |
− | + | | <tr class="{{{rowclass7|}}}">{{ #if:{{{label7|}}} | |
− | + | | <th scope="row" style="text-align: left;">{{{label7}}}</th> | |
− | }}{{ | + | <td class="{{{class7|}}}"> |
− | + | | <td colspan="2" class="{{{class7|}}}" style="text-align: center;"> | |
− | + | }} | |
− | + | {{{data7}}}</td></tr> | |
− | + | }}{{ #if:{{{data8|}}} | |
− | + | | <tr class="{{{rowclass8|}}}">{{ #if:{{{label8|}}} | |
− | + | | <th scope="row" style="text-align: left;">{{{label8}}}</th> | |
− | + | <td class="{{{class8|}}}"> | |
− | + | | <td colspan="2" class="{{{class8|}}}" style="text-align: center;"> | |
− | + | }} | |
− | + | {{{data8}}}</td></tr> | |
− | + | }}{{ #if:{{{data9|}}} | |
− | + | | <tr class="{{{rowclass9|}}}">{{ #if:{{{label9|}}} | |
− | + | | <th scope="row" style="text-align: left;">{{{label9}}}</th> | |
− | + | <td class="{{{class9|}}}"> | |
− | }}{{ | + | | <td colspan="2" class="{{{class9|}}}" style="text-align: center;"> |
− | + | }} | |
− | + | {{{data9}}}</td></tr> | |
− | + | }}{{ #if:{{{data10|}}} | |
− | + | | <tr class="{{{rowclass10|}}}">{{ #if:{{{label10|}}} | |
− | + | | <th scope="row" style="text-align: left;">{{{label10}}}</th> | |
− | + | <td class="{{{class10|}}}"> | |
− | + | | <td colspan="2" class="{{{class10|}}}" style="text-align: center;"> | |
− | + | }} | |
− | + | {{{data10}}}</td></tr> | |
− | + | }}{{ #if:{{{data11|}}} | |
− | + | | <tr class="{{{rowclass11|}}}">{{ #if:{{{label11|}}} | |
− | + | | <th scope="row" style="text-align: left;">{{{label11}}}</th> | |
− | + | <td class="{{{class11|}}}"> | |
− | + | | <td colspan="2" class="{{{class11|}}}" style="text-align: center;"> | |
+ | }} | ||
+ | {{{data11}}}</td></tr> | ||
+ | }}{{ #if:{{{data12|}}} | ||
+ | | <tr class="{{{rowclass12|}}}">{{ #if:{{{label12|}}} | ||
+ | | <th scope="row" style="text-align: left;">{{{label12}}}</th> | ||
+ | <td class="{{{class12|}}}"> | ||
+ | | <td colspan="2" class="{{{class12|}}}" style="text-align: center;"> | ||
+ | }} | ||
+ | {{{data12}}}</td></tr> | ||
+ | }}{{ #if:{{{data13|}}} | ||
+ | | <tr class="{{{rowclass13|}}}">{{ #if:{{{label13|}}} | ||
+ | | <th scope="row" style="text-align: left;">{{{label13}}}</th> | ||
+ | <td class="{{{class13|}}}"> | ||
+ | | <td colspan="2" class="{{{class13|}}}" style="text-align: center;"> | ||
+ | }} | ||
+ | {{{data13}}}</td></tr> | ||
+ | }}{{ #if:{{{data14|}}} | ||
+ | | <tr class="{{{rowclass14|}}}">{{ #if:{{{label14|}}} | ||
+ | | <th scope="row" style="text-align: left;">{{{label14}}}</th> | ||
+ | <td class="{{{class14|}}}"> | ||
+ | | <td colspan="2" class="{{{class14|}}}" style="text-align: center;"> | ||
+ | }} | ||
+ | {{{data14}}}</td></tr> | ||
+ | }}{{ #if:{{{data15|}}} | ||
+ | | <tr class="{{{rowclass15|}}}">{{ #if:{{{label15|}}} | ||
+ | | <th scope="row" style="text-align: left;">{{{label15}}}</th> | ||
+ | <td class="{{{class15|}}}"> | ||
+ | | <td colspan="2" class="{{{class15|}}}" style="text-align: center;"> | ||
+ | }} | ||
+ | {{{data15}}}</td></tr> | ||
+ | }}{{ #if:{{{data16|}}} | ||
+ | | <tr class="{{{rowclass16|}}}">{{ #if:{{{label16|}}} | ||
+ | | <th scope="row" style="text-align: left;">{{{label16}}}</th> | ||
+ | <td class="{{{class16|}}}"> | ||
+ | | <td colspan="2" class="{{{class16|}}}" style="text-align: center;"> | ||
+ | }} | ||
+ | {{{data16}}}</td></tr> | ||
+ | }}{{ #if:{{{data17|}}} | ||
+ | | <tr class="{{{rowclass17|}}}">{{ #if:{{{label17|}}} | ||
+ | | <th scope="row" style="text-align: left;">{{{label17}}}</th> | ||
+ | <td class="{{{class17|}}}"> | ||
+ | | <td colspan="2" class="{{{class17|}}}" style="text-align: center;"> | ||
+ | }} | ||
+ | {{{data17}}}</td></tr> | ||
+ | }}{{ #if:{{{data18|}}} | ||
+ | | <tr class="{{{rowclass18|}}}">{{ #if:{{{label18|}}} | ||
+ | | <th scope="row" style="text-align: left;">{{{label18}}}</th> | ||
+ | <td class="{{{class18|}}}"> | ||
+ | | <td colspan="2" class="{{{class18|}}}" style="text-align: center;"> | ||
+ | }} | ||
+ | {{{data18}}}</td></tr> | ||
+ | }}{{ #if:{{{data19|}}} | ||
+ | | <tr class="{{{rowclass19|}}}">{{ #if:{{{label19|}}} | ||
+ | | <th scope="row" style="text-align: left;">{{{label19}}}</th> | ||
+ | <td class="{{{class19|}}}"> | ||
+ | | <td colspan="2" class="{{{class19|}}}" style="text-align: center;"> | ||
+ | }} | ||
+ | {{{data19}}}</td></tr> | ||
+ | }}{{ #if:{{{data20|}}} | ||
+ | | <tr class="{{{rowclass20|}}}">{{ #if:{{{label20|}}} | ||
+ | | <th scope="row" style="text-align: left;">{{{label20}}}</th> | ||
+ | <td class="{{{class20|}}}"> | ||
+ | | <td colspan="2" class="{{{class20|}}}" style="text-align: center;"> | ||
+ | }} | ||
+ | {{{data20}}}</td></tr> | ||
}} | }} | ||
</table> | </table> | ||
</div> | </div> | ||
− | {{ #if: {{{below<includeonly>|</includeonly>}}} | <div class="below">{{{below}}}</div> }} | + | </div> |
− | </div>{{ | + | {{ #if: {{{below<includeonly>|</includeonly>}}} | <div class="below {{{belowclass|}}}">{{{below}}}</div> }} |
− | #if: {{NAMESPACE}} | + | </div><!-- |
− | | <!-- non-mainspace categories here -->{{ | + | open sandbox check |
− | + | -->{{ #if: {{ #ifeq: {{ #titleparts: {{PAGENAME}} || -1 }} | sandbox }}{{{sandbox|}}} | [[Category:Sandbox pages]] |<!-- | |
− | + | -->{{<!-- sortkey when desired --> | |
− | + | #if: {{ #varexists: $ct_defaultsort }}<!-- don't bother with any of this if we've already been through here --> | |
− | | {{ | + | || {{ #vardefine: $ct_defaultsort | {{ #if: {{{defaultsort|}}}<!-- parameter overrides automatic sortkey --> |
− | + | | {{{defaultsort}}} | |
+ | | {{ #switch: {{ #explode: {{ #var: $ct_pagename }} }} | ||
+ | | A | An = {{ #sub: {{ #var: $ct_pagename }} | {{ #len: {{ #explode: {{ #var: $ct_pagename }} }} }} }} | ||
+ | | The = {{ #switch: {{ #explode: {{ #var: $ct_pagename }} | 1 }} | ||
+ | | Agent | Fabled = <!-- don't futz with "The Agent" or "The Fabled" cards --> | ||
+ | | #default = {{ #sub: {{ #var: $ct_pagename }} | {{ #len: {{ #explode: {{ #var: $ct_pagename }} }} }} }} | ||
+ | }} | ||
+ | <!-- natural sorting for "New Order" cards --> | ||
+ | | New = {{ #if: {{ #vardefineecho: $ct_ds_match | {{ #invoke: string | match |{{ #var: $ct_pagename }}|^New Order (%d+):|nomatch=}} }} | ||
+ | | {{ #invoke: string | replace |{{ #var: $ct_pagename }}|{{ #var: $ct_ds_match }}|{{ padleft: {{ #var: $ct_ds_match }} | 3 }}|count=1}} | ||
+ | }} | ||
+ | <!-- natural sorting for "Number" cards --> | ||
+ | | Number = {{ #if: {{ #vardefineecho: $ct_ds_match | {{ #invoke: string | match |{{ #var: $ct_pagename }}|^Number [^%d ]*(%d+):|nomatch=}} }} | ||
+ | | {{ #invoke: string | replace |{{ #var: $ct_pagename }}|{{ #var: $ct_ds_match }}|{{ padleft: {{ #var: $ct_ds_match }} | 4 }}|count=1}} | ||
+ | }} | ||
+ | }} | ||
+ | }} }}{{ #if: {{ #var: $ct_defaultsort }} | {{DEFAULTSORT:{{ #var: $ct_defaultsort }}}} }} | ||
+ | }}{{ #if: {{NAMESPACE}} | ||
+ | | <!-- non-mainspace categories here -->{{ #ifeq: {{ns:template}}:{{BASEPAGENAME}} | {{FULLPAGENAME}} | [[Category:Card table templates]] }} | ||
+ | | [[Category:All cards]]{{ #ifexist: Card Gallery:{{ #var: $ct_main | {{Normalized pagename|{{PAGENAME}}}} }} | ||
|| [[Category:Cards that need a gallery]] | || [[Category:Cards that need a gallery]] | ||
− | }}[[Page name::{{ | + | }}{{ #vardefine: $ct_counterpart_medium | {{ lc: {{{medium|}}} }}<!-- mostly to simplify testing a smidge --> |
+ | }}{{ #vardefine: $ct_counterpart_medium | {{ #switch: {{ #var: $ct_counterpart_medium }} | ||
+ | | = <!-- no medium, no category --> | ||
+ | | anime | manga | novel | bandai | toei | video game = {{ ucfirst: {{ #var: $ct_counterpart_medium }} }} | ||
+ | | #default = Miscellaneous | ||
+ | }} | ||
+ | }}{{ #if: {{ #var: $ct_counterpart_medium }} | ||
+ | | {{ #if: {{ #var: $ct_main }} | ||
+ | | {{ #if: {{ #ask: <q>[[Category:OCG cards]] OR [[Category:TCG cards]] OR [[Category:Unusable cards]]</q>[[{{ #var: $ct_main }}]] }} || [[Category:{{ #var: $ct_counterpart_medium }} cards with no OCG/TCG counterpart]] }} | ||
+ | | [[Category:{{ #var: $ct_counterpart_medium }} cards with no OCG/TCG counterpart]] | ||
+ | }} | ||
+ | }}[[Page name::{{ #var: $ct_pagename }}| ]][[Page type::Card page| ]] | ||
+ | }}<!-- | ||
+ | close sandbox check | ||
+ | -->}}{{ #ifeq: {{NAMESPACE}} | {{ns:10}}<!-- Template --> | ||
+ | | {{ #ifeq: {{{bodystyle|¬}}} | ¬ || [[Category:Card table parameter tracking (bodystyle)]] | ||
+ | }}{{ #ifeq: {{{titlestyle|¬}}} | ¬ || [[Category:Card table parameter tracking (titlestyle)]] | ||
+ | }}{{ #ifeq: {{{bodyclass|¬}}} | ¬ || [[Category:Card table parameter tracking (bodyclass)]] | ||
+ | }}{{ #ifeq: {{{below_image|¬}}} | ¬ || [[Category:Card table parameter tracking (below_image)]] | ||
+ | }}{{ #ifeq: {{{belowclass|¬}}} | ¬ || [[Category:Card table parameter tracking (belowclass)]] | ||
+ | }}{{ #invoke: check for unknown parameters | check | ||
+ | | unknown = [[Category:((Card table)) transclusions using unknown parameters]] | ||
+ | | showblankpositional = 1 | ||
+ | | preview = unknown <nowiki>{{Card table}}</nowiki> parameter "_VALUE_" | ||
+ | | main | templatestyles | ||
+ | | bodyclass | bodystyle | ||
+ | | title | titlestyle | ||
+ | | above | ||
+ | | image | image_raw | default_image | image_link | width | below_image | ||
+ | | data1 | data2 | data3 | data4 | data5 | data6 | data7 | data8 | data9 | data10 | data11 | data12 | data13 | data14 | data15 | data16 | data17 | data18 | data19 | data20 | ||
+ | | rowclass1 | rowclass2 | rowclass3 | rowclass4 | rowclass5 | rowclass6 | rowclass7 | rowclass8 | rowclass9 | rowclass10 | rowclass11 | rowclass12 | rowclass13 | rowclass14 | rowclass15 | rowclass16 | rowclass17 | rowclass18 | rowclass19 | rowclass20 | ||
+ | | label1 | label2 | label3 | label4 | label5 | label6 | label7 | label8 | label9 | label10 | label11 | label12 | label13 | label14 | label15 | label16 | label17 | label18 | label19 | label20 | ||
+ | | class1 | class2 | class3 | class4 | class5 | class6 | class7 | class8 | class9 | class10 | class11 | class12 | class13 | class14 | class15 | class16 | class17 | class18 | class19 | class20 | ||
+ | | below | belowclass | ||
+ | | sandbox | defaultsort | medium | ||
+ | }} | ||
}}<noinclude>{{Documentation}}</noinclude> | }}<noinclude>{{Documentation}}</noinclude> |
Latest revision as of 21:31, 31 January 2024
This template uses Lua: |
{{Card table}} is a metatemplate used to create card table templates.
Usage
Example
{{Card table | title = {{ #if: {{{title|}}} | {{{title}}} | {{PAGENAME}} }} | image = {{ #if: {{{image|}}} | {{{image}}} | Back-EN.png }} | label1 = [[Attribute]] | data1 = [[{{uc:{{{attribute}}}}}]] [[File:{{uc:{{{attribute}}}}}.svg|25px|alt=]] | label2 = [[Level]] | data2 = {{{level}}} {{Repeat|[[File:CG Star.svg|18px|alt=]]|{{{level}}}}} | label3 = [[Type|Type(s)]] | data3 = {{Card table/types|{{{types}}}|{{{effect_types|}}}|linked}} | label4 = [[ATK]]/[[DEF]] | data4 = {{{atk}}}/{{{def}}} | data5 = <div class="lore">{{{lore}}}</div> | label6 = Effect types | data6 = {{{effect types|}}} | label7 = Status | data7 = {{{status}}} }}