1
0
mirror of https://github.com/Jermolene/TiddlyWiki5 synced 2025-01-07 07:50:26 +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.
<<.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}}

View File

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

View File

@ -8,6 +8,6 @@ type: text/vnd.tiddlywiki
<div class="tc-cards">
<$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>
</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;
}
.tc-wrapper-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 {
padding: 10px 30px;
border-radius: 5px;

View File

@ -87,83 +87,3 @@ type: text/vnd.tiddlywiki
<$link to=<<tiddler>>/>:
<$transclude $variable=tw-code tiddler=<<tiddler>> />
\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