# desktop/mobile frontend for Libervia XMPP client
# Copyright (C) 2016-2022 Jérôme Poisson (goffi@goffi.org)
# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU Affero General Public License as published by
# the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version.
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU Affero General Public License for more details.
# You should have received a copy of the GNU Affero General Public License
# along with this program. If not, see .
#:import date_fmt libervia.backend.tools.common.date_utils.date_fmt
:
size_hint: None, 1
symbol: "search"
width: dp(30)
font_size: dp(25)
color: 0.4, 0.4, 0.4, 1
:
size_hint: None, 1
symbol: "pencil"
width: dp(30)
font_size: dp(25)
color: 0.4, 0.4, 0.4, 1
:
padding: dp(20)
spacing: dp(10)
e2ee: e2ee_checkbox
Label:
size_hint: 1, None
color: 1, 1, 1, 1
text: _("Publish a new post on {node} node of {service}").format(node=root.blog.node or "personal blog", service=root.blog.service or root.blog.profile)
text_size: root.width, None
size: self.texture_size
halign: "center"
bold: True
TextInput:
id: title
size_hint: 1, None
height: sp(30)
hint_text: _("title of your post (optional)")
TextInput:
id: content
size_hint: 1, None
height: sp(300)
hint_text: _("body of your post (markdown syntax allowed)")
BoxLayout
id: e2ee
size_hint: 1, None
padding_y: None
height: dp(25)
Widget:
CheckBox:
id: e2ee_checkbox
size_hint: None, 1
width: dp(20)
active: False
color: 1, 1, 1, 1
Label:
size_hint: None, None
text: _("encrypt post")
text_size: None, None
size: self.texture_size
padding_x: dp(10)
font_size: sp(15)
color: 1, 1, 1, 1
Widget:
Button:
size_hint: 1, None
height: sp(50)
text: _("publish")
on_release: root.publish(title.text, content.text, e2ee=e2ee_checkbox.active)
Widget:
:
size_hint: None, None
size: dp(30), dp(30)
canvas.before:
Color:
rgba: (0.87,0.87,0.87,1)
RoundedRectangle:
radius: [dp(5)]
pos: self.pos
size: self.size
:
size_hint: 1, None
avatar: avatar
header_box: header_box
height: self.minimum_height
orientation: "vertical"
Label:
color: 0, 0, 0, 1
bold: True
font_size: root.title_font_size
text_size: None, None
size_hint: None, None
size: self.texture_size[0], self.texture_size[1] if root.blog_data.get("title") else 0
opacity: 1 if root.blog_data.get("title") else 0
padding: dp(5), 0
text: root.blog_data.get("title", "")
BoxLayout:
id: header_box
size_hint: 1, None
height: dp(40)
BoxLayout:
orientation: 'vertical'
width: avatar.width
size_hint: None, 1
BlogPostAvatar:
id: avatar
source: app.default_avatar
Label:
id: created_ts
color: (0, 0, 0, 1)
font_size: root.font_size
text_size: None, None
size_hint: None, None
size: self.texture_size
padding: dp(5), 0
markup: True
valign: 'middle'
text: f"published on [b]{date_fmt(root.blog_data.get('published', 0), 'auto_day')}[/b]"
Symbol:
size_hint: None, None
height: created_ts.height
width: self.height
id: encrypted
symbol: 'lock-filled' if root.blog_data.get("encrypted") else 'lock-open'
font_size: created_ts.height
opacity: 1 if root.blog_data.get("encrypted") else 0
color: 0.29,0.87,0.0,1
SimpleXHTMLWidget:
size_hint: 1, None
height: self.minimum_height
xhtml: root.blog_data.get("content_xhtml") or self.escape(root.blog_data.get("content", ""))
color: (0, 0, 0, 1)
padding: dp(5), dp(5)
:
float_layout: float_layout
orientation: 'vertical'
posts_widget: posts_widget
FloatLayout:
id: float_layout
ScrollView:
size_hint: 1, 1
pos_hint: {'x': 0, 'y': 0}
do_scroll_x: False
scroll_type: ['bars', 'content']
bar_width: dp(6)
BoxLayout:
id: posts_widget
orientation: "vertical"
size_hint: 1, None
height: self.minimum_height
spacing: dp(10)