1
0
mirror of https://github.com/Jermolene/TiddlyWiki5 synced 2025-01-23 07:26:54 +00:00

Move all the card related definitions into their own folder

Perhaps preparatory to making them into a plugin, or putting them into the core
This commit is contained in:
Jeremy Ruston 2024-10-07 11:53:24 +01:00
parent f494daa8dd
commit 5af26067b6
8 changed files with 337 additions and 334 deletions

View File

@ -0,0 +1,86 @@
code-body: yes
tags: $:/tags/Macro
title: $:/cards/procedures
type: text/vnd.tiddlywiki
\whitespace trim
\procedure flex-card(class,bordercolor:"",backgroundcolor:"",textcolor:"",imageField:"image",captionField:"caption",subtitle:"",descriptionField:"description",linkField:"link")
<$link class={{{ [<class>addprefix[tc-card ]] }}}
to={{{ [<currentTiddler>get<linkField>else<currentTiddler>] }}}
aria-label=<<currentTiddler>>
>
<$transclude
$variable="flex-card-body"
bordercolor=<<bordercolor>>
backgroundcolor=<<backgroundcolor>>
textcolor=<<textcolor>>
imageField=<<imageField>>
captionField=<<captionField>>
subtitle=<<subtitle>>
descriptionField=<<descriptionField>>
/>
</$link>
\end
\procedure flex-card-external(class,bordercolor:"",backgroundcolor:"",textcolor:"",imageField:"image",captionField:"caption",subtitle:"",descriptionField:"description",linkField:"url")
<a class={{{ [<class>addprefix[tc-card ]addprefix[tc-tiddlylink ]] }}}
href={{{ [<currentTiddler>get<linkField>] }}}
aria-label=<<currentTiddler>>
rel="noopener noreferrer"
target="_blank"
>
<$transclude
$variable="flex-card-body"
bordercolor=<<bordercolor>>
backgroundcolor=<<backgroundcolor>>
textcolor=<<textcolor>>
imageField=<<imageField>>
captionField=<<captionField>>
subtitle=<<subtitle>>
descriptionField=<<descriptionField>>
/>
</a>
\end
\procedure flex-card-body(bordercolor,backgroundcolor,textcolor,imageField,captionField,subtitle,descriptionField)
<div class="tc-card-accent" style.borderTop={{{ [<bordercolor>!is[blank]addprefix[5px solid ]] }}} style.background={{!!background}} style.backgroundColor=<<backgroundcolor>> style.color=<<textcolor>> style.fill=<<textcolor>>>
<$list filter="[<currentTiddler>has[ribbon-text]]" variable="ignore">
<div class="tc-card-ribbon-wrapper" aria-hidden="true">
<div class="tc-card-ribbon" style.backgroundColor={{{ [<currentTiddler>get[ribbon-color]else[red]] }}}>
<div class="tc-card-ribbon-inner">
<$text text={{!!ribbon-text}}/>
</div>
</div>
</div>
</$list>
<$list filter="[<currentTiddler>has<imageField>]" variable="ignore">
<div class="tc-card-image">
<$image source={{{ [<currentTiddler>get<imageField>] }}}
alt={{{ [<currentTiddler>get<imageField>get[alt-text]else[Image.]] }}}
/>
</div>
</$list>
<div class="tc-card-title"><$transclude field=<<captionField>>><$view field="title"/></$transclude></div>
<$list filter="[<subtitle>!is[blank]]" variable="ignore">
<div class="tc-card-subtitle">
<$text text=<<subtitle>>/>
</div>
</$list>
<div class="tc-card-icon"><$transclude tiddler={{!!icon}}/></div>
<%if [all[current]get<descriptionField>else[]!match[]] %>
<div class="tc-card-body-wrapper">
<div class="tc-card-body">
<$transclude field=<<descriptionField>> mode="block"/>
</div>
<div class="tc-card-body-clear">
</div>
</div>
<%endif%>
<%if [all[current]has[button-text]] %>
<div class="tc-card-button" style.background-color={{!!button-color}} style.border-color={{!!button-color}}>
<$text text={{!!button-text}}/>&#32;{{$:/core/images/chevron-right}}
</div>
<%endif%>
</div>
\end

View File

@ -0,0 +1,248 @@
tags: $:/tags/Stylesheet
title: $:/cards/styles
type: text/vnd.tiddlywiki
\rules only filteredtranscludeinline transcludeinline macrodef macrocallinline macrocallblock
.tc-cards {
display: flex;
flex-wrap: wrap;
justify-content: space-evenly;
width: 100%;
padding: 0.5em;
background: <<colour background>>;
border-color: rgba(34,36,38,.15);
box-shadow: 0 2px 25px 0 rgb(34 36 38 / 5%) inset;
gap: 1em;
}
.tc-cards.tc-small {
text-align: center;
font-size: 0.7em;
}
.tc-cards.tc-action-card {
text-align: center;
background: none;
}
.tc-cards.tc-cards-vertical {
}
.tc-cards.tc-action-card .tc-card-button {
border: 1px solid <<colour foreground>>;
background: <<colour foreground>>;
margin: 0.5em;
border-radius: 6px;
padding: 0.5em;
color: <<colour background>>;
fill: <<colour background>>;
}
.tc-cards.tc-action-card .tc-card-button svg {
width: 0.65em;
height: 0.65em;
vertical-align: middle;
}
.tc-tiddlylink.tc-card {
font-weight: normal;
flex-grow: 1;
max-width: 250px;
position: relative;
background: <<colour background>>;
color: <<colour foreground>>;
width: 200px;
min-height: 0;
border: none;
border-radius: 8px;
box-shadow: 0 1px 3px 0 #d4d4d5, 0 0 0 1px #d4d4d5;
transition: box-shadow 0.3s ease,transform .3s ease;
}
.tc-cards.tc-cards-vertical .tc-tiddlylink.tc-card {
width: 100%;
}
@media (max-width: 500px) {
.tc-cards {
padding: 0;
}
.tc-tiddlylink.tc-card {
margin: 0.25em;
width: 45%;
}
}
.tc-tiddlylink.tc-card.tc-card-quote {
width: 320px;
box-shadow: none;
background-color: #effdff;
}
.tc-card-accent {
height: 100%;
display: flex;
align-items: stretch;
flex-direction: column;
justify-content: stretch;
border-radius: 8px;
}
.tc-cards.tc-cards-vertical .tc-card-accent {
flex-direction: row;
justify-content: start;
padding: 5px 7px;
align-items: center;
}
.tc-cards.tc-cards-vertical .tc-card-icon {
line-height: 0;
order: 1;
}
.tc-tiddlylink.tc-card:hover {
color: <<colour foreground>>;
background: <<colour notification-background>>;
text-decoration: none;
cursor: pointer;
box-shadow: 0 1px 5px 0 #bcbdbd, 0 0 0 1px #d4d4d5;
transform: translateY(-3px);
}
.tc-card-ribbon-wrapper {
line-height: 0;
width: 75px;
height: 75px;
position: absolute;
right: 0;
overflow: hidden;
top: 0;
z-index: 849;
pointer-events: none;
}
.tc-card-ribbon {
transition: top 0.3s ease-in-out;
top: 15px;
right: -77px;
position: absolute;
transform: rotate(45deg);
background-color: red;
box-shadow: 0px 0px 2px 0px rgb(0 0 0 / 50%);
}
.tc-tiddlylink.tc-card:hover .tc-card-ribbon {
top: -77px;
}
.tc-card-ribbon-inner {
font-size: 10px;
line-height: 13px;
font-weight: 700;
color: white;
text-decoration: none;
text-shadow: 0 -1px rgb(0 0 0 / 50%);
width: 200px;
display: inline-block;
padding: 2px 0;
text-align: center;
}
.tc-card-image {
border-top-left-radius: 8px;
border-top-right-radius: 8px;
line-height: 0;
overflow: hidden;
}
.tc-card-image img {
border-top-left-radius: 8px;
border-top-right-radius: 8px;
width: 100%;
transition: transform 0.3s ease-in-out;
}
.tc-tiddlylink.tc-card:hover .tc-card-image img {
transform: scale(1.05);
}
.tc-card-title {
font-size: 1.2em;
line-height: 1.2;
font-weight: 600;
transition: color 0.3s ease-in-out;
padding: 0 10px;
margin: 0.5em 0 0.25em 0;
}
.tc-cards.tc-cards-vertical .tc-card-title {
font-size: 1.1em;
min-width: 10em;
order: 2;
}
.tc-cards.tc-cards-vertical .tc-card-title svg {
width: 1em;
height: 1em;
vertical-align: text-bottom;
}
.tc-card-subtitle,
.tc-card-author {
font-size: 0.8em;
line-height: 1.2;
color: <<colour muted-foreground>>;
padding: 0 10px;
margin: 0.5em 0;
font-style: italic;
}
.tc-card-body {
font-size: 0.9em;
line-height: 1.2;
padding: 0.25em 10px;
margin: 0;
}
.tc-cards.tc-cards-vertical .tc-card-body {
font-size: 1em;
}
.tc-card-body-wrapper {
position: relative;
flex-grow: 1;
}
.tc-tiddlylink.tc-card.tc-card-quote .tc-card-body:before {
font-family: Georgia, serif;
color: <<colour blockquote-bar>>;
content: open-quote;
font-size: 5em;
line-height: 1;
float: left;
}
.tc-tiddlylink.tc-card.tc-card-quote .tc-card-body:after {
font-family: Georgia, serif;
color: <<colour blockquote-bar>>;
content: close-quote;
font-size: 5em;
line-height: 1;
float: right;
}
.tc-tiddlylink.tc-card .tc-card-body-clear {
clear: both;
}
.tc-card-body > p {
margin: 0.25em 0;
}
.tc-card a:active, .tc-card a:focus, .tc-btn-download:active, .tc-btn-download:focus{
outline: none;
}

View File

@ -8,6 +8,6 @@ Click here to download an empty copy of ~TiddlyWiki: {{$:/editions/tw5.com/snipp
The next step is to choose a method for saving changes. There is a wide variety of methods available, with different features and limitations. Click on the badge for a method to see more information about it. You can also click on one of the platform filters to restrict the listing to methods that work with that platform. The next step is to choose a method for saving changes. There is a wide variety of methods available, with different features and limitations. Click on the badge for a method to see more information about it. You can also click on one of the platform filters to restrict the listing to methods that work with that platform.
<<.warning "Do not attempt to use the browser ''File''/''Save'' menu option to save changes (it does not work expected)">> <<.warning "Do not attempt to use the browser ''File''/''Save'' menu option to save changes (it does not work as expected)">>
{{Saving}} {{Saving}}

View File

@ -2,7 +2,7 @@ title: Quick Start
modified: 20241001141521924 modified: 20241001141521924
list: [[Quick Start: Tiddlyhost]] [[Quick Start: Desktop]] [[Quick Start: DIY]] [[Quick Start: Xememex]] list: [[Quick Start: Tiddlyhost]] [[Quick Start: Desktop]] [[Quick Start: DIY]] [[Quick Start: Xememex]]
icon: $:/core/images/tip icon: $:/core/images/tip
color: #999 color: #cc9
Choose how to get started quickly with ~TiddlyWiki. Choose how to get started quickly with ~TiddlyWiki.

View File

@ -8,6 +8,6 @@ type: text/vnd.tiddlywiki
<div class="tc-cards"> <div class="tc-cards">
<$list filter="[tag[Saving]sort[caption]]"> <$list filter="[tag[Saving]sort[caption]]">
{{||$:/_tw5.com-card-template}} <$macrocall $name="flex-card" bordercolor={{!!color}} captionField="caption" subtitle={{{ [{!!community-author}!is[blank]addprefix[by ]] }}}/>
</$list> </$list>
</div> </div>

View File

@ -1,6 +0,0 @@
created: 20200507002521489
modified: 20220719134613555
title: $:/_tw5.com-card-template
type: text/vnd.tiddlywiki
<$macrocall $name="flex-card" bordercolor={{!!color}} captionField="caption" subtitle={{{ [{!!community-author}!is[blank]addprefix[by ]] }}}/>

View File

@ -86,255 +86,10 @@ type: text/vnd.tiddlywiki
height: 1em; height: 1em;
} }
.tc-wrapper-flex { .tc-wrapper-flex {
display: flex; display: flex;
} }
.tc-cards {
display: flex;
flex-wrap: wrap;
justify-content: space-evenly;
width: 100%;
padding: 0.5em;
background: <<colour background>>;
border-color: rgba(34,36,38,.15);
box-shadow: 0 2px 25px 0 rgb(34 36 38 / 5%) inset;
gap: 1em;
}
.tc-cards.tc-small {
text-align: center;
font-size: 0.7em;
}
.tc-cards.tc-action-card {
text-align: center;
background: none;
}
.tc-cards.tc-cards-vertical {
}
.tc-cards.tc-action-card .tc-card-button {
border: 1px solid <<colour foreground>>;
background: <<colour foreground>>;
margin: 0.5em;
border-radius: 6px;
padding: 0.5em;
color: <<colour background>>;
fill: <<colour background>>;
}
.tc-cards.tc-action-card .tc-card-button svg {
width: 0.65em;
height: 0.65em;
vertical-align: middle;
}
.tc-tiddlylink.tc-card {
font-weight: normal;
flex-grow: 1;
max-width: 250px;
position: relative;
background: <<colour background>>;
color: <<colour foreground>>;
width: 200px;
min-height: 0;
border: none;
border-radius: 8px;
box-shadow: 0 1px 3px 0 #d4d4d5, 0 0 0 1px #d4d4d5;
transition: box-shadow 0.3s ease,transform .3s ease;
}
.tc-cards.tc-cards-vertical .tc-tiddlylink.tc-card {
width: 100%;
}
@media (max-width: 500px) {
.tc-cards {
padding: 0;
}
.tc-tiddlylink.tc-card {
margin: 0.25em;
width: 45%;
}
}
.tc-tiddlylink.tc-card.tc-card-quote {
width: 320px;
box-shadow: none;
background-color: #effdff;
}
.tc-card-accent {
height: 100%;
display: flex;
align-items: stretch;
flex-direction: column;
justify-content: stretch;
border-radius: 8px;
}
.tc-cards.tc-cards-vertical .tc-card-accent {
flex-direction: row;
justify-content: start;
padding: 5px 7px;
align-items: center;
}
.tc-cards.tc-cards-vertical .tc-card-icon {
line-height: 0;
order: 1;
}
.tc-tiddlylink.tc-card:hover {
color: <<colour foreground>>;
background: <<colour notification-background>>;
text-decoration: none;
cursor: pointer;
box-shadow: 0 1px 5px 0 #bcbdbd, 0 0 0 1px #d4d4d5;
transform: translateY(-3px);
}
.tc-card-ribbon-wrapper {
line-height: 0;
width: 75px;
height: 75px;
position: absolute;
right: 0;
overflow: hidden;
top: 0;
z-index: 849;
pointer-events: none;
}
.tc-card-ribbon {
transition: top 0.3s ease-in-out;
top: 15px;
right: -77px;
position: absolute;
transform: rotate(45deg);
background-color: red;
box-shadow: 0px 0px 2px 0px rgb(0 0 0 / 50%);
}
.tc-tiddlylink.tc-card:hover .tc-card-ribbon {
top: -77px;
}
.tc-card-ribbon-inner {
font-size: 10px;
line-height: 13px;
font-weight: 700;
color: white;
text-decoration: none;
text-shadow: 0 -1px rgb(0 0 0 / 50%);
width: 200px;
display: inline-block;
padding: 2px 0;
text-align: center;
}
.tc-card-image {
border-top-left-radius: 8px;
border-top-right-radius: 8px;
line-height: 0;
overflow: hidden;
}
.tc-card-image img {
border-top-left-radius: 8px;
border-top-right-radius: 8px;
width: 100%;
transition: transform 0.3s ease-in-out;
}
.tc-tiddlylink.tc-card:hover .tc-card-image img {
transform: scale(1.05);
}
.tc-card-title {
font-size: 1.2em;
line-height: 1.2;
font-weight: 600;
transition: color 0.3s ease-in-out;
padding: 0 10px;
margin: 0.5em 0 0.25em 0;
}
.tc-cards.tc-cards-vertical .tc-card-title {
font-size: 1.1em;
min-width: 10em;
order: 2;
}
.tc-cards.tc-cards-vertical .tc-card-title svg {
width: 1em;
height: 1em;
vertical-align: text-bottom;
}
.tc-card-subtitle,
.tc-card-author {
font-size: 0.8em;
line-height: 1.2;
color: <<colour muted-foreground>>;
padding: 0 10px;
margin: 0.5em 0;
font-style: italic;
}
.tc-card-body {
font-size: 0.9em;
line-height: 1.2;
padding: 0.25em 10px;
margin: 0;
}
.tc-cards.tc-cards-vertical .tc-card-body {
font-size: 1em;
}
.tc-card-body-wrapper {
position: relative;
flex-grow: 1;
}
.tc-tiddlylink.tc-card.tc-card-quote .tc-card-body:before {
font-family: Georgia, serif;
color: <<colour blockquote-bar>>;
content: open-quote;
font-size: 5em;
line-height: 1;
float: left;
}
.tc-tiddlylink.tc-card.tc-card-quote .tc-card-body:after {
font-family: Georgia, serif;
color: <<colour blockquote-bar>>;
content: close-quote;
font-size: 5em;
line-height: 1;
float: right;
}
.tc-tiddlylink.tc-card .tc-card-body-clear {
clear: both;
}
.tc-card-body > p {
margin: 0.25em 0;
}
.tc-card a:active, .tc-card a:focus, .tc-btn-download:active, .tc-btn-download:focus{
outline: none;
}
.tc-btn-download { .tc-btn-download {
padding: 10px 30px; padding: 10px 30px;
border-radius: 5px; border-radius: 5px;

View File

@ -87,83 +87,3 @@ type: text/vnd.tiddlywiki
<$link to=<<tiddler>>/>: <$link to=<<tiddler>>/>:
<$transclude $variable=tw-code tiddler=<<tiddler>> /> <$transclude $variable=tw-code tiddler=<<tiddler>> />
\end \end
\procedure flex-card(class,bordercolor:"",backgroundcolor:"",textcolor:"",imageField:"image",captionField:"caption",subtitle:"",descriptionField:"description",linkField:"link")
<$link class={{{ [<class>addprefix[tc-card ]] }}}
to={{{ [<currentTiddler>get<linkField>else<currentTiddler>] }}}
aria-label=<<currentTiddler>>
>
<$transclude
$variable="flex-card-body"
bordercolor=<<bordercolor>>
backgroundcolor=<<backgroundcolor>>
textcolor=<<textcolor>>
imageField=<<imageField>>
captionField=<<captionField>>
subtitle=<<subtitle>>
descriptionField=<<descriptionField>>
/>
</$link>
\end
\procedure flex-card-external(class,bordercolor:"",backgroundcolor:"",textcolor:"",imageField:"image",captionField:"caption",subtitle:"",descriptionField:"description",linkField:"url")
<a class={{{ [<class>addprefix[tc-card ]addprefix[tc-tiddlylink ]] }}}
href={{{ [<currentTiddler>get<linkField>] }}}
aria-label=<<currentTiddler>>
rel="noopener noreferrer"
target="_blank"
>
<$transclude
$variable="flex-card-body"
bordercolor=<<bordercolor>>
backgroundcolor=<<backgroundcolor>>
textcolor=<<textcolor>>
imageField=<<imageField>>
captionField=<<captionField>>
subtitle=<<subtitle>>
descriptionField=<<descriptionField>>
/>
</a>
\end
\procedure flex-card-body(bordercolor,backgroundcolor,textcolor,imageField,captionField,subtitle,descriptionField)
<div class="tc-card-accent" style.borderTop={{{ [<bordercolor>!is[blank]addprefix[5px solid ]] }}} style.background={{!!background}} style.backgroundColor=<<backgroundcolor>> style.color=<<textcolor>> style.fill=<<textcolor>>>
<$list filter="[<currentTiddler>has[ribbon-text]]" variable="ignore">
<div class="tc-card-ribbon-wrapper" aria-hidden="true">
<div class="tc-card-ribbon" style.backgroundColor={{{ [<currentTiddler>get[ribbon-color]else[red]] }}}>
<div class="tc-card-ribbon-inner">
<$text text={{!!ribbon-text}}/>
</div>
</div>
</div>
</$list>
<$list filter="[<currentTiddler>has<imageField>]" variable="ignore">
<div class="tc-card-image">
<$image source={{{ [<currentTiddler>get<imageField>] }}}
alt={{{ [<currentTiddler>get<imageField>get[alt-text]else[Image.]] }}}
/>
</div>
</$list>
<div class="tc-card-title"><$transclude field=<<captionField>>><$view field="title"/></$transclude></div>
<$list filter="[<subtitle>!is[blank]]" variable="ignore">
<div class="tc-card-subtitle">
<$text text=<<subtitle>>/>
</div>
</$list>
<div class="tc-card-icon"><$transclude tiddler={{!!icon}}/></div>
<%if [all[current]get<descriptionField>else[]!match[]] %>
<div class="tc-card-body-wrapper">
<div class="tc-card-body">
<$transclude field=<<descriptionField>> mode="block"/>
</div>
<div class="tc-card-body-clear">
</div>
</div>
<%endif%>
<%if [all[current]has[button-text]] %>
<div class="tc-card-button" style.background-color={{!!button-color}} style.border-color={{!!button-color}}>
<$text text={{!!button-text}}/>&#32;{{$:/core/images/chevron-right}}
</div>
<%endif%>
</div>
\end