2021-03-29 18:14:06 -07:00
< template >
< div class = "page-container" >
< div class = "page-contents" >
< div class = "content" >
< div class = "header" >
< div class = "icon" >
2021-07-02 17:02:55 +00:00
< nuxt-link : to = "'/mod/' + (mod.slug ? mod.slug : mod.id)" >
< img
: src = "
mod . icon _url
? mod . icon _url
: 'https://cdn.modrinth.com/placeholder.svg?inline'
"
alt = "mod - icon"
/ > < / n u x t - l i n k >
2021-03-29 18:14:06 -07:00
< / div >
< div class = "info" >
2021-07-02 17:02:55 +00:00
< nuxt-link : to = "'/mod/' + (mod.slug ? mod.slug : mod.id)" >
< h1 class = "title" > { { mod . title } } < / h1 >
< / nuxt-link >
2021-03-29 18:14:06 -07:00
< p class = "description" >
{ { mod . description } }
< / p >
< div class = "alt-nav" >
< p >
< nuxt-link to = "/mods" > Mods < / nuxt-link >
>
< nuxt-link : to = "'/mod/' + (mod.slug ? mod.slug : mod.id)" > { {
mod . title
} } < / nuxt-link >
< span v-if = "linkBar.length > 0" > > < / span >
< nuxt-link
v - for = "(link, index) in linkBar"
: key = "index"
: to = "/mod/ + (mod.slug ? mod.slug : mod.id) + '/' + link[1]"
> { { link [ 0 ] } }
< span v-if = "index !== linkBar.length - 1" > > < / span >
< / nuxt-link >
< / p >
< / div >
< / div >
< div class = "buttons" >
< nuxt-link
2021-03-31 19:09:18 +02:00
v - if = "this.$auth.user"
2021-03-29 18:14:06 -07:00
: to = "`/report/create?id=${mod.id}&t=mod`"
class = "iconified-button"
>
< ReportIcon / >
Report
< / nuxt-link >
< button
v - if = "userFollows && !userFollows.includes(mod.id)"
class = "iconified-button"
@ click = "followMod"
>
< FollowIcon / >
Follow
< / button >
< button
v - if = "userFollows && userFollows.includes(mod.id)"
class = "iconified-button"
@ click = "unfollowMod"
>
< FollowIcon fill = "currentColor" / >
Unfollow
< / button >
< / div >
< / div >
< Advertisement
v - if = "mod.status === 'approved' || mod.status === 'unlisted'"
2021-04-15 15:48:33 +02:00
type = "banner"
small - screen = "square"
2021-05-18 16:48:26 +02:00
ethical - ads - small
ethical - ads - big
2021-03-29 18:14:06 -07:00
/ >
< div class = "mod-navigation" >
< div class = "tabs" >
< nuxt-link
: to = "'/mod/' + (mod.slug ? mod.slug : mod.id)"
class = "tab"
>
2021-04-10 22:51:10 -07:00
< span > Description < / span >
2021-03-29 18:14:06 -07:00
< / nuxt-link >
< nuxt-link
: to = "'/mod/' + (mod.slug ? mod.slug : mod.id) + '/versions'"
class = "tab"
>
2021-04-10 22:51:10 -07:00
< span > Versions < / span >
2021-03-29 18:14:06 -07:00
< / nuxt-link >
< a
v - if = "mod.wiki_url"
: href = "mod.wiki_url"
target = "_blank"
class = "tab"
>
< ExternalIcon / >
2021-04-10 22:51:10 -07:00
< span > Wiki < / span >
2021-03-29 18:14:06 -07:00
< / a >
< a
v - if = "mod.issues_url"
: href = "mod.issues_url"
target = "_blank"
class = "tab"
>
< ExternalIcon / >
2021-04-10 22:51:10 -07:00
< span > Issues < / span >
2021-03-29 18:14:06 -07:00
< / a >
< a
v - if = "mod.source_url"
: href = "mod.source_url"
target = "_blank"
class = "tab"
>
< ExternalIcon / >
2021-04-10 22:51:10 -07:00
< span > Source < / span >
2021-03-29 18:14:06 -07:00
< / a >
< a
v - if = "mod.discord_url"
: href = "mod.discord_url"
target = "_blank"
class = "tab"
>
< ExternalIcon / >
2021-04-10 22:51:10 -07:00
< span > Discord < / span >
2021-03-29 18:14:06 -07:00
< / a >
2021-05-27 09:27:13 -07:00
< nuxt-link
v - if = "currentMember"
: to = "'/mod/' + mod.id + '/settings'"
class = "tab settings-tab"
>
< SettingsIcon / >
< span > Settings < / span >
< / nuxt-link >
2021-03-29 18:14:06 -07:00
< / div >
< / div >
< div class = "mod-content" >
2021-05-10 21:35:03 -07:00
< NuxtChild
: mod = "mod"
: versions = "versions"
: featured - versions = "featuredVersions"
: members = "members"
: current - member = "currentMember"
2021-05-28 10:19:13 -07:00
: all - members = "allMembers"
2021-05-10 21:35:03 -07:00
: link - bar . sync = "linkBar"
/ >
2021-03-29 18:14:06 -07:00
< / div >
< / div >
< section class = "mod-info" >
< div class = "mod-stats section" >
< div class = "stat" >
< DownloadIcon / >
< div class = "info" >
< h4 > Downloads < / h4 >
< p class = "value" > { { formatNumber ( mod . downloads ) } } < / p >
< / div >
< / div >
< div class = "stat" >
< CalendarIcon / >
< div class = "info" >
< h4 > Created < / h4 >
< p
v - tooltip = "
$dayjs ( mod . published ) . format (
'[Created on] YYYY-MM-DD [at] HH:mm A'
)
"
class = "value"
>
2021-05-27 09:27:13 -07:00
{ { formatTime ( mod . published ) } }
2021-03-29 18:14:06 -07:00
< / p >
< / div >
< / div >
< div class = "stat" >
< TagIcon / >
< div class = "info" >
< h4 > Available For < / h4 >
< p class = "value" >
{ {
versions [ 0 ]
? versions [ 0 ] . game _versions [ 0 ]
? versions [ 0 ] . game _versions [
versions [ 0 ] . game _versions . length - 1
]
: 'None'
: 'None'
} }
< / p >
< / div >
< / div >
< div class = "stat" >
< EditIcon / >
< div class = "info" >
< h4 > Updated < / h4 >
< p
v - tooltip = "
$dayjs ( mod . updated ) . format (
'[Updated on] YYYY-MM-DD [at] HH:mm A'
)
"
class = "value"
>
2021-05-27 09:27:13 -07:00
{ { formatTime ( mod . updated ) } }
2021-03-29 18:14:06 -07:00
< / p >
< / div >
< / div >
< div class = "stat" >
< ClientIcon / >
< div class = "info" >
< h4 > Client Side < / h4 >
< p class = "value capitalize" > { { mod . client _side } } < / p >
< / div >
< / div >
< div class = "stat" >
< ServerIcon / >
< div class = "info" >
< h4 > Server Side < / h4 >
< p class = "value capitalize" > { { mod . server _side } } < / p >
< / div >
< / div >
< div class = "stat" >
< FileTextIcon / >
< div class = "info" >
< h4 > License < / h4 >
< p v-tooltip = "mod.license.name" class="value ellipsis" >
2021-07-11 09:06:06 -07:00
< a : href = "mod.license.url || null" >
2021-03-29 18:14:06 -07:00
{ { mod . license . id . toUpperCase ( ) } } < / a
>
< / p >
< / div >
< / div >
< div class = "stat" >
< CodeIcon / >
< div class = "info" >
< h4 > Project ID < / h4 >
< p class = "value" > { { mod . id } } < / p >
< / div >
< / div >
< Categories :categories = "mod.categories.concat(mod.loaders)" / >
< / div >
< div class = "section" >
< h3 > Members < / h3 >
< div
v - for = "member in members"
: key = "member.user_id"
class = "team-member columns"
>
< img :src = "member.avatar_url" alt = "profile-picture" / >
< div class = "member-info" >
< nuxt-link : to = "'/user/' + member.user_id" >
< h4 > { { member . name } } < / h4 >
< / nuxt-link >
< h3 > { { member . role } } < / h3 >
< / div >
< / div >
< / div >
< div v-if = "featuredVersions.length > 0" class="section" >
< h3 > Featured Versions < / h3 >
< div
v - for = "version in featuredVersions"
: key = "version.id"
class = "featured-version"
>
< a
: href = "findPrimary(version).url"
class = "download"
@ click . prevent = "
downloadFile (
findPrimary ( version ) . hashes . sha1 ,
findPrimary ( version ) . url
)
"
>
< DownloadIcon / >
< / a >
< div class = "info" >
< div class = "top" >
< span
v - if = "version.version_type === 'release'"
class = "badge green"
>
Release
< / span >
< span
v - if = "version.version_type === 'beta'"
class = "badge yellow"
>
Beta
< / span >
< span v-if = "version.version_type === 'alpha'" class="badge red" >
Alpha
< / span >
< h4 class = "title" >
2021-05-10 21:35:03 -07:00
< nuxt-link
: to = "
'/mod/' +
( mod . slug ? mod . slug : mod . id ) +
'/version/' +
version . id
"
>
2021-03-29 18:14:06 -07:00
{ { version . name } }
< / nuxt-link >
< / h4 >
< / div >
< div class = "bottom" >
< span class = "version-number limit-text-width" >
{ { version . version _number } } ·
< / span >
< FabricIcon
v - if = "version.loaders.includes('fabric')"
class = "loader"
/ >
< ForgeIcon
v - if = "version.loaders.includes('forge')"
class = "loader"
/ >
< span
v - if = "version.game_versions.length > 0"
class = "game-version limit-text-width"
>
·
{ { version . game _versions [ version . game _versions . length - 1 ] } }
< / span >
< / div >
< / div >
< / div >
< / div >
< div
v - if = "mod.donation_urls && mod.donation_urls.length > 0"
class = "section"
>
< h3 > Donation Links < / h3 >
< div
v - for = "(item, index) in mod.donation_urls"
: key = "index"
class = "links"
>
< a :href = "item.url" class = "link" >
< ExternalIcon / >
{ { item . platform } }
< / a >
< / div >
< / div >
< Advertisement
v - if = "mod.status === 'approved' || mod.status === 'unlisted'"
2021-04-15 15:48:33 +02:00
type = "square"
small - screen = "destroy"
2021-03-29 18:14:06 -07:00
/ >
< m-footer class = "footer" / >
< / section >
< / div >
< / div >
< / template >
< script >
2021-03-31 19:09:18 +02:00
import Categories from '~/components/ui/search/Categories'
2021-03-30 21:38:12 -07:00
import MFooter from '~/components/layout/MFooter'
2021-03-29 18:14:06 -07:00
import CalendarIcon from '~/assets/images/utils/calendar.svg?inline'
import DownloadIcon from '~/assets/images/utils/download.svg?inline'
import EditIcon from '~/assets/images/utils/edit.svg?inline'
import TagIcon from '~/assets/images/utils/tag.svg?inline'
import ClientIcon from '~/assets/images/utils/client.svg?inline'
import ServerIcon from '~/assets/images/utils/server.svg?inline'
import FileTextIcon from '~/assets/images/utils/file-text.svg?inline'
import CodeIcon from '~/assets/images/sidebar/mod.svg?inline'
import ReportIcon from '~/assets/images/utils/report.svg?inline'
import FollowIcon from '~/assets/images/utils/heart.svg?inline'
import ExternalIcon from '~/assets/images/utils/external.svg?inline'
2021-05-27 09:27:13 -07:00
import SettingsIcon from '~/assets/images/utils/settings.svg?inline'
2021-03-29 18:14:06 -07:00
import ForgeIcon from '~/assets/images/categories/forge.svg?inline'
import FabricIcon from '~/assets/images/categories/fabric.svg?inline'
2021-04-09 04:44:25 +02:00
import Advertisement from '~/components/ads/Advertisement'
2021-03-29 18:14:06 -07:00
export default {
name : 'ModPage' ,
components : {
Advertisement ,
MFooter ,
Categories ,
ExternalIcon ,
2021-05-27 09:27:13 -07:00
SettingsIcon ,
2021-03-29 18:14:06 -07:00
ForgeIcon ,
FabricIcon ,
DownloadIcon ,
CalendarIcon ,
EditIcon ,
TagIcon ,
ClientIcon ,
ServerIcon ,
FileTextIcon ,
CodeIcon ,
ReportIcon ,
FollowIcon ,
} ,
2021-05-10 21:35:03 -07:00
async asyncData ( data ) {
try {
const mod = (
2021-05-28 10:19:13 -07:00
await data . $axios . get ( ` mod/ ${ data . params . id } ` , data . $auth . headers )
2021-05-10 21:35:03 -07:00
) . data
const [ members , versions , featuredVersions , userFollows ] = (
await Promise . all ( [
2021-05-28 10:19:13 -07:00
data . $axios . get ( ` team/ ${ mod . team } /members ` , data . $auth . headers ) ,
data . $axios . get ( ` mod/ ${ mod . id } /version ` ) ,
data . $axios . get ( ` mod/ ${ mod . id } /version?featured=true ` ) ,
data . $axios . get (
2021-05-10 21:35:03 -07:00
data . $auth . user
2021-05-28 10:19:13 -07:00
? ` user/ ${ data . $auth . user . id } /follows `
2021-05-10 21:35:03 -07:00
: ` https://api.modrinth.com ` ,
data . $auth . headers
) ,
] )
) . map ( ( it ) => it . data )
const users = (
2021-05-28 10:19:13 -07:00
await data . $axios . get (
` users?ids= ${ JSON . stringify ( members . map ( ( it ) => it . user _id ) ) } ` ,
2021-05-10 21:35:03 -07:00
data . $auth . headers
)
) . data
users . forEach ( ( it ) => {
const index = members . findIndex ( ( x ) => x . user _id === it . id )
members [ index ] . avatar _url = it . avatar _url
members [ index ] . name = it . username
} )
const currentMember = data . $auth . user
? members . find ( ( x ) => x . user _id === data . $auth . user . id )
: null
2021-05-26 13:45:21 -07:00
if ( mod . body _url && ! mod . body ) {
2021-05-28 10:19:13 -07:00
mod . body = ( await data . $axios . get ( mod . body _url ) ) . data
2021-05-26 13:45:21 -07:00
}
2021-05-10 21:35:03 -07:00
return {
mod ,
versions ,
featuredVersions ,
2021-05-28 10:19:13 -07:00
members : members . filter ( ( x ) => x . accepted ) ,
allMembers : members ,
2021-05-10 21:35:03 -07:00
currentMember ,
userFollows : userFollows . name ? null : userFollows ,
linkBar : [ ] ,
}
} catch {
data . error ( {
statusCode : 404 ,
message : 'Mod not found' ,
} )
}
2021-03-29 18:14:06 -07:00
} ,
methods : {
formatNumber ( x ) {
return x . toString ( ) . replace ( /\B(?=(\d{3})+(?!\d))/g , ',' )
} ,
findPrimary ( version ) {
let file = version . files . find ( ( x ) => x . primary )
if ( ! file ) {
file = version . files [ 0 ]
}
if ( ! file ) {
file = { url : ` /mod/ ${ this . mod . id } /version/ ${ version . id } ` }
}
return file
} ,
async downloadFile ( hash , url ) {
2021-05-28 10:19:13 -07:00
await this . $axios . get ( ` version_file/ ${ hash } /download ` )
2021-03-29 18:14:06 -07:00
const elem = document . createElement ( 'a' )
elem . download = hash
elem . href = url
elem . click ( )
} ,
async followMod ( ) {
2021-05-28 10:19:13 -07:00
await this . $axios . post (
` mod/ ${ this . mod . id } /follow ` ,
2021-03-29 18:14:06 -07:00
{ } ,
this . $auth . headers
)
this . userFollows . push ( this . mod . id )
} ,
async unfollowMod ( ) {
2021-05-28 10:19:13 -07:00
await this . $axios . delete ( ` mod/ ${ this . mod . id } /follow ` , this . $auth . headers )
2021-03-29 18:14:06 -07:00
this . userFollows . splice ( this . userFollows . indexOf ( this . mod . id ) , 1 )
} ,
2021-05-27 09:27:13 -07:00
formatTime ( date ) {
let defaultMessage = this . $dayjs ( date ) . fromNow ( )
if ( defaultMessage . length > 13 ) {
defaultMessage = defaultMessage . replace ( 'minutes' , 'min.' )
}
return defaultMessage
} ,
2021-03-29 18:14:06 -07:00
} ,
2021-05-10 21:35:03 -07:00
head ( ) {
return {
title : this . mod . title + ' - Modrinth' ,
meta : [
{
hid : 'og:type' ,
name : 'og:type' ,
content : 'website' ,
} ,
{
hid : 'og:title' ,
name : 'og:title' ,
content : this . mod . title ,
} ,
{
hid : 'apple-mobile-web-app-title' ,
name : 'apple-mobile-web-app-title' ,
content : this . mod . title ,
} ,
{
hid : 'og:description' ,
name : 'og:description' ,
content : this . mod . description ,
} ,
{
hid : 'description' ,
name : 'description' ,
2021-07-02 17:04:49 +00:00
content : ` ${ this . mod . title } : ${ this . mod . description } View other minecraft mods on Modrinth today! Modrinth is a new and modern Minecraft modding platform supporting both the Forge and Fabric mod loaders. ` ,
2021-05-10 21:35:03 -07:00
} ,
{
hid : 'og:url' ,
name : 'og:url' ,
content : ` https://modrinth.com/mod/ ${ this . mod . id } ` ,
} ,
{
hid : 'og:image' ,
name : 'og:image' ,
content : this . mod . icon _url
? this . mod . icon _url
: 'https://cdn.modrinth.com/placeholder.png' ,
} ,
2021-06-10 16:17:03 +02:00
{
hid : 'robots' ,
name : 'robots' ,
content : this . mod . status !== 'approved' ? 'noindex' : 'all' ,
} ,
2021-05-10 21:35:03 -07:00
] ,
}
} ,
2021-03-29 18:14:06 -07:00
}
< / script >
< style lang = "scss" scoped >
. header {
2021-04-10 22:51:10 -07:00
display : flex ;
flex - direction : column ;
align - items : center ;
text - align : center ;
2021-05-27 09:27:13 -07:00
padding : 1 rem ;
2021-04-10 22:51:10 -07:00
2021-03-29 18:14:06 -07:00
@ extend % card - spaced - b ;
. icon {
2021-05-27 09:27:13 -07:00
margin : unset 0 ;
height : 6.08 rem ;
@ media screen and ( min - width : 1024 px ) {
align - self : flex - start ;
}
2021-03-29 18:14:06 -07:00
img {
2021-05-27 09:27:13 -07:00
height : 100 % ;
width : auto ;
margin : 0 ;
2021-03-29 18:14:06 -07:00
border - radius : var ( -- size - rounded - icon ) ;
}
}
. info {
@ extend % column ;
2021-05-27 09:27:13 -07:00
display : flex ;
justify - content : flex - start ;
height : calc ( 100 % - 0.2 rem ) ;
p {
margin : 0 ;
}
2021-03-29 18:14:06 -07:00
. title {
2021-05-27 09:27:13 -07:00
margin : 0 ;
2021-03-29 18:14:06 -07:00
color : var ( -- color - text - dark ) ;
font - size : var ( -- font - size - lg ) ;
}
. description {
2021-05-27 09:27:13 -07:00
margin - top : var ( -- spacing - card - sm ) ;
margin - bottom : 0.5 rem ;
2021-03-29 18:14:06 -07:00
color : var ( -- color - text - dark ) ;
}
. alt - nav {
2021-05-27 09:27:13 -07:00
margin - top : auto ;
2021-03-29 18:14:06 -07:00
p {
margin : 0 ;
}
}
}
. buttons {
2021-04-10 22:51:10 -07:00
@ extend % row ;
button ,
a {
2021-05-27 09:27:13 -07:00
margin : 0 ;
padding : 0.2 rem 0.5 rem ;
display : flex ;
& : not ( : last - child ) {
margin - right : 0.5 rem ;
@ media screen and ( min - width : 1024 px ) {
margin - right : 0 ;
margin - bottom : 0.5 rem ;
}
}
}
}
> div {
margin - bottom : 1 rem ;
& : last - child {
margin - bottom : 0 ;
2021-04-10 22:51:10 -07:00
}
}
@ media screen and ( min - width : 1024 px ) {
2021-05-27 09:27:13 -07:00
display : grid ;
grid - template - columns : auto 1 fr auto ;
padding : 1 rem ;
grid - gap : 1 rem ;
text - align : left ;
2021-03-29 18:14:06 -07:00
2021-04-10 22:51:10 -07:00
. buttons {
2021-05-27 09:27:13 -07:00
align - self : flex - start ;
2021-04-10 22:51:10 -07:00
flex - direction : column ;
2021-05-27 09:27:13 -07:00
}
> div {
margin - bottom : 0 ;
2021-03-29 18:14:06 -07:00
}
}
}
. mod - navigation {
@ extend % card - spaced - b ;
2021-05-27 09:27:13 -07:00
padding : 0 1 rem ;
. tabs {
overflow - x : auto ;
padding : 0 ;
. tab {
padding : 0 ;
margin : 0.9 rem 0.5 rem 0.8 rem 0.5 rem ;
& : first - child {
margin - left : 0 ;
}
& : last - child {
margin - right : 0 ;
}
}
}
. settings - tab {
@ media screen and ( min - width : 1024 px ) {
margin - left : auto ! important ;
}
}
2021-03-29 18:14:06 -07:00
}
. mod - info {
height : auto ;
2021-04-10 22:51:10 -07:00
@ media screen and ( min - width : 1024 px ) {
width : 30 rem ;
margin - left : var ( -- spacing - card - lg ) ;
}
2021-03-29 18:14:06 -07:00
. section {
padding : var ( -- spacing - card - sm ) ;
@ extend % card - spaced - b ;
}
h3 {
@ extend % large - label ;
}
. mod - stats {
display : flex ;
flex - wrap : wrap ;
margin - top : 0 ;
p {
max - width : 6 rem ;
overflow : hidden ;
white - space : nowrap ;
text - overflow : '' ;
margin : 3 px ;
}
. stat {
width : 8.5 rem ;
margin : 0.75 rem ;
@ extend % stat ;
svg {
padding : 0.25 rem ;
}
}
}
. team - member {
margin - left : 5 px ;
margin - bottom : 10 px ;
img {
border - radius : var ( -- size - rounded - icon ) ;
height : 50 px ;
width : 50 px ;
}
. member - info {
max - width : 150 px ;
overflow : hidden ;
margin : auto 0 auto 0.5 rem ;
h4 {
font - weight : normal ;
margin : 0 ;
}
h3 {
margin - top : 0.1 rem ;
margin - bottom : 0 ;
}
}
}
. featured - version {
@ extend % row ;
padding - top : var ( -- spacing - card - sm ) ;
padding - bottom : var ( -- spacing - card - sm ) ;
. download {
display : flex ;
align - items : center ;
height : 2.25 rem ;
width : 2.25 rem ;
border - radius : 2 rem ;
background - color : var ( -- color - button - bg ) ;
margin - right : var ( -- spacing - card - sm ) ;
2021-06-17 22:03:12 -07:00
& : hover {
background - color : var ( -- color - button - bg - hover ) ;
}
2021-03-29 18:14:06 -07:00
svg {
width : 1.25 rem ;
margin : auto ;
}
flex - shrink : 0 ;
}
. info {
@ extend % column ;
font - size : var ( -- font - size - xs ) ;
. top {
@ extend % row ;
. badge {
font - size : var ( -- font - size - xs ) ;
margin - right : var ( -- spacing - card - sm ) ;
}
. title {
margin : auto 0 ;
}
}
. bottom {
margin - top : 0.25 rem ;
@ extend % row ;
. loader {
height : 1 rem ;
}
}
}
}
. links {
padding : 0.5 rem 1 rem ;
. link {
display : flex ;
align - items : center ;
padding : 0.25 rem 0 ;
svg {
width : 1 rem ;
height : 1 rem ;
margin - right : 0.3 rem ;
}
& : hover ,
& : focus {
padding - bottom : calc ( 0.25 rem - 3 px ) ;
border - bottom : 3 px solid var ( -- color - brand - disabled ) ;
color : var ( -- color - text - medium ) ;
}
}
}
}
. limit - text - width {
display : inline - block ;
height : 1 em ;
overflow : hidden ;
text - overflow : ellipsis ;
white - space : nowrap ;
}
@ media screen and ( max - width : 550 px ) {
. title a {
display : none ;
}
}
@ media screen and ( max - width : 800 px ) {
. mod - navigation {
display : block ;
overflow - x : auto ;
overflow - wrap : break - word ;
overflow - y : hidden ;
}
}
2021-03-31 19:09:18 +02:00
/ *
2021-03-29 18:14:06 -07:00
@ media screen and ( max - width : 1400 px ) {
. mod - info {
display : none ;
}
}
2021-03-31 19:09:18 +02:00
* /
2021-03-29 18:14:06 -07:00
< / style >