mirror of
https://github.com/markqvist/NomadNet.git
synced 2025-05-20 06:40:24 -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 subprocess
|
||||
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.vendor.Scrollable import *
|
||||
|
||||
|
@ -99,6 +99,8 @@ class Browser:
|
|||
self.response_speed = None
|
||||
self.response_size = None
|
||||
self.response_transfer_size = None
|
||||
self.page_background_color = None
|
||||
self.page_foreground_color = None
|
||||
self.saved_file_name = None
|
||||
self.page_data = None
|
||||
self.displayed_page_data = None
|
||||
|
@ -157,10 +159,16 @@ class Browser:
|
|||
self.browser_footer = self.make_status_widget()
|
||||
self.frame.contents["footer"] = (self.browser_footer, self.frame.options())
|
||||
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:
|
||||
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.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):
|
||||
if destination_type == "nnn":
|
||||
|
@ -321,7 +329,14 @@ class Browser:
|
|||
|
||||
def make_status_widget(self):
|
||||
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])
|
||||
else:
|
||||
widget = urwid.Pile([urwid.Divider(self.g["divider1"]), urwid.Text(self.status_text())])
|
||||
|
@ -368,6 +383,10 @@ class Browser:
|
|||
else:
|
||||
self.display_widget.set_attr_map({None: "body_text"})
|
||||
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:
|
||||
remote_display_string = self.app.directory.simplest_display_str(self.destination_hash)
|
||||
else:
|
||||
|
@ -381,6 +400,13 @@ class Browser:
|
|||
if self.status == Browser.DONE:
|
||||
self.browser_footer = self.make_status_widget()
|
||||
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:
|
||||
self.browser_body = self.make_request_failed_widget()
|
||||
|
@ -394,6 +420,12 @@ class Browser:
|
|||
)
|
||||
|
||||
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:
|
||||
self.browser_body = self.make_request_failed_widget()
|
||||
|
@ -764,7 +796,24 @@ class Browser:
|
|||
self.status = Browser.DONE
|
||||
self.page_data = cached
|
||||
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_speed = None
|
||||
|
@ -814,7 +863,24 @@ class Browser:
|
|||
self.status = Browser.DONE
|
||||
self.page_data = page_data
|
||||
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_speed = None
|
||||
|
@ -949,7 +1015,24 @@ class Browser:
|
|||
self.status = Browser.DONE
|
||||
self.page_data = request_receipt.response
|
||||
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_speed = 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
|
||||
|
||||
|
@ -1385,6 +1388,7 @@ A masked input field: `B444`<!|masked_demo`hidden text>`B333
|
|||
|
||||
Full control: `B444`<!32|all_options`hidden text>`B333
|
||||
`b
|
||||
|
||||
>>> 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.
|
||||
|
|
|
@ -31,20 +31,14 @@ SYNTH_SPECS = {}
|
|||
SECTION_INDENT = 2
|
||||
INDENT_RIGHT = 1
|
||||
|
||||
def markup_to_attrmaps(markup, url_delegate = 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 = []
|
||||
|
||||
def default_state(fg=None, bg=None):
|
||||
if fg == None: fg = SELECTED_STYLES["plain"]["fg"]
|
||||
if bg == None: bg = DEFAULT_BG
|
||||
state = {
|
||||
"literal": False,
|
||||
"depth": 0,
|
||||
"fg_color": SELECTED_STYLES["plain"]["fg"],
|
||||
"bg_color": DEFAULT_BG,
|
||||
"fg_color": fg,
|
||||
"bg_color": bg,
|
||||
"formatting": {
|
||||
"bold": False,
|
||||
"underline": False,
|
||||
|
@ -54,7 +48,25 @@ def markup_to_attrmaps(markup, url_delegate = None):
|
|||
},
|
||||
"default_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
|
||||
# processing.
|
||||
|
@ -73,7 +85,6 @@ def markup_to_attrmaps(markup, url_delegate = None):
|
|||
|
||||
return attrmaps
|
||||
|
||||
import RNS
|
||||
def parse_line(line, state, url_delegate):
|
||||
pre_escape = False
|
||||
if len(line) > 0:
|
||||
|
@ -439,7 +450,6 @@ def make_output(state, line, url_delegate, pre_escape=False):
|
|||
escape = pre_escape
|
||||
skip = 0
|
||||
|
||||
RNS.log(f"Line [ESC {escape}] [MODE {mode}: {line}")
|
||||
for i in range(0, len(line)):
|
||||
c = line[i]
|
||||
if skip > 0:
|
||||
|
@ -458,20 +468,20 @@ def make_output(state, line, url_delegate, pre_escape=False):
|
|||
state["fg_color"] = color
|
||||
skip = 3
|
||||
elif c == "f":
|
||||
state["fg_color"] = SELECTED_STYLES["plain"]["fg"]
|
||||
state["fg_color"] = state["default_fg"]
|
||||
elif c == "B":
|
||||
if len(line) >= i+4:
|
||||
color = line[i+1:i+4]
|
||||
state["bg_color"] = color
|
||||
skip = 3
|
||||
elif c == "b":
|
||||
state["bg_color"] = DEFAULT_BG
|
||||
state["bg_color"] = state["default_bg"]
|
||||
elif c == "`":
|
||||
state["formatting"]["bold"] = False
|
||||
state["formatting"]["underline"] = False
|
||||
state["formatting"]["italic"] = False
|
||||
state["fg_color"] = SELECTED_STYLES["plain"]["fg"]
|
||||
state["bg_color"] = DEFAULT_BG
|
||||
state["fg_color"] = state["default_fg"]
|
||||
state["bg_color"] = state["default_bg"]
|
||||
state["align"] = state["default_align"]
|
||||
elif c == "c":
|
||||
if state["align"] != "center":
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue