mirror of
https://github.com/MCV-Software/TWBlue.git
synced 2025-11-08 07:07:05 +00:00
Compare commits
3 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| e4520a14e8 | |||
|
|
b1bf2ea95f | ||
|
|
a4d5066156 |
@@ -48,7 +48,7 @@ class Handler(object):
|
|||||||
addAlias=_("Add a&lias"),
|
addAlias=_("Add a&lias"),
|
||||||
addToList=None,
|
addToList=None,
|
||||||
removeFromList=None,
|
removeFromList=None,
|
||||||
details=_("Show user profile"),
|
details=_("S&how user profile"),
|
||||||
favs=None,
|
favs=None,
|
||||||
# In buffer Menu.
|
# In buffer Menu.
|
||||||
community_timeline =_("Create c&ommunity timeline"),
|
community_timeline =_("Create c&ommunity timeline"),
|
||||||
|
|||||||
@@ -13,8 +13,8 @@ class autocompletionManageDialog(widgetUtils.BaseDialog):
|
|||||||
self.users = widgets.list(panel, _(u"Username"), _(u"Name"), style=wx.LC_REPORT)
|
self.users = widgets.list(panel, _(u"Username"), _(u"Name"), style=wx.LC_REPORT)
|
||||||
sizer.Add(label, 0, wx.ALL, 5)
|
sizer.Add(label, 0, wx.ALL, 5)
|
||||||
sizer.Add(self.users.list, 0, wx.ALL, 5)
|
sizer.Add(self.users.list, 0, wx.ALL, 5)
|
||||||
self.add = wx.Button(panel, -1, _(u"Add user"))
|
self.add = wx.Button(panel, -1, _(u"&Add user"))
|
||||||
self.remove = wx.Button(panel, -1, _(u"Remove user"))
|
self.remove = wx.Button(panel, -1, _(u"&Remove user"))
|
||||||
optionsBox = wx.BoxSizer(wx.HORIZONTAL)
|
optionsBox = wx.BoxSizer(wx.HORIZONTAL)
|
||||||
optionsBox.Add(self.add, 0, wx.ALL, 5)
|
optionsBox.Add(self.add, 0, wx.ALL, 5)
|
||||||
optionsBox.Add(self.remove, 0, wx.ALL, 5)
|
optionsBox.Add(self.remove, 0, wx.ALL, 5)
|
||||||
|
|||||||
@@ -17,11 +17,6 @@ def compose_post(post, db, settings, relative_times, show_screen_names, safe=Tru
|
|||||||
text = _("Boosted from @{}: {}").format(post.reblog.account.acct, templates.process_text(post.reblog, safe=safe))
|
text = _("Boosted from @{}: {}").format(post.reblog.account.acct, templates.process_text(post.reblog, safe=safe))
|
||||||
else:
|
else:
|
||||||
text = templates.process_text(post, safe=safe)
|
text = templates.process_text(post, safe=safe)
|
||||||
# Handle quoted posts
|
|
||||||
if hasattr(post, 'quote') and post.quote != None and hasattr(post.quote, 'quoted_status') and post.quote.quoted_status != None:
|
|
||||||
quoted_user = post.quote.quoted_status.account.acct
|
|
||||||
quoted_text = templates.process_text(post.quote.quoted_status, safe=safe)
|
|
||||||
text = text + " " + _("Quoting @{}: {}").format(quoted_user, quoted_text)
|
|
||||||
filtered = utils.evaluate_filters(post=post, current_context="home")
|
filtered = utils.evaluate_filters(post=post, current_context="home")
|
||||||
if filtered != None:
|
if filtered != None:
|
||||||
text = _("hidden by filter {}").format(filtered)
|
text = _("hidden by filter {}").format(filtered)
|
||||||
|
|||||||
@@ -76,13 +76,6 @@ def render_post(post, template, settings, relative_times=False, offset_hours=0):
|
|||||||
else:
|
else:
|
||||||
text = process_text(post, safe=False)
|
text = process_text(post, safe=False)
|
||||||
safe_text = process_text(post)
|
safe_text = process_text(post)
|
||||||
# Handle quoted posts
|
|
||||||
if hasattr(post, 'quote') and post.quote != None and hasattr(post.quote, 'quoted_status') and post.quote.quoted_status != None:
|
|
||||||
quoted_user = post.quote.quoted_status.account.acct
|
|
||||||
quoted_text = process_text(post.quote.quoted_status, safe=False)
|
|
||||||
quoted_safe_text = process_text(post.quote.quoted_status, safe=True)
|
|
||||||
text = text + " " + _("Quoting @{}: {}").format(quoted_user, quoted_text)
|
|
||||||
safe_text = safe_text + " " + _("Quoting @{}: {}").format(quoted_user, quoted_safe_text)
|
|
||||||
filtered = utils.evaluate_filters(post=post, current_context="home")
|
filtered = utils.evaluate_filters(post=post, current_context="home")
|
||||||
if filtered != None:
|
if filtered != None:
|
||||||
text = _("hidden by filter {}").format(filtered)
|
text = _("hidden by filter {}").format(filtered)
|
||||||
|
|||||||
@@ -3,47 +3,23 @@ import demoji
|
|||||||
from html.parser import HTMLParser
|
from html.parser import HTMLParser
|
||||||
from datetime import datetime, timezone
|
from datetime import datetime, timezone
|
||||||
|
|
||||||
url_re = re.compile(r'<a\s*href=[\'|"](.*?)[\'"].*?>')
|
url_re = re.compile('<a\s*href=[\'|"](.*?)[\'"].*?>')
|
||||||
|
|
||||||
class HTMLFilter(HTMLParser):
|
class HTMLFilter(HTMLParser):
|
||||||
# Classes to ignore when parsing HTML
|
|
||||||
IGNORED_CLASSES = ["quote-inline"]
|
|
||||||
|
|
||||||
text = ""
|
text = ""
|
||||||
first_paragraph = True
|
first_paragraph = True
|
||||||
skip_depth = 0 # Track nesting depth of ignored elements
|
|
||||||
|
|
||||||
def handle_data(self, data):
|
def handle_data(self, data):
|
||||||
# Only add data if we're not inside an ignored element
|
self.text += data
|
||||||
if self.skip_depth == 0:
|
|
||||||
self.text += data
|
|
||||||
|
|
||||||
def handle_starttag(self, tag, attrs):
|
def handle_starttag(self, tag, attrs):
|
||||||
# Check if this tag has a class that should be ignored
|
if tag == "br":
|
||||||
attrs_dict = dict(attrs)
|
self.text = self.text+"\n"
|
||||||
tag_class = attrs_dict.get("class", "")
|
elif tag == "p":
|
||||||
|
if self.first_paragraph:
|
||||||
# Check if any ignored class is present in this tag
|
self.first_paragraph = False
|
||||||
should_skip = any(ignored_class in tag_class for ignored_class in self.IGNORED_CLASSES)
|
else:
|
||||||
|
self.text = self.text+"\n\n"
|
||||||
if should_skip:
|
|
||||||
self.skip_depth += 1
|
|
||||||
elif self.skip_depth == 0: # Only process tags if we're not skipping
|
|
||||||
if tag == "br":
|
|
||||||
self.text = self.text+"\n"
|
|
||||||
elif tag == "p":
|
|
||||||
if self.first_paragraph:
|
|
||||||
self.first_paragraph = False
|
|
||||||
else:
|
|
||||||
self.text = self.text+"\n\n"
|
|
||||||
else:
|
|
||||||
# We're inside a skipped element, increment depth for nested tags
|
|
||||||
self.skip_depth += 1
|
|
||||||
|
|
||||||
def handle_endtag(self, tag):
|
|
||||||
# Decrement skip depth when closing any tag while skipping
|
|
||||||
if self.skip_depth > 0:
|
|
||||||
self.skip_depth -= 1
|
|
||||||
|
|
||||||
def html_filter(data):
|
def html_filter(data):
|
||||||
f = HTMLFilter()
|
f = HTMLFilter()
|
||||||
|
|||||||
@@ -141,7 +141,7 @@ class ShowUserProfile(wx.Dialog):
|
|||||||
mainSizer.Add(privateSizer, 0, wx.ALL | wx.CENTER)
|
mainSizer.Add(privateSizer, 0, wx.ALL | wx.CENTER)
|
||||||
|
|
||||||
botSizer = wx.BoxSizer(wx.HORIZONTAL)
|
botSizer = wx.BoxSizer(wx.HORIZONTAL)
|
||||||
botLabel = wx.StaticText(self.panel, label=_("&Bot account: "))
|
botLabel = wx.StaticText(self.panel, label=_("B&ot account: "))
|
||||||
botText = self.createTextCtrl(bullSwitch[user.bot], (30, 30))
|
botText = self.createTextCtrl(bullSwitch[user.bot], (30, 30))
|
||||||
botSizer.Add(botLabel, wx.SizerFlags().Center())
|
botSizer.Add(botLabel, wx.SizerFlags().Center())
|
||||||
botSizer.Add(botText, wx.SizerFlags().Center())
|
botSizer.Add(botText, wx.SizerFlags().Center())
|
||||||
@@ -154,7 +154,7 @@ class ShowUserProfile(wx.Dialog):
|
|||||||
discoverSizer.Add(discoverText, wx.SizerFlags().Center())
|
discoverSizer.Add(discoverText, wx.SizerFlags().Center())
|
||||||
mainSizer.Add(discoverSizer, 0, wx.ALL | wx.CENTER)
|
mainSizer.Add(discoverSizer, 0, wx.ALL | wx.CENTER)
|
||||||
|
|
||||||
posts = wx.Button(self.panel, label=_("{} p&osts. Click to open posts timeline").format(user.statuses_count))
|
posts = wx.Button(self.panel, label=_("{} pos&ts. Click to open posts timeline").format(user.statuses_count))
|
||||||
# posts.SetToolTip(_("Click to open {}'s posts").format(user.display_name))
|
# posts.SetToolTip(_("Click to open {}'s posts").format(user.display_name))
|
||||||
posts.Bind(wx.EVT_BUTTON, self.onPost)
|
posts.Bind(wx.EVT_BUTTON, self.onPost)
|
||||||
mainSizer.Add(posts, wx.SizerFlags().Center())
|
mainSizer.Add(posts, wx.SizerFlags().Center())
|
||||||
|
|||||||
@@ -119,7 +119,7 @@ class UpdateProfileDialog(wx.Dialog):
|
|||||||
|
|
||||||
self.locked = wx.CheckBox(panel, label=_("&Private account"))
|
self.locked = wx.CheckBox(panel, label=_("&Private account"))
|
||||||
self.locked.SetValue(locked)
|
self.locked.SetValue(locked)
|
||||||
self.bot = wx.CheckBox(panel, label=_("&Bot account"))
|
self.bot = wx.CheckBox(panel, label=_("B&ot account"))
|
||||||
self.bot.SetValue(bot)
|
self.bot.SetValue(bot)
|
||||||
self.discoverable = wx.CheckBox(panel, label=_("&Discoverable account"))
|
self.discoverable = wx.CheckBox(panel, label=_("&Discoverable account"))
|
||||||
self.discoverable.SetValue(discoverable)
|
self.discoverable.SetValue(discoverable)
|
||||||
|
|||||||
@@ -19,7 +19,7 @@ class mainFrame(wx.Frame):
|
|||||||
self.menuitem_search = self.menubar_application.Append(wx.ID_ANY, _(u"&Search"))
|
self.menuitem_search = self.menubar_application.Append(wx.ID_ANY, _(u"&Search"))
|
||||||
self.lists = self.menubar_application.Append(wx.ID_ANY, _(u"&Lists manager"))
|
self.lists = self.menubar_application.Append(wx.ID_ANY, _(u"&Lists manager"))
|
||||||
self.lists.Enable(False)
|
self.lists.Enable(False)
|
||||||
self.manageAliases = self.menubar_application.Append(wx.ID_ANY, _("Manage user aliases"))
|
self.manageAliases = self.menubar_application.Append(wx.ID_ANY, _("M&anage user aliases"))
|
||||||
self.keystroke_editor = self.menubar_application.Append(wx.ID_ANY, _(u"&Edit keystrokes"))
|
self.keystroke_editor = self.menubar_application.Append(wx.ID_ANY, _(u"&Edit keystrokes"))
|
||||||
self.account_settings = self.menubar_application.Append(wx.ID_ANY, _(u"Account se&ttings"))
|
self.account_settings = self.menubar_application.Append(wx.ID_ANY, _(u"Account se&ttings"))
|
||||||
self.prefs = self.menubar_application.Append(wx.ID_PREFERENCES, _(u"&Global settings"))
|
self.prefs = self.menubar_application.Append(wx.ID_PREFERENCES, _(u"&Global settings"))
|
||||||
@@ -56,7 +56,7 @@ class mainFrame(wx.Frame):
|
|||||||
self.trends = self.menubar_buffer.Append(wx.ID_ANY, _(u"New &trending topics buffer..."))
|
self.trends = self.menubar_buffer.Append(wx.ID_ANY, _(u"New &trending topics buffer..."))
|
||||||
self.filter = self.menubar_buffer.Append(wx.ID_ANY, _(u"Create a &filter"))
|
self.filter = self.menubar_buffer.Append(wx.ID_ANY, _(u"Create a &filter"))
|
||||||
self.manage_filters = self.menubar_buffer.Append(wx.ID_ANY, _(u"&Manage filters"))
|
self.manage_filters = self.menubar_buffer.Append(wx.ID_ANY, _(u"&Manage filters"))
|
||||||
self.find = self.menubar_buffer.Append(wx.ID_ANY, _(u"Find a string in the currently focused buffer..."))
|
self.find = self.menubar_buffer.Append(wx.ID_ANY, _(u"F&ind a string in the currently focused buffer..."))
|
||||||
self.load_previous_items = self.menubar_buffer.Append(wx.ID_ANY, _(u"&Load previous items"))
|
self.load_previous_items = self.menubar_buffer.Append(wx.ID_ANY, _(u"&Load previous items"))
|
||||||
self.menubar_buffer.AppendSeparator()
|
self.menubar_buffer.AppendSeparator()
|
||||||
self.mute_buffer = self.menubar_buffer.AppendCheckItem(wx.ID_ANY, _(u"&Mute"))
|
self.mute_buffer = self.menubar_buffer.AppendCheckItem(wx.ID_ANY, _(u"&Mute"))
|
||||||
@@ -66,8 +66,8 @@ class mainFrame(wx.Frame):
|
|||||||
|
|
||||||
# audio menu
|
# audio menu
|
||||||
self.menubar_audio = wx.Menu()
|
self.menubar_audio = wx.Menu()
|
||||||
self.seekLeft = self.menubar_audio.Append(wx.ID_ANY, _(u"&Seek back 5 seconds"))
|
self.seekLeft = self.menubar_audio.Append(wx.ID_ANY, _(u"Seek &back 5 seconds"))
|
||||||
self.seekRight = self.menubar_audio.Append(wx.ID_ANY, _(u"&Seek forward 5 seconds"))
|
self.seekRight = self.menubar_audio.Append(wx.ID_ANY, _(u"Seek &forward 5 seconds"))
|
||||||
|
|
||||||
# Help Menu
|
# Help Menu
|
||||||
self.menubar_help = wx.Menu()
|
self.menubar_help = wx.Menu()
|
||||||
|
|||||||
Reference in New Issue
Block a user