sutty-jekyll-theme 0.4.1 → 0.5.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- checksums.yaml.gz.sig +0 -0
- data/_data/actions.yml +9 -0
- data/_data/en.yml +69 -0
- data/_data/es.yml +70 -0
- data/_data/layouts/theme.yml +5 -5
- data/_data/manifest.json +679 -7
- data/_includes/activity_pub/actor.html +11 -0
- data/_includes/activity_pub/actor_mention.html +28 -0
- data/_includes/activity_pub/button.html +22 -0
- data/_includes/activity_pub/button_bar.html +16 -0
- data/_includes/activity_pub/cards.html +28 -0
- data/_includes/activity_pub/fediverse_interactions.html +2 -0
- data/_includes/activity_pub/generic_modal.html +55 -0
- data/_includes/activity_pub/image_modal.html +27 -0
- data/_includes/activity_pub/interactions.html +78 -0
- data/_includes/activity_pub/login_modal.html +70 -0
- data/_includes/activity_pub/reaction.html +45 -0
- data/_includes/activity_pub/reactions.html +17 -0
- data/_includes/activity_pub/replying_to.html +23 -0
- data/_includes/activity_pub/text_modal.html +16 -0
- data/_includes/activity_pub/toot_card.html +95 -0
- data/_includes/activity_pub/url.html +8 -0
- data/_includes/activity_pub/video_modal.html +20 -0
- data/_includes/bootstrap/custom_select.html +18 -0
- data/_includes/external_link.html +15 -0
- data/_includes/fa.html +11 -0
- data/_includes/menu.html +14 -1
- data/_includes/menu_dropdown.html +1 -1
- data/_includes/page.html +91 -0
- data/_layouts/code_of_conduct.html +1 -41
- data/_layouts/default.html +1 -0
- data/_layouts/home.html +3 -2
- data/_layouts/license.html +1 -42
- data/_layouts/page.html +1 -68
- data/_layouts/post.html +1 -67
- data/_layouts/privacy_policy.html +1 -42
- data/assets/css/styles.scss +21 -0
- data/assets/fonts/forkawesome-webfont.woff2 +0 -0
- data/assets/js/env.js +8 -0
- data/assets/js/pack.FXJZFZ4Z.js +41 -0
- data/assets/js/pack.FXJZFZ4Z.js.map +7 -0
- data.tar.gz.sig +0 -0
- metadata +42 -4
- metadata.gz.sig +0 -0
- data/assets/js/pack.3XNALAB2.js +0 -27
- data/assets/js/pack.3XNALAB2.js.map +0 -7
@@ -0,0 +1,11 @@
|
|
1
|
+
{% comment %}
|
2
|
+
Render actor's name if it's available, otherwise just return the link.
|
3
|
+
|
4
|
+
@param actor [ActivityDrop] Actor
|
5
|
+
{% endcomment %}
|
6
|
+
|
7
|
+
{% if include.actor.available %}
|
8
|
+
<span>{{ include.actor.name | strip_html }}</span>
|
9
|
+
{% else %}
|
10
|
+
<span>{{ include.actor }}</span>
|
11
|
+
{% endif %}
|
@@ -0,0 +1,28 @@
|
|
1
|
+
{% comment %}
|
2
|
+
@param actor [ActivityDrop] Actor
|
3
|
+
@param without_link [Boolean] Don't link
|
4
|
+
{% endcomment %}
|
5
|
+
|
6
|
+
{% if include.actor.available %}
|
7
|
+
{% assign id = include.actor.id | strip_html %}
|
8
|
+
{% assign instance_hostname = id | split: '/' %}
|
9
|
+
{% assign instance_hostname = instance_hostname[2] %}
|
10
|
+
|
11
|
+
{% capture mention %}
|
12
|
+
@<span>{{- include.actor.preferredUsername | strip_html -}}@{{- instance_hostname -}}</span>
|
13
|
+
{% endcapture %}
|
14
|
+
|
15
|
+
{% capture mention %}
|
16
|
+
<span class="h-card" translate="no">
|
17
|
+
{% if include.without_link %}
|
18
|
+
<span class="mention">{{- mention -}}</span>
|
19
|
+
{% else %}
|
20
|
+
{% include_cached external_link.html class="u-url mention" href=id text=mention %}
|
21
|
+
{% endif %}
|
22
|
+
</span>
|
23
|
+
{% endcapture %}
|
24
|
+
|
25
|
+
{{ mention | normalize_whitespace }}
|
26
|
+
{% else %}
|
27
|
+
{{ include.actor }}
|
28
|
+
{% endif %}
|
@@ -0,0 +1,22 @@
|
|
1
|
+
{%- comment -%}
|
2
|
+
Un botón con link, por ejemplo para Support Us. Si el link es externo,
|
3
|
+
agregar el parámetro de seguridad noopener.
|
4
|
+
|
5
|
+
@param :fa [String]
|
6
|
+
@param :header [Capture] el contenido del encabezado
|
7
|
+
@param :body [Capture] el contenido del cuerpo principal
|
8
|
+
@param :footer [Capture] el contenido del footer
|
9
|
+
@param :header_class [String] las clases que lleva el encabezado
|
10
|
+
@param :body_class [String] las clases que lleva el cuerpo principal
|
11
|
+
@param :footer_class [String] las clases que lleva el footer
|
12
|
+
@param :content_class [String] las clases que lleva todo el bloque de contenido
|
13
|
+
@param :button_class [String] las clases que lleva cada botón
|
14
|
+
{%- endcomment -%}
|
15
|
+
|
16
|
+
<div class="d-inline {{include.button_class}}" data-controller="modal">
|
17
|
+
<button class="btn btn-sm" data-action="click->modal#show">
|
18
|
+
{%- include_cached fa.html icon=include.fa class="lead" description=include.description -%}
|
19
|
+
</button>
|
20
|
+
|
21
|
+
{% include activity_pub/generic_modal.html header=include.header body=include.body footer=include.footer header_class=include.header_class body_class=include.body_class footer_class=include.footer_class content_class=include.content_class %}
|
22
|
+
</div>
|
@@ -0,0 +1,16 @@
|
|
1
|
+
{%- comment -%}
|
2
|
+
Botonera para botones de íconos.
|
3
|
+
|
4
|
+
@param :uri [String] La URL sobre la que se interactua
|
5
|
+
@param :profile [ActivityDrop] Actor
|
6
|
+
{%- endcomment -%}
|
7
|
+
|
8
|
+
{% assign uri = include.uri | default: include.url | default: 'YOU FORGOT THIS PARAM' | strip_html %}
|
9
|
+
{% assign actions = site.data.actions.actions %}
|
10
|
+
|
11
|
+
<div class="d-flex">
|
12
|
+
{% for action in actions %}
|
13
|
+
{% assign fa = action.icon %}
|
14
|
+
{% include activity_pub/login_modal.html action=action fa=fa uri=uri profile=include.profile description=action.title %}
|
15
|
+
{% endfor %}
|
16
|
+
</div>
|
@@ -0,0 +1,28 @@
|
|
1
|
+
{%- comment -%}
|
2
|
+
Nested cards
|
3
|
+
|
4
|
+
@param :profile [ActivityDrop] Actor
|
5
|
+
@param :activity [ActivityDrop] Note
|
6
|
+
@param :replies [ActivityDrop] Collection
|
7
|
+
{%- endcomment -%}
|
8
|
+
|
9
|
+
{%
|
10
|
+
include activity_pub/toot_card.html
|
11
|
+
profile=include.profile
|
12
|
+
activity=include.activity
|
13
|
+
component_class="my-3"
|
14
|
+
%}
|
15
|
+
|
16
|
+
{% if include.replies.available %}
|
17
|
+
{% assign replies = include.replies.all_items | sort: 'published' %}
|
18
|
+
{% for reply in replies %}
|
19
|
+
<blockquote class="border-left border-gray-light border-width-3 pl-3">
|
20
|
+
{%
|
21
|
+
include activity_pub/cards.html
|
22
|
+
profile=reply.attributedTo
|
23
|
+
activity=reply
|
24
|
+
replies=reply.replies
|
25
|
+
%}
|
26
|
+
</blockquote>
|
27
|
+
{% endfor %}
|
28
|
+
{% endif %}
|
@@ -0,0 +1,55 @@
|
|
1
|
+
{%- comment -%}
|
2
|
+
Modal preparado para recibir contenido + header y footer
|
3
|
+
|
4
|
+
@param :header [Capture] contenido del header
|
5
|
+
@param :body [Capture] contenido del modal
|
6
|
+
@param :footer [Capture] contenido del footer
|
7
|
+
@param :header_class [String] clases del header
|
8
|
+
@param :body_class [String] clases del cuerpo principal
|
9
|
+
@param :footer_class [String] clases del header
|
10
|
+
@param :content_class [String] clases todo el bloque
|
11
|
+
{%- endcomment -%}
|
12
|
+
|
13
|
+
{% assign header = include.header %}
|
14
|
+
{% assign header_class = include.header_class %}
|
15
|
+
{% assign body = include.body %}
|
16
|
+
{% assign body_class = include.body_class %}
|
17
|
+
{% assign footer = include.footer %}
|
18
|
+
{% assign footer_class = include.footer_class %}
|
19
|
+
{% assign content_class = include.content_class %}
|
20
|
+
|
21
|
+
<div
|
22
|
+
class="modal fade mw-100vw"
|
23
|
+
tabindex="-1"
|
24
|
+
aria-hidden="true"
|
25
|
+
data-modal-target="modal"
|
26
|
+
data-action="keydown->modal#hideWithEscape"
|
27
|
+
>
|
28
|
+
<div class="modal-backdrop fade zindex-backdrop" data-modal-target="backdrop" data-action="click->modal#hide"></div>
|
29
|
+
<div class="modal-dialog modal-dialog-scrollable modal-dialog-centered modal-lg zindex-modal" role="document">
|
30
|
+
<div class="modal-content {{content_class}}">
|
31
|
+
{% if header %}
|
32
|
+
<div class="modal-header {{header_class}}">
|
33
|
+
{{ header }}
|
34
|
+
</div>
|
35
|
+
{% else %}
|
36
|
+
<div class="modal-header justify-content-end border-bottom-0 p-0 {{header_class}}">
|
37
|
+
<span class="px-3 py-2 m-0 h1 font-weight-bold" type="button" data-action="click->modal#hide">×</span>
|
38
|
+
<span class="sr-only">{{ site.i18n.close }}</span>
|
39
|
+
</div>
|
40
|
+
{% endif %}
|
41
|
+
|
42
|
+
<div class="modal-body {{body_class}}">
|
43
|
+
{{ body }}
|
44
|
+
</div>
|
45
|
+
|
46
|
+
<div class="modal-footer flex-nowrap {{footer_class}}">
|
47
|
+
{% if footer %}
|
48
|
+
{{ footer }}
|
49
|
+
{% else %}
|
50
|
+
<button class="btn btn-secondary m-0" type="button" data-action="modal#hide">{{ site.i18n.close }}</button>
|
51
|
+
{% endif %}
|
52
|
+
</div>
|
53
|
+
</div>
|
54
|
+
</div>
|
55
|
+
</div>
|
@@ -0,0 +1,27 @@
|
|
1
|
+
{%- comment -%}
|
2
|
+
Modal con imagen
|
3
|
+
|
4
|
+
@param :image [Image] la imagen que queremos en el modal, contiene url y alt text
|
5
|
+
{%- endcomment -%}
|
6
|
+
|
7
|
+
{% assign alt = include.image.name | strip_html | escape %}
|
8
|
+
{% assign src = include.image.url | strip_html | uri_escape %}
|
9
|
+
{% assign extra = 'data-action="click->modal#show"' %}
|
10
|
+
|
11
|
+
{% capture body %}
|
12
|
+
<img class="background-white mw-100" title="{{ alt }}" alt="{{ alt }}" src="{{ src }}">
|
13
|
+
{% endcapture %}
|
14
|
+
|
15
|
+
<div class="{{ include.extra }} px-1" data-controller="modal">
|
16
|
+
{%
|
17
|
+
include embed_responsive.html
|
18
|
+
x=16
|
19
|
+
y=9
|
20
|
+
src=src
|
21
|
+
alt=alt
|
22
|
+
extra=extra
|
23
|
+
width=300
|
24
|
+
img_class="cursor-pointer min-w-100px w-100 object-fit-cover"
|
25
|
+
%}
|
26
|
+
{% include activity_pub/generic_modal.html header_class="text-white" body=body body_class="d-flex justify-content-center" footer_class="d-none" content_class="background-transparent border-0" %}
|
27
|
+
</div>
|
@@ -0,0 +1,78 @@
|
|
1
|
+
{% comment %}
|
2
|
+
@param activity [ActivityDrop]
|
3
|
+
{% endcomment %}
|
4
|
+
|
5
|
+
{% assign items = site.i18n.fediverse_interactions %}
|
6
|
+
{% assign reactions = '' | split: ',' %}
|
7
|
+
{% assign activities = reactions %}
|
8
|
+
|
9
|
+
{% if page.activity.replies.available %}
|
10
|
+
{% assign activities = page.activity.replies.all_items | sort: 'published' %}
|
11
|
+
{% endif %}
|
12
|
+
|
13
|
+
{% if include.activity.likes.available %}
|
14
|
+
{% assign reactions = reactions | concat: include.activity.likes.all_items %}
|
15
|
+
{% endif %}
|
16
|
+
|
17
|
+
{% if include.activity.shares.available %}
|
18
|
+
{% assign reactions = reactions | concat: include.activity.shares.all_items %}
|
19
|
+
{% endif %}
|
20
|
+
|
21
|
+
{% assign reactions = reactions | sort: 'published' %}
|
22
|
+
|
23
|
+
{% assign all_interactions = activities | concat: reactions | sort: 'published' %}
|
24
|
+
|
25
|
+
<div class="w-100" data-controller="tabs" data-tabs-hide-class="hide" data-tabs-show-class="show">
|
26
|
+
{% include_cached activity_pub/button_bar.html uri=include.activity.id profile=include.profile %}
|
27
|
+
|
28
|
+
<hr>
|
29
|
+
|
30
|
+
<h3 class="text-uppercase">{{ site.i18n.ver_interacciones }}</h3>
|
31
|
+
|
32
|
+
<div class="d-flex flex-row align-items-center mt-2 mb-5">
|
33
|
+
{% include_cached activity_pub/fediverse_interactions.html %}
|
34
|
+
|
35
|
+
{% assign text = site.i18n.help | markdownify | replace: '<a ', "<a target='_blank' rel='noopener' " %}
|
36
|
+
{% include_cached activity_pub/text_modal.html text=text fa="question-circle-o" %}
|
37
|
+
</div>
|
38
|
+
|
39
|
+
<div class="w-100 d-none fade hide" data-tabs-target="tab" id="conversation">
|
40
|
+
{% unless activities == empty %}
|
41
|
+
{% for activity in activities %}
|
42
|
+
{% include_cached activity_pub/cards.html activity=activity profile=activity.attributedTo replies=activity.replies %}
|
43
|
+
{% endfor %}
|
44
|
+
{% else %}
|
45
|
+
<p class="h1">
|
46
|
+
{{ site.i18n.no_interactions_yet.conversation }}
|
47
|
+
<p>
|
48
|
+
{% endunless %}
|
49
|
+
</div>
|
50
|
+
|
51
|
+
<div class="w-100 d-none fade hide" data-tabs-target="tab" id="reactions">
|
52
|
+
{% unless reactions == empty %}
|
53
|
+
{% include_cached activity_pub/reactions.html reactions=reactions %}
|
54
|
+
{% else %}
|
55
|
+
<p class="h1">
|
56
|
+
{{ site.i18n.no_interactions_yet.reactions }}
|
57
|
+
<p>
|
58
|
+
{% endunless %}
|
59
|
+
</div>
|
60
|
+
|
61
|
+
<div class="w-100 fade show" data-tabs-target="tab" id="both">
|
62
|
+
{% unless all_interactions == empty %}
|
63
|
+
{% for interaction in all_interactions %}
|
64
|
+
{% assign minus = forloop.index0 | minus: 1 %}
|
65
|
+
{% assign previous = all_interactions[minus] %}
|
66
|
+
{% if interaction.type == 'Announce' or interaction.type == 'Like' %}
|
67
|
+
{% include_cached activity_pub/reaction.html activity=interaction previous=previous %}
|
68
|
+
{% else %}
|
69
|
+
{% include_cached activity_pub/cards.html activity=interaction profile=interaction.attributedTo replies=interaction.replies %}
|
70
|
+
{% endif %}
|
71
|
+
{% endfor %}
|
72
|
+
{% else %}
|
73
|
+
<p class="h1">
|
74
|
+
{{ site.i18n.no_interactions_yet.both }}
|
75
|
+
<p>
|
76
|
+
{% endunless %}
|
77
|
+
</div>
|
78
|
+
</div>
|
@@ -0,0 +1,70 @@
|
|
1
|
+
{%- comment -%}
|
2
|
+
Modal para loguearse al fediverso
|
3
|
+
|
4
|
+
@param :action [String] acción que le usuarie quiere realizar desde el fediverso
|
5
|
+
@param :fa [String] nombre del ícono que usa fork-awesome
|
6
|
+
@param :uri [String] la URL sobre la que se interactúa
|
7
|
+
@param :profile [ActivityDrop] Actor
|
8
|
+
{%- endcomment -%}
|
9
|
+
|
10
|
+
{% assign action = include.action %}
|
11
|
+
{% assign fa = include.fa %}
|
12
|
+
{% capture name %}
|
13
|
+
{% include_cached activity_pub/actor.html actor=include.profile %}
|
14
|
+
{% endcapture %}
|
15
|
+
|
16
|
+
{% capture header %}
|
17
|
+
<div class="d-flex align-items-center h1 justify-content-center w-100">
|
18
|
+
<span class="d-flex responsive-header font-weight-bold text-center">
|
19
|
+
<i class="fa fa-{{fa}} text-primary mr-2"></i>
|
20
|
+
<span>
|
21
|
+
{{ site.i18n.login_modal[action.title].text | replace: "$usuarie", name }}
|
22
|
+
</span>
|
23
|
+
<div>
|
24
|
+
<span class="px-3 py-2 m-0 h1" type="button" data-action="click->modal#hide">×</span>
|
25
|
+
<span class="sr-only">{{ site.i18n.close }}</span>
|
26
|
+
</div>
|
27
|
+
</span>
|
28
|
+
</div>
|
29
|
+
{% endcapture %}
|
30
|
+
|
31
|
+
{% capture body %}
|
32
|
+
<p class="mb-2">{{site.i18n.login_modal.top_text | markdownify | replace: "$action", site.i18n.login_modal[action.title].title }}</p>
|
33
|
+
<div class="mt-3 mb-2 h5">{{site.i18n.login_modal.question | markdownify}}</div>
|
34
|
+
<div class="mb-3">
|
35
|
+
<form
|
36
|
+
class="needs-validation"
|
37
|
+
data-controller="authorize-interaction"
|
38
|
+
data-action="authorize-interaction#submit:prevent"
|
39
|
+
data-authorize-interaction-uri-value="{{ include.uri | strip_html | absolute_url | uri_escape }}"
|
40
|
+
>
|
41
|
+
<div class="form-row align-items-center border-lg border-lg-primary py-1">
|
42
|
+
<div class="col-12 col-lg mb-1 mb-lg-0">
|
43
|
+
<label class="sr-only">{{site.i18n.login_modal.placeholder}}</label>
|
44
|
+
<input
|
45
|
+
class="form-control border border-primary border-lg-0"
|
46
|
+
placeholder="{{site.i18n.login_modal.placeholder}}"
|
47
|
+
autocomplete="impp"
|
48
|
+
required
|
49
|
+
data-authorize-interaction-target="instance"
|
50
|
+
data-action="authorize-interaction#revalid"
|
51
|
+
type="search"/>
|
52
|
+
<div class="invalid-feedback">
|
53
|
+
{{- site.i18n.login_modal.authorize_interaction_unsupported -}}
|
54
|
+
</div>
|
55
|
+
</div>
|
56
|
+
|
57
|
+
<div class="col-12 col-lg-auto">
|
58
|
+
<button class="btn btn-primary btn-block py-btn-padding-y lh-btn-line-height f-16 font-weight-bold" type="submit">{{ site.i18n.take_me_home }}</button>
|
59
|
+
</div>
|
60
|
+
</div>
|
61
|
+
</form>
|
62
|
+
</div>
|
63
|
+
<small class="d-block mb-2">{{site.i18n.login_modal.small_text}}</small>
|
64
|
+
<span>{{site.i18n.login_modal.bottom_text | markdownify}}</span>
|
65
|
+
{% endcapture %}
|
66
|
+
|
67
|
+
{% capture footer %}
|
68
|
+
{% endcapture %}
|
69
|
+
|
70
|
+
{% include activity_pub/button.html header=header body=body footer=footer header_class="justify-content-center border-bottom-0" body_class="justify-content-center" footer_class="border-top-0" content_class="p-2" button_class="mx-1" fa=action.icon description=include.description %}
|
@@ -0,0 +1,45 @@
|
|
1
|
+
{%- comment -%}
|
2
|
+
Reacción
|
3
|
+
|
4
|
+
@param :activity [String] Reacción de le usuarie
|
5
|
+
@param :fa [String] nombre del ícono que usa fork-awesome
|
6
|
+
@param :actor [String] Usuarie
|
7
|
+
{%- endcomment -%}
|
8
|
+
|
9
|
+
{% assign published = include.activity.published | strip_html %}
|
10
|
+
|
11
|
+
<div class="d-flex">
|
12
|
+
<div class="d-flex flex-column gray px-2 text-right">
|
13
|
+
{% include_cached date.html date=published format=site.i18n.date.format %}
|
14
|
+
{% include_cached date.html date=published format=site.i18n.time.format %}
|
15
|
+
</div>
|
16
|
+
|
17
|
+
<div class="flex-column px-2 flex-grow-1">
|
18
|
+
{% if include.previous.actor == include.activity.actor %}
|
19
|
+
<div class="d-flex">
|
20
|
+
<p class="transparent hover-transparent">
|
21
|
+
{% include_cached activity_pub/actor.html actor=include.activity.actor %}
|
22
|
+
</p>
|
23
|
+
</div>
|
24
|
+
<div class="d-flex">
|
25
|
+
<p class="transparent hover-transparent">
|
26
|
+
{% include_cached activity_pub/actor_mention.html actor=include.activity.actor without_link=true %}
|
27
|
+
</p>
|
28
|
+
</div>
|
29
|
+
{% else %}
|
30
|
+
<div class="d-flex">
|
31
|
+
<p class="">{% include_cached activity_pub/actor.html actor=include.activity.actor %}</p>
|
32
|
+
</div>
|
33
|
+
<div class="d-flex">
|
34
|
+
{% include_cached activity_pub/actor_mention.html actor=include.activity.actor %}
|
35
|
+
</div>
|
36
|
+
{% endif %}
|
37
|
+
</div>
|
38
|
+
|
39
|
+
<div class="flex-column align-self-center px-2 lead">
|
40
|
+
{% assign icon = include.activity.type | equals: 'Announce' | ternary: 'retweet', 'star-o' %}
|
41
|
+
{% assign description = site.i18n.activities[include.activity.type] %}
|
42
|
+
|
43
|
+
{%- include_cached fa.html icon=icon class="lead" description=description -%}
|
44
|
+
</div>
|
45
|
+
</div>
|
@@ -0,0 +1,17 @@
|
|
1
|
+
{%- comment -%}
|
2
|
+
Reacciones
|
3
|
+
|
4
|
+
@param :reactions [Array] Reacciones
|
5
|
+
@param :actor [String] Usuarie
|
6
|
+
{%- endcomment -%}
|
7
|
+
|
8
|
+
{% for reaction in include.reactions %}
|
9
|
+
{% assign minus = forloop.index0 | minus: 1 %}
|
10
|
+
{% assign previous = include.reactions[minus] %}
|
11
|
+
|
12
|
+
{%
|
13
|
+
include activity_pub/reaction.html
|
14
|
+
activity=reaction
|
15
|
+
previous=previous
|
16
|
+
%}
|
17
|
+
{% endfor %}
|
@@ -0,0 +1,23 @@
|
|
1
|
+
{%- comment -%}
|
2
|
+
Texto + enlace al post/artículo al cual se responde
|
3
|
+
|
4
|
+
@param :activity [ActivityDrop] Activity
|
5
|
+
{%- endcomment -%}
|
6
|
+
|
7
|
+
{% if include.activity.available %}
|
8
|
+
{%- capture uri -%}
|
9
|
+
{%- include_cached activity_pub/url.html activity=include.activity -%}
|
10
|
+
{%- endcapture -%}
|
11
|
+
|
12
|
+
{% capture text %}
|
13
|
+
{{- include.activity.name | default: include.activity.summary | strip_html | default: site.i18n.reply.link_text -}}
|
14
|
+
{% endcapture %}
|
15
|
+
|
16
|
+
<div class="py-5 pr-5">
|
17
|
+
<span class="h2">
|
18
|
+
{{- site.i18n.reply.text -}}
|
19
|
+
</span>
|
20
|
+
|
21
|
+
{% include_cached external_link.html href=uri class="h2" text=text %}
|
22
|
+
</div>
|
23
|
+
{% endif %}
|
@@ -0,0 +1,16 @@
|
|
1
|
+
{%- comment -%}
|
2
|
+
Modal para mostrar texto
|
3
|
+
|
4
|
+
@param :text [String] contenido del modal
|
5
|
+
@param :fa [String] nombre del ícono que usa fork-awesome
|
6
|
+
{%- endcomment -%}
|
7
|
+
|
8
|
+
{% capture body %}
|
9
|
+
{{ include.text }}
|
10
|
+
{% endcapture %}
|
11
|
+
|
12
|
+
{% capture footer %}
|
13
|
+
{% endcapture %}
|
14
|
+
|
15
|
+
{% assign fa = include.fa %}
|
16
|
+
{% include activity_pub/button.html body=body footer=footer body_class="justify-content-center" footer_class="border-top-0 d-none" content_class="p-2" fa=fa %}
|
@@ -0,0 +1,95 @@
|
|
1
|
+
{%- comment -%}
|
2
|
+
Toot card
|
3
|
+
|
4
|
+
@param :component_class [String] Las clases del componente
|
5
|
+
@param :profile [String]
|
6
|
+
@param :activity [String]
|
7
|
+
{%- endcomment -%}
|
8
|
+
|
9
|
+
{% assign extra_class = include.activity.attachment | size | equals: 1 | ternary: 'col', 'col-6' %}
|
10
|
+
|
11
|
+
<div class="d-flex flex-column media {{ include.component_class }}">
|
12
|
+
<div class="d-flex">
|
13
|
+
{%
|
14
|
+
include embed_responsive.html
|
15
|
+
x=1
|
16
|
+
y=1
|
17
|
+
src=include.profile.icon.url
|
18
|
+
alt=include.profile.icon.name
|
19
|
+
width=40
|
20
|
+
embed_class="mr-2 align-self-center w-49px"
|
21
|
+
img_class="h-100 object-fit-cover"
|
22
|
+
%}
|
23
|
+
|
24
|
+
<div class="">
|
25
|
+
<p>{% include_cached activity_pub/actor.html actor=include.profile %}</p>
|
26
|
+
<p>{% include_cached activity_pub/actor_mention.html actor=include.profile %}</p>
|
27
|
+
</div>
|
28
|
+
</div>
|
29
|
+
|
30
|
+
<div class="media-body w-100">
|
31
|
+
{% capture content %}
|
32
|
+
<div class="content mt-2">
|
33
|
+
{{ include.activity.content | sanitize_html }}
|
34
|
+
</div>
|
35
|
+
|
36
|
+
{% unless include.activity.attachment == empty %}
|
37
|
+
<div class="row no-gutters mt-2">
|
38
|
+
{% for attachment in include.activity.attachment %}
|
39
|
+
{% if attachment.mediaType == "video/mp4" %}
|
40
|
+
{% include activity_pub/video_modal.html video=attachment extra=extra_class %}
|
41
|
+
{% else %}
|
42
|
+
{% include activity_pub/image_modal.html image=attachment extra=extra_class %}
|
43
|
+
{% endif %}
|
44
|
+
{% endfor %}
|
45
|
+
</div>
|
46
|
+
{% endunless %}
|
47
|
+
{% endcapture %}
|
48
|
+
|
49
|
+
{% if include.activity.sensitive %}
|
50
|
+
{% capture summary_title %}
|
51
|
+
<strong>{{ site.i18n.sensitive }}:</strong> {{ include.activity.summary }}
|
52
|
+
{% endcapture %}
|
53
|
+
|
54
|
+
{%
|
55
|
+
include details.html
|
56
|
+
element_title=summary_title
|
57
|
+
element_text=content
|
58
|
+
summary_class="align-items-center btn-lg btn-secondary p-2 text-left f-16"
|
59
|
+
component_class="my-3"
|
60
|
+
font_size="ml-3 lead"
|
61
|
+
%}
|
62
|
+
{% else %}
|
63
|
+
{{ content }}
|
64
|
+
{% endif %}
|
65
|
+
|
66
|
+
<div class="d-flex gray justify-content-between my-2 align-items-center">
|
67
|
+
{%- assign timestamp_field = include.activity.updated | ternary: 'updated', 'published' -%}
|
68
|
+
{%- assign timestamp = include.activity[timestamp_field] -%}
|
69
|
+
|
70
|
+
{%- capture timestamp -%}
|
71
|
+
{% include date.html date=timestamp format=site.i18n.date_time.format %}
|
72
|
+
{%- endcapture -%}
|
73
|
+
|
74
|
+
{%- capture uri -%}
|
75
|
+
{%- include_cached activity_pub/url.html activity=include.activity -%}
|
76
|
+
{%- endcapture -%}
|
77
|
+
|
78
|
+
{% include external_link.html href=uri text=timestamp %}
|
79
|
+
|
80
|
+
<div>
|
81
|
+
{% if include.activity.shares.totalItems %}
|
82
|
+
{%- include fa.html icon="retweet" class="px-1" description=site.i18n.total_shares content=include.activity.shares.totalItems -%}
|
83
|
+
{% endif %}
|
84
|
+
|
85
|
+
{% if include.activity.likes.totalItems %}
|
86
|
+
{%- include fa.html icon="star-o" class="px-1" description=site.i18n.total_likes content=include.activity.likes.totalItems -%}
|
87
|
+
{% endif %}
|
88
|
+
</div>
|
89
|
+
|
90
|
+
{%- include fa.html icon="globe" description=site.i18n.globe -%}
|
91
|
+
</div>
|
92
|
+
|
93
|
+
{% include activity_pub/button_bar.html uri=include.activity.id profile=include.profile %}
|
94
|
+
</div>
|
95
|
+
</div>
|
@@ -0,0 +1,20 @@
|
|
1
|
+
{%- comment -%}
|
2
|
+
Modal con imagen
|
3
|
+
|
4
|
+
@param :image [Image] la imagen que queremos en el modal, contiene url y alt text
|
5
|
+
{%- endcomment -%}
|
6
|
+
|
7
|
+
{% capture body %}
|
8
|
+
<video src="{{include.video.url}}" controls></video>
|
9
|
+
{% endcapture %}
|
10
|
+
|
11
|
+
<div class="{{ include.extra }} px-1" data-controller="modal">
|
12
|
+
<div class="embed-responsive embed-responsive-16by9">
|
13
|
+
<video
|
14
|
+
class="cursor-pointer min-w-100px w-100 embed-responsive-item object-fit-cover"
|
15
|
+
src="{{include.video.url}}"
|
16
|
+
data-action="click->modal#show"
|
17
|
+
></video>
|
18
|
+
</div>
|
19
|
+
{% include activity_pub/generic_modal.html header_class="text-white" body=body body_class="d-flex justify-content-center" footer_class="d-none" content_class="background-transparent border-0" %}
|
20
|
+
</div>
|
@@ -0,0 +1,18 @@
|
|
1
|
+
{% comment %}
|
2
|
+
|
3
|
+
@param class [String] Extra classes
|
4
|
+
@param extra [String] Extra attributes
|
5
|
+
@param options [Array<Hash>] Options
|
6
|
+
@param selected [Boolean] Default option
|
7
|
+
@param extra [String] Extra attributes
|
8
|
+
@param value [String] Value
|
9
|
+
@param title [String] Title
|
10
|
+
{% endcomment %}
|
11
|
+
|
12
|
+
<select class="custom-select {{ include.class }}" {{ include.extra }}>
|
13
|
+
{% for options in include.options %}
|
14
|
+
<option {{ options.selected }} {{ options.extra }} value="{{ options.value | default: options.title | escape }}">
|
15
|
+
{{- options.title -}}
|
16
|
+
</option>
|
17
|
+
{% endfor %}
|
18
|
+
</select>
|
@@ -0,0 +1,15 @@
|
|
1
|
+
{%- comment -%}
|
2
|
+
|
3
|
+
Link externo.
|
4
|
+
|
5
|
+
@param :href [String] La URL
|
6
|
+
@param :class [String] Las clases del link
|
7
|
+
{%- endcomment -%}
|
8
|
+
|
9
|
+
<a
|
10
|
+
class="text-decoration-none {{ include.class }}"
|
11
|
+
href="{{ include.href | uri_escape }}"
|
12
|
+
{{ include.href | start_with: "https://" | value_if: 'rel="noopener" target="_blank"' }}
|
13
|
+
{{ include.href | start_with: "http://" | value_if: 'rel="noopener" target="_blank"' }}>
|
14
|
+
{{ include.text }}
|
15
|
+
</a>
|
data/_includes/fa.html
ADDED
@@ -0,0 +1,11 @@
|
|
1
|
+
{%- comment -%}
|
2
|
+
|
3
|
+
Un ícono
|
4
|
+
|
5
|
+
@param :icon [String] El ícono
|
6
|
+
@param :class [String] Las clases
|
7
|
+
@param :description [String] La descripción
|
8
|
+
{%- endcomment -%}
|
9
|
+
|
10
|
+
<i title="{{ include.description | escape_once }}" aria-hidden="true" class="fa fa-{{ include.icon }} {{ include.class }}">{{ include.content }}</i>
|
11
|
+
<span class="sr-only">{{ include.description }}</span>
|
data/_includes/menu.html
CHANGED
@@ -2,12 +2,25 @@
|
|
2
2
|
Empezamos con los ítems que no dependen de otros e implementamos
|
3
3
|
recursivamente.
|
4
4
|
{%- endcomment -%}
|
5
|
+
{% assign about = site.posts | find: 'layout', 'about' %}
|
5
6
|
{%- assign items = site.posts | where: 'layout', 'menu_internal' | where: 'item', nil -%}
|
6
7
|
{%- assign items = site.posts | where: 'layout', 'menu_external' | where: 'item', nil | concat: items -%}
|
7
8
|
{%- assign items = site.posts | where: 'layout', 'menu_dropdown' | concat: items -%}
|
8
9
|
{%- assign items = items | order -%}
|
9
10
|
|
10
11
|
<nav class="navbar navbar-expand-lg navbar-light">
|
12
|
+
<a class="navbar-brand" href="?#">
|
13
|
+
{% if about.logo.path %}
|
14
|
+
<img
|
15
|
+
src="{{ about.logo.path | thumbnail: nil, 30 | uri_escape }}"
|
16
|
+
height="30"
|
17
|
+
alt="{{ about.logo.description | default: about.title | escape }}"
|
18
|
+
>
|
19
|
+
{% endif %}
|
20
|
+
|
21
|
+
{{ about.title }}
|
22
|
+
</a>
|
23
|
+
|
11
24
|
{% unless items == empty %}
|
12
25
|
<button class="navbar-toggler"
|
13
26
|
type="button"
|
@@ -19,7 +32,7 @@ recursivamente.
|
|
19
32
|
{% endunless %}
|
20
33
|
|
21
34
|
<div class="collapse navbar-collapse" id="menu">
|
22
|
-
<div class="navbar-nav w-100 d-flex align-items-start justify-content-
|
35
|
+
<div class="navbar-nav w-100 d-flex align-items-start justify-content-end">
|
23
36
|
{% for item in items %}
|
24
37
|
{% assign template = item.layout | append: ".html" %}
|
25
38
|
{%- include_cached {{ template }} item=item -%}
|