diff --git a/.gitattributes b/.gitattributes
index bfbc22d191..b851783825 100644
--- a/.gitattributes
+++ b/.gitattributes
@@ -8,4 +8,4 @@
*.yaml text
*.conf text
*.sh text eol=lf
-*.js text
\ No newline at end of file
+*.js text
diff --git a/.github/workflows/check_translations.yaml b/.github/workflows/check_translations.yaml
index 3407dc7fd8..eb02ceff09 100644
--- a/.github/workflows/check_translations.yaml
+++ b/.github/workflows/check_translations.yaml
@@ -31,7 +31,7 @@ jobs:
sudo apt-get install gettext
pip3 install invoke
invoke install
- - name: Test Translations
+ - name: Test Translations
run: invoke translate
- name: Check Migration Files
run: python3 ci/check_migration_files.py
diff --git a/.github/workflows/qc_checks.yaml b/.github/workflows/qc_checks.yaml
index b884796cec..2245a5242f 100644
--- a/.github/workflows/qc_checks.yaml
+++ b/.github/workflows/qc_checks.yaml
@@ -197,7 +197,7 @@ jobs:
invoke migrate
invoke import-records -f data.json
invoke import-records -f data.json
- - name: Test Translations
+ - name: Test Translations
run: invoke translate
- name: Check Migration Files
run: python3 ci/check_migration_files.py
diff --git a/.gitpod.yml b/.gitpod.yml
index 33389c5960..1cc823a74f 100644
--- a/.gitpod.yml
+++ b/.gitpod.yml
@@ -29,7 +29,7 @@ tasks:
git clone https://github.com/inventree/demo-dataset /workspace/InvenTree/inventree-data
invoke delete-data -f
invoke import-records -f /workspace/InvenTree/inventree-data/inventree_data.json
-
+
inv server
# List the ports to expose. Learn more https://www.gitpod.io/docs/config-ports/
diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md
index e6a58dba54..f1bdc6ad85 100644
--- a/CONTRIBUTING.md
+++ b/CONTRIBUTING.md
@@ -2,7 +2,7 @@ Please read the contribution guidelines below, before submitting your first pull
## Setup
-Please run `invoke setup_dev` in the root directory of your InvenTree code base to set up your development setup before starting to contribute. This will install and set up pre-commit to run some checks before each commit and help reduce the style errors.
+Please run `invoke setup_dev` in the root directory of your InvenTree code base to set up your development setup before starting to contribute. This will install and set up pre-commit to run some checks before each commit and help reduce the style errors.
## Branches and Versioning
@@ -94,7 +94,7 @@ The various github actions can be found in the `./github/workflows` directory
## Code Style
-Sumbitted Python code is automatically checked against PEP style guidelines. Locally you can run `invoke style` to ensure the style checks will pass, before submitting the PR.
+Sumbitted Python code is automatically checked against PEP style guidelines. Locally you can run `invoke style` to ensure the style checks will pass, before submitting the PR.
Please write docstrings for each function and class - we follow the [google doc-style](https://google.github.io/styleguide/pyguide.html#38-comments-and-docstrings) for python. Docstrings for general javascript code is encouraged! Docstyles are checked by `invoke style`.
## Documentation
@@ -166,4 +166,3 @@ The tags describe issues and PRs in multiple areas:
| | docker | Docker / docker-compose |
| | CI | CI / unit testing ecosystem |
| | setup | Relates to the InvenTree setup / installation process |
-
diff --git a/InvenTree/InvenTree/api.py b/InvenTree/InvenTree/api.py
index e58ef798fc..0713479f7a 100644
--- a/InvenTree/InvenTree/api.py
+++ b/InvenTree/InvenTree/api.py
@@ -2,18 +2,17 @@
Main JSON interface views
"""
-from django.utils.translation import gettext_lazy as _
from django.conf import settings
from django.http import JsonResponse
+from django.utils.translation import gettext_lazy as _
from django_filters.rest_framework import DjangoFilterBackend
-from rest_framework import filters
+from rest_framework import filters, permissions
-from rest_framework import permissions
-
-from .views import AjaxView
-from .version import inventreeVersion, inventreeApiVersion, inventreeInstanceName
from .status import is_worker_running
+from .version import (inventreeApiVersion, inventreeInstanceName,
+ inventreeVersion)
+from .views import AjaxView
class InfoView(AjaxView):
diff --git a/InvenTree/InvenTree/apps.py b/InvenTree/InvenTree/apps.py
index 0284cd43aa..74dbca444c 100644
--- a/InvenTree/InvenTree/apps.py
+++ b/InvenTree/InvenTree/apps.py
@@ -3,16 +3,16 @@
import logging
from django.apps import AppConfig
-from django.core.exceptions import AppRegistryNotReady
from django.conf import settings
from django.contrib.auth import get_user_model
+from django.core.exceptions import AppRegistryNotReady
from django.db import transaction
from django.db.utils import IntegrityError
-from InvenTree.ready import isInTestMode, canAppAccessDatabase
-from .config import get_setting
import InvenTree.tasks
+from InvenTree.ready import canAppAccessDatabase, isInTestMode
+from .config import get_setting
logger = logging.getLogger("inventree")
@@ -111,8 +111,8 @@ class InvenTreeConfig(AppConfig):
try:
from djmoney.contrib.exchange.models import ExchangeBackend
- from InvenTree.tasks import update_exchange_rates
from common.settings import currency_code_default
+ from InvenTree.tasks import update_exchange_rates
except AppRegistryNotReady: # pragma: no cover
pass
diff --git a/InvenTree/InvenTree/config.py b/InvenTree/InvenTree/config.py
index 35671c1b26..d7691cf4cc 100644
--- a/InvenTree/InvenTree/config.py
+++ b/InvenTree/InvenTree/config.py
@@ -2,10 +2,9 @@
Helper functions for loading InvenTree configuration options
"""
+import logging
import os
import shutil
-import logging
-
logger = logging.getLogger('inventree')
diff --git a/InvenTree/InvenTree/context.py b/InvenTree/InvenTree/context.py
index 7d65cb4231..c0b27ad5bf 100644
--- a/InvenTree/InvenTree/context.py
+++ b/InvenTree/InvenTree/context.py
@@ -4,12 +4,10 @@
Provides extra global data to all templates.
"""
-from InvenTree.status_codes import SalesOrderStatus, PurchaseOrderStatus
-from InvenTree.status_codes import BuildStatus, StockStatus
-from InvenTree.status_codes import StockHistoryCode
-
import InvenTree.status
-
+from InvenTree.status_codes import (BuildStatus, PurchaseOrderStatus,
+ SalesOrderStatus, StockHistoryCode,
+ StockStatus)
from users.models import RuleSet
diff --git a/InvenTree/InvenTree/exceptions.py b/InvenTree/InvenTree/exceptions.py
index 46b1a1ee0a..55017affc0 100644
--- a/InvenTree/InvenTree/exceptions.py
+++ b/InvenTree/InvenTree/exceptions.py
@@ -5,20 +5,19 @@ Custom exception handling for the DRF API
# -*- coding: utf-8 -*-
from __future__ import unicode_literals
-import traceback
import sys
+import traceback
from django.conf import settings
from django.core.exceptions import ValidationError as DjangoValidationError
from django.utils.translation import gettext_lazy as _
from django.views.debug import ExceptionReporter
+import rest_framework.views as drfviews
from error_report.models import Error
-
+from rest_framework import serializers
from rest_framework.exceptions import ValidationError as DRFValidationError
from rest_framework.response import Response
-from rest_framework import serializers
-import rest_framework.views as drfviews
def exception_handler(exc, context):
diff --git a/InvenTree/InvenTree/exchange.py b/InvenTree/InvenTree/exchange.py
index a79239568d..a46e1356a8 100644
--- a/InvenTree/InvenTree/exchange.py
+++ b/InvenTree/InvenTree/exchange.py
@@ -1,13 +1,14 @@
-import certifi
import ssl
+from urllib.error import URLError
from urllib.request import urlopen
-from common.settings import currency_code_default, currency_codes
-from urllib.error import URLError
-
-from djmoney.contrib.exchange.backends.base import SimpleExchangeBackend
from django.db.utils import OperationalError
+import certifi
+from djmoney.contrib.exchange.backends.base import SimpleExchangeBackend
+
+from common.settings import currency_code_default, currency_codes
+
class InvenTreeExchange(SimpleExchangeBackend):
"""
diff --git a/InvenTree/InvenTree/fields.py b/InvenTree/InvenTree/fields.py
index 894b993e50..9995c5444c 100644
--- a/InvenTree/InvenTree/fields.py
+++ b/InvenTree/InvenTree/fields.py
@@ -1,24 +1,22 @@
""" Custom fields used in InvenTree """
import sys
-
-from .validators import allowable_url_schemes
-
-from django.utils.translation import gettext_lazy as _
-
-from django.forms.fields import URLField as FormURLField
-from django.db import models as models
-from django.core import validators
-from django import forms
-
from decimal import Decimal
-from djmoney.models.fields import MoneyField as ModelMoneyField
+from django import forms
+from django.core import validators
+from django.db import models as models
+from django.forms.fields import URLField as FormURLField
+from django.utils.translation import gettext_lazy as _
+
from djmoney.forms.fields import MoneyField
+from djmoney.models.fields import MoneyField as ModelMoneyField
from djmoney.models.validators import MinMoneyValidator
import InvenTree.helpers
+from .validators import allowable_url_schemes
+
class InvenTreeURLFormField(FormURLField):
""" Custom URL form field with custom scheme validators """
@@ -39,7 +37,7 @@ class InvenTreeURLField(models.URLField):
def money_kwargs():
""" returns the database settings for MoneyFields """
- from common.settings import currency_code_mappings, currency_code_default
+ from common.settings import currency_code_default, currency_code_mappings
kwargs = {}
kwargs['currency_choices'] = currency_code_mappings()
diff --git a/InvenTree/InvenTree/forms.py b/InvenTree/InvenTree/forms.py
index 40e8509411..50e2d26fff 100644
--- a/InvenTree/InvenTree/forms.py
+++ b/InvenTree/InvenTree/forms.py
@@ -2,29 +2,29 @@
Helper forms which subclass Django forms to provide additional functionality
"""
-from urllib.parse import urlencode
import logging
+from urllib.parse import urlencode
-from django.utils.translation import gettext_lazy as _
from django import forms
-from django.contrib.auth.models import User, Group
from django.conf import settings
+from django.contrib.auth.models import Group, User
from django.http import HttpResponseRedirect
from django.urls import reverse
+from django.utils.translation import gettext_lazy as _
-from crispy_forms.helper import FormHelper
-from crispy_forms.layout import Layout, Field
-from crispy_forms.bootstrap import PrependedText, AppendedText, PrependedAppendedText, StrictButton, Div
-
-from allauth.account.forms import SignupForm, set_form_field_order
from allauth.account.adapter import DefaultAccountAdapter
-from allauth.socialaccount.adapter import DefaultSocialAccountAdapter
+from allauth.account.forms import SignupForm, set_form_field_order
from allauth.exceptions import ImmediateHttpResponse
+from allauth.socialaccount.adapter import DefaultSocialAccountAdapter
from allauth_2fa.adapter import OTPAdapter
from allauth_2fa.utils import user_has_valid_totp_device
+from crispy_forms.bootstrap import (AppendedText, Div, PrependedAppendedText,
+ PrependedText, StrictButton)
+from crispy_forms.helper import FormHelper
+from crispy_forms.layout import Field, Layout
-from part.models import PartCategory
from common.models import InvenTreeSetting
+from part.models import PartCategory
logger = logging.getLogger('inventree')
diff --git a/InvenTree/InvenTree/helpers.py b/InvenTree/InvenTree/helpers.py
index 34ce1439c8..c541ce4ef5 100644
--- a/InvenTree/InvenTree/helpers.py
+++ b/InvenTree/InvenTree/helpers.py
@@ -3,29 +3,27 @@ Provides helper functions used throughout the InvenTree project
"""
import io
-import re
import json
import os.path
-from PIL import Image
-
+import re
from decimal import Decimal, InvalidOperation
-
from wsgiref.util import FileWrapper
-from django.http import StreamingHttpResponse
-from django.core.exceptions import ValidationError, FieldError
-from django.utils.translation import gettext_lazy as _
-from django.test import TestCase
from django.contrib.auth.models import Permission
-from .api_tester import UserMixin
-
-import InvenTree.version
-
-from common.models import InvenTreeSetting
-from .settings import MEDIA_URL, STATIC_URL
-from common.settings import currency_code_default
+from django.core.exceptions import FieldError, ValidationError
+from django.http import StreamingHttpResponse
+from django.test import TestCase
+from django.utils.translation import gettext_lazy as _
from djmoney.money import Money
+from PIL import Image
+
+import InvenTree.version
+from common.models import InvenTreeSetting
+from common.settings import currency_code_default
+
+from .api_tester import UserMixin
+from .settings import MEDIA_URL, STATIC_URL
def getSetting(key, backup_value=None):
diff --git a/InvenTree/InvenTree/management/commands/clean_settings.py b/InvenTree/InvenTree/management/commands/clean_settings.py
index 283416de29..7607f2a574 100644
--- a/InvenTree/InvenTree/management/commands/clean_settings.py
+++ b/InvenTree/InvenTree/management/commands/clean_settings.py
@@ -6,7 +6,6 @@ import logging
from django.core.management.base import BaseCommand
-
logger = logging.getLogger('inventree')
diff --git a/InvenTree/InvenTree/management/commands/prerender.py b/InvenTree/InvenTree/management/commands/prerender.py
index 28f4b21f15..efaaad80dc 100644
--- a/InvenTree/InvenTree/management/commands/prerender.py
+++ b/InvenTree/InvenTree/management/commands/prerender.py
@@ -2,15 +2,15 @@
Custom management command to prerender files
"""
-from django.core.management.base import BaseCommand
+import os
+
from django.conf import settings
+from django.core.management.base import BaseCommand
+from django.http.request import HttpRequest
from django.template.loader import render_to_string
from django.utils.module_loading import import_string
-from django.http.request import HttpRequest
from django.utils.translation import override as lang_over
-import os
-
def render_file(file_name, source, target, locales, ctx):
""" renders a file into all provided locales """
diff --git a/InvenTree/InvenTree/management/commands/rebuild_thumbnails.py b/InvenTree/InvenTree/management/commands/rebuild_thumbnails.py
index d065516835..3d684df06d 100644
--- a/InvenTree/InvenTree/management/commands/rebuild_thumbnails.py
+++ b/InvenTree/InvenTree/management/commands/rebuild_thumbnails.py
@@ -4,19 +4,18 @@ Custom management command to rebuild thumbnail images
- May be required after importing a new dataset, for example
"""
-import os
import logging
+import os
+
+from django.conf import settings
+from django.core.management.base import BaseCommand
+from django.db.utils import OperationalError, ProgrammingError
from PIL import UnidentifiedImageError
-from django.core.management.base import BaseCommand
-from django.conf import settings
-from django.db.utils import OperationalError, ProgrammingError
-
from company.models import Company
from part.models import Part
-
logger = logging.getLogger('inventree')
diff --git a/InvenTree/InvenTree/management/commands/remove_mfa.py b/InvenTree/InvenTree/management/commands/remove_mfa.py
index 8c84920cc3..53266348e2 100644
--- a/InvenTree/InvenTree/management/commands/remove_mfa.py
+++ b/InvenTree/InvenTree/management/commands/remove_mfa.py
@@ -2,8 +2,8 @@
Custom management command to remove MFA for a user
"""
-from django.core.management.base import BaseCommand
from django.contrib.auth import get_user_model
+from django.core.management.base import BaseCommand
class Command(BaseCommand):
diff --git a/InvenTree/InvenTree/management/commands/wait_for_db.py b/InvenTree/InvenTree/management/commands/wait_for_db.py
index b9fa4e5025..ebd6999f7f 100644
--- a/InvenTree/InvenTree/management/commands/wait_for_db.py
+++ b/InvenTree/InvenTree/management/commands/wait_for_db.py
@@ -2,13 +2,12 @@
Custom management command, wait for the database to be ready!
"""
-from django.core.management.base import BaseCommand
-
-from django.db import connection
-from django.db.utils import OperationalError, ImproperlyConfigured
-
import time
+from django.core.management.base import BaseCommand
+from django.db import connection
+from django.db.utils import ImproperlyConfigured, OperationalError
+
class Command(BaseCommand):
"""
diff --git a/InvenTree/InvenTree/metadata.py b/InvenTree/InvenTree/metadata.py
index 85c5a4c8cc..e2d42bb539 100644
--- a/InvenTree/InvenTree/metadata.py
+++ b/InvenTree/InvenTree/metadata.py
@@ -1,14 +1,12 @@
import logging
from rest_framework import serializers
+from rest_framework.fields import empty
from rest_framework.metadata import SimpleMetadata
from rest_framework.utils import model_meta
-from rest_framework.fields import empty
-
-from InvenTree.helpers import str2bool
import users.models
-
+from InvenTree.helpers import str2bool
logger = logging.getLogger('inventree')
diff --git a/InvenTree/InvenTree/middleware.py b/InvenTree/InvenTree/middleware.py
index 5e122d4689..aaf13f7623 100644
--- a/InvenTree/InvenTree/middleware.py
+++ b/InvenTree/InvenTree/middleware.py
@@ -1,20 +1,19 @@
# -*- coding: utf-8 -*-
+import logging
+
from django.conf import settings
from django.contrib.auth.middleware import PersistentRemoteUserMiddleware
from django.http import HttpResponse
from django.shortcuts import redirect
-from django.urls import reverse_lazy, Resolver404
-from django.urls import include, re_path
-
-import logging
+from django.urls import Resolver404, include, re_path, reverse_lazy
+from allauth_2fa.middleware import (AllauthTwoFactorMiddleware,
+ BaseRequire2FAMiddleware)
from rest_framework.authtoken.models import Token
-from allauth_2fa.middleware import BaseRequire2FAMiddleware, AllauthTwoFactorMiddleware
-from InvenTree.urls import frontendpatterns
from common.models import InvenTreeSetting
-
+from InvenTree.urls import frontendpatterns
logger = logging.getLogger("inventree")
diff --git a/InvenTree/InvenTree/models.py b/InvenTree/InvenTree/models.py
index 73b2bf4572..aba8b36763 100644
--- a/InvenTree/InvenTree/models.py
+++ b/InvenTree/InvenTree/models.py
@@ -2,27 +2,25 @@
Generic models which provide extra functionality over base Django model types.
"""
-import re
-import os
import logging
+import os
+import re
-from django.db import models
from django.conf import settings
from django.contrib.auth.models import User
from django.contrib.contenttypes.models import ContentType
-from django.utils.translation import gettext_lazy as _
from django.core.exceptions import ValidationError
-
+from django.db import models
from django.db.models.signals import pre_delete
from django.dispatch import receiver
+from django.utils.translation import gettext_lazy as _
-from mptt.models import MPTTModel, TreeForeignKey
from mptt.exceptions import InvalidMove
+from mptt.models import MPTTModel, TreeForeignKey
from InvenTree.fields import InvenTreeURLField
from InvenTree.validators import validate_tree_name
-
logger = logging.getLogger('inventree')
diff --git a/InvenTree/InvenTree/serializers.py b/InvenTree/InvenTree/serializers.py
index e16a4f1ba7..e91bcab484 100644
--- a/InvenTree/InvenTree/serializers.py
+++ b/InvenTree/InvenTree/serializers.py
@@ -3,27 +3,24 @@ Serializers used in various InvenTree apps
"""
import os
-import tablib
-
-from decimal import Decimal
-
from collections import OrderedDict
+from decimal import Decimal
from django.conf import settings
from django.contrib.auth.models import User
from django.core.exceptions import ValidationError as DjangoValidationError
-from django.utils.translation import gettext_lazy as _
from django.db import models
+from django.utils.translation import gettext_lazy as _
+import tablib
from djmoney.contrib.django_rest_framework.fields import MoneyField
from djmoney.money import Money
from djmoney.utils import MONEY_CLASSES, get_currency_field_name
-
from rest_framework import serializers
-from rest_framework.utils import model_meta
-from rest_framework.fields import empty
from rest_framework.exceptions import ValidationError
+from rest_framework.fields import empty
from rest_framework.serializers import DecimalField
+from rest_framework.utils import model_meta
from .models import extract_int
diff --git a/InvenTree/InvenTree/settings.py b/InvenTree/InvenTree/settings.py
index 5c6bca4dea..a1259c7a5d 100644
--- a/InvenTree/InvenTree/settings.py
+++ b/InvenTree/InvenTree/settings.py
@@ -12,7 +12,6 @@ database setup in this file.
"""
import logging
-
import os
import random
import socket
@@ -20,13 +19,13 @@ import string
import sys
from datetime import datetime
-import moneyed
-
-import yaml
-from django.utils.translation import gettext_lazy as _
+import django.conf.locale
from django.contrib.messages import constants as messages
from django.core.files.storage import default_storage
-import django.conf.locale
+from django.utils.translation import gettext_lazy as _
+
+import moneyed
+import yaml
from .config import get_base_dir, get_config_file, get_plugin_file, get_setting
@@ -453,10 +452,8 @@ db_options = db_config.get("OPTIONS", db_config.get("options", {}))
# Specific options for postgres backend
if "postgres" in db_engine: # pragma: no cover
- from psycopg2.extensions import (
- ISOLATION_LEVEL_READ_COMMITTED,
- ISOLATION_LEVEL_SERIALIZABLE,
- )
+ from psycopg2.extensions import (ISOLATION_LEVEL_READ_COMMITTED,
+ ISOLATION_LEVEL_SERIALIZABLE)
# Connection timeout
if "connect_timeout" not in db_options:
diff --git a/InvenTree/InvenTree/static/css/bootstrap-treeview.css b/InvenTree/InvenTree/static/css/bootstrap-treeview.css
index 23c6cf0668..1023438a24 100644
--- a/InvenTree/InvenTree/static/css/bootstrap-treeview.css
+++ b/InvenTree/InvenTree/static/css/bootstrap-treeview.css
@@ -1,9 +1,9 @@
/* =========================================================
* bootstrap-treeview.css v1.2.0
* =========================================================
- * Copyright 2013 Jonathan Miles
+ * Copyright 2013 Jonathan Miles
* Project URL : http://www.jondmiles.com/bootstrap-treeview
- *
+ *
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
@@ -34,4 +34,4 @@
.treeview .node-disabled {
color: silver;
cursor: not-allowed;
-}
\ No newline at end of file
+}
diff --git a/InvenTree/InvenTree/static/css/color-themes/dark-reader.css b/InvenTree/InvenTree/static/css/color-themes/dark-reader.css
index 5270d5ead5..9a383d4fde 100644
--- a/InvenTree/InvenTree/static/css/color-themes/dark-reader.css
+++ b/InvenTree/InvenTree/static/css/color-themes/dark-reader.css
@@ -104,7 +104,7 @@ select:-webkit-autofill {
fill: rgb(232, 230, 227);
}
.fad.fa-inverse {
- color: rgb(232, 230, 227);
+ color: rgb(232, 230, 227);
}
:root {
--bs-blue: #0d6efd; --bs-indigo: #6610f2; --bs-purple: #6f42c1; --bs-pink: #d63384; --bs-red: #dc3545; --bs-orange: #fd7e14; --bs-yellow: #ffc107; --bs-green: #198754; --bs-teal: #20c997; --bs-cyan: #0dcaf0; --bs-white: #fff; --bs-gray: #6c757d; --bs-gray-dark: #343a40; --bs-gray-100: #f8f9fa; --bs-gray-200: #e9ecef; --bs-gray-300: #dee2e6; --bs-gray-400: #ced4da; --bs-gray-500: #adb5bd; --bs-gray-600: #6c757d; --bs-gray-700: #495057; --bs-gray-800: #343a40; --bs-gray-900: #212529; --bs-primary: #0d6efd; --bs-secondary: #6c757d; --bs-success: #198754; --bs-info: #0dcaf0; --bs-warning: #ffc107; --bs-danger: #dc3545; --bs-light: #f8f9fa; --bs-dark: #212529; --darkreader-bg--bs-primary-rgb: 13,110,253; --darkreader-text--bs-primary-rgb: 13,110,253; --darkreader-bg--bs-secondary-rgb: 108,117,125; --darkreader-text--bs-secondary-rgb: 108,117,125; --darkreader-bg--bs-success-rgb: 25,135,84; --darkreader-text--bs-success-rgb: 25,135,84; --darkreader-bg--bs-info-rgb: 13,202,240; --darkreader-text--bs-info-rgb: 13,202,240; --darkreader-bg--bs-warning-rgb: 255,193,7; --darkreader-text--bs-warning-rgb: 255,193,7; --darkreader-bg--bs-danger-rgb: 220,53,69; --darkreader-text--bs-danger-rgb: 220,53,69; --darkreader-bg--bs-light-rgb: 248,249,250; --darkreader-text--bs-light-rgb: 248,249,250; --darkreader-bg--bs-dark-rgb: 33,37,41; --darkreader-text--bs-dark-rgb: 33,37,41; --darkreader-bg--bs-white-rgb: 255,255,255; --darkreader-text--bs-white-rgb: 255,255,255; --darkreader-bg--bs-black-rgb: 0,0,0; --darkreader-text--bs-black-rgb: 0,0,0; --darkreader-text--bs-body-color-rgb: 33,37,41; --darkreader-bg--bs-body-bg-rgb: 255,255,255; --bs-font-sans-serif: system-ui,-apple-system,"Segoe UI",Roboto,"Helvetica Neue",Arial,"Noto Sans","Liberation Sans",sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji"; --bs-font-monospace: SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",
@@ -701,13 +701,13 @@ iframe {
}
.form-check-input:checked {
background-color: rgb(2, 80, 196);
- border-color: rgb(1, 71, 174);
+ border-color: rgb(1, 71, 174);
}
.form-check-input:checked[type="checkbox"] {
- background-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 20 20'%3e%3cpath fill='none' stroke='%23fff' stroke-linecap='round' stroke-linejoin='round' stroke-width='3' d='M6 10l3 3l6-6'/%3e%3c/svg%3e");
+ background-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 20 20'%3e%3cpath fill='none' stroke='%23fff' stroke-linecap='round' stroke-linejoin='round' stroke-width='3' d='M6 10l3 3l6-6'/%3e%3c/svg%3e");
}
.form-check-input:checked[type="radio"] {
- background-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'%3e%3ccircle r='2' fill='%23fff'/%3e%3c/svg%3e");
+ background-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'%3e%3ccircle r='2' fill='%23fff'/%3e%3c/svg%3e");
}
.form-check-input[type="checkbox"]:indeterminate {
background-color: rgb(2, 80, 196);
@@ -2211,26 +2211,26 @@ iframe {
}
@media (max-width: 1399.98px) {
.modal-fullscreen-xxl-down .modal-content {
- border-color: initial;
+ border-color: initial;
}
}
.tooltip {
- text-decoration-color: initial; text-shadow: none;
+ text-decoration-color: initial; text-shadow: none;
}
.tooltip .tooltip-arrow::before {
- border-color: transparent;
+ border-color: transparent;
}
.bs-tooltip-auto[data-popper-placement^="top"] .tooltip-arrow::before,
.bs-tooltip-top .tooltip-arrow::before {
- border-top-color: rgb(140, 130, 115);
+ border-top-color: rgb(140, 130, 115);
}
.bs-tooltip-auto[data-popper-placement^="right"] .tooltip-arrow::before,
.bs-tooltip-end .tooltip-arrow::before {
- border-right-color: rgb(140, 130, 115);
+ border-right-color: rgb(140, 130, 115);
}
.bs-tooltip-auto[data-popper-placement^="bottom"] .tooltip-arrow::before,
.bs-tooltip-bottom .tooltip-arrow::before {
- border-bottom-color: rgb(140, 130, 115);
+ border-bottom-color: rgb(140, 130, 115);
}
.bs-tooltip-auto[data-popper-placement^="left"] .tooltip-arrow::before,
.bs-tooltip-start .tooltip-arrow::before {
@@ -2244,42 +2244,42 @@ iframe {
text-decoration-color: initial;
text-shadow: none;
background-color: rgb(24, 26, 27);
- border-color: rgba(140, 130, 115, 0.2);
+ border-color: rgba(140, 130, 115, 0.2);
}
.popover .popover-arrow::after, .popover .popover-arrow::before {
- border-color: transparent;
+ border-color: transparent;
}
.bs-popover-auto[data-popper-placement^="top"] > .popover-arrow::before,
.bs-popover-top > .popover-arrow::before {
- border-top-color: rgba(140, 130, 115, 0.25);
+ border-top-color: rgba(140, 130, 115, 0.25);
}
.bs-popover-auto[data-popper-placement^="top"] > .popover-arrow::after,
.bs-popover-top > .popover-arrow::after {
- border-top-color: rgb(48, 52, 54);
+ border-top-color: rgb(48, 52, 54);
}
.bs-popover-auto[data-popper-placement^="right"] > .popover-arrow::before,
.bs-popover-end > .popover-arrow::before {
- border-right-color: rgba(140, 130, 115, 0.25);
+ border-right-color: rgba(140, 130, 115, 0.25);
}
.bs-popover-auto[data-popper-placement^="right"] > .popover-arrow::after,
.bs-popover-end > .popover-arrow::after {
- border-right-color: rgb(48, 52, 54);
+ border-right-color: rgb(48, 52, 54);
}
.bs-popover-auto[data-popper-placement^="bottom"] > .popover-arrow::before,
.bs-popover-bottom > .popover-arrow::before {
- border-bottom-color: rgba(140, 130, 115, 0.25);
+ border-bottom-color: rgba(140, 130, 115, 0.25);
}
.bs-popover-auto[data-popper-placement^="bottom"] > .popover-arrow::after,
.bs-popover-bottom > .popover-arrow::after {
- border-bottom-color: rgb(48, 52, 54);
+ border-bottom-color: rgb(48, 52, 54);
}
.bs-popover-auto[data-popper-placement^="bottom"] .popover-header::before,
.bs-popover-bottom .popover-header::before {
- border-bottom-color: rgb(52, 57, 59);
+ border-bottom-color: rgb(52, 57, 59);
}
.bs-popover-auto[data-popper-placement^="left"] > .popover-arrow::before,
.bs-popover-start > .popover-arrow::before {
- border-left-color: rgba(140, 130, 115, 0.25);
+ border-left-color: rgba(140, 130, 115, 0.25);
}
.bs-popover-auto[data-popper-placement^="left"] > .popover-arrow::after,
.bs-popover-start > .popover-arrow::after {
@@ -2786,13 +2786,13 @@ iframe {
background-color: rgb(34, 36, 38);
}
.select2-container--default .select2-search--dropdown .select2-search__field {
- border-color: rgb(72, 78, 81);
+ border-color: rgb(72, 78, 81);
}
.select2-container--default .select2-search--inline .select2-search__field {
- background-image: initial; background-color: transparent; border-color: initial; outline-color: initial; box-shadow: none;
+ background-image: initial; background-color: transparent; border-color: initial; outline-color: initial; box-shadow: none;
}
.select2-container--default .select2-results__option[aria-disabled="true"] {
- color: rgb(168, 160, 149);
+ color: rgb(168, 160, 149);
}
.select2-container--default .select2-results__option[aria-selected="true"] {
background-color: rgb(43, 47, 49);
@@ -2827,7 +2827,7 @@ iframe {
rgb(53, 57, 59) 100%);
}
.select2-container--classic .select2-selection--single .select2-selection__arrow b {
- border-color: rgb(82, 88, 92) transparent transparent;
+ border-color: rgb(82, 88, 92) transparent transparent;
}
.select2-container--classic[dir="rtl"] .select2-selection--single .select2-selection__arrow {
border-top-color: initial;
@@ -2895,13 +2895,13 @@ iframe {
box-shadow: none;
}
.select2-container--classic .select2-dropdown {
- background-color: rgb(24, 26, 27); border-color: transparent;
+ background-color: rgb(24, 26, 27); border-color: transparent;
}
.select2-container--classic .select2-dropdown--above {
- border-bottom-color: initial;
+ border-bottom-color: initial;
}
.select2-container--classic .select2-dropdown--below {
- border-top-color: initial;
+ border-top-color: initial;
}
.select2-container--classic .select2-results__option[aria-disabled="true"] {
color: rgb(152, 143, 129);
@@ -2962,14 +2962,14 @@ iframe {
}
.select2-container--bootstrap-5 .select2-dropdown .select2-results__options .select2-results__option.select2-results__option--highlighted {
color: rgb(232, 230, 227);
- background-color: rgb(27, 30, 31);
+ background-color: rgb(27, 30, 31);
}
.select2-container--bootstrap-5 .select2-dropdown .select2-results__options .select2-results__option.select2-results__option--selected, .select2-container--bootstrap-5 .select2-dropdown .select2-results__options .select2-results__option[aria-selected="true"] {
color: rgb(232, 230, 227);
- background-color: rgb(2, 80, 196);
+ background-color: rgb(2, 80, 196);
}
.select2-container--bootstrap-5 .select2-dropdown .select2-results__options .select2-results__option.select2-results__option--disabled, .select2-container--bootstrap-5 .select2-dropdown .select2-results__options .select2-results__option[aria-disabled="true"] {
- color: rgb(158, 150, 137);
+ color: rgb(158, 150, 137);
}
.select2-container--bootstrap-5 .select2-dropdown .select2-results__options .select2-results__option[role="group"] .select2-results__group {
color: rgb(158, 150, 137);
@@ -3685,7 +3685,7 @@ a.ui-button:active,
border-color: rgb(62, 68, 70);
}
.form-field-error {
- color: rgb(194, 102, 100);
+ color: rgb(194, 102, 100);
}
input[type="submit"] {
color: rgb(200, 195, 188);
diff --git a/InvenTree/InvenTree/static/css/inventree.css b/InvenTree/InvenTree/static/css/inventree.css
index 4abba23b09..ca3f8a2955 100644
--- a/InvenTree/InvenTree/static/css/inventree.css
+++ b/InvenTree/InvenTree/static/css/inventree.css
@@ -19,7 +19,7 @@ main {
}
.login-screen {
- background: url(/static/img/paper_splash.jpg) no-repeat center fixed;
+ background: url(/static/img/paper_splash.jpg) no-repeat center fixed;
background-size: cover;
height: 100vh;
font-family: 'Numans', sans-serif;
@@ -259,7 +259,7 @@ main {
}
.rowinvalid {
- color: #A00;
+ color: #A00;
}
.rowinherited {
@@ -306,7 +306,7 @@ main {
padding-left: 2px;
transform: translate(0%, -25%);
}
-
+
.filter-list .close:hover {
background: #bbb;
}
@@ -1008,7 +1008,7 @@ input[type='number']{
.product-card-panel{
height: 100%;
- margin-bottom: 5px;
+ margin-bottom: 5px;
}
.borderless {
@@ -1047,4 +1047,4 @@ a {
padding: 3px;
margin-top: 3px;
overflow: hidden;
-}
\ No newline at end of file
+}
diff --git a/InvenTree/InvenTree/static/fontawesome/webfonts/fa-brands-400.svg b/InvenTree/InvenTree/static/fontawesome/webfonts/fa-brands-400.svg
index 46ad237a61..304135c663 100644
--- a/InvenTree/InvenTree/static/fontawesome/webfonts/fa-brands-400.svg
+++ b/InvenTree/InvenTree/static/fontawesome/webfonts/fa-brands-400.svg
@@ -12,7 +12,7 @@ Copyright (c) Font Awesome
<!doctype html>
@@ -100,7 +100,7 @@
<tr class="treegrid-4 treegrid-parent-3">
<td>Node 1-2-1</td><td>Additional info</td>
</tr>
- </table>
+ </table>
</body>
</html>
@@ -128,4 +128,4 @@
}
-