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:
@ -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__ = (
|
||||
|
@ -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
|
||||
|
||||
|
||||
|
@ -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',
|
||||
|
@ -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.
|
||||
|
@ -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',
|
||||
|
@ -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.
|
||||
|
Reference in New Issue
Block a user