sutty-jekyll-theme 0.4.1 → 0.5.0
Sign up to get free protection for your applications and to get access to all the features.
- 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 -%}
|