mirror of
https://github.com/markqvist/NomadNet.git
synced 2025-05-20 14:50:27 -04:00
Added page background and foreground headers to micron
This commit is contained in:
parent
b6e4d8441a
commit
96823c8546
3 changed files with 119 additions and 22 deletions
|
@ -8,7 +8,7 @@ import shutil
|
||||||
import nomadnet
|
import nomadnet
|
||||||
import subprocess
|
import subprocess
|
||||||
import threading
|
import threading
|
||||||
from .MicronParser import markup_to_attrmaps
|
from .MicronParser import markup_to_attrmaps, make_style, default_state
|
||||||
from nomadnet.Directory import DirectoryEntry
|
from nomadnet.Directory import DirectoryEntry
|
||||||
from nomadnet.vendor.Scrollable import *
|
from nomadnet.vendor.Scrollable import *
|
||||||
|
|
||||||
|
@ -99,6 +99,8 @@ class Browser:
|
||||||
self.response_speed = None
|
self.response_speed = None
|
||||||
self.response_size = None
|
self.response_size = None
|
||||||
self.response_transfer_size = None
|
self.response_transfer_size = None
|
||||||
|
self.page_background_color = None
|
||||||
|
self.page_foreground_color = None
|
||||||
self.saved_file_name = None
|
self.saved_file_name = None
|
||||||
self.page_data = None
|
self.page_data = None
|
||||||
self.displayed_page_data = None
|
self.displayed_page_data = None
|
||||||
|
@ -157,10 +159,16 @@ class Browser:
|
||||||
self.browser_footer = self.make_status_widget()
|
self.browser_footer = self.make_status_widget()
|
||||||
self.frame.contents["footer"] = (self.browser_footer, self.frame.options())
|
self.frame.contents["footer"] = (self.browser_footer, self.frame.options())
|
||||||
self.link_status_showing = False
|
self.link_status_showing = False
|
||||||
|
if self.page_background_color != None or self.page_foreground_color != None:
|
||||||
|
style_name = make_style(default_state(fg=self.page_foreground_color, bg=self.page_background_color))
|
||||||
|
self.browser_footer.set_attr_map({None: style_name})
|
||||||
else:
|
else:
|
||||||
self.link_status_showing = True
|
self.link_status_showing = True
|
||||||
self.browser_footer = urwid.AttrMap(urwid.Pile([urwid.Divider(self.g["divider1"]), urwid.Text("Link to: "+str(link_target))]), "browser_controls")
|
self.browser_footer = urwid.AttrMap(urwid.Pile([urwid.Divider(self.g["divider1"]), urwid.Text("Link to: "+str(link_target))]), "browser_controls")
|
||||||
self.frame.contents["footer"] = (self.browser_footer, self.frame.options())
|
self.frame.contents["footer"] = (self.browser_footer, self.frame.options())
|
||||||
|
if self.page_background_color != None or self.page_foreground_color != None:
|
||||||
|
style_name = make_style(default_state(fg=self.page_foreground_color, bg=self.page_background_color))
|
||||||
|
self.browser_footer.set_attr_map({None: style_name})
|
||||||
|
|
||||||
def expand_shorthands(self, destination_type):
|
def expand_shorthands(self, destination_type):
|
||||||
if destination_type == "nnn":
|
if destination_type == "nnn":
|
||||||
|
@ -321,7 +329,14 @@ class Browser:
|
||||||
|
|
||||||
def make_status_widget(self):
|
def make_status_widget(self):
|
||||||
if self.response_progress > 0:
|
if self.response_progress > 0:
|
||||||
pb = ResponseProgressBar("progress_empty" , "progress_full", current=self.response_progress, done=1.0, satt=None, owner=self)
|
if self.page_background_color != None or self.page_foreground_color != None:
|
||||||
|
style_name = make_style(default_state(fg=self.page_foreground_color, bg=self.page_background_color))
|
||||||
|
style_name_inverted = make_style(default_state(bg=self.page_foreground_color, fg=self.page_background_color))
|
||||||
|
else:
|
||||||
|
style_name = "progress_empty"
|
||||||
|
style_name_inverted = "progress_full"
|
||||||
|
|
||||||
|
pb = ResponseProgressBar(style_name , style_name_inverted, current=self.response_progress, done=1.0, satt=None, owner=self)
|
||||||
widget = urwid.Pile([urwid.Divider(self.g["divider1"]), pb])
|
widget = urwid.Pile([urwid.Divider(self.g["divider1"]), pb])
|
||||||
else:
|
else:
|
||||||
widget = urwid.Pile([urwid.Divider(self.g["divider1"]), urwid.Text(self.status_text())])
|
widget = urwid.Pile([urwid.Divider(self.g["divider1"]), urwid.Text(self.status_text())])
|
||||||
|
@ -368,6 +383,10 @@ class Browser:
|
||||||
else:
|
else:
|
||||||
self.display_widget.set_attr_map({None: "body_text"})
|
self.display_widget.set_attr_map({None: "body_text"})
|
||||||
self.browser_header = self.make_control_widget()
|
self.browser_header = self.make_control_widget()
|
||||||
|
if self.page_background_color != None or self.page_foreground_color != None:
|
||||||
|
style_name = make_style(default_state(fg=self.page_foreground_color, bg=self.page_background_color))
|
||||||
|
self.browser_header.set_attr_map({None: style_name})
|
||||||
|
|
||||||
if self.destination_hash != None:
|
if self.destination_hash != None:
|
||||||
remote_display_string = self.app.directory.simplest_display_str(self.destination_hash)
|
remote_display_string = self.app.directory.simplest_display_str(self.destination_hash)
|
||||||
else:
|
else:
|
||||||
|
@ -382,6 +401,13 @@ class Browser:
|
||||||
self.browser_footer = self.make_status_widget()
|
self.browser_footer = self.make_status_widget()
|
||||||
self.update_page_display()
|
self.update_page_display()
|
||||||
|
|
||||||
|
if self.page_background_color != None or self.page_foreground_color != None:
|
||||||
|
style_name = make_style(default_state(fg=self.page_foreground_color, bg=self.page_background_color))
|
||||||
|
self.browser_body.set_attr_map({None: style_name})
|
||||||
|
self.browser_footer.set_attr_map({None: style_name})
|
||||||
|
self.browser_header.set_attr_map({None: style_name})
|
||||||
|
self.display_widget.set_attr_map({None: style_name})
|
||||||
|
|
||||||
elif self.status == Browser.LINK_TIMEOUT:
|
elif self.status == Browser.LINK_TIMEOUT:
|
||||||
self.browser_body = self.make_request_failed_widget()
|
self.browser_body = self.make_request_failed_widget()
|
||||||
self.browser_footer = urwid.Text("")
|
self.browser_footer = urwid.Text("")
|
||||||
|
@ -395,6 +421,12 @@ class Browser:
|
||||||
|
|
||||||
self.browser_footer = self.make_status_widget()
|
self.browser_footer = self.make_status_widget()
|
||||||
|
|
||||||
|
if self.page_background_color != None or self.page_foreground_color != None:
|
||||||
|
style_name = make_style(default_state(fg=self.page_foreground_color, bg=self.page_background_color))
|
||||||
|
self.browser_footer.set_attr_map({None: style_name})
|
||||||
|
self.browser_header.set_attr_map({None: style_name})
|
||||||
|
self.display_widget.set_attr_map({None: style_name})
|
||||||
|
|
||||||
elif self.status == Browser.REQUEST_FAILED:
|
elif self.status == Browser.REQUEST_FAILED:
|
||||||
self.browser_body = self.make_request_failed_widget()
|
self.browser_body = self.make_request_failed_widget()
|
||||||
self.browser_footer = urwid.Text("")
|
self.browser_footer = urwid.Text("")
|
||||||
|
@ -764,7 +796,24 @@ class Browser:
|
||||||
self.status = Browser.DONE
|
self.status = Browser.DONE
|
||||||
self.page_data = cached
|
self.page_data = cached
|
||||||
self.markup = self.page_data.decode("utf-8")
|
self.markup = self.page_data.decode("utf-8")
|
||||||
self.attr_maps = markup_to_attrmaps(self.markup, url_delegate=self)
|
|
||||||
|
self.page_background_color = None
|
||||||
|
bgpos = self.markup.find("#!bg=")
|
||||||
|
if bgpos:
|
||||||
|
endpos = self.markup.find("\n", bgpos)
|
||||||
|
if endpos-(bgpos+5) == 3:
|
||||||
|
bg = self.markup[bgpos+5:endpos]
|
||||||
|
self.page_background_color = bg
|
||||||
|
|
||||||
|
self.page_foreground_color = None
|
||||||
|
fgpos = self.markup.find("#!fg=")
|
||||||
|
if fgpos:
|
||||||
|
endpos = self.markup.find("\n", fgpos)
|
||||||
|
if endpos-(fgpos+5) == 3:
|
||||||
|
fg = self.markup[fgpos+5:endpos]
|
||||||
|
self.page_foreground_color = fg
|
||||||
|
|
||||||
|
self.attr_maps = markup_to_attrmaps(self.markup, url_delegate=self, fg_color=self.page_foreground_color, bg_color=self.page_background_color)
|
||||||
|
|
||||||
self.response_progress = 0
|
self.response_progress = 0
|
||||||
self.response_speed = None
|
self.response_speed = None
|
||||||
|
@ -814,7 +863,24 @@ class Browser:
|
||||||
self.status = Browser.DONE
|
self.status = Browser.DONE
|
||||||
self.page_data = page_data
|
self.page_data = page_data
|
||||||
self.markup = self.page_data.decode("utf-8")
|
self.markup = self.page_data.decode("utf-8")
|
||||||
self.attr_maps = markup_to_attrmaps(self.markup, url_delegate=self)
|
|
||||||
|
self.page_background_color = None
|
||||||
|
bgpos = self.markup.find("#!bg=")
|
||||||
|
if bgpos:
|
||||||
|
endpos = self.markup.find("\n", bgpos)
|
||||||
|
if endpos-(bgpos+5) == 3:
|
||||||
|
bg = self.markup[bgpos+5:endpos]
|
||||||
|
self.page_background_color = bg
|
||||||
|
|
||||||
|
self.page_foreground_color = None
|
||||||
|
fgpos = self.markup.find("#!fg=")
|
||||||
|
if fgpos:
|
||||||
|
endpos = self.markup.find("\n", fgpos)
|
||||||
|
if endpos-(fgpos+5) == 3:
|
||||||
|
fg = self.markup[fgpos+5:endpos]
|
||||||
|
self.page_foreground_color = fg
|
||||||
|
|
||||||
|
self.attr_maps = markup_to_attrmaps(self.markup, url_delegate=self, fg_color=self.page_foreground_color, bg_color=self.page_background_color)
|
||||||
|
|
||||||
self.response_progress = 0
|
self.response_progress = 0
|
||||||
self.response_speed = None
|
self.response_speed = None
|
||||||
|
@ -949,7 +1015,24 @@ class Browser:
|
||||||
self.status = Browser.DONE
|
self.status = Browser.DONE
|
||||||
self.page_data = request_receipt.response
|
self.page_data = request_receipt.response
|
||||||
self.markup = self.page_data.decode("utf-8")
|
self.markup = self.page_data.decode("utf-8")
|
||||||
self.attr_maps = markup_to_attrmaps(self.markup, url_delegate=self)
|
|
||||||
|
self.page_background_color = None
|
||||||
|
bgpos = self.markup.find("#!bg=")
|
||||||
|
if bgpos:
|
||||||
|
endpos = self.markup.find("\n", bgpos)
|
||||||
|
if endpos-(bgpos+5) == 3:
|
||||||
|
bg = self.markup[bgpos+5:endpos]
|
||||||
|
self.page_background_color = bg
|
||||||
|
|
||||||
|
self.page_foreground_color = None
|
||||||
|
fgpos = self.markup.find("#!fg=")
|
||||||
|
if fgpos:
|
||||||
|
endpos = self.markup.find("\n", fgpos)
|
||||||
|
if endpos-(fgpos+5) == 3:
|
||||||
|
fg = self.markup[fgpos+5:endpos]
|
||||||
|
self.page_foreground_color = fg
|
||||||
|
|
||||||
|
self.attr_maps = markup_to_attrmaps(self.markup, url_delegate=self, fg_color=self.page_foreground_color, bg_color=self.page_background_color)
|
||||||
self.response_progress = 0
|
self.response_progress = 0
|
||||||
self.response_speed = None
|
self.response_speed = None
|
||||||
self.progress_updated_at = None
|
self.progress_updated_at = None
|
||||||
|
|
|
@ -1268,6 +1268,9 @@ You can use `B5d5`F222 color `f`B333 `Ff00f`Ff80o`Ffd0r`F9f0m`F0f2a`F0fdt`F07ft`
|
||||||
|
|
||||||
``
|
``
|
||||||
|
|
||||||
|
>Page Foreground and Background Colors
|
||||||
|
|
||||||
|
To specify a background color for the entire page, place the `!#!bg=X`! header on one of the first lines of your page, where `!X`! is the color you want to use, for example `!444`!. If you're also using the cache control header, the background specifier must come `*after`* the cache control header. Likewise, you can specify the default text color by using the `!#!fg=X`! header.
|
||||||
|
|
||||||
>Links
|
>Links
|
||||||
|
|
||||||
|
@ -1385,6 +1388,7 @@ A masked input field: `B444`<!|masked_demo`hidden text>`B333
|
||||||
|
|
||||||
Full control: `B444`<!32|all_options`hidden text>`B333
|
Full control: `B444`<!32|all_options`hidden text>`B333
|
||||||
`b
|
`b
|
||||||
|
|
||||||
>>> Checkboxes
|
>>> Checkboxes
|
||||||
|
|
||||||
In addition to text fields, Checkboxes are another way of submitting data. They allow the user to make a single selection or select multiple options.
|
In addition to text fields, Checkboxes are another way of submitting data. They allow the user to make a single selection or select multiple options.
|
||||||
|
|
|
@ -31,20 +31,14 @@ SYNTH_SPECS = {}
|
||||||
SECTION_INDENT = 2
|
SECTION_INDENT = 2
|
||||||
INDENT_RIGHT = 1
|
INDENT_RIGHT = 1
|
||||||
|
|
||||||
def markup_to_attrmaps(markup, url_delegate = None):
|
def default_state(fg=None, bg=None):
|
||||||
global SELECTED_STYLES
|
if fg == None: fg = SELECTED_STYLES["plain"]["fg"]
|
||||||
if nomadnet.NomadNetworkApp.get_shared_instance().config["textui"]["theme"] == nomadnet.ui.TextUI.THEME_DARK:
|
if bg == None: bg = DEFAULT_BG
|
||||||
SELECTED_STYLES = STYLES_DARK
|
|
||||||
else:
|
|
||||||
SELECTED_STYLES = STYLES_LIGHT
|
|
||||||
|
|
||||||
attrmaps = []
|
|
||||||
|
|
||||||
state = {
|
state = {
|
||||||
"literal": False,
|
"literal": False,
|
||||||
"depth": 0,
|
"depth": 0,
|
||||||
"fg_color": SELECTED_STYLES["plain"]["fg"],
|
"fg_color": fg,
|
||||||
"bg_color": DEFAULT_BG,
|
"bg_color": bg,
|
||||||
"formatting": {
|
"formatting": {
|
||||||
"bold": False,
|
"bold": False,
|
||||||
"underline": False,
|
"underline": False,
|
||||||
|
@ -54,7 +48,25 @@ def markup_to_attrmaps(markup, url_delegate = None):
|
||||||
},
|
},
|
||||||
"default_align": "left",
|
"default_align": "left",
|
||||||
"align": "left",
|
"align": "left",
|
||||||
|
"default_fg": fg,
|
||||||
|
"default_bg": bg,
|
||||||
}
|
}
|
||||||
|
return state
|
||||||
|
|
||||||
|
def markup_to_attrmaps(markup, url_delegate = None, fg_color=None, bg_color=None):
|
||||||
|
global SELECTED_STYLES
|
||||||
|
if nomadnet.NomadNetworkApp.get_shared_instance().config["textui"]["theme"] == nomadnet.ui.TextUI.THEME_DARK:
|
||||||
|
SELECTED_STYLES = STYLES_DARK
|
||||||
|
else:
|
||||||
|
SELECTED_STYLES = STYLES_LIGHT
|
||||||
|
|
||||||
|
attrmaps = []
|
||||||
|
|
||||||
|
fgc = None; bgc = DEFAULT_BG
|
||||||
|
if bg_color != None: bgc = bg_color
|
||||||
|
if fg_color != None: fgc = fg_color
|
||||||
|
|
||||||
|
state = default_state(fgc, bgc)
|
||||||
|
|
||||||
# Split entire document into lines for
|
# Split entire document into lines for
|
||||||
# processing.
|
# processing.
|
||||||
|
@ -73,7 +85,6 @@ def markup_to_attrmaps(markup, url_delegate = None):
|
||||||
|
|
||||||
return attrmaps
|
return attrmaps
|
||||||
|
|
||||||
import RNS
|
|
||||||
def parse_line(line, state, url_delegate):
|
def parse_line(line, state, url_delegate):
|
||||||
pre_escape = False
|
pre_escape = False
|
||||||
if len(line) > 0:
|
if len(line) > 0:
|
||||||
|
@ -439,7 +450,6 @@ def make_output(state, line, url_delegate, pre_escape=False):
|
||||||
escape = pre_escape
|
escape = pre_escape
|
||||||
skip = 0
|
skip = 0
|
||||||
|
|
||||||
RNS.log(f"Line [ESC {escape}] [MODE {mode}: {line}")
|
|
||||||
for i in range(0, len(line)):
|
for i in range(0, len(line)):
|
||||||
c = line[i]
|
c = line[i]
|
||||||
if skip > 0:
|
if skip > 0:
|
||||||
|
@ -458,20 +468,20 @@ def make_output(state, line, url_delegate, pre_escape=False):
|
||||||
state["fg_color"] = color
|
state["fg_color"] = color
|
||||||
skip = 3
|
skip = 3
|
||||||
elif c == "f":
|
elif c == "f":
|
||||||
state["fg_color"] = SELECTED_STYLES["plain"]["fg"]
|
state["fg_color"] = state["default_fg"]
|
||||||
elif c == "B":
|
elif c == "B":
|
||||||
if len(line) >= i+4:
|
if len(line) >= i+4:
|
||||||
color = line[i+1:i+4]
|
color = line[i+1:i+4]
|
||||||
state["bg_color"] = color
|
state["bg_color"] = color
|
||||||
skip = 3
|
skip = 3
|
||||||
elif c == "b":
|
elif c == "b":
|
||||||
state["bg_color"] = DEFAULT_BG
|
state["bg_color"] = state["default_bg"]
|
||||||
elif c == "`":
|
elif c == "`":
|
||||||
state["formatting"]["bold"] = False
|
state["formatting"]["bold"] = False
|
||||||
state["formatting"]["underline"] = False
|
state["formatting"]["underline"] = False
|
||||||
state["formatting"]["italic"] = False
|
state["formatting"]["italic"] = False
|
||||||
state["fg_color"] = SELECTED_STYLES["plain"]["fg"]
|
state["fg_color"] = state["default_fg"]
|
||||||
state["bg_color"] = DEFAULT_BG
|
state["bg_color"] = state["default_bg"]
|
||||||
state["align"] = state["default_align"]
|
state["align"] = state["default_align"]
|
||||||
elif c == "c":
|
elif c == "c":
|
||||||
if state["align"] != "center":
|
if state["align"] != "center":
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue