mirror of
https://github.com/kremalicious/blog.git
synced 2024-12-22 17:23:50 +01:00
add buttons, more post meta
This commit is contained in:
parent
371831faff
commit
f3f5f3381f
@ -37,13 +37,16 @@ npm run build
|
|||||||
|
|
||||||
### Posts
|
### Posts
|
||||||
|
|
||||||
<a rel="license" href="http://creativecommons.org/licenses/by-nc-sa/4.0/"><img alt="Creative Commons License" style="border-width:0" src="https://i.creativecommons.org/l/by-nc-sa/4.0/80x15.png" /></a><br />All post content under `_src/_posts` is licensed under a <a rel="license" href="http://creativecommons.org/licenses/by-nc-sa/4.0/">Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International License</a>.
|
<a rel="license" href="http://creativecommons.org/licenses/by-nc-sa/4.0/">
|
||||||
|
<img alt="Creative Commons License" style="border-width:0;" src="https://i.creativecommons.org/l/by-nc-sa/4.0/80x15.png" />
|
||||||
|
</a><br />
|
||||||
|
All post content under `_src/_posts` is licensed under a <a rel="license" href="http://creativecommons.org/licenses/by-nc-sa/4.0/">Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International License</a>.
|
||||||
|
|
||||||
### Photos & images
|
### Photos & images
|
||||||
|
|
||||||
All photos & image assets under `_src/_media`, `_src/assets/img`, and `assets sheet.psd` are plain ol' copyright.
|
All photos & image assets under `_src/_media`, `_src/assets/img`, and `assets sheet.psd` are plain ol' copyright.
|
||||||
|
|
||||||
Copyright (c) 2008–2017 Matthias Kretschmann
|
Copyright (c) 2008–2018 Matthias Kretschmann
|
||||||
|
|
||||||
Don't care if you fork & play with it, but you're not allowed to publish anything from it as a whole without my written permission.
|
Don't care if you fork & play with it, but you're not allowed to publish anything from it as a whole without my written permission.
|
||||||
|
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
---
|
---
|
||||||
type: link
|
type: link
|
||||||
|
|
||||||
title: The origins of the <blink> tag
|
title: The origins of the <blink> tag
|
||||||
linkurl: http://www.montulli.org/theoriginofthe%3Cblink%3Etag
|
linkurl: http://www.montulli.org/theoriginofthe%3Cblink%3Etag
|
||||||
author: Matthias Kretschmann
|
author: Matthias Kretschmann
|
||||||
|
|
||||||
|
@ -33,7 +33,7 @@ The full size I designed the wallpaper in is 3200x2048px. I don't know why Apple
|
|||||||
Download the whole package with all the sizes included or grab the individual ones from the list, all linked to the image files:
|
Download the whole package with all the sizes included or grab the individual ones from the list, all linked to the image files:
|
||||||
|
|
||||||
<p class="content-download">
|
<p class="content-download">
|
||||||
<a class="icon-download" href="/media/project-purple-kremalicious.zip">Download <span> zip</span></a>
|
<a class="icon-download" href="../media/project-purple-kremalicious.zip">Download <span> zip</span></a>
|
||||||
</p>
|
</p>
|
||||||
|
|
||||||
* [Desktop/rMBP/iPad 3 (3200x2048)](../media/project-purple-kremalicious.png)
|
* [Desktop/rMBP/iPad 3 (3200x2048)](../media/project-purple-kremalicious.png)
|
||||||
|
@ -34,7 +34,7 @@
|
|||||||
"gatsby-remark-images": "^2.0.1-beta.7",
|
"gatsby-remark-images": "^2.0.1-beta.7",
|
||||||
"gatsby-remark-prismjs": "^3.0.0-beta.3",
|
"gatsby-remark-prismjs": "^3.0.0-beta.3",
|
||||||
"gatsby-remark-smartypants": "^2.0.0-beta.2",
|
"gatsby-remark-smartypants": "^2.0.0-beta.2",
|
||||||
"gatsby-source-filesystem": "^2.0.1-beta.6",
|
"gatsby-source-filesystem": "^2.0.1-beta.7",
|
||||||
"gatsby-transformer-remark": "^2.1.1-beta.3",
|
"gatsby-transformer-remark": "^2.1.1-beta.3",
|
||||||
"gatsby-transformer-sharp": "^2.1.1-beta.5",
|
"gatsby-transformer-sharp": "^2.1.1-beta.5",
|
||||||
"gatsby-transformer-yaml": "^2.1.1-beta.2",
|
"gatsby-transformer-yaml": "^2.1.1-beta.2",
|
||||||
|
21
src/components/atoms/PostLinkActions.jsx
Normal file
21
src/components/atoms/PostLinkActions.jsx
Normal file
@ -0,0 +1,21 @@
|
|||||||
|
import React from 'react'
|
||||||
|
import PropTypes from 'prop-types'
|
||||||
|
import styles from './PostLinkActions.module.scss'
|
||||||
|
|
||||||
|
const PostLinkActions = ({ linkurl, slug }) => (
|
||||||
|
<div className={styles.postLinkActions}>
|
||||||
|
<a className="more-link" href={linkurl}>
|
||||||
|
Go to source
|
||||||
|
</a>
|
||||||
|
<a className="more-link" href={slug} rel="tooltip" title="Permalink">
|
||||||
|
Permalink
|
||||||
|
</a>
|
||||||
|
</div>
|
||||||
|
)
|
||||||
|
|
||||||
|
PostLinkActions.propTypes = {
|
||||||
|
slug: PropTypes.string.isRequired,
|
||||||
|
linkurl: PropTypes.string
|
||||||
|
}
|
||||||
|
|
||||||
|
export default PostLinkActions
|
8
src/components/atoms/PostLinkActions.module.scss
Normal file
8
src/components/atoms/PostLinkActions.module.scss
Normal file
@ -0,0 +1,8 @@
|
|||||||
|
@import 'variables';
|
||||||
|
|
||||||
|
.postLinkActions {
|
||||||
|
display: flex;
|
||||||
|
justify-content: space-between;
|
||||||
|
margin-top: $spacer * 2;
|
||||||
|
margin-bottom: $spacer * 2;
|
||||||
|
}
|
24
src/components/atoms/PostTitle.jsx
Normal file
24
src/components/atoms/PostTitle.jsx
Normal file
@ -0,0 +1,24 @@
|
|||||||
|
import React from 'react'
|
||||||
|
import PropTypes from 'prop-types'
|
||||||
|
import styles from './PostTitle.module.scss'
|
||||||
|
|
||||||
|
const PostTitle = ({ type, linkurl, title }) =>
|
||||||
|
type === 'link' ? (
|
||||||
|
<h1
|
||||||
|
className={[styles.hentry__title, styles.hentry__title__link].join(' ')}
|
||||||
|
>
|
||||||
|
<a href={linkurl} title={`Go to source: ${linkurl}`}>
|
||||||
|
{title}
|
||||||
|
</a>
|
||||||
|
</h1>
|
||||||
|
) : (
|
||||||
|
<h1 className={styles.hentry__title}>{title}</h1>
|
||||||
|
)
|
||||||
|
|
||||||
|
PostTitle.propTypes = {
|
||||||
|
type: PropTypes.string,
|
||||||
|
title: PropTypes.string.isRequired,
|
||||||
|
linkurl: PropTypes.string
|
||||||
|
}
|
||||||
|
|
||||||
|
export default PostTitle
|
16
src/components/atoms/PostTitle.module.scss
Normal file
16
src/components/atoms/PostTitle.module.scss
Normal file
@ -0,0 +1,16 @@
|
|||||||
|
@import 'variables';
|
||||||
|
|
||||||
|
// Post Title
|
||||||
|
/////////////////////////////////////
|
||||||
|
|
||||||
|
.hentry__title {
|
||||||
|
font-size: $font-size-h1;
|
||||||
|
text-align: center;
|
||||||
|
color: $color-headings;
|
||||||
|
margin-top: 0;
|
||||||
|
margin-bottom: $spacer;
|
||||||
|
}
|
||||||
|
|
||||||
|
.hentry__title__link {
|
||||||
|
font-size: $font-size-h3;
|
||||||
|
}
|
@ -1,14 +1,17 @@
|
|||||||
import React from 'react'
|
import React from 'react'
|
||||||
import PropTypes from 'prop-types'
|
import PropTypes from 'prop-types'
|
||||||
import Time from 'react-time'
|
import Time from 'react-time'
|
||||||
|
import PostLinkActions from '../atoms/PostLinkActions'
|
||||||
import styles from './PostMeta.module.scss'
|
import styles from './PostMeta.module.scss'
|
||||||
|
|
||||||
const PostMeta = ({ post, meta }) => {
|
const PostMeta = ({ post, meta }) => {
|
||||||
const { author, updated, category, tags } = post.frontmatter
|
const { author, updated, category, tags, type, linkurl } = post.frontmatter
|
||||||
const { date } = post.fields
|
const { date, slug } = post.fields
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<footer className={styles.entryMeta}>
|
<footer className={styles.entryMeta}>
|
||||||
|
{type === 'link' && <PostLinkActions slug={slug} linkurl={linkurl} />}
|
||||||
|
|
||||||
<div className={styles.byline}>
|
<div className={styles.byline}>
|
||||||
<span className={styles.by}>by</span>
|
<span className={styles.by}>by</span>
|
||||||
<a className="fn" rel="author" href={meta.author.uri}>
|
<a className="fn" rel="author" href={meta.author.uri}>
|
||||||
@ -29,9 +32,11 @@ const PostMeta = ({ post, meta }) => {
|
|||||||
</div>
|
</div>
|
||||||
|
|
||||||
{category && (
|
{category && (
|
||||||
<a className={styles.category} href="/">
|
<div className={styles.categories}>
|
||||||
{category}
|
<a className={styles.category} href="/">
|
||||||
</a>
|
{category}
|
||||||
|
</a>
|
||||||
|
</div>
|
||||||
)}
|
)}
|
||||||
|
|
||||||
{tags && (
|
{tags && (
|
||||||
|
@ -17,7 +17,7 @@
|
|||||||
|
|
||||||
.byline,
|
.byline,
|
||||||
.time {
|
.time {
|
||||||
font-size: italic;
|
font-style: italic;
|
||||||
}
|
}
|
||||||
|
|
||||||
.byline {
|
.byline {
|
||||||
@ -37,6 +37,7 @@
|
|||||||
|
|
||||||
.categories {
|
.categories {
|
||||||
margin-bottom: $spacer / 2;
|
margin-bottom: $spacer / 2;
|
||||||
|
text-align: center;
|
||||||
}
|
}
|
||||||
|
|
||||||
.category {
|
.category {
|
||||||
@ -64,9 +65,6 @@
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
.tags {
|
|
||||||
}
|
|
||||||
|
|
||||||
.tag {
|
.tag {
|
||||||
color: $text-color;
|
color: $text-color;
|
||||||
margin-right: 5px;
|
margin-right: 5px;
|
||||||
|
227
src/styles/_buttons.scss
Normal file
227
src/styles/_buttons.scss
Normal file
@ -0,0 +1,227 @@
|
|||||||
|
@import 'variables';
|
||||||
|
@import 'mixins';
|
||||||
|
|
||||||
|
.btn,
|
||||||
|
a.btn {
|
||||||
|
text-align: center;
|
||||||
|
display: inline-block;
|
||||||
|
margin-bottom: 0;
|
||||||
|
vertical-align: middle;
|
||||||
|
touch-action: manipulation;
|
||||||
|
cursor: pointer;
|
||||||
|
background-image: none; // Reset unusual Firefox-on-Android default style
|
||||||
|
white-space: nowrap;
|
||||||
|
user-select: none;
|
||||||
|
transition: all .2s ease-in-out;
|
||||||
|
|
||||||
|
// Default Button
|
||||||
|
@include button-size(
|
||||||
|
$padding-base-vertical,
|
||||||
|
$padding-base-horizontal,
|
||||||
|
$font-size-small,
|
||||||
|
$line-height,
|
||||||
|
$border-radius
|
||||||
|
);
|
||||||
|
|
||||||
|
background-color: rgba(255, 255, 255, .1);
|
||||||
|
border: 1px solid rgba(94, 131, 162, .3);
|
||||||
|
border-bottom-color: rgba(94, 131, 162, .4);
|
||||||
|
font-family: $font-family-headings;
|
||||||
|
font-weight: $font-weight-headings;
|
||||||
|
color: $brand-grey;
|
||||||
|
text-transform: uppercase;
|
||||||
|
box-shadow: 0 1px 3px rgba($brand-grey-light, .1),
|
||||||
|
inset 0 1px 0 rgba(255, 255, 255, .7);
|
||||||
|
|
||||||
|
@media (min-width: $screen-sm) {
|
||||||
|
max-width: 20rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
&:hover,
|
||||||
|
&:focus {
|
||||||
|
outline: 0;
|
||||||
|
background-color: rgba(255, 255, 255, .5);
|
||||||
|
}
|
||||||
|
|
||||||
|
&:active {
|
||||||
|
color: $brand-grey;
|
||||||
|
border-color: rgba(94, 131, 162, .3);
|
||||||
|
background-color: transparent;
|
||||||
|
box-shadow: 0 1px 0 #fff;
|
||||||
|
transition: none;
|
||||||
|
outline: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
&:focus {
|
||||||
|
outline: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Disabled State
|
||||||
|
&.disabled,
|
||||||
|
&[disabled],
|
||||||
|
fieldset[disabled] & {
|
||||||
|
cursor: not-allowed;
|
||||||
|
pointer-events: none;
|
||||||
|
opacity: .6;
|
||||||
|
box-shadow: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
// grid buttons
|
||||||
|
&.col2,
|
||||||
|
&.col3 {
|
||||||
|
margin-bottom: $spacer / 2;
|
||||||
|
|
||||||
|
@media (min-width: $screen-sm) {
|
||||||
|
margin-bottom: 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
span {
|
||||||
|
font-size: .9rem;
|
||||||
|
color: rgba(19, 56, 50, .6);
|
||||||
|
margin-left: .3em;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Primary Button
|
||||||
|
.btn-primary,
|
||||||
|
a.btn-primary {
|
||||||
|
@extend .btn;
|
||||||
|
|
||||||
|
color: darken($link-color, 50%);
|
||||||
|
text-shadow: 0 1px 0 rgba(255, 255, 255, .3);
|
||||||
|
background: lighten($link-color, 15%);
|
||||||
|
border-color: $link-color;
|
||||||
|
box-shadow: 0 1px 3px rgba($brand-grey-light, .4),
|
||||||
|
inset 0 1px 0 rgba(255, 255, 255, .4);
|
||||||
|
|
||||||
|
&:hover,
|
||||||
|
&:focus {
|
||||||
|
color: darken($link-color, 50%);
|
||||||
|
background-color: lighten($link-color, 25%);
|
||||||
|
text-shadow: 0 1px 0 rgba(255, 255, 255, .3);
|
||||||
|
}
|
||||||
|
|
||||||
|
&:active {
|
||||||
|
color: darken($link-color, 50%);
|
||||||
|
border-color: darken($link-color, 10%);
|
||||||
|
background-color: lighten($link-color, 15%);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.more-link {
|
||||||
|
font-family: $font-family-headings;
|
||||||
|
font-weight: $font-weight-headings;
|
||||||
|
font-size: $font-size-small;
|
||||||
|
color: $link-color;
|
||||||
|
text-transform: uppercase;
|
||||||
|
|
||||||
|
.icon {
|
||||||
|
top: .15em;
|
||||||
|
position: relative;
|
||||||
|
width: 18px;
|
||||||
|
height: 18px;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.btn-block {
|
||||||
|
display: block;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Close button
|
||||||
|
/////////////////////////////////////
|
||||||
|
|
||||||
|
.close {
|
||||||
|
text-align: center;
|
||||||
|
display: block;
|
||||||
|
color: lighten($brand-grey-light, 50%);
|
||||||
|
line-height: 1;
|
||||||
|
font-size: $font-size-large;
|
||||||
|
padding: 3px;
|
||||||
|
cursor: pointer;
|
||||||
|
|
||||||
|
&button {
|
||||||
|
cursor: pointer;
|
||||||
|
background: transparent;
|
||||||
|
border: 0;
|
||||||
|
-webkit-appearance: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
&:hover,
|
||||||
|
&:focus {
|
||||||
|
color: lighten($brand-grey-light, 20%);
|
||||||
|
cursor: pointer;
|
||||||
|
outline: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
&:active {
|
||||||
|
background: none;
|
||||||
|
color: $brand-grey-light;
|
||||||
|
transition: none;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// some helper classes for old content
|
||||||
|
/////////////////////////////////////
|
||||||
|
|
||||||
|
.content-download {
|
||||||
|
text-align: center;
|
||||||
|
display: block;
|
||||||
|
margin-top: $spacer * 2;
|
||||||
|
margin-bottom: $spacer * 2;
|
||||||
|
|
||||||
|
@media (min-width: $screen-xs) {
|
||||||
|
display: flex;
|
||||||
|
}
|
||||||
|
|
||||||
|
a {
|
||||||
|
@extend .btn;
|
||||||
|
|
||||||
|
flex: 1;
|
||||||
|
margin-left: $spacer / 2;
|
||||||
|
|
||||||
|
&:first-child {
|
||||||
|
margin-left: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
&:only-child {
|
||||||
|
margin-left: auto;
|
||||||
|
margin-right: auto;
|
||||||
|
}
|
||||||
|
|
||||||
|
span {
|
||||||
|
font-size: $font-size-mini;
|
||||||
|
color: $text-color-light;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.icon-download,
|
||||||
|
.icon-heart,
|
||||||
|
.icon-wordpress,
|
||||||
|
.icon-github,
|
||||||
|
.icon-eye {
|
||||||
|
&::before {
|
||||||
|
content: '';
|
||||||
|
width: 18px;
|
||||||
|
height: 18px;
|
||||||
|
display: inline-block;
|
||||||
|
margin-right: 5px;
|
||||||
|
margin-bottom: -3px;
|
||||||
|
opacity: .35;
|
||||||
|
background: url('../images/arrow-with-circle-down.svg') no-repeat
|
||||||
|
left center;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.icon-heart::before {
|
||||||
|
background-image: url('../images/heart.svg');
|
||||||
|
}
|
||||||
|
|
||||||
|
.icon-github::before {
|
||||||
|
background-image: url('../images/github.svg');
|
||||||
|
}
|
||||||
|
|
||||||
|
.icon-eye::before {
|
||||||
|
background-image: url('../images/eye.svg');
|
||||||
|
}
|
||||||
|
}
|
@ -74,6 +74,8 @@ $color-headings--dark: $brand-main-light;
|
|||||||
/////////////////////////////////////
|
/////////////////////////////////////
|
||||||
|
|
||||||
$spacer: ($font-size-base * $line-height);
|
$spacer: ($font-size-base * $line-height);
|
||||||
|
$padding-base-vertical: 8px;
|
||||||
|
$padding-base-horizontal: 12px;
|
||||||
|
|
||||||
$border-radius: 3px;
|
$border-radius: 3px;
|
||||||
|
|
||||||
|
@ -356,3 +356,4 @@ blockquote {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@import 'code';
|
@import 'code';
|
||||||
|
@import 'buttons';
|
||||||
|
@ -12,17 +12,6 @@
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// Post Title
|
|
||||||
/////////////////////////////////////
|
|
||||||
|
|
||||||
.hentry__title {
|
|
||||||
font-size: $font-size-h1;
|
|
||||||
text-align: center;
|
|
||||||
color: $color-headings;
|
|
||||||
margin-top: 0;
|
|
||||||
margin-bottom: $spacer;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Post/photo teaser
|
// Post/photo teaser
|
||||||
/////////////////////////////////////
|
/////////////////////////////////////
|
||||||
|
|
||||||
@ -62,3 +51,16 @@
|
|||||||
margin-bottom: 0;
|
margin-bottom: 0;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Goodies download
|
||||||
|
/////////////////////////////////////
|
||||||
|
|
||||||
|
.goodie-actions {
|
||||||
|
text-align: center;
|
||||||
|
max-width: 640px;
|
||||||
|
|
||||||
|
.btn {
|
||||||
|
margin-bottom: 0;
|
||||||
|
display: block;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
@ -4,25 +4,28 @@ import Helmet from 'react-helmet'
|
|||||||
import { graphql } from 'gatsby'
|
import { graphql } from 'gatsby'
|
||||||
import Layout from '../components/Layout'
|
import Layout from '../components/Layout'
|
||||||
import Image from '../components/atoms/Image'
|
import Image from '../components/atoms/Image'
|
||||||
|
import PostTitle from '../components/atoms/PostTitle'
|
||||||
import PostMeta from '../components/molecules/PostMeta'
|
import PostMeta from '../components/molecules/PostMeta'
|
||||||
import styles from './Post.module.scss'
|
import styles from './Post.module.scss'
|
||||||
|
|
||||||
const Post = ({ data }) => {
|
const Post = ({ data }) => {
|
||||||
const { markdownRemark: post } = data
|
const { markdownRemark: post } = data
|
||||||
const { contentYaml: meta } = data
|
const { contentYaml: meta } = data
|
||||||
const { title, image } = post.frontmatter
|
const { title, image, type, linkurl } = post.frontmatter
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<Layout location={location}>
|
<Layout location={location}>
|
||||||
<Helmet title={title} />
|
<Helmet title={title} />
|
||||||
|
|
||||||
<article className={styles.hentry}>
|
<article className={styles.hentry}>
|
||||||
<h1 className={styles.hentry__title}>{title}</h1>
|
<PostTitle type={type} linkurl={linkurl} title={title} />
|
||||||
|
|
||||||
{image && (
|
{image && (
|
||||||
<figure className={styles.hentry__teaser}>
|
<figure className={styles.hentry__teaser}>
|
||||||
<Image fluid={image.childImageSharp.fluid} alt={title} />
|
<Image fluid={image.childImageSharp.fluid} alt={title} />
|
||||||
</figure>
|
</figure>
|
||||||
)}
|
)}
|
||||||
|
|
||||||
<div
|
<div
|
||||||
className={styles.hentry__content}
|
className={styles.hentry__content}
|
||||||
dangerouslySetInnerHTML={{ __html: post.html }}
|
dangerouslySetInnerHTML={{ __html: post.html }}
|
||||||
@ -45,6 +48,7 @@ export const pageQuery = graphql`
|
|||||||
markdownRemark(fields: { slug: { eq: $slug } }) {
|
markdownRemark(fields: { slug: { eq: $slug } }) {
|
||||||
html
|
html
|
||||||
frontmatter {
|
frontmatter {
|
||||||
|
type
|
||||||
title
|
title
|
||||||
image {
|
image {
|
||||||
childImageSharp {
|
childImageSharp {
|
||||||
@ -55,6 +59,7 @@ export const pageQuery = graphql`
|
|||||||
updated
|
updated
|
||||||
category
|
category
|
||||||
tags
|
tags
|
||||||
|
linkurl
|
||||||
}
|
}
|
||||||
fields {
|
fields {
|
||||||
slug
|
slug
|
||||||
|
Loading…
Reference in New Issue
Block a user