Skip to content
Snippets Groups Projects
Verified Commit 951c2c3b authored by jindra12's avatar jindra12
Browse files

Finish mastodon feed from DB

parent 9831b008
No related branches found
No related tags found
1 merge request!759Create mastodon block for senate, uniweb and district
Showing with 68 additions and 302 deletions
......@@ -22,7 +22,6 @@
<link rel="stylesheet" href="https://styleguide.pirati.cz/2.10.x/css/styles.css">
<link href="{% static "shared/vendor/fancybox/jquery.fancybox.min.css" %}" rel="stylesheet">
<link rel="stylesheet" href="{% static "shared/css/helpers.css" %}">
<link rel="stylesheet" href="{% static "shared/vendor/mastodon-embed-feed-timeline/css/mastodon-timeline.css" %}">
{% block styles %}{% endblock %}
......@@ -373,6 +372,8 @@
<script src="{% static "shared/vendor/jquery/jquery-3.4.1.min.js" %}"></script>
<script src="{% static "shared/vendor/lazysizes/lazysizes.min.js" %}"></script>
<script src="{% static "shared/vendor/fancybox/jquery.fancybox.min.js" %}"></script>
<script src="{% static "shared/vendor/vue-shadow-dom-1.4.3/js/shadow.min.js" %}"></script>
<script src="{% static "shared/js/vue-shadow-dom-helper.js" %}"></script>
{% include "maps_utils/includes/scripts.html" %}
......
......@@ -32,7 +32,6 @@
<!-- Bootstrap CSS -->
<link rel="stylesheet" href="{% static "shared/vendor/bootstrap-4.4.1/css/bootstrap.min.css" %}">
<link rel="stylesheet" href="{% static "shared/vendor/fancybox/jquery.fancybox.min.css" %}">
<link rel="stylesheet" href="{% static "shared/vendor/mastodon-embed-feed-timeline/css/mastodon-timeline.css" %}">
<!-- Styles -->
<link href="{% static "senat_campaign/assets/css/style.css" %}" rel="stylesheet">
......
......@@ -117,11 +117,15 @@ class Mastodon(MastodonImageMixin):
self.download_image(user["icon"]["url"], f'{user["preferredUsername"]}.jpg')
if "orderedItems" in toots and toots["orderedItems"] != None:
toots["orderedItems"] = toots["orderedItems"][:6]
for toot in toots["orderedItems"]:
toot["published"] = parse_datetime(toot["published"]).strftime(
"%-H:%M %-d.%-m.%Y"
)
if "attachment" in toot["object"] and toot["object"]["attachment"] != None:
if (
"attachment" in toot["object"]
and toot["object"]["attachment"] != None
):
for attachment in toot["object"]["attachment"]:
mastodon_attachment: MastodonAttachment = (
MastodonAttachment.objects.create(mastodon=self)
......
......@@ -39,15 +39,3 @@ table caption {
.content-block {
clear: both;
}
.mt-container {
height: 40rem;
}
.mt-container .toot-date {
color: #fff;
}
.mt-container .mt-body {
white-space: normal;
}
* {
--bg-color:#282c37;
--bg-hover-color:#313543;
--line-gray-color:#393f4f;
--content-text:#fff;
--link-color:#8c8dff;
--error-text-color:#fe6c6c
}
.mt-container {
height: 40rem;
max-width: 28rem;
}
.mt-container .toot-date {
color: #fff;
margin-top: 0.5rem;
}
.mt-container .mt-body {
white-space: normal;
}
.mt-container .mt-user {
margin-bottom: 1rem;
}
Vue.use(shadow)
/* Mastodon embed feed timeline v3.4.2 */
/* More info at: */
/* https://gitlab.com/idotj/mastodon-embed-feed-timeline */
/* Changes were made to ensure this script is safe, removed :root rules */
/* Variables */
/* Main container */
.mt-timeline {
--bg-color: #282c37;
--bg-hover-color: #313543;
--line-gray-color: #393f4f;
--content-text: #fff;
--link-color: #8c8dff;
--error-text-color: #fe6c6c;
height: 100%;
overflow-y: auto;
position: relative;
background: var(--bg-color);
scrollbar-color: var(--bg-hover-color) rgba(0, 0, 0, 0.1);
}
.mt-timeline a:link,
.mt-timeline a:active,
.mt-timeline a {
text-decoration: none;
color: var(--link-color);
}
.mt-timeline a:hover {
text-decoration: underline;
}
.mt-timeline::-webkit-scrollbar {
width: 0.75rem;
height: 0.75rem;
}
.mt-timeline::-webkit-scrollbar-corner {
background: transparent;
}
.mt-timeline::-webkit-scrollbar-thumb {
border: 0 var(--content-text);
border-radius: 2rem;
background: var(--bg-hover-color);
}
.mt-timeline::-webkit-scrollbar-track {
border: 0 var(--content-text);
border-radius: 0;
background: rgba(0, 0, 0, 0.1);
}
.mt-body {
padding: 1rem 1.5rem;
white-space: pre-wrap;
word-wrap: break-word;
}
.mt-body .invisible {
font-size: 0;
line-height: 0;
display: inline-block;
width: 0;
height: 0;
position: absolute;
}
/* Toot container */
.mt-toot {
margin: 0.25rem;
padding: 1rem 0.5rem 2rem 4rem;
position: relative;
min-height: 3.75rem;
background-color: transparent;
border-bottom: 1px solid var(--line-gray-color);
}
.mt-toot:hover,
.mt-toot:focus {
cursor: pointer;
background-color: var(--bg-hover-color);
}
.mt-toot p:last-child {
margin-bottom: 0;
}
/* User icon */
.mt-avatar {
position: absolute;
top: 1rem;
left: 5px;
width: 3rem;
height: 3rem;
background-color: transparent;
background-repeat: no-repeat;
background-position: 50% 50%;
background-size: contain;
background-color: var(--bg-color);
border-radius: 5px;
}
.mt-avatar-boosted {
width: 2.5rem;
height: 2.5rem;
}
.mt-avatar-booster {
width: 1.5rem;
height: 1.5rem;
top: 1.5rem;
left: 1.5rem;
}
.mt-user {
display: table;
font-weight: 600;
}
.mt-user > a {
color: var(--content-text) !important;
}
/* Text */
.toot-text {
margin-bottom: 0.25rem;
color: var(--content-text);
}
.toot-text .spoiler-link {
display: inline-block;
border-radius: 2px;
background-color: var(--bg-hover-color);
border: 0;
color: var(--content-text);
font-weight: 700;
font-size: 0.7rem;
padding: 0 0.35rem;
text-transform: uppercase;
line-height: 1.25rem;
cursor: pointer;
vertical-align: top;
}
.toot-text .spoiler-text {
display: none;
}
.toot-text.truncate {
display: -webkit-box;
overflow: hidden;
-webkit-line-clamp: var(--text-max-lines);
-webkit-box-orient: vertical;
}
.toot-text:not(.truncate) .ellipsis::after {
content: "...";
}
.mt-error {
position: absolute;
display: flex;
flex-direction: column;
height: calc(100% - 3.5rem);
width: calc(100% - 4.5rem);
justify-content: center;
align-items: center;
color: var(--error-text-color);
padding: 0.75rem;
text-align: center;
}
/* Poll */
.toot-poll {
margin-bottom: 0.25rem;
color: var(--content-text);
}
.toot-poll ul {
list-style: none;
padding: 0;
margin: 0;
}
.toot-poll ul li {
font-size: 0.9rem;
margin-bottom: 0.5rem;
}
.toot-poll ul li:not(:last-child) {
margin-bottom: 0.25rem;
}
.toot-poll ul li:before {
content: "◯";
padding-right: 0.5rem;
}
/* Medias */
.toot-media {
overflow: hidden;
margin-bottom: 0.25rem;
}
.toot-media-preview {
position: relative;
margin-top: 0.25rem;
height: auto;
text-align: center;
width: 100%;
}
.toot-media-spoiler > img {
filter: blur(2rem);
}
.toot-media-preview a {
display: block;
position: absolute;
top: 0;
right: 0;
bottom: 0;
left: 0;
}
.img-ratio14_7 {
position: relative;
padding-top: 48.95%; /* 14:7 */
width: 100%;
}
.img-ratio14_7 > img {
width: 100%;
height: auto;
position: absolute;
top: 50%;
left: 50%;
transform: translate(-50%, -50%);
text-align: center;
}
/* Date */
.toot-date {
font-size: 0.75rem;
}
/* Loading-spinner */
.mt-body > .loading-spinner {
position: absolute;
width: 3rem;
height: 3rem;
margin: auto;
top: calc(50% - 1.5rem);
right: calc(50% - 1.5rem);
}
.loading-spinner {
height: 100%;
background-image: url("data:image/svg+xml;charset=utf8,%3Csvg xmlns:svg='http://www.w3.org/2000/svg' xmlns='http://www.w3.org/2000/svg' xmlns:xlink='http://www.w3.org/1999/xlink' version='1.0' viewBox='0 0 128 128' %3E%3Cg%3E%3Cpath d='M64 128A64 64 0 0 1 18.34 19.16L21.16 22a60 60 0 1 0 52.8-17.17l.62-3.95A64 64 0 0 1 64 128z' fill='%23404040'/%3E%3CanimateTransform attributeName='transform' type='rotate' from='0 64 64' to='360 64 64' dur='1000ms' repeatCount='indefinite'%3E%3C/animateTransform%3E%3C/g%3E%3C/svg%3E");
background-repeat: no-repeat;
background-position: center center;
background-color: transparent;
background-size: min(2.5rem, calc(100% - 0.5rem));
}
/* Footer (See more link) */
.mt-footer {
margin: 1rem auto 2rem auto;
padding: 0 2rem;
text-align: center;
}
/* Hidden element */
.visually-hidden {
position: absolute !important;
width: 1px !important;
height: 1px !important;
padding: 0 !important;
margin: -1px !important;
overflow: hidden !important;
clip: rect(0, 0, 0, 0) !important;
white-space: nowrap !important;
border: 0 !important;
}
:root{--text-max-lines:none}:root,html[data-theme=light]{--bg-color:#fff;--bg-hover-color:#d9e1e8;--line-gray-color:#c0cdd9;--content-text:#000;--link-color:#3a3bff;--error-text-color:#8b0000}html[data-theme=dark]{--bg-color:#282c37;--bg-hover-color:#313543;--line-gray-color:#393f4f;--content-text:#fff;--link-color:#8c8dff;--error-text-color:#fe6c6c}.mt-timeline{height:100%;overflow-y:auto;position:relative;background:var(--bg-color);scrollbar-color:var(--bg-hover-color) rgba(0,0,0,.1)}.mt-timeline a,.mt-timeline a:active,.mt-timeline a:link{text-decoration:none;color:var(--link-color)}.mt-timeline a:hover{text-decoration:underline}.mt-timeline::-webkit-scrollbar{width:.75rem;height:.75rem}.mt-timeline::-webkit-scrollbar-corner{background:0 0}.mt-timeline::-webkit-scrollbar-thumb{border:0 var(--content-text);border-radius:2rem;background:var(--bg-hover-color)}.mt-timeline::-webkit-scrollbar-track{border:0 var(--content-text);border-radius:0;background:rgba(0,0,0,.1)}.mt-body{padding:1rem 1.5rem;white-space:pre-wrap;word-wrap:break-word}.mt-body .invisible{font-size:0;line-height:0;display:inline-block;width:0;height:0;position:absolute}.mt-toot{margin:.25rem;padding:1rem .5rem 2rem 4rem;position:relative;min-height:3.75rem;background-color:transparent;border-bottom:1px solid var(--line-gray-color)}.mt-toot:focus,.mt-toot:hover{cursor:pointer;background-color:var(--bg-hover-color)}.mt-toot p:last-child{margin-bottom:0}.mt-avatar{position:absolute;top:1rem;left:5px;width:3rem;height:3rem;background-color:transparent;background-repeat:no-repeat;background-position:50% 50%;background-size:contain;background-color:var(--bg-color);border-radius:5px}.mt-avatar-boosted{width:2.5rem;height:2.5rem}.mt-avatar-booster{width:1.5rem;height:1.5rem;top:1.5rem;left:1.5rem}.mt-user{display:table;font-weight:600}.mt-user>a{color:var(--content-text)!important}.toot-text{margin-bottom:.25rem;color:var(--content-text)}.toot-text .spoiler-link{display:inline-block;border-radius:2px;background-color:var(--bg-hover-color);border:0;color:var(--content-text);font-weight:700;font-size:.7rem;padding:0 .35rem;text-transform:uppercase;line-height:1.25rem;cursor:pointer;vertical-align:top}.toot-text .spoiler-text{display:none}.toot-text.truncate{display:-webkit-box;overflow:hidden;-webkit-line-clamp:var(--text-max-lines);-webkit-box-orient:vertical}.toot-text:not(.truncate) .ellipsis::after{content:"..."}.mt-error{position:absolute;display:flex;flex-direction:column;height:calc(100% - 3.5rem);width:calc(100% - 4.5rem);justify-content:center;align-items:center;color:var(--error-text-color);padding:.75rem;text-align:center}.toot-poll{margin-bottom:.25rem;color:var(--content-text)}.toot-poll ul{list-style:none;padding:0;margin:0}.toot-poll ul li{font-size:.9rem;margin-bottom:.5rem}.toot-poll ul li:not(:last-child){margin-bottom:.25rem}.toot-poll ul li:before{content:"◯";padding-right:.5rem}.toot-media{overflow:hidden;margin-bottom:.25rem}.toot-media-preview{position:relative;margin-top:.25rem;height:auto;text-align:center;width:100%}.toot-media-spoiler>img{filter:blur(2rem)}.toot-media-preview a{display:block;position:absolute;top:0;right:0;bottom:0;left:0}.img-ratio14_7{position:relative;padding-top:48.95%;width:100%}.img-ratio14_7>img{width:100%;height:auto;position:absolute;top:50%;left:50%;transform:translate(-50%,-50%);text-align:center}.toot-date{font-size:.75rem}.mt-body>.loading-spinner{position:absolute;width:3rem;height:3rem;margin:auto;top:calc(50% - 1.5rem);right:calc(50% - 1.5rem)}.loading-spinner{height:100%;background-image:url("data:image/svg+xml;charset=utf8,%3Csvg xmlns:svg='http://www.w3.org/2000/svg' xmlns='http://www.w3.org/2000/svg' xmlns:xlink='http://www.w3.org/1999/xlink' version='1.0' viewBox='0 0 128 128' %3E%3Cg%3E%3Cpath d='M64 128A64 64 0 0 1 18.34 19.16L21.16 22a60 60 0 1 0 52.8-17.17l.62-3.95A64 64 0 0 1 64 128z' fill='%23404040'/%3E%3CanimateTransform attributeName='transform' type='rotate' from='0 64 64' to='360 64 64' dur='1000ms' repeatCount='indefinite'%3E%3C/animateTransform%3E%3C/g%3E%3C/svg%3E");background-repeat:no-repeat;background-position:center center;background-color:transparent;background-size:min(2.5rem,calc(100% - .5rem))}.mt-footer{margin:1rem auto 2rem auto;padding:0 2rem;text-align:center}.visually-hidden{position:absolute!important;width:1px!important;height:1px!important;padding:0!important;margin:-1px!important;overflow:hidden!important;clip:rect(0,0,0,0)!important;white-space:nowrap!important;border:0!important}
!function(t,e){"object"==typeof exports&&"undefined"!=typeof module?e(exports,require("vue")):"function"==typeof define&&define.amd?define(["exports","vue"],e):e((t=t||self).shadow={},t.Vue)}(this,(function(t,e){"use strict";function o(t){s(t,t.childNodes)}function s(t,e){const o=document.createDocumentFragment();for(const t of e)o.appendChild(t);t.attachShadow({mode:"open"}).appendChild(o)}const n=(e=e&&e.hasOwnProperty("default")?e.default:e).extend({template:'<component :is="tag"><slot v-if="pstatic"></slot><component :is="tag" :class="slotClass" :id="slotId" v-else><slot></slot></component></component>',props:{abstract:{type:Boolean,default:!1},static:{type:Boolean,default:!1},tag:{type:String,default:"div"},slotTag:{type:String,default:"div"},slotClass:{type:String},slotId:{type:String}},data:()=>({pabstract:!1,pstatic:!1}),beforeMount(){this.pabstract=this.abstract,this.pstatic=this.static},mounted(){this.pabstract?s(this.$el.parentElement,this.$el.childNodes):o(this.$el)}});function a(t){t.component("shadow-root",n),t.directive("shadow",{bind(t){o(t)}})}null!=typeof window&&window.Vue&&a(window.Vue);var i={ShadowRoot:n,shadow_root:n,install:a};t.ShadowRoot=n,t.default=i,t.install=a,t.shadow_root=n,Object.defineProperty(t,"__esModule",{value:!0})}));
<div class="mt-container max-w-md h-80">
{% load static %}
<div v-shadow>
<link rel="stylesheet" href="{% static "shared/css/mastodon-embed-feed-timeline-helpers.css" %}">
<link rel="stylesheet" href="{% static "shared/vendor/mastodon-embed-feed-timeline/css/mastodon-timeline.min.css" %}">
<div class="mt-container">
<div class="mt-timeline">
<div class="mt-body">
{% for toot in mastodon.toots %}
......@@ -14,7 +19,7 @@
</div>
{% for attachment in toot.object.attachment %}
<div class="toot-media img-ratio14_7">
<img src="{{ attachment.image.url }}">
<img src="{{ attachment.url }}">
</div>
{% endfor %}
<div class="toot-date">
......@@ -28,3 +33,4 @@
</div>
</div>
</div>
</div>
......@@ -20,7 +20,6 @@
<link href="https://styleguide.pirati.cz/2.11.x/css/styles.css" rel="stylesheet" media="all" />
<link href="https://styleguide.pirati.cz/2.11.x/css/pattern-scaffolding.css" rel="stylesheet" media="all" />
<link href="{% static "shared/vendor/fancybox/jquery.fancybox.min.css" %}" rel="stylesheet">
<link rel="stylesheet" href="{% static "shared/vendor/mastodon-embed-feed-timeline/css/mastodon-timeline.css" %}">
<style type="text/css">
.head-alt-md, .head-alt-lg {
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment