Added Meta for Pages (#29)
* Added meta changes. Co-authored-by: Alek Petuskey <alekpetuskey@Aleks-MacBook-Pro.local>
This commit is contained in:
parent
45a8997169
commit
91bb3f0b26
@ -179,6 +179,8 @@ class App(Base):
|
|||||||
component: Union[Component, ComponentCallable],
|
component: Union[Component, ComponentCallable],
|
||||||
path: Optional[str] = None,
|
path: Optional[str] = None,
|
||||||
title: str = constants.DEFAULT_TITLE,
|
title: str = constants.DEFAULT_TITLE,
|
||||||
|
description: str = constants.DEFAULT_DESCRIPTION,
|
||||||
|
image=constants.DEFAULT_IMAGE,
|
||||||
):
|
):
|
||||||
"""Add a page to the app.
|
"""Add a page to the app.
|
||||||
|
|
||||||
@ -189,6 +191,8 @@ class App(Base):
|
|||||||
component: The component to display at the page.
|
component: The component to display at the page.
|
||||||
path: The path to display the component at.
|
path: The path to display the component at.
|
||||||
title: The title of the page.
|
title: The title of the page.
|
||||||
|
description: The description of the page.
|
||||||
|
image: The image to display on the page.
|
||||||
"""
|
"""
|
||||||
# If the path is not set, get it from the callable.
|
# If the path is not set, get it from the callable.
|
||||||
if path is None:
|
if path is None:
|
||||||
@ -216,7 +220,7 @@ class App(Base):
|
|||||||
component = component if isinstance(component, Component) else component(*args)
|
component = component if isinstance(component, Component) else component(*args)
|
||||||
|
|
||||||
# Add the title to the component.
|
# Add the title to the component.
|
||||||
compiler_utils.add_title(component, title)
|
compiler_utils.add_meta(component, title, description, image)
|
||||||
|
|
||||||
# Format the route.
|
# Format the route.
|
||||||
route = utils.format_route(path)
|
route = utils.format_route(path)
|
||||||
|
@ -16,6 +16,8 @@ from pynecone.components.base import (
|
|||||||
Main,
|
Main,
|
||||||
Script,
|
Script,
|
||||||
Title,
|
Title,
|
||||||
|
Description,
|
||||||
|
Image,
|
||||||
)
|
)
|
||||||
from pynecone.components.component import ImportDict
|
from pynecone.components.component import ImportDict
|
||||||
from pynecone.state import State
|
from pynecone.state import State
|
||||||
@ -202,15 +204,24 @@ def create_theme(style: Style) -> Dict:
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
def add_title(page: Component, title: str) -> Component:
|
def add_meta(page: Component, title, image, description) -> Component:
|
||||||
"""Add a title to a page.
|
"""Add metadata to a page.
|
||||||
|
|
||||||
Args:
|
Args:
|
||||||
page: The component for the page.
|
page: The component for the page.
|
||||||
title: The title to add.
|
title: The title of the page.
|
||||||
|
image: The image for the page.
|
||||||
|
description: The description of the page.
|
||||||
|
|
||||||
Returns:
|
Returns:
|
||||||
The component with the title added.
|
The component with the metadata added.
|
||||||
"""
|
"""
|
||||||
page.children.append(Head.create(Title.create(title)))
|
page.children.append(
|
||||||
|
Head.create(
|
||||||
|
Title.create(title),
|
||||||
|
Description.create(content=description),
|
||||||
|
Image.create(content=image),
|
||||||
|
)
|
||||||
|
)
|
||||||
|
|
||||||
return page
|
return page
|
||||||
|
@ -4,4 +4,4 @@ from .body import Body
|
|||||||
from .document import DocumentHead, Html, Main, Script
|
from .document import DocumentHead, Html, Main, Script
|
||||||
from .head import Head
|
from .head import Head
|
||||||
from .link import Link
|
from .link import Link
|
||||||
from .title import Title
|
from .meta import Title, Description, Image
|
||||||
|
@ -3,13 +3,13 @@
|
|||||||
from pynecone.components.base.bare import Bare
|
from pynecone.components.base.bare import Bare
|
||||||
from pynecone.components.component import Component
|
from pynecone.components.component import Component
|
||||||
from pynecone.components.tags import Tag
|
from pynecone.components.tags import Tag
|
||||||
|
from typing import Optional
|
||||||
|
|
||||||
|
|
||||||
class Title(Component):
|
class Title(Component):
|
||||||
"""A component that displays the title of the current page."""
|
"""A component that displays the title of the current page."""
|
||||||
|
|
||||||
def _render(self) -> Tag:
|
tag = "title"
|
||||||
return Tag(name="title")
|
|
||||||
|
|
||||||
def render(self) -> str:
|
def render(self) -> str:
|
||||||
"""Render the title component.
|
"""Render the title component.
|
||||||
@ -23,3 +23,29 @@ class Title(Component):
|
|||||||
self.children[0], Bare
|
self.children[0], Bare
|
||||||
), "Title must be a single string."
|
), "Title must be a single string."
|
||||||
return str(tag.set(contents=str(self.children[0].contents)))
|
return str(tag.set(contents=str(self.children[0].contents)))
|
||||||
|
|
||||||
|
|
||||||
|
class Meta(Component):
|
||||||
|
"""A component that displays metadata for the current page."""
|
||||||
|
|
||||||
|
tag = "meta"
|
||||||
|
|
||||||
|
|
||||||
|
class Description(Meta):
|
||||||
|
"""A component that displays the title of the current page."""
|
||||||
|
|
||||||
|
# The description of the page.
|
||||||
|
content: Optional[str] = None
|
||||||
|
|
||||||
|
# The type of the description.
|
||||||
|
name: str = "description"
|
||||||
|
|
||||||
|
|
||||||
|
class Image(Meta):
|
||||||
|
"""A component that displays the title of the current page."""
|
||||||
|
|
||||||
|
# The image of the page.
|
||||||
|
content: Optional[str] = None
|
||||||
|
|
||||||
|
# The type of the image.
|
||||||
|
property: str = "og:image"
|
@ -102,6 +102,12 @@ DB_NAME = "pynecone.db"
|
|||||||
DB_URL = f"sqlite:///{DB_NAME}"
|
DB_URL = f"sqlite:///{DB_NAME}"
|
||||||
# The default title to show for Pynecone apps.
|
# The default title to show for Pynecone apps.
|
||||||
DEFAULT_TITLE = "Pynecone App"
|
DEFAULT_TITLE = "Pynecone App"
|
||||||
|
# The default description to show for Pynecone apps.
|
||||||
|
DEFAULT_DESCRIPTION = "A Pynecone app."
|
||||||
|
# The default image to show for Pynecone apps.
|
||||||
|
DEFAULT_IMAGE = "favicon.ico"
|
||||||
|
|
||||||
|
|
||||||
# The name of the pynecone config module.
|
# The name of the pynecone config module.
|
||||||
CONFIG_MODULE = "pcconfig"
|
CONFIG_MODULE = "pcconfig"
|
||||||
# The python config file.
|
# The python config file.
|
||||||
|
Loading…
Reference in New Issue
Block a user