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.
Files changed (47) hide show
  1. checksums.yaml +4 -4
  2. checksums.yaml.gz.sig +0 -0
  3. data/_data/actions.yml +9 -0
  4. data/_data/en.yml +69 -0
  5. data/_data/es.yml +70 -0
  6. data/_data/layouts/theme.yml +5 -5
  7. data/_data/manifest.json +679 -7
  8. data/_includes/activity_pub/actor.html +11 -0
  9. data/_includes/activity_pub/actor_mention.html +28 -0
  10. data/_includes/activity_pub/button.html +22 -0
  11. data/_includes/activity_pub/button_bar.html +16 -0
  12. data/_includes/activity_pub/cards.html +28 -0
  13. data/_includes/activity_pub/fediverse_interactions.html +2 -0
  14. data/_includes/activity_pub/generic_modal.html +55 -0
  15. data/_includes/activity_pub/image_modal.html +27 -0
  16. data/_includes/activity_pub/interactions.html +78 -0
  17. data/_includes/activity_pub/login_modal.html +70 -0
  18. data/_includes/activity_pub/reaction.html +45 -0
  19. data/_includes/activity_pub/reactions.html +17 -0
  20. data/_includes/activity_pub/replying_to.html +23 -0
  21. data/_includes/activity_pub/text_modal.html +16 -0
  22. data/_includes/activity_pub/toot_card.html +95 -0
  23. data/_includes/activity_pub/url.html +8 -0
  24. data/_includes/activity_pub/video_modal.html +20 -0
  25. data/_includes/bootstrap/custom_select.html +18 -0
  26. data/_includes/external_link.html +15 -0
  27. data/_includes/fa.html +11 -0
  28. data/_includes/menu.html +14 -1
  29. data/_includes/menu_dropdown.html +1 -1
  30. data/_includes/page.html +91 -0
  31. data/_layouts/code_of_conduct.html +1 -41
  32. data/_layouts/default.html +1 -0
  33. data/_layouts/home.html +3 -2
  34. data/_layouts/license.html +1 -42
  35. data/_layouts/page.html +1 -68
  36. data/_layouts/post.html +1 -67
  37. data/_layouts/privacy_policy.html +1 -42
  38. data/assets/css/styles.scss +21 -0
  39. data/assets/fonts/forkawesome-webfont.woff2 +0 -0
  40. data/assets/js/env.js +8 -0
  41. data/assets/js/pack.FXJZFZ4Z.js +41 -0
  42. data/assets/js/pack.FXJZFZ4Z.js.map +7 -0
  43. data.tar.gz.sig +0 -0
  44. metadata +42 -4
  45. metadata.gz.sig +0 -0
  46. data/assets/js/pack.3XNALAB2.js +0 -27
  47. 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,2 @@
1
+ {% assign extra = 'data-action="tabs#toggle" data-tabs-target="value"' %}
2
+ {% include_cached bootstrap/custom_select.html extra=extra options=site.i18n.fediverse_interactions %}
@@ -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">&times</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">&times</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,8 @@
1
+ {%- comment -%}
2
+ Finds the URL
3
+
4
+ @param activity [ActivityDrop]
5
+ {%- endcomment -%}
6
+
7
+ {%- assign uri = include.activity.url | find: 'rel', 'canonical' -%}
8
+ {{- uri.href | default: include.activity.url | default: include.activity.id | strip_html -}}
@@ -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-center">
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 -%}