# 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)