1
0
mirror of https://github.com/netbox-community/netbox.git synced 2024-05-10 07:54:54 +00:00

Move clean_html() & foreground_color() to utilities.html

This commit is contained in:
Jeremy Stretch
2024-03-21 13:11:15 -04:00
parent b92d3245c8
commit 2a3b85a32f
6 changed files with 40 additions and 35 deletions

View File

@ -6,7 +6,7 @@ from svgwrite.text import Text
from django.conf import settings
from dcim.constants import CABLE_TRACE_SVG_DEFAULT_WIDTH
from utilities.utils import foreground_color
from utilities.html import foreground_color
__all__ = (

View File

@ -14,7 +14,8 @@ from django.urls import reverse
from django.utils.http import urlencode
from netbox.config import get_config
from utilities.utils import foreground_color, array_to_ranges
from utilities.html import foreground_color
from utilities.utils import array_to_ranges
from dcim.constants import RACK_ELEVATION_BORDER_WIDTH

View File

@ -22,8 +22,9 @@ from netbox.models import ChangeLoggedModel
from netbox.models.features import (
CloningMixin, CustomFieldsMixin, CustomLinksMixin, ExportTemplatesMixin, SyncedDataMixin, TagsMixin,
)
from utilities.html import clean_html
from utilities.querysets import RestrictedQuerySet
from utilities.utils import clean_html, dict_to_querydict, render_jinja2
from utilities.utils import dict_to_querydict, render_jinja2
__all__ = (
'Bookmark',

View File

@ -1,12 +1,46 @@
import re
import nh3
from django.utils.html import escape
from .constants import HTML_ALLOWED_ATTRIBUTES, HTML_ALLOWED_TAGS
__all__ = (
'clean_html',
'foreground_color',
'highlight',
)
def clean_html(html, schemes):
"""
Sanitizes HTML based on a whitelist of allowed tags and attributes.
Also takes a list of allowed URI schemes.
"""
return nh3.clean(
html,
tags=HTML_ALLOWED_TAGS,
attributes=HTML_ALLOWED_ATTRIBUTES,
url_schemes=set(schemes)
)
def foreground_color(bg_color, dark='000000', light='ffffff'):
"""
Return the ideal foreground color (dark or light) for a given background color in hexadecimal RGB format.
:param dark: RBG color code for dark text
:param light: RBG color code for light text
"""
THRESHOLD = 150
bg_color = bg_color.strip('#')
r, g, b = [int(bg_color[c:c + 2], 16) for c in (0, 2, 4)]
if r * 0.299 + g * 0.587 + b * 0.114 > THRESHOLD:
return dark
else:
return light
def highlight(value, highlight, trim_pre=None, trim_post=None, trim_placeholder='...'):
"""
Highlight a string within a string and optionally trim the pre/post portions of the original string.

View File

@ -11,9 +11,9 @@ from markdown import markdown
from markdown.extensions.tables import TableExtension
from netbox.config import get_config
from utilities.html import clean_html, foreground_color
from utilities.markdown import StrikethroughExtension
from utilities.string import title
from utilities.utils import clean_html, foreground_color
__all__ = (
'bettertitle',

View File

@ -3,7 +3,6 @@ import decimal
from itertools import count, groupby
from urllib.parse import urlencode
import nh3
from django.db.models import Count, ManyToOneRel, OuterRef, Subquery
from django.db.models.functions import Coalesce
from django.http import QueryDict
@ -13,7 +12,6 @@ from django.utils.timezone import localtime
from jinja2.sandbox import SandboxedEnvironment
from netbox.config import get_config
from .constants import HTML_ALLOWED_ATTRIBUTES, HTML_ALLOWED_TAGS
from .string import title
@ -47,22 +45,6 @@ def csv_format(data):
return ','.join(csv)
def foreground_color(bg_color, dark='000000', light='ffffff'):
"""
Return the ideal foreground color (dark or light) for a given background color in hexadecimal RGB format.
:param dark: RBG color code for dark text
:param light: RBG color code for light text
"""
THRESHOLD = 150
bg_color = bg_color.strip('#')
r, g, b = [int(bg_color[c:c + 2], 16) for c in (0, 2, 4)]
if r * 0.299 + g * 0.587 + b * 0.114 > THRESHOLD:
return dark
else:
return light
def dynamic_import(name):
"""
Dynamically import a class from an absolute path string
@ -301,19 +283,6 @@ def content_type_identifier(ct):
return f'{ct.app_label}.{ct.model}'
def clean_html(html, schemes):
"""
Sanitizes HTML based on a whitelist of allowed tags and attributes.
Also takes a list of allowed URI schemes.
"""
return nh3.clean(
html,
tags=HTML_ALLOWED_TAGS,
attributes=HTML_ALLOWED_ATTRIBUTES,
url_schemes=set(schemes)
)
def local_now():
"""
Return the current date & time in the system timezone.