From 97d4a6041d3f0f72a8a7c23b95302808bad4f138 Mon Sep 17 00:00:00 2001
From: ladeng07 <40017222+ladeng07@users.noreply.github.com>
Date: Thu, 5 May 2022 21:03:22 +0800
Subject: [PATCH 1/9] =?UTF-8?q?=E5=A2=9E=E5=8A=A0=E4=BA=86util=E9=87=8C?=
=?UTF-8?q?=E7=9A=84get=5Ferror=5Fmsg?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.idea/workspace.xml | 93 +-
ITShowPlatform/.gitignore | 3 +
ITShowPlatform/config.ini | 22 +
ITShowPlatform/settings.py | 28 +-
.../backports/configparser/__init__.py | 1440 +++++++++++++++++
.../backports/configparser/compat.py | 19 +
.../configparser-5.2.0.dist-info/INSTALLER | 1 +
.../configparser-5.2.0.dist-info/LICENSE | 19 +
.../configparser-5.2.0.dist-info/METADATA | 267 +++
.../configparser-5.2.0.dist-info/RECORD | 13 +
.../configparser-5.2.0.dist-info/REQUESTED | 0
.../configparser-5.2.0.dist-info/WHEEL | 5 +
.../top_level.txt | 2 +
venv/Lib/site-packages/configparser.py | 61 +
14 files changed, 1944 insertions(+), 29 deletions(-)
create mode 100644 ITShowPlatform/.gitignore
create mode 100644 ITShowPlatform/config.ini
create mode 100644 venv/Lib/site-packages/backports/configparser/__init__.py
create mode 100644 venv/Lib/site-packages/backports/configparser/compat.py
create mode 100644 venv/Lib/site-packages/configparser-5.2.0.dist-info/INSTALLER
create mode 100644 venv/Lib/site-packages/configparser-5.2.0.dist-info/LICENSE
create mode 100644 venv/Lib/site-packages/configparser-5.2.0.dist-info/METADATA
create mode 100644 venv/Lib/site-packages/configparser-5.2.0.dist-info/RECORD
create mode 100644 venv/Lib/site-packages/configparser-5.2.0.dist-info/REQUESTED
create mode 100644 venv/Lib/site-packages/configparser-5.2.0.dist-info/WHEEL
create mode 100644 venv/Lib/site-packages/configparser-5.2.0.dist-info/top_level.txt
create mode 100644 venv/Lib/site-packages/configparser.py
diff --git a/.idea/workspace.xml b/.idea/workspace.xml
index 856a1bb..61cfaad 100644
--- a/.idea/workspace.xml
+++ b/.idea/workspace.xml
@@ -31,9 +31,21 @@
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
@@ -78,14 +90,36 @@
-
+
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
@@ -133,6 +167,11 @@
+
+
+
+
+
@@ -153,7 +192,8 @@
-
+
+
1650187914913
@@ -176,7 +216,14 @@
1651746739401
-
+
+ 1651748255265
+
+
+
+ 1651748255265
+
+
@@ -211,7 +258,8 @@
-
+
+
@@ -226,6 +274,10 @@
+
+
+
+
@@ -242,22 +294,22 @@
-
+
-
-
+
+
-
-
+
+
-
-
+
+
-
+
@@ -282,14 +334,14 @@
-
+
-
-
+
+
-
+
@@ -307,4 +359,7 @@
+
+
+
\ No newline at end of file
diff --git a/ITShowPlatform/.gitignore b/ITShowPlatform/.gitignore
new file mode 100644
index 0000000..b9ad17b
--- /dev/null
+++ b/ITShowPlatform/.gitignore
@@ -0,0 +1,3 @@
+config.ini
+
+settings.py
diff --git a/ITShowPlatform/config.ini b/ITShowPlatform/config.ini
new file mode 100644
index 0000000..42c1892
--- /dev/null
+++ b/ITShowPlatform/config.ini
@@ -0,0 +1,22 @@
+[email]
+EMAIL_HOST = smtp.qq.com # 服务器
+
+EMAIL_PORT = 465
+
+EMAIL_HOST_USER = 2302253692@qq.com # 账号
+
+EMAIL_HOST_PASSWORD = idujbpdlpgbmdhjg # 密码 (注意:这里的密码指的是授权码)
+
+EMAIL_USE_SSL = True # 一般都为False
+
+EMAIL_FROM = 2302253692@qq.com # 邮箱来自
+
+[database]
+
+ENGINE = django.db.backends.mysql
+
+NAME = ITShowPlatform
+
+USER = root
+
+PASSWORD = HNXhnx123
diff --git a/ITShowPlatform/settings.py b/ITShowPlatform/settings.py
index 4cbb943..48835e4 100644
--- a/ITShowPlatform/settings.py
+++ b/ITShowPlatform/settings.py
@@ -12,6 +12,7 @@ https://docs.djangoproject.com/en/4.0/ref/settings/
from pathlib import Path
import os
+import configparser
# Build paths inside the project like this: BASE_DIR / 'subdir'.
BASE_DIR = Path(__file__).resolve().parent.parent
@@ -29,6 +30,12 @@ ALLOWED_HOSTS = ["*"]
# Application definition
+conf = configparser.ConfigParser()
+
+conf.read(str(BASE_DIR)+r"\ITShowPlatform\config.ini",encoding="utf-8")
+
+
+
INSTALLED_APPS = [
'django.contrib.admin',
'django.contrib.auth',
@@ -79,10 +86,10 @@ WSGI_APPLICATION = 'ITShowPlatform.wsgi.application'
DATABASES = {
'default': {
- 'ENGINE': 'django.db.backends.mysql',
- 'NAME': 'ITShowPlatform',
- 'USER': 'root',
- 'PASSWORD': 'HNXhnx123',
+ 'ENGINE': conf.get("database","ENGINE"),
+ 'NAME': conf.get("database","NAME"),
+ 'USER': conf.get("database","USER"),
+ 'PASSWORD': conf.get("database","PASSWORD"),
}
}
@@ -138,9 +145,10 @@ REST_FRAMEWORK = {
)
}
-EMAIL_HOST = "smtp.qq.com" # 服务器
-EMAIL_PORT = 465
-EMAIL_HOST_USER = "2302253692@qq.com" # 账号
-EMAIL_HOST_PASSWORD = "idujbpdlpgbmdhjg" # 密码 (注意:这里的密码指的是授权码)
-EMAIL_USE_SSL = True # 一般都为False
-EMAIL_FROM = "2302253692@qq.com" # 邮箱来自
+EMAIL_HOST = conf.get('email',"EMAIL_HOST") # 服务器
+EMAIL_PORT = conf.get("email","EMAIL_PORT")
+EMAIL_HOST_USER = conf.get("email","EMAIL_HOST_USER") # 账号
+EMAIL_HOST_PASSWORD = conf.get("email","EMAIL_HOST_PASSWORD") # 密码 (注意:这里的密码指的是授权码)
+EMAIL_USE_SSL = conf.get("email","EMAIL_USE_SSL") # 一般都为False
+EMAIL_FROM = conf.get("email","EMAIL_FROM") # 邮箱来自
+
diff --git a/venv/Lib/site-packages/backports/configparser/__init__.py b/venv/Lib/site-packages/backports/configparser/__init__.py
new file mode 100644
index 0000000..73386a9
--- /dev/null
+++ b/venv/Lib/site-packages/backports/configparser/__init__.py
@@ -0,0 +1,1440 @@
+"""Configuration file parser.
+
+A configuration file consists of sections, lead by a "[section]" header,
+and followed by "name: value" entries, with continuations and such in
+the style of RFC 822.
+
+Intrinsic defaults can be specified by passing them into the
+ConfigParser constructor as a dictionary.
+
+class:
+
+ConfigParser -- responsible for parsing a list of
+ configuration files, and managing the parsed database.
+
+ methods:
+
+ __init__(defaults=None, dict_type=_default_dict, allow_no_value=False,
+ delimiters=('=', ':'), comment_prefixes=('#', ';'),
+ inline_comment_prefixes=None, strict=True,
+ empty_lines_in_values=True, default_section='DEFAULT',
+ interpolation=, converters=):
+ Create the parser. When `defaults' is given, it is initialized into the
+ dictionary or intrinsic defaults. The keys must be strings, the values
+ must be appropriate for %()s string interpolation.
+
+ When `dict_type' is given, it will be used to create the dictionary
+ objects for the list of sections, for the options within a section, and
+ for the default values.
+
+ When `delimiters' is given, it will be used as the set of substrings
+ that divide keys from values.
+
+ When `comment_prefixes' is given, it will be used as the set of
+ substrings that prefix comments in empty lines. Comments can be
+ indented.
+
+ When `inline_comment_prefixes' is given, it will be used as the set of
+ substrings that prefix comments in non-empty lines.
+
+ When `strict` is True, the parser won't allow for any section or option
+ duplicates while reading from a single source (file, string or
+ dictionary). Default is True.
+
+ When `empty_lines_in_values' is False (default: True), each empty line
+ marks the end of an option. Otherwise, internal empty lines of
+ a multiline option are kept as part of the value.
+
+ When `allow_no_value' is True (default: False), options without
+ values are accepted; the value presented for these is None.
+
+ When `default_section' is given, the name of the special section is
+ named accordingly. By default it is called ``"DEFAULT"`` but this can
+ be customized to point to any other valid section name. Its current
+ value can be retrieved using the ``parser_instance.default_section``
+ attribute and may be modified at runtime.
+
+ When `interpolation` is given, it should be an Interpolation subclass
+ instance. It will be used as the handler for option value
+ pre-processing when using getters. RawConfigParser objects don't do
+ any sort of interpolation, whereas ConfigParser uses an instance of
+ BasicInterpolation. The library also provides a ``zc.buildbot``
+ inspired ExtendedInterpolation implementation.
+
+ When `converters` is given, it should be a dictionary where each key
+ represents the name of a type converter and each value is a callable
+ implementing the conversion from string to the desired datatype. Every
+ converter gets its corresponding get*() method on the parser object and
+ section proxies.
+
+ sections()
+ Return all the configuration section names, sans DEFAULT.
+
+ has_section(section)
+ Return whether the given section exists.
+
+ has_option(section, option)
+ Return whether the given option exists in the given section.
+
+ options(section)
+ Return list of configuration options for the named section.
+
+ read(filenames, encoding=None)
+ Read and parse the iterable of named configuration files, given by
+ name. A single filename is also allowed. Non-existing files
+ are ignored. Return list of successfully read files.
+
+ read_file(f, filename=None)
+ Read and parse one configuration file, given as a file object.
+ The filename defaults to f.name; it is only used in error
+ messages (if f has no `name' attribute, the string `??>' is used).
+
+ read_string(string)
+ Read configuration from a given string.
+
+ read_dict(dictionary)
+ Read configuration from a dictionary. Keys are section names,
+ values are dictionaries with keys and values that should be present
+ in the section. If the used dictionary type preserves order, sections
+ and their keys will be added in order. Values are automatically
+ converted to strings.
+
+ get(section, option, raw=False, vars=None, fallback=_UNSET)
+ Return a string value for the named option. All % interpolations are
+ expanded in the return values, based on the defaults passed into the
+ constructor and the DEFAULT section. Additional substitutions may be
+ provided using the `vars' argument, which must be a dictionary whose
+ contents override any pre-existing defaults. If `option' is a key in
+ `vars', the value from `vars' is used.
+
+ getint(section, options, raw=False, vars=None, fallback=_UNSET)
+ Like get(), but convert value to an integer.
+
+ getfloat(section, options, raw=False, vars=None, fallback=_UNSET)
+ Like get(), but convert value to a float.
+
+ getboolean(section, options, raw=False, vars=None, fallback=_UNSET)
+ Like get(), but convert value to a boolean (currently case
+ insensitively defined as 0, false, no, off for False, and 1, true,
+ yes, on for True). Returns False or True.
+
+ items(section=_UNSET, raw=False, vars=None)
+ If section is given, return a list of tuples with (name, value) for
+ each option in the section. Otherwise, return a list of tuples with
+ (section_name, section_proxy) for each section, including DEFAULTSECT.
+
+ remove_section(section)
+ Remove the given file section and all its options.
+
+ remove_option(section, option)
+ Remove the given option from the given section.
+
+ set(section, option, value)
+ Set the given option.
+
+ write(fp, space_around_delimiters=True)
+ Write the configuration state in .ini format. If
+ `space_around_delimiters' is True (the default), delimiters
+ between keys and values are surrounded by spaces.
+"""
+
+from collections.abc import MutableMapping
+from collections import ChainMap as _ChainMap
+import functools
+from .compat import io
+import itertools
+import os
+import re
+import sys
+import warnings
+
+
+__all__ = [
+ "NoSectionError",
+ "DuplicateOptionError",
+ "DuplicateSectionError",
+ "NoOptionError",
+ "InterpolationError",
+ "InterpolationDepthError",
+ "InterpolationMissingOptionError",
+ "InterpolationSyntaxError",
+ "ParsingError",
+ "MissingSectionHeaderError",
+ "ConfigParser",
+ "SafeConfigParser",
+ "RawConfigParser",
+ "Interpolation",
+ "BasicInterpolation",
+ "ExtendedInterpolation",
+ "LegacyInterpolation",
+ "SectionProxy",
+ "ConverterMapping",
+ "DEFAULTSECT",
+ "MAX_INTERPOLATION_DEPTH",
+]
+
+_default_dict = dict
+DEFAULTSECT = "DEFAULT"
+
+MAX_INTERPOLATION_DEPTH = 10
+
+
+# exception classes
+class Error(Exception):
+ """Base class for ConfigParser exceptions."""
+
+ def __init__(self, msg=''):
+ self.message = msg
+ Exception.__init__(self, msg)
+
+ def __repr__(self):
+ return self.message
+
+ __str__ = __repr__
+
+
+class NoSectionError(Error):
+ """Raised when no section matches a requested option."""
+
+ def __init__(self, section):
+ Error.__init__(self, 'No section: %r' % (section,))
+ self.section = section
+ self.args = (section,)
+
+
+class DuplicateSectionError(Error):
+ """Raised when a section is repeated in an input source.
+
+ Possible repetitions that raise this exception are: multiple creation
+ using the API or in strict parsers when a section is found more than once
+ in a single input file, string or dictionary.
+ """
+
+ def __init__(self, section, source=None, lineno=None):
+ msg = [repr(section), " already exists"]
+ if source is not None:
+ message = ["While reading from ", repr(source)]
+ if lineno is not None:
+ message.append(" [line {0:2d}]".format(lineno))
+ message.append(": section ")
+ message.extend(msg)
+ msg = message
+ else:
+ msg.insert(0, "Section ")
+ Error.__init__(self, "".join(msg))
+ self.section = section
+ self.source = source
+ self.lineno = lineno
+ self.args = (section, source, lineno)
+
+
+class DuplicateOptionError(Error):
+ """Raised by strict parsers when an option is repeated in an input source.
+
+ Current implementation raises this exception only when an option is found
+ more than once in a single file, string or dictionary.
+ """
+
+ def __init__(self, section, option, source=None, lineno=None):
+ msg = [repr(option), " in section ", repr(section), " already exists"]
+ if source is not None:
+ message = ["While reading from ", repr(source)]
+ if lineno is not None:
+ message.append(" [line {0:2d}]".format(lineno))
+ message.append(": option ")
+ message.extend(msg)
+ msg = message
+ else:
+ msg.insert(0, "Option ")
+ Error.__init__(self, "".join(msg))
+ self.section = section
+ self.option = option
+ self.source = source
+ self.lineno = lineno
+ self.args = (section, option, source, lineno)
+
+
+class NoOptionError(Error):
+ """A requested option was not found."""
+
+ def __init__(self, option, section):
+ Error.__init__(self, "No option %r in section: %r" % (option, section))
+ self.option = option
+ self.section = section
+ self.args = (option, section)
+
+
+class InterpolationError(Error):
+ """Base class for interpolation-related exceptions."""
+
+ def __init__(self, option, section, msg):
+ Error.__init__(self, msg)
+ self.option = option
+ self.section = section
+ self.args = (option, section, msg)
+
+
+class InterpolationMissingOptionError(InterpolationError):
+ """A string substitution required a setting which was not available."""
+
+ def __init__(self, option, section, rawval, reference):
+ msg = (
+ "Bad value substitution: option {!r} in section {!r} contains "
+ "an interpolation key {!r} which is not a valid option name. "
+ "Raw value: {!r}".format(option, section, reference, rawval)
+ )
+ InterpolationError.__init__(self, option, section, msg)
+ self.reference = reference
+ self.args = (option, section, rawval, reference)
+
+
+class InterpolationSyntaxError(InterpolationError):
+ """Raised when the source text contains invalid syntax.
+
+ Current implementation raises this exception when the source text into
+ which substitutions are made does not conform to the required syntax.
+ """
+
+
+class InterpolationDepthError(InterpolationError):
+ """Raised when substitutions are nested too deeply."""
+
+ def __init__(self, option, section, rawval):
+ msg = (
+ "Recursion limit exceeded in value substitution: option {!r} "
+ "in section {!r} contains an interpolation key which "
+ "cannot be substituted in {} steps. Raw value: {!r}"
+ "".format(option, section, MAX_INTERPOLATION_DEPTH, rawval)
+ )
+ InterpolationError.__init__(self, option, section, msg)
+ self.args = (option, section, rawval)
+
+
+class ParsingError(Error):
+ """Raised when a configuration file does not follow legal syntax."""
+
+ def __init__(self, source=None, filename=None):
+ # Exactly one of `source'/`filename' arguments has to be given.
+ # `filename' kept for compatibility.
+ if filename and source:
+ raise ValueError(
+ "Cannot specify both `filename' and `source'. " "Use `source'."
+ )
+ elif not filename and not source:
+ raise ValueError("Required argument `source' not given.")
+ elif filename:
+ source = filename
+ Error.__init__(self, 'Source contains parsing errors: %r' % source)
+ self.source = source
+ self.errors = []
+ self.args = (source,)
+
+ @property
+ def filename(self):
+ """Deprecated, use `source'."""
+ warnings.warn(
+ "The 'filename' attribute will be removed in future versions. "
+ "Use 'source' instead.",
+ DeprecationWarning,
+ stacklevel=2,
+ )
+ return self.source
+
+ @filename.setter
+ def filename(self, value):
+ """Deprecated, user `source'."""
+ warnings.warn(
+ "The 'filename' attribute will be removed in future versions. "
+ "Use 'source' instead.",
+ DeprecationWarning,
+ stacklevel=2,
+ )
+ self.source = value
+
+ def append(self, lineno, line):
+ self.errors.append((lineno, line))
+ self.message += '\n\t[line %2d]: %s' % (lineno, line)
+
+
+class MissingSectionHeaderError(ParsingError):
+ """Raised when a key-value pair is found before any section header."""
+
+ def __init__(self, filename, lineno, line):
+ Error.__init__(
+ self,
+ 'File contains no section headers.\nfile: %r, line: %d\n%r'
+ % (filename, lineno, line),
+ )
+ self.source = filename
+ self.lineno = lineno
+ self.line = line
+ self.args = (filename, lineno, line)
+
+
+# Used in parser getters to indicate the default behaviour when a specific
+# option is not found it to raise an exception. Created to enable `None' as
+# a valid fallback value.
+_UNSET = object()
+
+
+class Interpolation:
+ """Dummy interpolation that passes the value through with no changes."""
+
+ def before_get(self, parser, section, option, value, defaults):
+ return value
+
+ def before_set(self, parser, section, option, value):
+ return value
+
+ def before_read(self, parser, section, option, value):
+ return value
+
+ def before_write(self, parser, section, option, value):
+ return value
+
+
+class BasicInterpolation(Interpolation):
+ """Interpolation as implemented in the classic ConfigParser.
+
+ The option values can contain format strings which refer to other values in
+ the same section, or values in the special default section.
+
+ For example:
+
+ something: %(dir)s/whatever
+
+ would resolve the "%(dir)s" to the value of dir. All reference
+ expansions are done late, on demand. If a user needs to use a bare % in
+ a configuration file, she can escape it by writing %%. Other % usage
+ is considered a user error and raises `InterpolationSyntaxError'."""
+
+ _KEYCRE = re.compile(r"%\(([^)]+)\)s")
+
+ def before_get(self, parser, section, option, value, defaults):
+ L = []
+ self._interpolate_some(parser, option, L, value, section, defaults, 1)
+ return ''.join(L)
+
+ def before_set(self, parser, section, option, value):
+ tmp_value = value.replace('%%', '') # escaped percent signs
+ tmp_value = self._KEYCRE.sub('', tmp_value) # valid syntax
+ if '%' in tmp_value:
+ raise ValueError(
+ "invalid interpolation syntax in %r at "
+ "position %d" % (value, tmp_value.find('%'))
+ )
+ return value
+
+ def _interpolate_some( # noqa: C901
+ self, parser, option, accum, rest, section, map, depth
+ ):
+ rawval = parser.get(section, option, raw=True, fallback=rest)
+ if depth > MAX_INTERPOLATION_DEPTH:
+ raise InterpolationDepthError(option, section, rawval)
+ while rest:
+ p = rest.find("%")
+ if p < 0:
+ accum.append(rest)
+ return
+ if p > 0:
+ accum.append(rest[:p])
+ rest = rest[p:]
+ # p is no longer used
+ c = rest[1:2]
+ if c == "%":
+ accum.append("%")
+ rest = rest[2:]
+ elif c == "(":
+ m = self._KEYCRE.match(rest)
+ if m is None:
+ raise InterpolationSyntaxError(
+ option,
+ section,
+ "bad interpolation variable reference %r" % rest,
+ )
+ var = parser.optionxform(m.group(1))
+ rest = rest[m.end() :]
+ try:
+ v = map[var]
+ except KeyError:
+ raise InterpolationMissingOptionError(
+ option, section, rawval, var
+ ) from None
+ if "%" in v:
+ self._interpolate_some(
+ parser, option, accum, v, section, map, depth + 1
+ )
+ else:
+ accum.append(v)
+ else:
+ raise InterpolationSyntaxError(
+ option,
+ section,
+ "'%%' must be followed by '%%' or '(', " "found: %r" % (rest,),
+ )
+
+
+class ExtendedInterpolation(Interpolation):
+ """Advanced variant of interpolation, supports the syntax used by
+ `zc.buildout'. Enables interpolation between sections."""
+
+ _KEYCRE = re.compile(r"\$\{([^}]+)\}")
+
+ def before_get(self, parser, section, option, value, defaults):
+ L = []
+ self._interpolate_some(parser, option, L, value, section, defaults, 1)
+ return ''.join(L)
+
+ def before_set(self, parser, section, option, value):
+ tmp_value = value.replace('$$', '') # escaped dollar signs
+ tmp_value = self._KEYCRE.sub('', tmp_value) # valid syntax
+ if '$' in tmp_value:
+ raise ValueError(
+ "invalid interpolation syntax in %r at "
+ "position %d" % (value, tmp_value.find('$'))
+ )
+ return value
+
+ def _interpolate_some( # noqa: C901
+ self, parser, option, accum, rest, section, map, depth
+ ):
+ rawval = parser.get(section, option, raw=True, fallback=rest)
+ if depth > MAX_INTERPOLATION_DEPTH:
+ raise InterpolationDepthError(option, section, rawval)
+ while rest:
+ p = rest.find("$")
+ if p < 0:
+ accum.append(rest)
+ return
+ if p > 0:
+ accum.append(rest[:p])
+ rest = rest[p:]
+ # p is no longer used
+ c = rest[1:2]
+ if c == "$":
+ accum.append("$")
+ rest = rest[2:]
+ elif c == "{":
+ m = self._KEYCRE.match(rest)
+ if m is None:
+ raise InterpolationSyntaxError(
+ option,
+ section,
+ "bad interpolation variable reference %r" % rest,
+ )
+ path = m.group(1).split(':')
+ rest = rest[m.end() :]
+ sect = section
+ opt = option
+ try:
+ if len(path) == 1:
+ opt = parser.optionxform(path[0])
+ v = map[opt]
+ elif len(path) == 2:
+ sect = path[0]
+ opt = parser.optionxform(path[1])
+ v = parser.get(sect, opt, raw=True)
+ else:
+ raise InterpolationSyntaxError(
+ option, section, "More than one ':' found: %r" % (rest,)
+ )
+ except (KeyError, NoSectionError, NoOptionError):
+ raise InterpolationMissingOptionError(
+ option, section, rawval, ":".join(path)
+ ) from None
+ if "$" in v:
+ self._interpolate_some(
+ parser,
+ opt,
+ accum,
+ v,
+ sect,
+ dict(parser.items(sect, raw=True)),
+ depth + 1,
+ )
+ else:
+ accum.append(v)
+ else:
+ raise InterpolationSyntaxError(
+ option,
+ section,
+ "'$' must be followed by '$' or '{', " "found: %r" % (rest,),
+ )
+
+
+class LegacyInterpolation(Interpolation):
+ """Deprecated interpolation used in old versions of ConfigParser.
+ Use BasicInterpolation or ExtendedInterpolation instead."""
+
+ _KEYCRE = re.compile(r"%\(([^)]*)\)s|.")
+
+ def before_get(self, parser, section, option, value, vars):
+ rawval = value
+ depth = MAX_INTERPOLATION_DEPTH
+ while depth: # Loop through this until it's done
+ depth -= 1
+ if value and "%(" in value:
+ replace = functools.partial(self._interpolation_replace, parser=parser)
+ value = self._KEYCRE.sub(replace, value)
+ try:
+ value = value % vars
+ except KeyError as e:
+ raise InterpolationMissingOptionError(
+ option, section, rawval, e.args[0]
+ ) from None
+ else:
+ break
+ if value and "%(" in value:
+ raise InterpolationDepthError(option, section, rawval)
+ return value
+
+ def before_set(self, parser, section, option, value):
+ return value
+
+ @staticmethod
+ def _interpolation_replace(match, parser):
+ s = match.group(1)
+ if s is None:
+ return match.group()
+ else:
+ return "%%(%s)s" % parser.optionxform(s)
+
+
+class RawConfigParser(MutableMapping):
+ """ConfigParser that does not do interpolation."""
+
+ # Regular expressions for parsing section headers and options
+ _SECT_TMPL = r"""
+ \[ # [
+ (?P.+) # very permissive!
+ \] # ]
+ """
+ _OPT_TMPL = r"""
+ (?P.*?) # very permissive!
+ \s*(?P{delim})\s* # any number of space/tab,
+ # followed by any of the
+ # allowed delimiters,
+ # followed by any space/tab
+ (?P.*)$ # everything up to eol
+ """
+ _OPT_NV_TMPL = r"""
+ (?P.*?) # very permissive!
+ \s*(?: # any number of space/tab,
+ (?P{delim})\s* # optionally followed by
+ # any of the allowed
+ # delimiters, followed by any
+ # space/tab
+ (?P.*))?$ # everything up to eol
+ """
+ # Interpolation algorithm to be used if the user does not specify another
+ _DEFAULT_INTERPOLATION = Interpolation()
+ # Compiled regular expression for matching sections
+ SECTCRE = re.compile(_SECT_TMPL, re.VERBOSE)
+ # Compiled regular expression for matching options with typical separators
+ OPTCRE = re.compile(_OPT_TMPL.format(delim="=|:"), re.VERBOSE)
+ # Compiled regular expression for matching options with optional values
+ # delimited using typical separators
+ OPTCRE_NV = re.compile(_OPT_NV_TMPL.format(delim="=|:"), re.VERBOSE)
+ # Compiled regular expression for matching leading whitespace in a line
+ NONSPACECRE = re.compile(r"\S")
+ # Possible boolean values in the configuration.
+ BOOLEAN_STATES = {
+ '1': True,
+ 'yes': True,
+ 'true': True,
+ 'on': True,
+ '0': False,
+ 'no': False,
+ 'false': False,
+ 'off': False,
+ }
+
+ def __init__(
+ self,
+ defaults=None,
+ dict_type=_default_dict,
+ allow_no_value=False,
+ *,
+ delimiters=('=', ':'),
+ comment_prefixes=('#', ';'),
+ inline_comment_prefixes=None,
+ strict=True,
+ empty_lines_in_values=True,
+ default_section=DEFAULTSECT,
+ interpolation=_UNSET,
+ converters=_UNSET,
+ ):
+
+ self._dict = dict_type
+ self._sections = self._dict()
+ self._defaults = self._dict()
+ self._converters = ConverterMapping(self)
+ self._proxies = self._dict()
+ self._proxies[default_section] = SectionProxy(self, default_section)
+ self._delimiters = tuple(delimiters)
+ if delimiters == ('=', ':'):
+ self._optcre = self.OPTCRE_NV if allow_no_value else self.OPTCRE
+ else:
+ d = "|".join(re.escape(d) for d in delimiters)
+ if allow_no_value:
+ self._optcre = re.compile(self._OPT_NV_TMPL.format(delim=d), re.VERBOSE)
+ else:
+ self._optcre = re.compile(self._OPT_TMPL.format(delim=d), re.VERBOSE)
+ self._comment_prefixes = tuple(comment_prefixes or ())
+ self._inline_comment_prefixes = tuple(inline_comment_prefixes or ())
+ self._strict = strict
+ self._allow_no_value = allow_no_value
+ self._empty_lines_in_values = empty_lines_in_values
+ self.default_section = default_section
+ self._interpolation = interpolation
+ if self._interpolation is _UNSET:
+ self._interpolation = self._DEFAULT_INTERPOLATION
+ if self._interpolation is None:
+ self._interpolation = Interpolation()
+ if converters is not _UNSET:
+ self._converters.update(converters)
+ if defaults:
+ self._read_defaults(defaults)
+
+ def defaults(self):
+ return self._defaults
+
+ def sections(self):
+ """Return a list of section names, excluding [DEFAULT]"""
+ # self._sections will never have [DEFAULT] in it
+ return list(self._sections.keys())
+
+ def add_section(self, section):
+ """Create a new section in the configuration.
+
+ Raise DuplicateSectionError if a section by the specified name
+ already exists. Raise ValueError if name is DEFAULT.
+ """
+ if section == self.default_section:
+ raise ValueError('Invalid section name: %r' % section)
+
+ if section in self._sections:
+ raise DuplicateSectionError(section)
+ self._sections[section] = self._dict()
+ self._proxies[section] = SectionProxy(self, section)
+
+ def has_section(self, section):
+ """Indicate whether the named section is present in the configuration.
+
+ The DEFAULT section is not acknowledged.
+ """
+ return section in self._sections
+
+ def options(self, section):
+ """Return a list of option names for the given section name."""
+ try:
+ opts = self._sections[section].copy()
+ except KeyError:
+ raise NoSectionError(section) from None
+ opts.update(self._defaults)
+ return list(opts.keys())
+
+ def read(self, filenames, encoding=None):
+ """Read and parse a filename or an iterable of filenames.
+
+ Files that cannot be opened are silently ignored; this is
+ designed so that you can specify an iterable of potential
+ configuration file locations (e.g. current directory, user's
+ home directory, systemwide directory), and all existing
+ configuration files in the iterable will be read. A single
+ filename may also be given.
+
+ Return list of successfully read files.
+ """
+ if isinstance(filenames, (str, bytes, os.PathLike)):
+ filenames = [filenames]
+ encoding = io.text_encoding(encoding)
+ read_ok = []
+ for filename in filenames:
+ try:
+ with open(filename, encoding=encoding) as fp:
+ self._read(fp, filename)
+ except OSError:
+ continue
+ if isinstance(filename, os.PathLike):
+ filename = os.fspath(filename)
+ read_ok.append(filename)
+ return read_ok
+
+ def read_file(self, f, source=None):
+ """Like read() but the argument must be a file-like object.
+
+ The `f' argument must be iterable, returning one line at a time.
+ Optional second argument is the `source' specifying the name of the
+ file being read. If not given, it is taken from f.name. If `f' has no
+ `name' attribute, `??>' is used.
+ """
+ if source is None:
+ try:
+ source = f.name
+ except AttributeError:
+ source = '??>'
+ self._read(f, source)
+
+ def read_string(self, string, source=''):
+ """Read configuration from a given string."""
+ sfile = io.StringIO(string)
+ self.read_file(sfile, source)
+
+ def read_dict(self, dictionary, source=''):
+ """Read configuration from a dictionary.
+
+ Keys are section names, values are dictionaries with keys and values
+ that should be present in the section. If the used dictionary type
+ preserves order, sections and their keys will be added in order.
+
+ All types held in the dictionary are converted to strings during
+ reading, including section names, option names and keys.
+
+ Optional second argument is the `source' specifying the name of the
+ dictionary being read.
+ """
+ elements_added = set()
+ for section, keys in dictionary.items():
+ section = str(section)
+ try:
+ self.add_section(section)
+ except (DuplicateSectionError, ValueError):
+ if self._strict and section in elements_added:
+ raise
+ elements_added.add(section)
+ for key, value in keys.items():
+ key = self.optionxform(str(key))
+ if value is not None:
+ value = str(value)
+ if self._strict and (section, key) in elements_added:
+ raise DuplicateOptionError(section, key, source)
+ elements_added.add((section, key))
+ self.set(section, key, value)
+
+ def readfp(self, fp, filename=None):
+ """Deprecated, use read_file instead."""
+ warnings.warn(
+ "This method will be removed in future versions. "
+ "Use 'parser.read_file()' instead.",
+ DeprecationWarning,
+ stacklevel=2,
+ )
+ self.read_file(fp, source=filename)
+
+ def get(self, section, option, *, raw=False, vars=None, fallback=_UNSET):
+ """Get an option value for a given section.
+
+ If `vars' is provided, it must be a dictionary. The option is looked up
+ in `vars' (if provided), `section', and in `DEFAULTSECT' in that order.
+ If the key is not found and `fallback' is provided, it is used as
+ a fallback value. `None' can be provided as a `fallback' value.
+
+ If interpolation is enabled and the optional argument `raw' is False,
+ all interpolations are expanded in the return values.
+
+ Arguments `raw', `vars', and `fallback' are keyword only.
+
+ The section DEFAULT is special.
+ """
+ try:
+ d = self._unify_values(section, vars)
+ except NoSectionError:
+ if fallback is _UNSET:
+ raise
+ else:
+ return fallback
+ option = self.optionxform(option)
+ try:
+ value = d[option]
+ except KeyError:
+ if fallback is _UNSET:
+ raise NoOptionError(option, section)
+ else:
+ return fallback
+
+ if raw or value is None:
+ return value
+ else:
+ return self._interpolation.before_get(self, section, option, value, d)
+
+ def _get(self, section, conv, option, **kwargs):
+ return conv(self.get(section, option, **kwargs))
+
+ def _get_conv(
+ self, section, option, conv, *, raw=False, vars=None, fallback=_UNSET, **kwargs
+ ):
+ try:
+ return self._get(section, conv, option, raw=raw, vars=vars, **kwargs)
+ except (NoSectionError, NoOptionError):
+ if fallback is _UNSET:
+ raise
+ return fallback
+
+ # getint, getfloat and getboolean provided directly for backwards compat
+ def getint(
+ self, section, option, *, raw=False, vars=None, fallback=_UNSET, **kwargs
+ ):
+ return self._get_conv(
+ section, option, int, raw=raw, vars=vars, fallback=fallback, **kwargs
+ )
+
+ def getfloat(
+ self, section, option, *, raw=False, vars=None, fallback=_UNSET, **kwargs
+ ):
+ return self._get_conv(
+ section, option, float, raw=raw, vars=vars, fallback=fallback, **kwargs
+ )
+
+ def getboolean(
+ self, section, option, *, raw=False, vars=None, fallback=_UNSET, **kwargs
+ ):
+ return self._get_conv(
+ section,
+ option,
+ self._convert_to_boolean,
+ raw=raw,
+ vars=vars,
+ fallback=fallback,
+ **kwargs,
+ )
+
+ def items(self, section=_UNSET, raw=False, vars=None):
+ """Return a list of (name, value) tuples for each option in a section.
+
+ All % interpolations are expanded in the return values, based on the
+ defaults passed into the constructor, unless the optional argument
+ `raw' is true. Additional substitutions may be provided using the
+ `vars' argument, which must be a dictionary whose contents overrides
+ any pre-existing defaults.
+
+ The section DEFAULT is special.
+ """
+ if section is _UNSET:
+ return super(RawConfigParser, self).items()
+ d = self._defaults.copy()
+ try:
+ d.update(self._sections[section])
+ except KeyError:
+ if section != self.default_section:
+ raise NoSectionError(section)
+ orig_keys = list(d.keys())
+ # Update with the entry specific variables
+ if vars:
+ for key, value in vars.items():
+ d[self.optionxform(key)] = value
+
+ def value_getter_interp(option):
+ return self._interpolation.before_get(self, section, option, d[option], d)
+
+ def value_getter_raw(option):
+ return d[option]
+
+ value_getter = value_getter_raw if raw else value_getter_interp
+
+ return [(option, value_getter(option)) for option in orig_keys]
+
+ def popitem(self):
+ """Remove a section from the parser and return it as
+ a (section_name, section_proxy) tuple. If no section is present, raise
+ KeyError.
+
+ The section DEFAULT is never returned because it cannot be removed.
+ """
+ for key in self.sections():
+ value = self[key]
+ del self[key]
+ return key, value
+ raise KeyError
+
+ def optionxform(self, optionstr):
+ return optionstr.lower()
+
+ def has_option(self, section, option):
+ """Check for the existence of a given option in a given section.
+ If the specified `section' is None or an empty string, DEFAULT is
+ assumed. If the specified `section' does not exist, returns False."""
+ if not section or section == self.default_section:
+ option = self.optionxform(option)
+ return option in self._defaults
+ elif section not in self._sections:
+ return False
+ else:
+ option = self.optionxform(option)
+ return option in self._sections[section] or option in self._defaults
+
+ def set(self, section, option, value=None):
+ """Set an option."""
+ if value:
+ value = self._interpolation.before_set(self, section, option, value)
+ if not section or section == self.default_section:
+ sectdict = self._defaults
+ else:
+ try:
+ sectdict = self._sections[section]
+ except KeyError:
+ raise NoSectionError(section) from None
+ sectdict[self.optionxform(option)] = value
+
+ def write(self, fp, space_around_delimiters=True):
+ """Write an .ini-format representation of the configuration state.
+
+ If `space_around_delimiters' is True (the default), delimiters
+ between keys and values are surrounded by spaces.
+
+ Please note that comments in the original configuration file are not
+ preserved when writing the configuration back.
+ """
+ if space_around_delimiters:
+ d = " {} ".format(self._delimiters[0])
+ else:
+ d = self._delimiters[0]
+ if self._defaults:
+ self._write_section(fp, self.default_section, self._defaults.items(), d)
+ for section in self._sections:
+ self._write_section(fp, section, self._sections[section].items(), d)
+
+ def _write_section(self, fp, section_name, section_items, delimiter):
+ """Write a single section to the specified `fp'."""
+ fp.write("[{}]\n".format(section_name))
+ for key, value in section_items:
+ value = self._interpolation.before_write(self, section_name, key, value)
+ if value is not None or not self._allow_no_value:
+ value = delimiter + str(value).replace('\n', '\n\t')
+ else:
+ value = ""
+ fp.write("{}{}\n".format(key, value))
+ fp.write("\n")
+
+ def remove_option(self, section, option):
+ """Remove an option."""
+ if not section or section == self.default_section:
+ sectdict = self._defaults
+ else:
+ try:
+ sectdict = self._sections[section]
+ except KeyError:
+ raise NoSectionError(section) from None
+ option = self.optionxform(option)
+ existed = option in sectdict
+ if existed:
+ del sectdict[option]
+ return existed
+
+ def remove_section(self, section):
+ """Remove a file section."""
+ existed = section in self._sections
+ if existed:
+ del self._sections[section]
+ del self._proxies[section]
+ return existed
+
+ def __getitem__(self, key):
+ if key != self.default_section and not self.has_section(key):
+ raise KeyError(key)
+ return self._proxies[key]
+
+ def __setitem__(self, key, value):
+ # To conform with the mapping protocol, overwrites existing values in
+ # the section.
+ if key in self and self[key] is value:
+ return
+ # XXX this is not atomic if read_dict fails at any point. Then again,
+ # no update method in configparser is atomic in this implementation.
+ if key == self.default_section:
+ self._defaults.clear()
+ elif key in self._sections:
+ self._sections[key].clear()
+ self.read_dict({key: value})
+
+ def __delitem__(self, key):
+ if key == self.default_section:
+ raise ValueError("Cannot remove the default section.")
+ if not self.has_section(key):
+ raise KeyError(key)
+ self.remove_section(key)
+
+ def __contains__(self, key):
+ return key == self.default_section or self.has_section(key)
+
+ def __len__(self):
+ return len(self._sections) + 1 # the default section
+
+ def __iter__(self):
+ # XXX does it break when underlying container state changed?
+ return itertools.chain((self.default_section,), self._sections.keys())
+
+ def _read(self, fp, fpname): # noqa: C901
+ """Parse a sectioned configuration file.
+
+ Each section in a configuration file contains a header, indicated by
+ a name in square brackets (`[]'), plus key/value options, indicated by
+ `name' and `value' delimited with a specific substring (`=' or `:' by
+ default).
+
+ Values can span multiple lines, as long as they are indented deeper
+ than the first line of the value. Depending on the parser's mode, blank
+ lines may be treated as parts of multiline values or ignored.
+
+ Configuration files may include comments, prefixed by specific
+ characters (`#' and `;' by default). Comments may appear on their own
+ in an otherwise empty line or may be entered in lines holding values or
+ section names. Please note that comments get stripped off when reading
+ configuration files.
+ """
+ elements_added = set()
+ cursect = None # None, or a dictionary
+ sectname = None
+ optname = None
+ lineno = 0
+ indent_level = 0
+ e = None # None, or an exception
+ for lineno, line in enumerate(fp, start=1):
+ comment_start = sys.maxsize
+ # strip inline comments
+ inline_prefixes = {p: -1 for p in self._inline_comment_prefixes}
+ while comment_start == sys.maxsize and inline_prefixes:
+ next_prefixes = {}
+ for prefix, index in inline_prefixes.items():
+ index = line.find(prefix, index + 1)
+ if index == -1:
+ continue
+ next_prefixes[prefix] = index
+ if index == 0 or (index > 0 and line[index - 1].isspace()):
+ comment_start = min(comment_start, index)
+ inline_prefixes = next_prefixes
+ # strip full line comments
+ for prefix in self._comment_prefixes:
+ if line.strip().startswith(prefix):
+ comment_start = 0
+ break
+ if comment_start == sys.maxsize:
+ comment_start = None
+ value = line[:comment_start].strip()
+ if not value:
+ if self._empty_lines_in_values:
+ # add empty line to the value, but only if there was no
+ # comment on the line
+ if (
+ comment_start is None
+ and cursect is not None
+ and optname
+ and cursect[optname] is not None
+ ):
+ cursect[optname].append('') # newlines added at join
+ else:
+ # empty line marks end of value
+ indent_level = sys.maxsize
+ continue
+ # continuation line?
+ first_nonspace = self.NONSPACECRE.search(line)
+ cur_indent_level = first_nonspace.start() if first_nonspace else 0
+ if cursect is not None and optname and cur_indent_level > indent_level:
+ cursect[optname].append(value)
+ # a section header or option header?
+ else:
+ indent_level = cur_indent_level
+ # is it a section header?
+ mo = self.SECTCRE.match(value)
+ if mo:
+ sectname = mo.group('header')
+ if sectname in self._sections:
+ if self._strict and sectname in elements_added:
+ raise DuplicateSectionError(sectname, fpname, lineno)
+ cursect = self._sections[sectname]
+ elements_added.add(sectname)
+ elif sectname == self.default_section:
+ cursect = self._defaults
+ else:
+ cursect = self._dict()
+ self._sections[sectname] = cursect
+ self._proxies[sectname] = SectionProxy(self, sectname)
+ elements_added.add(sectname)
+ # So sections can't start with a continuation line
+ optname = None
+ # no section header in the file?
+ elif cursect is None:
+ raise MissingSectionHeaderError(fpname, lineno, line)
+ # an option line?
+ else:
+ mo = self._optcre.match(value)
+ if mo:
+ optname, vi, optval = mo.group('option', 'vi', 'value')
+ if not optname:
+ e = self._handle_error(e, fpname, lineno, line)
+ optname = self.optionxform(optname.rstrip())
+ if self._strict and (sectname, optname) in elements_added:
+ raise DuplicateOptionError(
+ sectname, optname, fpname, lineno
+ )
+ elements_added.add((sectname, optname))
+ # This check is fine because the OPTCRE cannot
+ # match if it would set optval to None
+ if optval is not None:
+ optval = optval.strip()
+ cursect[optname] = [optval]
+ else:
+ # valueless option handling
+ cursect[optname] = None
+ else:
+ # a non-fatal parsing error occurred. set up the
+ # exception but keep going. the exception will be
+ # raised at the end of the file and will contain a
+ # list of all bogus lines
+ e = self._handle_error(e, fpname, lineno, line)
+ self._join_multiline_values()
+ # if any parsing errors occurred, raise an exception
+ if e:
+ raise e
+
+ def _join_multiline_values(self):
+ defaults = self.default_section, self._defaults
+ all_sections = itertools.chain((defaults,), self._sections.items())
+ for section, options in all_sections:
+ for name, val in options.items():
+ if isinstance(val, list):
+ val = '\n'.join(val).rstrip()
+ options[name] = self._interpolation.before_read(
+ self, section, name, val
+ )
+
+ def _read_defaults(self, defaults):
+ """Read the defaults passed in the initializer.
+ Note: values can be non-string."""
+ for key, value in defaults.items():
+ self._defaults[self.optionxform(key)] = value
+
+ def _handle_error(self, exc, fpname, lineno, line):
+ if not exc:
+ exc = ParsingError(fpname)
+ exc.append(lineno, repr(line))
+ return exc
+
+ def _unify_values(self, section, vars):
+ """Create a sequence of lookups with 'vars' taking priority over
+ the 'section' which takes priority over the DEFAULTSECT.
+
+ """
+ sectiondict = {}
+ try:
+ sectiondict = self._sections[section]
+ except KeyError:
+ if section != self.default_section:
+ raise NoSectionError(section)
+ # Update with the entry specific variables
+ vardict = {}
+ if vars:
+ for key, value in vars.items():
+ if value is not None:
+ value = str(value)
+ vardict[self.optionxform(key)] = value
+ return _ChainMap(vardict, sectiondict, self._defaults)
+
+ def _convert_to_boolean(self, value):
+ """Return a boolean value translating from other types if necessary."""
+ if value.lower() not in self.BOOLEAN_STATES:
+ raise ValueError('Not a boolean: %s' % value)
+ return self.BOOLEAN_STATES[value.lower()]
+
+ def _validate_value_types(self, *, section="", option="", value=""):
+ """Raises a TypeError for non-string values.
+
+ The only legal non-string value if we allow valueless
+ options is None, so we need to check if the value is a
+ string if:
+ - we do not allow valueless options, or
+ - we allow valueless options but the value is not None
+
+ For compatibility reasons this method is not used in classic set()
+ for RawConfigParsers. It is invoked in every case for mapping protocol
+ access and in ConfigParser.set().
+ """
+ if not isinstance(section, str):
+ raise TypeError("section names must be strings")
+ if not isinstance(option, str):
+ raise TypeError("option keys must be strings")
+ if not self._allow_no_value or value:
+ if not isinstance(value, str):
+ raise TypeError("option values must be strings")
+
+ @property
+ def converters(self):
+ return self._converters
+
+
+class ConfigParser(RawConfigParser):
+ """ConfigParser implementing interpolation."""
+
+ _DEFAULT_INTERPOLATION = BasicInterpolation()
+
+ def set(self, section, option, value=None):
+ """Set an option. Extends RawConfigParser.set by validating type and
+ interpolation syntax on the value."""
+ self._validate_value_types(option=option, value=value)
+ super().set(section, option, value)
+
+ def add_section(self, section):
+ """Create a new section in the configuration. Extends
+ RawConfigParser.add_section by validating if the section name is
+ a string."""
+ self._validate_value_types(section=section)
+ super().add_section(section)
+
+ def _read_defaults(self, defaults):
+ """Reads the defaults passed in the initializer, implicitly converting
+ values to strings like the rest of the API.
+
+ Does not perform interpolation for backwards compatibility.
+ """
+ try:
+ hold_interpolation = self._interpolation
+ self._interpolation = Interpolation()
+ self.read_dict({self.default_section: defaults})
+ finally:
+ self._interpolation = hold_interpolation
+
+
+class SafeConfigParser(ConfigParser):
+ """ConfigParser alias for backwards compatibility purposes."""
+
+ def __init__(self, *args, **kwargs):
+ super().__init__(*args, **kwargs)
+ warnings.warn(
+ "The SafeConfigParser class has been renamed to ConfigParser "
+ "in Python 3.2. This alias will be removed in future versions."
+ " Use ConfigParser directly instead.",
+ DeprecationWarning,
+ stacklevel=2,
+ )
+
+
+class SectionProxy(MutableMapping):
+ """A proxy for a single section from a parser."""
+
+ def __init__(self, parser, name):
+ """Creates a view on a section of the specified `name` in `parser`."""
+ self._parser = parser
+ self._name = name
+ for conv in parser.converters:
+ key = 'get' + conv
+ getter = functools.partial(self.get, _impl=getattr(parser, key))
+ setattr(self, key, getter)
+
+ def __repr__(self):
+ return ''.format(self._name)
+
+ def __getitem__(self, key):
+ if not self._parser.has_option(self._name, key):
+ raise KeyError(key)
+ return self._parser.get(self._name, key)
+
+ def __setitem__(self, key, value):
+ self._parser._validate_value_types(option=key, value=value)
+ return self._parser.set(self._name, key, value)
+
+ def __delitem__(self, key):
+ if not (
+ self._parser.has_option(self._name, key)
+ and self._parser.remove_option(self._name, key)
+ ):
+ raise KeyError(key)
+
+ def __contains__(self, key):
+ return self._parser.has_option(self._name, key)
+
+ def __len__(self):
+ return len(self._options())
+
+ def __iter__(self):
+ return self._options().__iter__()
+
+ def _options(self):
+ if self._name != self._parser.default_section:
+ return self._parser.options(self._name)
+ else:
+ return self._parser.defaults()
+
+ @property
+ def parser(self):
+ # The parser object of the proxy is read-only.
+ return self._parser
+
+ @property
+ def name(self):
+ # The name of the section on a proxy is read-only.
+ return self._name
+
+ def get(self, option, fallback=None, *, raw=False, vars=None, _impl=None, **kwargs):
+ """Get an option value.
+
+ Unless `fallback` is provided, `None` will be returned if the option
+ is not found.
+
+ """
+ # If `_impl` is provided, it should be a getter method on the parser
+ # object that provides the desired type conversion.
+ if not _impl:
+ _impl = self._parser.get
+ return _impl(
+ self._name, option, raw=raw, vars=vars, fallback=fallback, **kwargs
+ )
+
+
+class ConverterMapping(MutableMapping):
+ """Enables reuse of get*() methods between the parser and section proxies.
+
+ If a parser class implements a getter directly, the value for the given
+ key will be ``None``. The presence of the converter name here enables
+ section proxies to find and use the implementation on the parser class.
+ """
+
+ GETTERCRE = re.compile(r"^get(?P.+)$")
+
+ def __init__(self, parser):
+ self._parser = parser
+ self._data = {}
+ for getter in dir(self._parser):
+ m = self.GETTERCRE.match(getter)
+ if not m or not callable(getattr(self._parser, getter)):
+ continue
+ self._data[m.group('name')] = None # See class docstring.
+
+ def __getitem__(self, key):
+ return self._data[key]
+
+ def __setitem__(self, key, value):
+ try:
+ k = 'get' + key
+ except TypeError:
+ raise ValueError(
+ 'Incompatible key: {} (type: {})' ''.format(key, type(key))
+ )
+ if k == 'get':
+ raise ValueError('Incompatible key: cannot use "" as a name')
+ self._data[key] = value
+ func = functools.partial(self._parser._get_conv, conv=value)
+ func.converter = value
+ setattr(self._parser, k, func)
+ for proxy in self._parser.values():
+ getter = functools.partial(proxy.get, _impl=func)
+ setattr(proxy, k, getter)
+
+ def __delitem__(self, key):
+ try:
+ k = 'get' + (key or None)
+ except TypeError:
+ raise KeyError(key)
+ del self._data[key]
+ for inst in itertools.chain((self._parser,), self._parser.values()):
+ try:
+ delattr(inst, k)
+ except AttributeError:
+ # don't raise since the entry was present in _data, silently
+ # clean up
+ continue
+
+ def __iter__(self):
+ return iter(self._data)
+
+ def __len__(self):
+ return len(self._data)
diff --git a/venv/Lib/site-packages/backports/configparser/compat.py b/venv/Lib/site-packages/backports/configparser/compat.py
new file mode 100644
index 0000000..951bfea
--- /dev/null
+++ b/venv/Lib/site-packages/backports/configparser/compat.py
@@ -0,0 +1,19 @@
+import types
+import io as _io
+
+
+def text_encoding(encoding, stacklevel=2):
+ """
+ Stubbed version of io.text_encoding as found in Python 3.10
+ """
+ return encoding
+
+
+def copy_module(mod, **defaults):
+ copy = types.ModuleType(mod.__name__, doc=mod.__doc__)
+ vars(copy).update(defaults)
+ vars(copy).update(vars(mod))
+ return copy
+
+
+io = copy_module(_io, text_encoding=text_encoding)
diff --git a/venv/Lib/site-packages/configparser-5.2.0.dist-info/INSTALLER b/venv/Lib/site-packages/configparser-5.2.0.dist-info/INSTALLER
new file mode 100644
index 0000000..a1b589e
--- /dev/null
+++ b/venv/Lib/site-packages/configparser-5.2.0.dist-info/INSTALLER
@@ -0,0 +1 @@
+pip
diff --git a/venv/Lib/site-packages/configparser-5.2.0.dist-info/LICENSE b/venv/Lib/site-packages/configparser-5.2.0.dist-info/LICENSE
new file mode 100644
index 0000000..353924b
--- /dev/null
+++ b/venv/Lib/site-packages/configparser-5.2.0.dist-info/LICENSE
@@ -0,0 +1,19 @@
+Copyright Jason R. Coombs
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to
+deal in the Software without restriction, including without limitation the
+rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
+sell copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
+IN THE SOFTWARE.
diff --git a/venv/Lib/site-packages/configparser-5.2.0.dist-info/METADATA b/venv/Lib/site-packages/configparser-5.2.0.dist-info/METADATA
new file mode 100644
index 0000000..fe728ae
--- /dev/null
+++ b/venv/Lib/site-packages/configparser-5.2.0.dist-info/METADATA
@@ -0,0 +1,267 @@
+Metadata-Version: 2.1
+Name: configparser
+Version: 5.2.0
+Summary: Updated configparser from Python 3.8 for Python 2.6+.
+Home-page: https://github.com/jaraco/configparser/
+Author: Łukasz Langa
+Author-email: lukasz@langa.pl
+Maintainer: Jason R. Coombs
+Maintainer-email: jaraco@jaraco.com
+License: UNKNOWN
+Keywords: configparser ini parsing conf cfg configuration file
+Platform: any
+Classifier: Development Status :: 5 - Production/Stable
+Classifier: Intended Audience :: Developers
+Classifier: License :: OSI Approved :: MIT License
+Classifier: Programming Language :: Python :: 3
+Classifier: Programming Language :: Python :: 3 :: Only
+Requires-Python: >=3.6
+License-File: LICENSE
+Provides-Extra: docs
+Requires-Dist: sphinx ; extra == 'docs'
+Requires-Dist: jaraco.packaging (>=8.2) ; extra == 'docs'
+Requires-Dist: rst.linker (>=1.9) ; extra == 'docs'
+Requires-Dist: jaraco.tidelift (>=1.4) ; extra == 'docs'
+Provides-Extra: testing
+Requires-Dist: pytest (>=6) ; extra == 'testing'
+Requires-Dist: pytest-checkdocs (>=2.4) ; extra == 'testing'
+Requires-Dist: pytest-flake8 ; extra == 'testing'
+Requires-Dist: pytest-cov ; extra == 'testing'
+Requires-Dist: pytest-enabler (>=1.0.1) ; extra == 'testing'
+Requires-Dist: types-backports ; extra == 'testing'
+Requires-Dist: pytest-black (>=0.3.7) ; (platform_python_implementation != "PyPy") and extra == 'testing'
+Requires-Dist: pytest-mypy ; (platform_python_implementation != "PyPy") and extra == 'testing'
+
+.. image:: https://img.shields.io/pypi/v/configparser.svg
+ :target: `PyPI link`_
+
+.. image:: https://img.shields.io/pypi/pyversions/configparser.svg
+ :target: `PyPI link`_
+
+.. _PyPI link: https://pypi.org/project/configparser
+
+.. image:: https://github.com/jaraco/configparser/workflows/tests/badge.svg
+ :target: https://github.com/jaraco/configparser/actions?query=workflow%3A%22tests%22
+ :alt: tests
+
+.. image:: https://img.shields.io/badge/code%20style-black-000000.svg
+ :target: https://github.com/psf/black
+ :alt: Code style: Black
+
+.. image:: https://readthedocs.org/projects/configparser/badge/?version=latest
+ :target: https://configparser.readthedocs.io/en/latest/?badge=latest
+
+.. image:: https://img.shields.io/badge/skeleton-2021-informational
+ :target: https://blog.jaraco.com/skeleton
+
+.. image:: https://tidelift.com/badges/package/pypi/configparser
+ :target: https://tidelift.com/subscription/pkg/pypi-configparser?utm_source=pypi-configparser&utm_medium=readme
+
+
+This package is a backport of the refreshed and enhanced ConfigParser from
+later Python versions. To use the backport instead of the built-in version,
+simply import it explicitly as a backport::
+
+ from backports import configparser
+
+To use the backport on Python 2 and the built-in version on
+Python 3, use the standard invocation::
+
+ import configparser
+
+For detailed documentation consult the vanilla version at
+http://docs.python.org/3/library/configparser.html.
+
+Why you'll love ``configparser``
+--------------------------------
+
+Whereas almost completely compatible with its older brother, ``configparser``
+sports a bunch of interesting new features:
+
+* full mapping protocol access (`more info
+ `_)::
+
+ >>> parser = ConfigParser()
+ >>> parser.read_string("""
+ [DEFAULT]
+ location = upper left
+ visible = yes
+ editable = no
+ color = blue
+
+ [main]
+ title = Main Menu
+ color = green
+
+ [options]
+ title = Options
+ """)
+ >>> parser['main']['color']
+ 'green'
+ >>> parser['main']['editable']
+ 'no'
+ >>> section = parser['options']
+ >>> section['title']
+ 'Options'
+ >>> section['title'] = 'Options (editable: %(editable)s)'
+ >>> section['title']
+ 'Options (editable: no)'
+
+* there's now one default ``ConfigParser`` class, which basically is the old
+ ``SafeConfigParser`` with a bunch of tweaks which make it more predictable for
+ users. Don't need interpolation? Simply use
+ ``ConfigParser(interpolation=None)``, no need to use a distinct
+ ``RawConfigParser`` anymore.
+
+* the parser is highly `customizable upon instantiation
+ `__
+ supporting things like changing option delimiters, comment characters, the
+ name of the DEFAULT section, the interpolation syntax, etc.
+
+* you can easily create your own interpolation syntax but there are two powerful
+ implementations built-in (`more info
+ `__):
+
+ * the classic ``%(string-like)s`` syntax (called ``BasicInterpolation``)
+
+ * a new ``${buildout:like}`` syntax (called ``ExtendedInterpolation``)
+
+* fallback values may be specified in getters (`more info
+ `__)::
+
+ >>> config.get('closet', 'monster',
+ ... fallback='No such things as monsters')
+ 'No such things as monsters'
+
+* ``ConfigParser`` objects can now read data directly `from strings
+ `__
+ and `from dictionaries
+ `__.
+ That means importing configuration from JSON or specifying default values for
+ the whole configuration (multiple sections) is now a single line of code. Same
+ goes for copying data from another ``ConfigParser`` instance, thanks to its
+ mapping protocol support.
+
+* many smaller tweaks, updates and fixes
+
+A few words about Unicode
+-------------------------
+
+``configparser`` comes from Python 3 and as such it works well with Unicode.
+The library is generally cleaned up in terms of internal data storage and
+reading/writing files. There are a couple of incompatibilities with the old
+``ConfigParser`` due to that. However, the work required to migrate is well
+worth it as it shows the issues that would likely come up during migration of
+your project to Python 3.
+
+The design assumes that Unicode strings are used whenever possible [1]_. That
+gives you the certainty that what's stored in a configuration object is text.
+Once your configuration is read, the rest of your application doesn't have to
+deal with encoding issues. All you have is text [2]_. The only two phases when
+you should explicitly state encoding is when you either read from an external
+source (e.g. a file) or write back.
+
+Versioning
+----------
+
+This project uses `semver `_ to
+communicate the impact of various releases while periodically syncing
+with the upstream implementation in CPython.
+The `history `_
+serves as a reference indicating which versions incorporate
+which upstream functionality.
+
+Prior to the ``4.0.0`` release, `another scheme
+`_
+was used to associate the CPython and backports releases.
+
+Maintenance
+-----------
+
+This backport was originally authored by Łukasz Langa, the current vanilla
+``configparser`` maintainer for CPython and is currently maintained by
+Jason R. Coombs:
+
+* `configparser repository `_
+
+* `configparser issue tracker `_
+
+For Enterprise
+==============
+
+Available as part of the Tidelift Subscription.
+
+This project and the maintainers of thousands of other packages are working with Tidelift to deliver one enterprise subscription that covers all of the open source you use.
+
+`Learn more `_.
+
+Security Contact
+----------------
+
+To report a security vulnerability, please use the
+`Tidelift security contact `_.
+Tidelift will coordinate the fix and disclosure.
+
+Conversion Process
+------------------
+
+This section is technical and should bother you only if you are wondering how
+this backport is produced. If the implementation details of this backport are
+not important for you, feel free to ignore the following content.
+
+The project takes the following branching approach:
+
+* The ``3.x`` branch holds unchanged files synchronized from the upstream
+ CPython repository. The synchronization is currently done by manually copying
+ the required files and stating from which CPython changeset they come.
+
+* The ``main`` branch holds a version of the ``3.x`` code with some tweaks
+ that make it compatible with older Pythons. Code on this branch must work
+ on all supported Python versions. Test with ``tox`` or in CI.
+
+The process works like this:
+
+1. In the ``3.x`` branch, run ``pip-run -- sync-upstream.py``, which
+ downloads the latest stable release of Python and copies the relevant
+ files from there into their new locations and then commits those
+ changes with a nice reference to the relevant upstream commit hash.
+
+2. Check for new names in ``__all__`` and update imports in
+ ``configparser.py`` accordingly. Optionally, run the tests on a late
+ Python 3. Commit.
+
+3. Merge the new commit to ``main``. Run tests. Commit.
+
+4. Make any compatibility changes on ``main``. Run tests. Commit.
+
+5. Update the docs and release the new version.
+
+
+Footnotes
+---------
+
+.. [1] To somewhat ease migration, passing bytestrings is still supported but
+ they are converted to Unicode for internal storage anyway. This means
+ that for the vast majority of strings used in configuration files, it
+ won't matter if you pass them as bytestrings or Unicode. However, if you
+ pass a bytestring that cannot be converted to Unicode using the naive
+ ASCII codec, a ``UnicodeDecodeError`` will be raised. This is purposeful
+ and helps you manage proper encoding for all content you store in
+ memory, read from various sources and write back.
+
+.. [2] Life gets much easier when you understand that you basically manage
+ **text** in your application. You don't care about bytes but about
+ letters. In that regard the concept of content encoding is meaningless.
+ The only time when you deal with raw bytes is when you write the data to
+ a file. Then you have to specify how your text should be encoded. On
+ the other end, to get meaningful text from a file, the application
+ reading it has to know which encoding was used during its creation. But
+ once the bytes are read and properly decoded, all you have is text. This
+ is especially powerful when you start interacting with multiple data
+ sources. Even if each of them uses a different encoding, inside your
+ application data is held in abstract text form. You can program your
+ business logic without worrying about which data came from which source.
+ You can freely exchange the data you store between sources. Only
+ reading/writing files requires encoding your text to bytes.
+
+
diff --git a/venv/Lib/site-packages/configparser-5.2.0.dist-info/RECORD b/venv/Lib/site-packages/configparser-5.2.0.dist-info/RECORD
new file mode 100644
index 0000000..87b0ea0
--- /dev/null
+++ b/venv/Lib/site-packages/configparser-5.2.0.dist-info/RECORD
@@ -0,0 +1,13 @@
+__pycache__/configparser.cpython-39.pyc,,
+backports/configparser/__init__.py,sha256=zjgAe9lH7_cTCyt7e-iyfyi007PfaMAVPhJCjM_TUPs,54655
+backports/configparser/__pycache__/__init__.cpython-39.pyc,,
+backports/configparser/__pycache__/compat.cpython-39.pyc,,
+backports/configparser/compat.py,sha256=Z3Fo6AI4BfFRfNd9Fj8n1Yw2NW2r112uQTFEnF659Lc,404
+configparser-5.2.0.dist-info/INSTALLER,sha256=zuuue4knoyJ-UwPPXg8fezS7VCrXJQrAP7zeNuwvFQg,4
+configparser-5.2.0.dist-info/LICENSE,sha256=2z8CRrH5J48VhFuZ_sR4uLUG63ZIeZNyL4xuJUKF-vg,1050
+configparser-5.2.0.dist-info/METADATA,sha256=4MeDipErpJIH61Zwu6BQ9f951Qu5HRg5RKFu3LYNZck,11053
+configparser-5.2.0.dist-info/RECORD,,
+configparser-5.2.0.dist-info/REQUESTED,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
+configparser-5.2.0.dist-info/WHEEL,sha256=ewwEueio1C2XeHTvT17n8dZUJgOvyCWCt0WVNLClP9o,92
+configparser-5.2.0.dist-info/top_level.txt,sha256=mIs8gajd7cvEWhVluv4u6ocaHw_TJ9rOrpkZEFv-7Hc,23
+configparser.py,sha256=4VADEswCwzy_RDVgvje3BmZhD6iwo3k4EkUZcgzLD4M,1546
diff --git a/venv/Lib/site-packages/configparser-5.2.0.dist-info/REQUESTED b/venv/Lib/site-packages/configparser-5.2.0.dist-info/REQUESTED
new file mode 100644
index 0000000..e69de29
diff --git a/venv/Lib/site-packages/configparser-5.2.0.dist-info/WHEEL b/venv/Lib/site-packages/configparser-5.2.0.dist-info/WHEEL
new file mode 100644
index 0000000..5bad85f
--- /dev/null
+++ b/venv/Lib/site-packages/configparser-5.2.0.dist-info/WHEEL
@@ -0,0 +1,5 @@
+Wheel-Version: 1.0
+Generator: bdist_wheel (0.37.0)
+Root-Is-Purelib: true
+Tag: py3-none-any
+
diff --git a/venv/Lib/site-packages/configparser-5.2.0.dist-info/top_level.txt b/venv/Lib/site-packages/configparser-5.2.0.dist-info/top_level.txt
new file mode 100644
index 0000000..a6cb03a
--- /dev/null
+++ b/venv/Lib/site-packages/configparser-5.2.0.dist-info/top_level.txt
@@ -0,0 +1,2 @@
+backports
+configparser
diff --git a/venv/Lib/site-packages/configparser.py b/venv/Lib/site-packages/configparser.py
new file mode 100644
index 0000000..0a18360
--- /dev/null
+++ b/venv/Lib/site-packages/configparser.py
@@ -0,0 +1,61 @@
+#!/usr/bin/env python
+# -*- coding: utf-8 -*-
+
+"""Convenience module importing everything from backports.configparser."""
+
+from __future__ import absolute_import
+from __future__ import division
+from __future__ import print_function
+from __future__ import unicode_literals
+
+from backports.configparser import (
+ RawConfigParser,
+ ConfigParser,
+ SafeConfigParser,
+ SectionProxy,
+ Interpolation,
+ BasicInterpolation,
+ ExtendedInterpolation,
+ LegacyInterpolation,
+ NoSectionError,
+ DuplicateSectionError,
+ DuplicateOptionError,
+ NoOptionError,
+ InterpolationError,
+ InterpolationMissingOptionError,
+ InterpolationSyntaxError,
+ InterpolationDepthError,
+ ParsingError,
+ MissingSectionHeaderError,
+ ConverterMapping,
+ DEFAULTSECT,
+ MAX_INTERPOLATION_DEPTH,
+)
+
+from backports.configparser import Error, _UNSET, _default_dict, _ChainMap # noqa: F401
+
+__all__ = [
+ "NoSectionError",
+ "DuplicateOptionError",
+ "DuplicateSectionError",
+ "NoOptionError",
+ "InterpolationError",
+ "InterpolationDepthError",
+ "InterpolationMissingOptionError",
+ "InterpolationSyntaxError",
+ "ParsingError",
+ "MissingSectionHeaderError",
+ "ConfigParser",
+ "SafeConfigParser",
+ "RawConfigParser",
+ "Interpolation",
+ "BasicInterpolation",
+ "ExtendedInterpolation",
+ "LegacyInterpolation",
+ "SectionProxy",
+ "ConverterMapping",
+ "DEFAULTSECT",
+ "MAX_INTERPOLATION_DEPTH",
+]
+
+# NOTE: names missing from __all__ imported anyway for backwards compatibility.
From 83c29b0ebfaa2dc6fd723c743e9ef08cd850940a Mon Sep 17 00:00:00 2001
From: ladeng07 <40017222+ladeng07@users.noreply.github.com>
Date: Thu, 5 May 2022 21:09:22 +0800
Subject: [PATCH 2/9] =?UTF-8?q?=E6=B5=8B=E8=AF=95=E4=B8=80=E4=B8=8Bgitigno?=
=?UTF-8?q?re?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.idea/workspace.xml | 16 ++--------------
ITShowPlatform/.gitignore | 2 --
2 files changed, 2 insertions(+), 16 deletions(-)
diff --git a/.idea/workspace.xml b/.idea/workspace.xml
index 61cfaad..fe3c390 100644
--- a/.idea/workspace.xml
+++ b/.idea/workspace.xml
@@ -32,20 +32,7 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
@@ -194,6 +181,7 @@
+
1650187914913
diff --git a/ITShowPlatform/.gitignore b/ITShowPlatform/.gitignore
index b9ad17b..2fa7ce7 100644
--- a/ITShowPlatform/.gitignore
+++ b/ITShowPlatform/.gitignore
@@ -1,3 +1 @@
config.ini
-
-settings.py
From c5874e8f6a4093a11d6cc1c13caa09639ef0ceeb Mon Sep 17 00:00:00 2001
From: shineahead <634831867@qq.com>
Date: Thu, 5 May 2022 22:00:31 +0800
Subject: [PATCH 3/9] =?UTF-8?q?works=E7=9A=84app?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.idea/workspace.xml | 105 ++++++++++++-----------------------
Apps/comments/serializers.py | 10 ++--
Apps/comments/views.py | 13 +++--
Apps/work/serializers.py | 17 ++++++
Apps/work/urls.py | 12 ++++
ITShowPlatform/settings.py | 7 ++-
ITShowPlatform/urls.py | 1 +
utils/get_error_msg.py | 5 ++
8 files changed, 90 insertions(+), 80 deletions(-)
create mode 100644 Apps/work/serializers.py
create mode 100644 Apps/work/urls.py
diff --git a/.idea/workspace.xml b/.idea/workspace.xml
index f99f03d..789f53c 100644
--- a/.idea/workspace.xml
+++ b/.idea/workspace.xml
@@ -10,11 +10,6 @@
-
-
-
-
-
@@ -25,56 +20,21 @@
-
-
+
+
-
-
-
-
-
-
+
+
+
+
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
@@ -94,13 +54,9 @@
-
-
-
-
@@ -116,13 +72,14 @@
-
+
-
+
+
@@ -195,6 +152,7 @@
+
1650187914913
@@ -227,7 +185,7 @@
-
+
@@ -263,10 +221,11 @@
-
-
+
+
+
@@ -275,22 +234,26 @@
-
-
+
+
-
-
+
+
+
-
-
+
+
+
-
-
+
+
+
+
@@ -315,14 +278,16 @@
-
-
+
+
-
-
+
+
+
+
@@ -339,5 +304,9 @@
+
+
+
+
\ No newline at end of file
diff --git a/Apps/comments/serializers.py b/Apps/comments/serializers.py
index 9d57096..d553ef5 100644
--- a/Apps/comments/serializers.py
+++ b/Apps/comments/serializers.py
@@ -1,25 +1,27 @@
from rest_framework import serializers
from .models import *
+from utils.get_error_msg import get_error_msg
class CommentsInfo(serializers.ModelSerializer):
class Meta:
model = Comments
- fields = ['content', 'post_time']
+ fields = ['id', 'content', 'post_time']
post_time = serializers.DateTimeField(label="发布时间", required=False)
content = serializers.CharField(label="弹幕内容", max_length=50, required=True)
+
def validate_content(self, value):
ban = ['!', '@', '#', '$', '%', '^', '&', '*', '(', ')', "_", "-"]
for i in ban:
if i in value:
- raise serializers.ValidationError('非法字符')
+ raise serializers.ValidationError(code='40001', detail=get_error_msg(40001))
if len(value) > 50:
- raise serializers.ValidationError("弹幕过长")
+ raise serializers.ValidationError(code='40002', detail=get_error_msg(40002))
elif len(value) == 0:
- raise serializers.ValidationError("输入不能为空")
+ raise serializers.ValidationError(code='40003', detail=get_error_msg(40003))
return value
diff --git a/Apps/comments/views.py b/Apps/comments/views.py
index 3443607..a587bde 100644
--- a/Apps/comments/views.py
+++ b/Apps/comments/views.py
@@ -7,6 +7,7 @@ from rest_framework.response import Response
from .models import *
from .serializers import CommentsInfo
from django.utils import timezone
+from utils.get_error_msg import get_error_msg
# Create your views here.
@@ -21,11 +22,11 @@ class comments(APIView):
except:
data['msg'] = serializer.error_messages
if len(data['data']) == 0:
- data['msg'] = 'error'
- data['code'] = "40000"
+ data['msg'] = get_error_msg(40005)
+ data['code'] = 40005
else:
- data['msg'] = "success"
- data['code'] = "20000"
+ data['msg'] = get_error_msg(20000)
+ data['code'] = 20000
return Response(data=data)
@@ -34,12 +35,12 @@ class comments(APIView):
serializer = CommentsInfo(data=request.data)
if not serializer.is_valid(raise_exception=True):
data['msg'] = serializer.error_messages
- data['code'] = "40000"
+ data['code'] = 50000
return Response(data=data)
serializer.validated_data['post_time'] = timezone.now().replace(microsecond=0)
serializer.save()
data['data'] = serializer.validated_data
data['msg'] = "success"
- data['code'] = "20000"
+ data['code'] = 20000
return Response(data=data)
diff --git a/Apps/work/serializers.py b/Apps/work/serializers.py
new file mode 100644
index 0000000..90a4fe3
--- /dev/null
+++ b/Apps/work/serializers.py
@@ -0,0 +1,17 @@
+from rest_framework import serializers
+from .models import *
+
+
+class HistoryInfoSerializer(serializers.ModelSerializer):
+ class Meta:
+ model = Works
+ fields = '__all__'
+ grade = serializers.CharField(label="年级", required=True)
+ name = serializers.CharField(label="事件名称", max_length=30, required=True)
+ description = serializers.CharField(label="事件描述", max_length=200, required=True)
+ img = serializers.ImageField(label="图片", required=False)
+
+ def validate_grade(self, value):
+ if not (2010 < value <= 2021):
+ raise serializers.ValidationError("不合法输入")
+ return value
\ No newline at end of file
diff --git a/Apps/work/urls.py b/Apps/work/urls.py
new file mode 100644
index 0000000..33a66de
--- /dev/null
+++ b/Apps/work/urls.py
@@ -0,0 +1,12 @@
+from django.contrib import admin
+from django.urls import path
+from . import views
+from django.conf.urls.static import static
+from ITShowPlatform import settings
+
+
+urlpatterns = [
+ path('work/', views.work.as_view()),
+]
+
+urlpatterns += static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)
\ No newline at end of file
diff --git a/ITShowPlatform/settings.py b/ITShowPlatform/settings.py
index 4cbb943..e25e153 100644
--- a/ITShowPlatform/settings.py
+++ b/ITShowPlatform/settings.py
@@ -40,6 +40,7 @@ INSTALLED_APPS = [
'Apps.enroll',
'Apps.history',
'Apps.comments',
+ 'Apps.work',
]
@@ -80,9 +81,11 @@ WSGI_APPLICATION = 'ITShowPlatform.wsgi.application'
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.mysql',
- 'NAME': 'ITShowPlatform',
+ 'NAME': 'It_show',
+ 'HOST': '127.0.0.1',
+ 'PORT': '3306',
'USER': 'root',
- 'PASSWORD': 'HNXhnx123',
+ 'PASSWORD': 'Qq2442402635*',
}
}
diff --git a/ITShowPlatform/urls.py b/ITShowPlatform/urls.py
index 1388e13..5a6af80 100644
--- a/ITShowPlatform/urls.py
+++ b/ITShowPlatform/urls.py
@@ -23,6 +23,7 @@ urlpatterns = [
path('v1/api/', include('Apps.comments.urls')),
path('v1/api/', include('Apps.history.urls')),
path('v1/api/', include('Apps.enroll.urls')),
+ path('v1/api/', include('Apps.work.urls')),
path(r'^api-auth/', include('rest_framework.urls')),
re_path(r'^media/(?P.*)', serve, {"document_root": settings.MEDIA_ROOT}),
]
diff --git a/utils/get_error_msg.py b/utils/get_error_msg.py
index f9fe2c4..9bfab1c 100644
--- a/utils/get_error_msg.py
+++ b/utils/get_error_msg.py
@@ -5,5 +5,10 @@ def get_error_msg(code="20000"):
"50403": "Forbidden",
"40000": "请求方法错误",
"40001": "JSON解析错误",
+ "40002": "非法字符",
+ "40003": "弹幕过长",
+ "40004": "输入不能为空",
+ "40005": "返回评论数为0",
+ "40006": "",
}
return error_set.get(str(code))
From c8e35b0e1e7f8c0e7ff5deff1ac8619b00e5c327 Mon Sep 17 00:00:00 2001
From: shineahead <634831867@qq.com>
Date: Thu, 5 May 2022 22:23:25 +0800
Subject: [PATCH 4/9] work
---
.idea/dataSources.local.xml | 10 +
...at_2022_5_5_22_17__Default_Changelist_.xml | 4 +
.../shelved.patch | 201 ++++++++++++++++++
Apps/work/__init__.py | 0
Apps/work/admin.py | 6 +
Apps/work/apps.py | 6 +
Apps/work/migrations/0001_initial.py | 24 +++
Apps/work/migrations/0002_alter_works_img.py | 18 ++
Apps/work/migrations/__init__.py | 0
Apps/work/models.py | 10 +
Apps/work/serializers.py | 3 +-
Apps/work/tests.py | 3 +
Apps/work/urls.py | 3 +-
Apps/work/views.py | 35 +++
ITShowPlatform/.gitignore | 1 -
15 files changed, 321 insertions(+), 3 deletions(-)
create mode 100644 .idea/dataSources.local.xml
create mode 100644 .idea/shelf/Update_at_2022_5_5_22_17__Default_Changelist_.xml
create mode 100644 .idea/shelf/在Update之前未提交更改_at_2022_5_5_22_17_[Default_Changelist]/shelved.patch
create mode 100644 Apps/work/__init__.py
create mode 100644 Apps/work/admin.py
create mode 100644 Apps/work/apps.py
create mode 100644 Apps/work/migrations/0001_initial.py
create mode 100644 Apps/work/migrations/0002_alter_works_img.py
create mode 100644 Apps/work/migrations/__init__.py
create mode 100644 Apps/work/models.py
create mode 100644 Apps/work/tests.py
create mode 100644 Apps/work/views.py
diff --git a/.idea/dataSources.local.xml b/.idea/dataSources.local.xml
new file mode 100644
index 0000000..10cd63f
--- /dev/null
+++ b/.idea/dataSources.local.xml
@@ -0,0 +1,10 @@
+
+
+
+
+
+ forget
+
+
+
+
\ No newline at end of file
diff --git a/.idea/shelf/Update_at_2022_5_5_22_17__Default_Changelist_.xml b/.idea/shelf/Update_at_2022_5_5_22_17__Default_Changelist_.xml
new file mode 100644
index 0000000..c530e64
--- /dev/null
+++ b/.idea/shelf/Update_at_2022_5_5_22_17__Default_Changelist_.xml
@@ -0,0 +1,4 @@
+
+
+
+
\ No newline at end of file
diff --git a/.idea/shelf/在Update之前未提交更改_at_2022_5_5_22_17_[Default_Changelist]/shelved.patch b/.idea/shelf/在Update之前未提交更改_at_2022_5_5_22_17_[Default_Changelist]/shelved.patch
new file mode 100644
index 0000000..bce2098
--- /dev/null
+++ b/.idea/shelf/在Update之前未提交更改_at_2022_5_5_22_17_[Default_Changelist]/shelved.patch
@@ -0,0 +1,201 @@
+Index: Apps/work/serializers.py
+IDEA additional info:
+Subsystem: com.intellij.openapi.diff.impl.patch.BaseRevisionTextPatchEP
+<+>from rest_framework import serializers\r\nfrom .models import *\r\n\r\n\r\nclass HistoryInfoSerializer(serializers.ModelSerializer):\r\n class Meta:\r\n model = Works\r\n fields = '__all__'\r\n grade = serializers.CharField(label=\"年级\", required=True)\r\n name = serializers.CharField(label=\"事件名称\", max_length=30, required=True)\r\n description = serializers.CharField(label=\"事件描述\", max_length=200, required=True)\r\n img = serializers.ImageField(label=\"图片\", required=False)\r\n\r\n def validate_grade(self, value):\r\n if not (2010 < value <= 2021):\r\n raise serializers.ValidationError(\"不合法输入\")\r\n return value
+Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP
+<+>UTF-8
+===================================================================
+--- Apps/work/serializers.py (revision c5874e8f6a4093a11d6cc1c13caa09639ef0ceeb)
++++ Apps/work/serializers.py (date 1651759994408)
+@@ -2,7 +2,7 @@
+ from .models import *
+
+
+-class HistoryInfoSerializer(serializers.ModelSerializer):
++class WorksInfoSerializer(serializers.ModelSerializer):
+ class Meta:
+ model = Works
+ fields = '__all__'
+@@ -11,6 +11,7 @@
+ description = serializers.CharField(label="事件描述", max_length=200, required=True)
+ img = serializers.ImageField(label="图片", required=False)
+
++
+ def validate_grade(self, value):
+ if not (2010 < value <= 2021):
+ raise serializers.ValidationError("不合法输入")
+Index: Apps/work/urls.py
+IDEA additional info:
+Subsystem: com.intellij.openapi.diff.impl.patch.BaseRevisionTextPatchEP
+<+>from django.contrib import admin\r\nfrom django.urls import path\r\nfrom . import views\r\nfrom django.conf.urls.static import static\r\nfrom ITShowPlatform import settings\r\n\r\n\r\nurlpatterns = [\r\n path('work/', views.work.as_view()),\r\n]\r\n\r\nurlpatterns += static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)
+Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP
+<+>UTF-8
+===================================================================
+--- Apps/work/urls.py (revision c5874e8f6a4093a11d6cc1c13caa09639ef0ceeb)
++++ Apps/work/urls.py (date 1651759619601)
+@@ -9,4 +9,5 @@
+ path('work/', views.work.as_view()),
+ ]
+
+-urlpatterns += static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)
+\ No newline at end of file
++urlpatterns += static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)
++
+Index: .idea/workspace.xml
+IDEA additional info:
+Subsystem: com.intellij.openapi.diff.impl.patch.BaseRevisionTextPatchEP
+<+>\r\n\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n
\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n
\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n 1650187837343 \r\n \r\n \r\n 1650187837343 \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n 1650187914913 \r\n \r\n \r\n \r\n 1650187914913 \r\n \r\n \r\n 1650785005055 \r\n \r\n \r\n \r\n 1650785005055 \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n
\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n
+Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP
+<+>UTF-8
+===================================================================
+--- .idea/workspace.xml (revision c5874e8f6a4093a11d6cc1c13caa09639ef0ceeb)
++++ .idea/workspace.xml (date 1651760172607)
+@@ -21,20 +21,15 @@
+
+
+
+-
++
+
+
+
+
+-
+-
+-
++
+
+-
+-
+-
+-
+-
++
++
+
+
+
+@@ -52,6 +47,11 @@
+
+
+
++
++
++
++
++
+
+
+
+@@ -152,7 +152,7 @@
+
+
+
+-
++
+
+
+ 1650187914913
+@@ -168,7 +168,14 @@
+
+ 1650785005055
+
+-
++
++ 1651759231786
++
++
++
++ 1651759231786
++
++
+
+
+
+@@ -185,7 +192,7 @@
+
+
+
+-
++
+
+
+
+@@ -202,7 +209,8 @@
+
+
+
+-
++
++
+
+
+
+@@ -234,26 +242,26 @@
+
+
+
+-
++
+
+
+
+-
+-
++
++
+
+
+
+-
+-
++
++
+
+
+
+-
+-
++
++
+
+
+
+-
++
+
+
+
+@@ -283,11 +291,11 @@
+
+
+
+-
++
+
+
+
+-
++
+
+
+
+@@ -304,9 +312,17 @@
+
+
+
++
++
++
++
+
+
+
+
++
++
++
++
+
+
+\ No newline at end of file
diff --git a/Apps/work/__init__.py b/Apps/work/__init__.py
new file mode 100644
index 0000000..e69de29
diff --git a/Apps/work/admin.py b/Apps/work/admin.py
new file mode 100644
index 0000000..970b928
--- /dev/null
+++ b/Apps/work/admin.py
@@ -0,0 +1,6 @@
+from django.contrib import admin
+from .models import Works
+# Register your models here.
+
+admin.site.register(Works)
+
diff --git a/Apps/work/apps.py b/Apps/work/apps.py
new file mode 100644
index 0000000..1c07965
--- /dev/null
+++ b/Apps/work/apps.py
@@ -0,0 +1,6 @@
+from django.apps import AppConfig
+
+
+class WorksConfig(AppConfig):
+ default_auto_field = 'django.db.models.BigAutoField'
+ name = 'Apps.work'
diff --git a/Apps/work/migrations/0001_initial.py b/Apps/work/migrations/0001_initial.py
new file mode 100644
index 0000000..ce045ea
--- /dev/null
+++ b/Apps/work/migrations/0001_initial.py
@@ -0,0 +1,24 @@
+# Generated by Django 3.2.5 on 2022-05-05 21:56
+
+from django.db import migrations, models
+
+
+class Migration(migrations.Migration):
+
+ initial = True
+
+ dependencies = [
+ ]
+
+ operations = [
+ migrations.CreateModel(
+ name='Works',
+ fields=[
+ ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
+ ('grade', models.IntegerField(verbose_name='年份')),
+ ('name', models.CharField(max_length=30, verbose_name='事件名称')),
+ ('description', models.CharField(max_length=200, verbose_name='事件描述')),
+ ('img', models.ImageField(upload_to='image', verbose_name='图片')),
+ ],
+ ),
+ ]
diff --git a/Apps/work/migrations/0002_alter_works_img.py b/Apps/work/migrations/0002_alter_works_img.py
new file mode 100644
index 0000000..d10f54b
--- /dev/null
+++ b/Apps/work/migrations/0002_alter_works_img.py
@@ -0,0 +1,18 @@
+# Generated by Django 3.2.5 on 2022-05-05 21:57
+
+from django.db import migrations, models
+
+
+class Migration(migrations.Migration):
+
+ dependencies = [
+ ('work', '0001_initial'),
+ ]
+
+ operations = [
+ migrations.AlterField(
+ model_name='works',
+ name='img',
+ field=models.ImageField(blank=True, null=True, upload_to='image', verbose_name='图片'),
+ ),
+ ]
diff --git a/Apps/work/migrations/__init__.py b/Apps/work/migrations/__init__.py
new file mode 100644
index 0000000..e69de29
diff --git a/Apps/work/models.py b/Apps/work/models.py
new file mode 100644
index 0000000..2b5de0a
--- /dev/null
+++ b/Apps/work/models.py
@@ -0,0 +1,10 @@
+from django.db import models
+
+# Create your models here.
+
+
+class Works(models.Model):
+ grade = models.IntegerField(verbose_name="年份")
+ name = models.CharField(verbose_name="事件名称", max_length=30)
+ description = models.CharField(verbose_name="事件描述", max_length=200)
+ img = models.ImageField(verbose_name="图片", upload_to="image", null=True, blank=True)
diff --git a/Apps/work/serializers.py b/Apps/work/serializers.py
index 90a4fe3..b576c73 100644
--- a/Apps/work/serializers.py
+++ b/Apps/work/serializers.py
@@ -2,7 +2,7 @@ from rest_framework import serializers
from .models import *
-class HistoryInfoSerializer(serializers.ModelSerializer):
+class WorksInfoSerializer(serializers.ModelSerializer):
class Meta:
model = Works
fields = '__all__'
@@ -11,6 +11,7 @@ class HistoryInfoSerializer(serializers.ModelSerializer):
description = serializers.CharField(label="事件描述", max_length=200, required=True)
img = serializers.ImageField(label="图片", required=False)
+
def validate_grade(self, value):
if not (2010 < value <= 2021):
raise serializers.ValidationError("不合法输入")
diff --git a/Apps/work/tests.py b/Apps/work/tests.py
new file mode 100644
index 0000000..7ce503c
--- /dev/null
+++ b/Apps/work/tests.py
@@ -0,0 +1,3 @@
+from django.test import TestCase
+
+# Create your tests here.
diff --git a/Apps/work/urls.py b/Apps/work/urls.py
index 33a66de..e0fdac6 100644
--- a/Apps/work/urls.py
+++ b/Apps/work/urls.py
@@ -9,4 +9,5 @@ urlpatterns = [
path('work/', views.work.as_view()),
]
-urlpatterns += static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)
\ No newline at end of file
+urlpatterns += static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)
+
diff --git a/Apps/work/views.py b/Apps/work/views.py
new file mode 100644
index 0000000..de680cd
--- /dev/null
+++ b/Apps/work/views.py
@@ -0,0 +1,35 @@
+import time
+from django.conf import settings
+import re
+from django.shortcuts import render
+from rest_framework.views import APIView
+from rest_framework.response import Response
+from .models import Works
+from .serializers import WorksInfoSerializer
+# Create your views here.
+
+
+class work(APIView):
+
+ def get(self, request):
+ key = []
+ data = {"data": key}
+ for i in range(2012, 2022):
+ temp = {}
+ try:
+ works_set = Works.objects.filter(grade=i)
+ if works_set:
+ serializer = WorksInfoSerializer(works_set, many=True)
+ temp['grade'] = i
+ temp['data'] = serializer.data
+ data['data'].append(temp)
+ except Exception:
+ pass
+ if len(data['data']) == 0:
+ data['code'] = 40000
+ data['msg'] = "error"
+ else:
+ data['code'] = 20000
+ data['msg'] = 'success'
+ return Response(data=data)
+
diff --git a/ITShowPlatform/.gitignore b/ITShowPlatform/.gitignore
index b9ad17b..2e9f9f4 100644
--- a/ITShowPlatform/.gitignore
+++ b/ITShowPlatform/.gitignore
@@ -1,3 +1,2 @@
config.ini
-settings.py
From e8e5904b90d28bef0bc4f3c935dacc7cbf280560 Mon Sep 17 00:00:00 2001
From: ladeng07 <40017222+ladeng07@users.noreply.github.com>
Date: Thu, 5 May 2022 22:47:03 +0800
Subject: [PATCH 5/9] gggg
---
.idea/ITShowPlatform.iml | 4 +--
.idea/misc.xml | 4 +--
.idea/workspace.xml | 65 ++++++++++++++++++++++++--------------
ITShowPlatform/settings.py | 11 ++++---
4 files changed, 51 insertions(+), 33 deletions(-)
diff --git a/.idea/ITShowPlatform.iml b/.idea/ITShowPlatform.iml
index 90cd6d8..ef0e183 100644
--- a/.idea/ITShowPlatform.iml
+++ b/.idea/ITShowPlatform.iml
@@ -16,10 +16,10 @@
-
+
-
\ No newline at end of file
+
diff --git a/.idea/misc.xml b/.idea/misc.xml
index 6649a8c..a11f6b5 100644
--- a/.idea/misc.xml
+++ b/.idea/misc.xml
@@ -3,5 +3,5 @@
-
-
\ No newline at end of file
+
+
diff --git a/.idea/workspace.xml b/.idea/workspace.xml
index fe3c390..2ae2d14 100644
--- a/.idea/workspace.xml
+++ b/.idea/workspace.xml
@@ -26,13 +26,17 @@
-
+
-
-
+
+
+
+
+
+
@@ -92,9 +96,9 @@
-
+
-
+
@@ -115,9 +119,9 @@
-
+
-
+
@@ -181,7 +185,8 @@
-
+
+
1650187914913
@@ -211,7 +216,14 @@
1651748255265
-
+
+ 1651756162372
+
+
+
+ 1651756162373
+
+
@@ -228,7 +240,7 @@
-
+
@@ -247,13 +259,14 @@
-
+
+
-
+
-
+
@@ -266,6 +279,10 @@
+
+
+
+
@@ -282,22 +299,22 @@
-
+
-
-
+
+
-
-
+
+
-
-
+
+
-
+
@@ -326,10 +343,10 @@
-
+
-
+
@@ -348,6 +365,6 @@
-
+
\ No newline at end of file
diff --git a/ITShowPlatform/settings.py b/ITShowPlatform/settings.py
index 48835e4..893c75a 100644
--- a/ITShowPlatform/settings.py
+++ b/ITShowPlatform/settings.py
@@ -17,11 +17,16 @@ import configparser
# Build paths inside the project like this: BASE_DIR / 'subdir'.
BASE_DIR = Path(__file__).resolve().parent.parent
+conf = configparser.RawConfigParser()
+
+conf.read(str(BASE_DIR)+r"\ITShowPlatform\config.ini",encoding="utf-8")
+
+
# Quick-start development settings - unsuitable for production
# See https://docs.djangoproject.com/en/4.0/howto/deployment/checklist/
# SECURITY WARNING: keep the secret key used in production secret!
-SECRET_KEY = 'django-insecure-0cn#v4ei2(^n+txyh4%3d5sllz6mknz#7t$!cq-d!ly*_rwvh2'
+SECRET_KEY = conf.get("Django","SECRET_KEY")
# SECURITY WARNING: don't run with debug turned on in production!
DEBUG = True
@@ -30,10 +35,6 @@ ALLOWED_HOSTS = ["*"]
# Application definition
-conf = configparser.ConfigParser()
-
-conf.read(str(BASE_DIR)+r"\ITShowPlatform\config.ini",encoding="utf-8")
-
INSTALLED_APPS = [
From bbd4691646537152dc6321948177a8b81399c0c1 Mon Sep 17 00:00:00 2001
From: shineahead <634831867@qq.com>
Date: Thu, 5 May 2022 22:57:41 +0800
Subject: [PATCH 6/9] work
---
Apps/comments/models.py | 2 ++
Apps/comments/serializers.py | 7 ++++---
Apps/enroll/admin.py | 4 +++-
Apps/work/models.py | 3 +++
ITShowPlatform/config.ini | 4 ++--
ITShowPlatform/settings.py | 2 ++
utils/get_error_msg.py | 1 +
7 files changed, 17 insertions(+), 6 deletions(-)
diff --git a/Apps/comments/models.py b/Apps/comments/models.py
index 5bfc434..c6c1df2 100644
--- a/Apps/comments/models.py
+++ b/Apps/comments/models.py
@@ -4,6 +4,8 @@ from django.db import models
class Comments(models.Model):
+ class Meta:
+ verbose_name_plural=u"弹幕内容"
post_time = models.DateTimeField(verbose_name="发布时间")
content = models.CharField(verbose_name="弹幕内容", max_length=50, blank=False)
diff --git a/Apps/comments/serializers.py b/Apps/comments/serializers.py
index d553ef5..268ab32 100644
--- a/Apps/comments/serializers.py
+++ b/Apps/comments/serializers.py
@@ -16,12 +16,13 @@ class CommentsInfo(serializers.ModelSerializer):
ban = ['!', '@', '#', '$', '%', '^', '&', '*', '(', ')', "_", "-"]
for i in ban:
if i in value:
- raise serializers.ValidationError(code='40001', detail=get_error_msg(40001))
+ raise serializers.ValidationError(code='40002', detail={'msg': get_error_msg(40002),
+ "code": '40002'})
if len(value) > 50:
- raise serializers.ValidationError(code='40002', detail=get_error_msg(40002))
- elif len(value) == 0:
raise serializers.ValidationError(code='40003', detail=get_error_msg(40003))
+ elif len(value) == 0:
+ raise serializers.ValidationError(code='40004', detail=get_error_msg(40004))
return value
diff --git a/Apps/enroll/admin.py b/Apps/enroll/admin.py
index 49b1b84..3668f21 100644
--- a/Apps/enroll/admin.py
+++ b/Apps/enroll/admin.py
@@ -28,6 +28,7 @@ class DepartmentAdmin(admin.ModelAdmin):
'''过滤选项'''
list_filter = ()
+
class New_memberAdmin(admin.ModelAdmin):
# 定制哪些字段需要展示
list_display = ('id', 'name', 'picture')
@@ -50,6 +51,7 @@ class New_memberAdmin(admin.ModelAdmin):
'''过滤选项'''
list_filter = ()
+
admin.site.register(Department ,DepartmentAdmin)
admin.site.register(New_member)
-admin.site.register(EmailVerifyRecord)
+
diff --git a/Apps/work/models.py b/Apps/work/models.py
index 2b5de0a..fa4053b 100644
--- a/Apps/work/models.py
+++ b/Apps/work/models.py
@@ -4,6 +4,9 @@ from django.db import models
class Works(models.Model):
+ class Meta:
+ verbose_name_plural=u"部门作品"
+
grade = models.IntegerField(verbose_name="年份")
name = models.CharField(verbose_name="事件名称", max_length=30)
description = models.CharField(verbose_name="事件描述", max_length=200)
diff --git a/ITShowPlatform/config.ini b/ITShowPlatform/config.ini
index 42c1892..ab2fcb7 100644
--- a/ITShowPlatform/config.ini
+++ b/ITShowPlatform/config.ini
@@ -15,8 +15,8 @@ EMAIL_FROM = 2302253692@qq.com # 邮箱来自
ENGINE = django.db.backends.mysql
-NAME = ITShowPlatform
+NAME = It_show
USER = root
-PASSWORD = HNXhnx123
+PASSWORD = Qq2442402635*
diff --git a/ITShowPlatform/settings.py b/ITShowPlatform/settings.py
index 48835e4..dbf70da 100644
--- a/ITShowPlatform/settings.py
+++ b/ITShowPlatform/settings.py
@@ -37,6 +37,7 @@ conf.read(str(BASE_DIR)+r"\ITShowPlatform\config.ini",encoding="utf-8")
INSTALLED_APPS = [
+ 'simpleui',
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
@@ -47,6 +48,7 @@ INSTALLED_APPS = [
'Apps.enroll',
'Apps.history',
'Apps.comments',
+ 'Apps.work',
]
diff --git a/utils/get_error_msg.py b/utils/get_error_msg.py
index 9bfab1c..4d5e2db 100644
--- a/utils/get_error_msg.py
+++ b/utils/get_error_msg.py
@@ -1,3 +1,4 @@
+
def get_error_msg(code="20000"):
error_set = {
"20000": "成功",
From dd4608007cb513cbae3ef84772f74356786304b8 Mon Sep 17 00:00:00 2001
From: ladeng07 <40017222+ladeng07@users.noreply.github.com>
Date: Thu, 5 May 2022 23:01:56 +0800
Subject: [PATCH 7/9] =?UTF-8?q?=E5=8F=88=E4=B8=80=E6=AC=A1=E5=90=88?=
=?UTF-8?q?=E5=B9=B6?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
utils/get_error_msg.py | 1 +
.../simpleui-4.0.2-py3.9.egg-info/PKG-INFO | 26 +
.../simpleui-4.0.2-py3.9.egg-info/SOURCES.txt | 604 +
.../dependency_links.txt | 1 +
.../installed-files.txt | 606 +
.../not-zip-safe | 1 +
.../requires.txt | 1 +
.../top_level.txt | 1 +
venv/Lib/site-packages/simpleui/__init__.py | 5 +
venv/Lib/site-packages/simpleui/apps.py | 21 +
venv/Lib/site-packages/simpleui/forms.py | 202 +
.../static/admin/css/autocomplete.css | 260 +
.../simpleui/static/admin/css/base.css | 981 +
.../simpleui/static/admin/css/changelists.css | 346 +
.../simpleui/static/admin/css/dashboard.css | 27 +
.../simpleui/static/admin/css/fonts.css | 20 +
.../simpleui/static/admin/css/forms.css | 515 +
.../simpleui/static/admin/css/login.css | 78 +
.../simpleui/static/admin/css/responsive.css | 964 +
.../static/admin/css/responsive_rtl.css | 80 +
.../simpleui/static/admin/css/rtl.css | 264 +
.../simpleui/static/admin/css/ui.css | 17 +
.../css/vendor/select2/LICENSE-SELECT2.md | 21 +
.../admin/css/vendor/select2/select2.css | 634 +
.../admin/css/vendor/select2/select2.min.css | 1 +
.../simpleui/static/admin/css/widgets.css | 565 +
.../simpleui/static/admin/fonts/LICENSE.txt | 202 +
.../simpleui/static/admin/fonts/README.txt | 2 +
.../admin/fonts/Roboto-Bold-webfont.woff | Bin 0 -> 82564 bytes
.../admin/fonts/Roboto-Light-webfont.woff | Bin 0 -> 81348 bytes
.../admin/fonts/Roboto-Regular-webfont.woff | Bin 0 -> 80304 bytes
.../simpleui/static/admin/img/LICENSE | 20 +
.../simpleui/static/admin/img/README.txt | 7 +
.../static/admin/img/calendar-icons.svg | 14 +
.../static/admin/img/gis/move_vertex_off.svg | 13 +
.../static/admin/img/gis/move_vertex_on.svg | 13 +
.../static/admin/img/icon-addlink.svg | 4 +
.../simpleui/static/admin/img/icon-alert.svg | 4 +
.../static/admin/img/icon-calendar.svg | 9 +
.../static/admin/img/icon-changelink.svg | 4 +
.../simpleui/static/admin/img/icon-clock.svg | 9 +
.../static/admin/img/icon-deletelink.svg | 4 +
.../simpleui/static/admin/img/icon-no.svg | 4 +
.../static/admin/img/icon-unknown-alt.svg | 4 +
.../static/admin/img/icon-unknown.svg | 4 +
.../simpleui/static/admin/img/icon-yes.svg | 4 +
.../static/admin/img/inline-delete.svg | 4 +
.../simpleui/static/admin/img/search.svg | 4 +
.../static/admin/img/selector-icons.svg | 36 +
.../static/admin/img/sorting-icons.svg | 19 +
.../simpleui/static/admin/img/tooltag-add.svg | 4 +
.../static/admin/img/tooltag-arrowright.svg | 4 +
.../simpleui/static/admin/js/SelectBox.js | 143 +
.../simpleui/static/admin/js/SelectFilter2.js | 255 +
.../simpleui/static/admin/js/actions.js | 155 +
.../simpleui/static/admin/js/actions.min.js | 6 +
.../admin/js/admin/DateTimeShortcuts.js | 431 +
.../admin/js/admin/RelatedObjectLookups.js | 181 +
.../simpleui/static/admin/js/autocomplete.js | 37 +
.../simpleui/static/admin/js/calendar.js | 205 +
.../simpleui/static/admin/js/cancel.js | 9 +
.../simpleui/static/admin/js/change_form.js | 20 +
.../simpleui/static/admin/js/collapse.js | 26 +
.../simpleui/static/admin/js/collapse.min.js | 5 +
.../simpleui/static/admin/js/core.js | 209 +
.../simpleui/static/admin/js/inlines.js | 295 +
.../simpleui/static/admin/js/inlines.min.js | 13 +
.../simpleui/static/admin/js/jquery.init.js | 8 +
.../static/admin/js/popup_response.js | 16 +
.../simpleui/static/admin/js/prepopulate.js | 42 +
.../static/admin/js/prepopulate.min.js | 1 +
.../static/admin/js/prepopulate_init.js | 10 +
.../simpleui/static/admin/js/timeparse.js | 106 +
.../simpleui/static/admin/js/urlify.js | 190 +
.../admin/js/vendor/jquery/LICENSE-JQUERY.txt | 26 +
.../static/admin/js/vendor/jquery/jquery.js | 9822 ++++
.../admin/js/vendor/jquery/jquery.min.js | 4 +
.../js/vendor/select2/LICENSE-SELECT2.md | 21 +
.../static/admin/js/vendor/select2/i18n/ar.js | 3 +
.../static/admin/js/vendor/select2/i18n/az.js | 3 +
.../static/admin/js/vendor/select2/i18n/bg.js | 3 +
.../static/admin/js/vendor/select2/i18n/ca.js | 3 +
.../static/admin/js/vendor/select2/i18n/cs.js | 3 +
.../static/admin/js/vendor/select2/i18n/da.js | 3 +
.../static/admin/js/vendor/select2/i18n/de.js | 3 +
.../static/admin/js/vendor/select2/i18n/el.js | 3 +
.../static/admin/js/vendor/select2/i18n/en.js | 3 +
.../static/admin/js/vendor/select2/i18n/es.js | 3 +
.../static/admin/js/vendor/select2/i18n/et.js | 3 +
.../static/admin/js/vendor/select2/i18n/eu.js | 3 +
.../static/admin/js/vendor/select2/i18n/fa.js | 3 +
.../static/admin/js/vendor/select2/i18n/fi.js | 3 +
.../static/admin/js/vendor/select2/i18n/fr.js | 3 +
.../static/admin/js/vendor/select2/i18n/gl.js | 3 +
.../static/admin/js/vendor/select2/i18n/he.js | 3 +
.../static/admin/js/vendor/select2/i18n/hi.js | 3 +
.../static/admin/js/vendor/select2/i18n/hr.js | 3 +
.../static/admin/js/vendor/select2/i18n/hu.js | 3 +
.../static/admin/js/vendor/select2/i18n/id.js | 3 +
.../static/admin/js/vendor/select2/i18n/is.js | 3 +
.../static/admin/js/vendor/select2/i18n/it.js | 3 +
.../static/admin/js/vendor/select2/i18n/ja.js | 3 +
.../static/admin/js/vendor/select2/i18n/km.js | 3 +
.../static/admin/js/vendor/select2/i18n/ko.js | 3 +
.../static/admin/js/vendor/select2/i18n/lt.js | 3 +
.../static/admin/js/vendor/select2/i18n/lv.js | 3 +
.../static/admin/js/vendor/select2/i18n/mk.js | 3 +
.../static/admin/js/vendor/select2/i18n/ms.js | 3 +
.../static/admin/js/vendor/select2/i18n/nb.js | 3 +
.../static/admin/js/vendor/select2/i18n/nl.js | 3 +
.../static/admin/js/vendor/select2/i18n/pl.js | 3 +
.../admin/js/vendor/select2/i18n/pt-BR.js | 3 +
.../static/admin/js/vendor/select2/i18n/pt.js | 3 +
.../static/admin/js/vendor/select2/i18n/ro.js | 3 +
.../static/admin/js/vendor/select2/i18n/ru.js | 3 +
.../static/admin/js/vendor/select2/i18n/sk.js | 3 +
.../admin/js/vendor/select2/i18n/sr-Cyrl.js | 3 +
.../static/admin/js/vendor/select2/i18n/sr.js | 3 +
.../static/admin/js/vendor/select2/i18n/sv.js | 3 +
.../static/admin/js/vendor/select2/i18n/th.js | 3 +
.../static/admin/js/vendor/select2/i18n/tr.js | 3 +
.../static/admin/js/vendor/select2/i18n/uk.js | 3 +
.../static/admin/js/vendor/select2/i18n/vi.js | 3 +
.../admin/js/vendor/select2/i18n/zh-CN.js | 3 +
.../admin/js/vendor/select2/i18n/zh-TW.js | 3 +
.../admin/js/vendor/select2/select2.full.js | 6438 +++
.../js/vendor/select2/select2.full.min.js | 3 +
.../js/vendor/xregexp/LICENSE-XREGEXP.txt | 21 +
.../static/admin/js/vendor/xregexp/xregexp.js | 2307 +
.../admin/js/vendor/xregexp/xregexp.min.js | 18 +
.../admin/simpleui-x/automatic/dicts.js | 141 +
.../admin/simpleui-x/automatic/segment.js | 65 +
.../static/admin/simpleui-x/css/base.css | 212 +
.../static/admin/simpleui-x/css/base.css.map | 9 +
.../static/admin/simpleui-x/css/base.less | 212 +
.../static/admin/simpleui-x/css/index.css | 442 +
.../static/admin/simpleui-x/css/index.css.map | 9 +
.../static/admin/simpleui-x/css/index.less | 440 +
.../static/admin/simpleui-x/css/login.css | 38 +
.../admin/simpleui-x/elementui/alert.js | 481 +
.../admin/simpleui-x/elementui/aside.js | 338 +
.../simpleui-x/elementui/autocomplete.js | 1008 +
.../admin/simpleui-x/elementui/avatar.js | 426 +
.../admin/simpleui-x/elementui/backtop.js | 450 +
.../admin/simpleui-x/elementui/badge.js | 395 +
.../simpleui-x/elementui/breadcrumb-item.js | 383 +
.../admin/simpleui-x/elementui/breadcrumb.js | 354 +
.../simpleui-x/elementui/button-group.js | 323 +
.../admin/simpleui-x/elementui/button.js | 418 +
.../admin/simpleui-x/elementui/calendar.js | 967 +
.../static/admin/simpleui-x/elementui/card.js | 358 +
.../simpleui-x/elementui/carousel-item.js | 495 +
.../admin/simpleui-x/elementui/carousel.js | 757 +
.../simpleui-x/elementui/cascader-panel.js | 1651 +
.../admin/simpleui-x/elementui/cascader.js | 1481 +
.../simpleui-x/elementui/checkbox-button.js | 644 +
.../simpleui-x/elementui/checkbox-group.js | 374 +
.../admin/simpleui-x/elementui/checkbox.js | 690 +
.../static/admin/simpleui-x/elementui/col.js | 236 +
.../simpleui-x/elementui/collapse-item.js | 558 +
.../admin/simpleui-x/elementui/collapse.js | 390 +
.../simpleui-x/elementui/color-picker.js | 2025 +
.../admin/simpleui-x/elementui/container.js | 349 +
.../admin/simpleui-x/elementui/date-picker.js | 6300 +++
.../admin/simpleui-x/elementui/dialog.js | 659 +
.../elementui/directives/mousewheel.js | 28 +
.../elementui/directives/repeat-click.js | 30 +
.../admin/simpleui-x/elementui/divider.js | 205 +
.../admin/simpleui-x/elementui/drawer.js | 618 +
.../simpleui-x/elementui/dropdown-item.js | 377 +
.../simpleui-x/elementui/dropdown-menu.js | 412 +
.../admin/simpleui-x/elementui/dropdown.js | 688 +
.../simpleui-x/elementui/element-ui.common.js | 41278 ++++++++++++++++
.../admin/simpleui-x/elementui/footer.js | 338 +
.../admin/simpleui-x/elementui/form-item.js | 887 +
.../static/admin/simpleui-x/elementui/form.js | 528 +
.../admin/simpleui-x/elementui/header.js | 338 +
.../static/admin/simpleui-x/elementui/icon.js | 326 +
.../admin/simpleui-x/elementui/image.js | 1122 +
.../admin/simpleui-x/elementui/index.js | 1 +
.../simpleui-x/elementui/infinite-scroll.js | 354 +
.../simpleui-x/elementui/input-number.js | 806 +
.../admin/simpleui-x/elementui/input.js | 1024 +
.../static/admin/simpleui-x/elementui/link.js | 391 +
.../admin/simpleui-x/elementui/loading.js | 690 +
.../simpleui-x/elementui/locale/format.js | 60 +
.../simpleui-x/elementui/locale/index.js | 65 +
.../simpleui-x/elementui/locale/lang/af-ZA.js | 119 +
.../simpleui-x/elementui/locale/lang/ar.js | 118 +
.../simpleui-x/elementui/locale/lang/bg.js | 119 +
.../simpleui-x/elementui/locale/lang/ca.js | 118 +
.../simpleui-x/elementui/locale/lang/cs-CZ.js | 121 +
.../simpleui-x/elementui/locale/lang/da.js | 118 +
.../simpleui-x/elementui/locale/lang/de.js | 120 +
.../simpleui-x/elementui/locale/lang/ee.js | 119 +
.../simpleui-x/elementui/locale/lang/el.js | 119 +
.../simpleui-x/elementui/locale/lang/en.js | 119 +
.../simpleui-x/elementui/locale/lang/es.js | 118 +
.../simpleui-x/elementui/locale/lang/eu.js | 119 +
.../simpleui-x/elementui/locale/lang/fa.js | 119 +
.../simpleui-x/elementui/locale/lang/fi.js | 119 +
.../simpleui-x/elementui/locale/lang/fr.js | 118 +
.../simpleui-x/elementui/locale/lang/he.js | 119 +
.../simpleui-x/elementui/locale/lang/hr.js | 119 +
.../simpleui-x/elementui/locale/lang/hu.js | 118 +
.../simpleui-x/elementui/locale/lang/hy-AM.js | 119 +
.../simpleui-x/elementui/locale/lang/id.js | 119 +
.../simpleui-x/elementui/locale/lang/it.js | 118 +
.../simpleui-x/elementui/locale/lang/ja.js | 119 +
.../simpleui-x/elementui/locale/lang/kg.js | 119 +
.../simpleui-x/elementui/locale/lang/km.js | 119 +
.../simpleui-x/elementui/locale/lang/ko.js | 119 +
.../simpleui-x/elementui/locale/lang/ku.js | 119 +
.../simpleui-x/elementui/locale/lang/kz.js | 119 +
.../simpleui-x/elementui/locale/lang/lt.js | 119 +
.../simpleui-x/elementui/locale/lang/lv.js | 119 +
.../simpleui-x/elementui/locale/lang/mn.js | 119 +
.../simpleui-x/elementui/locale/lang/nb-NO.js | 118 +
.../simpleui-x/elementui/locale/lang/nl.js | 119 +
.../simpleui-x/elementui/locale/lang/pl.js | 119 +
.../simpleui-x/elementui/locale/lang/pt-br.js | 119 +
.../simpleui-x/elementui/locale/lang/pt.js | 119 +
.../simpleui-x/elementui/locale/lang/ro.js | 119 +
.../simpleui-x/elementui/locale/lang/ru-RU.js | 119 +
.../simpleui-x/elementui/locale/lang/sk.js | 121 +
.../simpleui-x/elementui/locale/lang/sl.js | 119 +
.../simpleui-x/elementui/locale/lang/sr.js | 119 +
.../simpleui-x/elementui/locale/lang/sv-SE.js | 119 +
.../simpleui-x/elementui/locale/lang/ta.js | 118 +
.../simpleui-x/elementui/locale/lang/th.js | 119 +
.../simpleui-x/elementui/locale/lang/tk.js | 119 +
.../simpleui-x/elementui/locale/lang/tr-TR.js | 119 +
.../simpleui-x/elementui/locale/lang/ua.js | 119 +
.../simpleui-x/elementui/locale/lang/ug-CN.js | 119 +
.../simpleui-x/elementui/locale/lang/uz-UZ.js | 119 +
.../simpleui-x/elementui/locale/lang/vi.js | 119 +
.../simpleui-x/elementui/locale/lang/zh-CN.js | 119 +
.../simpleui-x/elementui/locale/lang/zh-TW.js | 119 +
.../static/admin/simpleui-x/elementui/main.js | 325 +
.../simpleui-x/elementui/menu-item-group.js | 369 +
.../admin/simpleui-x/elementui/menu-item.js | 553 +
.../static/admin/simpleui-x/elementui/menu.js | 926 +
.../admin/simpleui-x/elementui/message-box.js | 1253 +
.../admin/simpleui-x/elementui/message.js | 595 +
.../simpleui-x/elementui/mixins/emitter.js | 38 +
.../simpleui-x/elementui/mixins/focus.js | 13 +
.../simpleui-x/elementui/mixins/locale.js | 17 +
.../simpleui-x/elementui/mixins/migrating.js | 69 +
.../simpleui-x/elementui/notification.js | 666 +
.../simpleui-x/elementui/option-group.js | 405 +
.../admin/simpleui-x/elementui/option.js | 534 +
.../admin/simpleui-x/elementui/page-header.js | 381 +
.../admin/simpleui-x/elementui/pagination.js | 1019 +
.../admin/simpleui-x/elementui/popover.js | 662 +
.../admin/simpleui-x/elementui/progress.js | 633 +
.../simpleui-x/elementui/radio-button.js | 522 +
.../admin/simpleui-x/elementui/radio-group.js | 445 +
.../admin/simpleui-x/elementui/radio.js | 556 +
.../static/admin/simpleui-x/elementui/rate.js | 737 +
.../static/admin/simpleui-x/elementui/row.js | 207 +
.../admin/simpleui-x/elementui/scrollbar.js | 484 +
.../admin/simpleui-x/elementui/select.js | 2244 +
.../admin/simpleui-x/elementui/slider.js | 1263 +
.../admin/simpleui-x/elementui/spinner.js | 362 +
.../static/admin/simpleui-x/elementui/step.js | 583 +
.../admin/simpleui-x/elementui/steps.js | 403 +
.../admin/simpleui-x/elementui/submenu.js | 767 +
.../admin/simpleui-x/elementui/switch.js | 613 +
.../admin/simpleui-x/elementui/tab-pane.js | 393 +
.../simpleui-x/elementui/table-column.js | 1048 +
.../admin/simpleui-x/elementui/table.js | 5042 ++
.../static/admin/simpleui-x/elementui/tabs.js | 990 +
.../static/admin/simpleui-x/elementui/tag.js | 367 +
.../elementui/theme-chalk/alert.css | 1 +
.../elementui/theme-chalk/aside.css | 7 +
.../elementui/theme-chalk/autocomplete.css | 1 +
.../elementui/theme-chalk/avatar.css | 1 +
.../elementui/theme-chalk/backtop.css | 1 +
.../elementui/theme-chalk/badge.css | 1 +
.../simpleui-x/elementui/theme-chalk/base.css | 1 +
.../elementui/theme-chalk/breadcrumb-item.css | 0
.../elementui/theme-chalk/breadcrumb.css | 1 +
.../elementui/theme-chalk/button-group.css | 0
.../elementui/theme-chalk/button.css | 1 +
.../elementui/theme-chalk/calendar.css | 1 +
.../simpleui-x/elementui/theme-chalk/card.css | 1 +
.../elementui/theme-chalk/carousel-item.css | 1 +
.../elementui/theme-chalk/carousel.css | 1 +
.../elementui/theme-chalk/cascader-panel.css | 1 +
.../elementui/theme-chalk/cascader.css | 1 +
.../elementui/theme-chalk/checkbox-button.css | 0
.../elementui/theme-chalk/checkbox-group.css | 0
.../elementui/theme-chalk/checkbox.css | 1 +
.../simpleui-x/elementui/theme-chalk/col.css | 1 +
.../elementui/theme-chalk/collapse-item.css | 0
.../elementui/theme-chalk/collapse.css | 1 +
.../elementui/theme-chalk/color-picker.css | 1 +
.../elementui/theme-chalk/container.css | 1 +
.../elementui/theme-chalk/date-picker.css | 1 +
.../elementui/theme-chalk/dialog.css | 1 +
.../elementui/theme-chalk/display.css | 1 +
.../elementui/theme-chalk/divider.css | 1 +
.../elementui/theme-chalk/drawer.css | 1 +
.../elementui/theme-chalk/dropdown-item.css | 0
.../elementui/theme-chalk/dropdown-menu.css | 0
.../elementui/theme-chalk/dropdown.css | 1 +
.../theme-chalk/fonts/element-icons.ttf | Bin 0 -> 55956 bytes
.../theme-chalk/fonts/element-icons.woff | Bin 0 -> 28200 bytes
.../elementui/theme-chalk/footer.css | 7 +
.../elementui/theme-chalk/form-item.css | 0
.../simpleui-x/elementui/theme-chalk/form.css | 1 +
.../elementui/theme-chalk/header.css | 7 +
.../simpleui-x/elementui/theme-chalk/icon.css | 1 +
.../elementui/theme-chalk/image.css | 1 +
.../elementui/theme-chalk/index.css | 1 +
.../elementui/theme-chalk/infinite-scroll.css | 0
.../elementui/theme-chalk/infiniteScroll.css | 0
.../elementui/theme-chalk/input-number.css | 1 +
.../elementui/theme-chalk/input.css | 1 +
.../simpleui-x/elementui/theme-chalk/link.css | 1 +
.../elementui/theme-chalk/loading.css | 1 +
.../simpleui-x/elementui/theme-chalk/main.css | 1 +
.../elementui/theme-chalk/menu-item-group.css | 0
.../elementui/theme-chalk/menu-item.css | 0
.../simpleui-x/elementui/theme-chalk/menu.css | 1 +
.../elementui/theme-chalk/message-box.css | 1 +
.../elementui/theme-chalk/message.css | 1 +
.../elementui/theme-chalk/notification.css | 1 +
.../elementui/theme-chalk/option-group.css | 1 +
.../elementui/theme-chalk/option.css | 1 +
.../elementui/theme-chalk/page-header.css | 1 +
.../elementui/theme-chalk/pagination.css | 1 +
.../elementui/theme-chalk/popover.css | 1 +
.../elementui/theme-chalk/popper.css | 1 +
.../elementui/theme-chalk/progress.css | 1 +
.../elementui/theme-chalk/radio-button.css | 1 +
.../elementui/theme-chalk/radio-group.css | 6 +
.../elementui/theme-chalk/radio.css | 1 +
.../simpleui-x/elementui/theme-chalk/rate.css | 1 +
.../elementui/theme-chalk/reset.css | 1 +
.../simpleui-x/elementui/theme-chalk/row.css | 1 +
.../elementui/theme-chalk/scrollbar.css | 1 +
.../elementui/theme-chalk/select-dropdown.css | 1 +
.../elementui/theme-chalk/select.css | 1 +
.../elementui/theme-chalk/slider.css | 1 +
.../elementui/theme-chalk/spinner.css | 1 +
.../simpleui-x/elementui/theme-chalk/step.css | 1 +
.../elementui/theme-chalk/steps.css | 1 +
.../elementui/theme-chalk/submenu.css | 0
.../elementui/theme-chalk/switch.css | 1 +
.../elementui/theme-chalk/tab-pane.css | 0
.../elementui/theme-chalk/table-column.css | 1 +
.../elementui/theme-chalk/table.css | 1 +
.../simpleui-x/elementui/theme-chalk/tabs.css | 1 +
.../simpleui-x/elementui/theme-chalk/tag.css | 1 +
.../elementui/theme-chalk/time-picker.css | 1 +
.../elementui/theme-chalk/time-select.css | 1 +
.../elementui/theme-chalk/timeline-item.css | 1 +
.../elementui/theme-chalk/timeline.css | 9 +
.../elementui/theme-chalk/tooltip.css | 1 +
.../elementui/theme-chalk/transfer.css | 1 +
.../simpleui-x/elementui/theme-chalk/tree.css | 1 +
.../elementui/theme-chalk/upload.css | 1 +
.../admin/simpleui-x/elementui/time-picker.js | 2994 ++
.../admin/simpleui-x/elementui/time-select.js | 1798 +
.../simpleui-x/elementui/timeline-item.js | 432 +
.../admin/simpleui-x/elementui/timeline.js | 337 +
.../admin/simpleui-x/elementui/tooltip.js | 483 +
.../admin/simpleui-x/elementui/transfer.js | 1165 +
.../transitions/collapse-transition.js | 95 +
.../static/admin/simpleui-x/elementui/tree.js | 2357 +
.../simpleui-x/elementui/umd/locale/af-ZA.js | 135 +
.../simpleui-x/elementui/umd/locale/ar.js | 134 +
.../simpleui-x/elementui/umd/locale/bg.js | 135 +
.../simpleui-x/elementui/umd/locale/ca.js | 134 +
.../simpleui-x/elementui/umd/locale/cs-CZ.js | 137 +
.../simpleui-x/elementui/umd/locale/da.js | 134 +
.../simpleui-x/elementui/umd/locale/de.js | 136 +
.../simpleui-x/elementui/umd/locale/ee.js | 135 +
.../simpleui-x/elementui/umd/locale/el.js | 135 +
.../simpleui-x/elementui/umd/locale/en.js | 135 +
.../simpleui-x/elementui/umd/locale/es.js | 134 +
.../simpleui-x/elementui/umd/locale/eu.js | 135 +
.../simpleui-x/elementui/umd/locale/fa.js | 135 +
.../simpleui-x/elementui/umd/locale/fi.js | 135 +
.../simpleui-x/elementui/umd/locale/fr.js | 134 +
.../simpleui-x/elementui/umd/locale/he.js | 135 +
.../simpleui-x/elementui/umd/locale/hr.js | 135 +
.../simpleui-x/elementui/umd/locale/hu.js | 134 +
.../simpleui-x/elementui/umd/locale/hy-AM.js | 135 +
.../simpleui-x/elementui/umd/locale/id.js | 135 +
.../simpleui-x/elementui/umd/locale/it.js | 134 +
.../simpleui-x/elementui/umd/locale/ja.js | 135 +
.../simpleui-x/elementui/umd/locale/kg.js | 135 +
.../simpleui-x/elementui/umd/locale/km.js | 135 +
.../simpleui-x/elementui/umd/locale/ko.js | 135 +
.../simpleui-x/elementui/umd/locale/ku.js | 135 +
.../simpleui-x/elementui/umd/locale/kz.js | 135 +
.../simpleui-x/elementui/umd/locale/lt.js | 135 +
.../simpleui-x/elementui/umd/locale/lv.js | 135 +
.../simpleui-x/elementui/umd/locale/mn.js | 135 +
.../simpleui-x/elementui/umd/locale/nb-NO.js | 134 +
.../simpleui-x/elementui/umd/locale/nl.js | 135 +
.../simpleui-x/elementui/umd/locale/pl.js | 135 +
.../simpleui-x/elementui/umd/locale/pt-br.js | 135 +
.../simpleui-x/elementui/umd/locale/pt.js | 135 +
.../simpleui-x/elementui/umd/locale/ro.js | 135 +
.../simpleui-x/elementui/umd/locale/ru-RU.js | 135 +
.../simpleui-x/elementui/umd/locale/sk.js | 137 +
.../simpleui-x/elementui/umd/locale/sl.js | 135 +
.../simpleui-x/elementui/umd/locale/sr.js | 135 +
.../simpleui-x/elementui/umd/locale/sv-SE.js | 135 +
.../simpleui-x/elementui/umd/locale/ta.js | 134 +
.../simpleui-x/elementui/umd/locale/th.js | 135 +
.../simpleui-x/elementui/umd/locale/tk.js | 135 +
.../simpleui-x/elementui/umd/locale/tr-TR.js | 135 +
.../simpleui-x/elementui/umd/locale/ua.js | 135 +
.../simpleui-x/elementui/umd/locale/ug-CN.js | 135 +
.../simpleui-x/elementui/umd/locale/uz-UZ.js | 135 +
.../simpleui-x/elementui/umd/locale/vi.js | 135 +
.../simpleui-x/elementui/umd/locale/zh-CN.js | 135 +
.../simpleui-x/elementui/umd/locale/zh-TW.js | 135 +
.../admin/simpleui-x/elementui/upload.js | 1466 +
.../simpleui-x/elementui/utils/after-leave.js | 35 +
.../simpleui-x/elementui/utils/aria-dialog.js | 110 +
.../simpleui-x/elementui/utils/aria-utils.js | 127 +
.../elementui/utils/clickoutside.js | 81 +
.../simpleui-x/elementui/utils/date-util.js | 322 +
.../admin/simpleui-x/elementui/utils/date.js | 370 +
.../admin/simpleui-x/elementui/utils/dom.js | 240 +
.../elementui/utils/menu/aria-menubar.js | 26 +
.../elementui/utils/menu/aria-menuitem.js | 64 +
.../elementui/utils/menu/aria-submenu.js | 71 +
.../admin/simpleui-x/elementui/utils/merge.js | 20 +
.../simpleui-x/elementui/utils/popper.js | 1268 +
.../simpleui-x/elementui/utils/popup/index.js | 235 +
.../elementui/utils/popup/popup-manager.js | 207 +
.../elementui/utils/resize-event.js | 59 +
.../elementui/utils/scroll-into-view.js | 40 +
.../elementui/utils/scrollbar-width.js | 40 +
.../simpleui-x/elementui/utils/shared.js | 14 +
.../admin/simpleui-x/elementui/utils/types.js | 31 +
.../admin/simpleui-x/elementui/utils/util.js | 273 +
.../admin/simpleui-x/elementui/utils/vdom.js | 17 +
.../simpleui-x/elementui/utils/vue-popper.js | 205 +
.../css/all.min.css | 5 +
.../webfonts/fa-brands-400.eot | Bin 0 -> 129916 bytes
.../webfonts/fa-brands-400.svg | 3460 ++
.../webfonts/fa-brands-400.ttf | Bin 0 -> 129612 bytes
.../webfonts/fa-brands-400.woff | Bin 0 -> 87688 bytes
.../webfonts/fa-brands-400.woff2 | Bin 0 -> 74768 bytes
.../webfonts/fa-regular-400.eot | Bin 0 -> 34388 bytes
.../webfonts/fa-regular-400.svg | 804 +
.../webfonts/fa-regular-400.ttf | Bin 0 -> 34092 bytes
.../webfonts/fa-regular-400.woff | Bin 0 -> 16804 bytes
.../webfonts/fa-regular-400.woff2 | Bin 0 -> 13552 bytes
.../webfonts/fa-solid-900.eot | Bin 0 -> 186728 bytes
.../webfonts/fa-solid-900.svg | 4528 ++
.../webfonts/fa-solid-900.ttf | Bin 0 -> 186444 bytes
.../webfonts/fa-solid-900.woff | Bin 0 -> 96256 bytes
.../webfonts/fa-solid-900.woff2 | Bin 0 -> 74256 bytes
.../static/admin/simpleui-x/img/bg.svg | 93 +
.../static/admin/simpleui-x/img/favicon.png | Bin 0 -> 115997 bytes
.../static/admin/simpleui-x/img/logo.png | Bin 0 -> 115997 bytes
.../static/admin/simpleui-x/js/cookie.js | 17 +
.../static/admin/simpleui-x/js/index.js | 587 +
.../static/admin/simpleui-x/js/language.js | 10 +
.../static/admin/simpleui-x/js/login.js | 25 +
.../static/admin/simpleui-x/js/vue.min.js | 6 +
.../static/admin/simpleui-x/locale/en-us.js | 42 +
.../static/admin/simpleui-x/locale/zh-hans.js | 44 +
.../static/admin/simpleui-x/particles/app.js | 132 +
.../admin/simpleui-x/particles/particles.js | 1524 +
.../admin/simpleui-x/theme/admin.lte.css | 226 +
.../admin/simpleui-x/theme/admin.lte.css.map | 10 +
.../admin/simpleui-x/theme/admin.lte.less | 36 +
.../admin/simpleui-x/theme/aircraft.css | 239 +
.../admin/simpleui-x/theme/aircraft.css.map | 10 +
.../admin/simpleui-x/theme/aircraft.less | 47 +
.../admin/simpleui-x/theme/ant.design.css | 228 +
.../admin/simpleui-x/theme/ant.design.css.map | 10 +
.../admin/simpleui-x/theme/ant.design.less | 43 +
.../static/admin/simpleui-x/theme/base.less | 181 +
.../static/admin/simpleui-x/theme/black.css | 221 +
.../admin/simpleui-x/theme/black.css.map | 10 +
.../static/admin/simpleui-x/theme/black.less | 31 +
.../admin/simpleui-x/theme/dark.green.css | 221 +
.../admin/simpleui-x/theme/dark.green.css.map | 10 +
.../admin/simpleui-x/theme/dark.green.less | 31 +
.../admin/simpleui-x/theme/e-black-pro.css | 227 +
.../simpleui-x/theme/e-black-pro.css.map | 10 +
.../admin/simpleui-x/theme/e-black-pro.less | 3 +
.../static/admin/simpleui-x/theme/e-black.css | 234 +
.../admin/simpleui-x/theme/e-black.css.map | 10 +
.../admin/simpleui-x/theme/e-black.less | 3 +
.../admin/simpleui-x/theme/e-blue-pro.css | 210 +
.../admin/simpleui-x/theme/e-blue-pro.css.map | 10 +
.../admin/simpleui-x/theme/e-blue-pro.less | 37 +
.../static/admin/simpleui-x/theme/e-blue.css | 217 +
.../admin/simpleui-x/theme/e-blue.css.map | 10 +
.../static/admin/simpleui-x/theme/e-blue.less | 43 +
.../admin/simpleui-x/theme/e-green-pro.css | 227 +
.../simpleui-x/theme/e-green-pro.css.map | 10 +
.../admin/simpleui-x/theme/e-green-pro.less | 3 +
.../static/admin/simpleui-x/theme/e-green.css | 234 +
.../admin/simpleui-x/theme/e-green.css.map | 10 +
.../admin/simpleui-x/theme/e-green.less | 3 +
.../admin/simpleui-x/theme/e-purple-pro.css | 227 +
.../simpleui-x/theme/e-purple-pro.css.map | 10 +
.../admin/simpleui-x/theme/e-purple-pro.less | 3 +
.../admin/simpleui-x/theme/e-purple.css | 234 +
.../admin/simpleui-x/theme/e-purple.css.map | 10 +
.../admin/simpleui-x/theme/e-purple.less | 3 +
.../admin/simpleui-x/theme/e-red-pro.css | 227 +
.../admin/simpleui-x/theme/e-red-pro.css.map | 10 +
.../admin/simpleui-x/theme/e-red-pro.less | 3 +
.../static/admin/simpleui-x/theme/e-red.css | 234 +
.../admin/simpleui-x/theme/e-red.css.map | 10 +
.../static/admin/simpleui-x/theme/e-red.less | 3 +
.../static/admin/simpleui-x/theme/element.css | 217 +
.../admin/simpleui-x/theme/element.css.map | 10 +
.../admin/simpleui-x/theme/element.less | 27 +
.../static/admin/simpleui-x/theme/gray.css | 221 +
.../admin/simpleui-x/theme/gray.css.map | 10 +
.../static/admin/simpleui-x/theme/gray.less | 28 +
.../static/admin/simpleui-x/theme/green.css | 221 +
.../admin/simpleui-x/theme/green.css.map | 10 +
.../static/admin/simpleui-x/theme/green.less | 30 +
.../admin/simpleui-x/theme/highdmin.css | 226 +
.../admin/simpleui-x/theme/highdmin.css.map | 10 +
.../admin/simpleui-x/theme/highdmin.less | 32 +
.../static/admin/simpleui-x/theme/layui.css | 222 +
.../admin/simpleui-x/theme/layui.css.map | 10 +
.../static/admin/simpleui-x/theme/layui.less | 32 +
.../static/admin/simpleui-x/theme/light.css | 212 +
.../admin/simpleui-x/theme/light.css.map | 9 +
.../static/admin/simpleui-x/theme/light.less | 20 +
.../static/admin/simpleui-x/theme/orange.css | 236 +
.../admin/simpleui-x/theme/orange.css.map | 10 +
.../static/admin/simpleui-x/theme/orange.less | 47 +
.../static/admin/simpleui-x/theme/purple.css | 235 +
.../admin/simpleui-x/theme/purple.css.map | 10 +
.../static/admin/simpleui-x/theme/purple.less | 47 +
.../admin/simpleui-x/theme/simpleui.css | 220 +
.../admin/simpleui-x/theme/simpleui.css.map | 10 +
.../admin/simpleui-x/theme/simpleui.less | 30 +
.../static/admin/simpleui-x/theme/theme.js | 178 +
.../static/admin/simpleui-x/theme/x-blue.css | 232 +
.../admin/simpleui-x/theme/x-blue.css.map | 11 +
.../static/admin/simpleui-x/theme/x-blue.less | 8 +
.../static/admin/simpleui-x/theme/x-green.css | 227 +
.../admin/simpleui-x/theme/x-green.css.map | 10 +
.../admin/simpleui-x/theme/x-green.less | 3 +
.../static/admin/simpleui-x/theme/x-red.css | 232 +
.../admin/simpleui-x/theme/x-red.css.map | 11 +
.../static/admin/simpleui-x/theme/x-red.less | 8 +
.../admin/simpleui-x/waves/waves.min.css | 7 +
.../admin/simpleui-x/waves/waves.min.js | 2 +
.../admin/simpleui-x/waves/waves.min.js.map | 168 +
.../static/import_export/action_formats.js | 0
.../simpleui/templates/admin/404.html | 12 +
.../simpleui/templates/admin/500.html | 18 +
.../simpleui/templates/admin/actions.html | 322 +
.../simpleui/templates/admin/app_index.html | 18 +
.../simpleui/templates/admin/base.html | 193 +
.../simpleui/templates/admin/base_site.html | 9 +
.../simpleui/templates/admin/change_form.html | 136 +
.../admin/change_form_object_tools.html | 8 +
.../simpleui/templates/admin/change_list.html | 116 +
.../admin/change_list_object_tools.html | 12 +
.../templates/admin/change_list_results.html | 50 +
.../templates/admin/date_hierarchy.html | 10 +
.../simpleui/templates/admin/filter.html | 8 +
.../simpleui/templates/admin/home.html | 119 +
.../templates/admin/includes/css-part.html | 8 +
.../templates/admin/includes/fieldset.html | 219 +
.../templates/admin/includes/js-part.html | 8 +
.../simpleui/templates/admin/index.html | 377 +
.../templates/admin/invalid_setup.html | 13 +
.../simpleui/templates/admin/login.html | 133 +
.../templates/admin/object_history.html | 50 +
.../simpleui/templates/admin/pagination.html | 34 +
.../templates/admin/popup_response.html | 12 +
.../admin/prepopulated_fields_js.html | 6 +
.../admin/related_widget_wrapper.html | 29 +
.../simpleui/templates/admin/search_form.html | 245 +
.../simpleui/templates/admin/submit_line.html | 53 +
.../templates/registration/logged_out.html | 21 +
.../registration/password_change_done.html | 23 +
.../registration/password_change_form.html | 98 +
.../registration/password_reset_complete.html | 20 +
.../registration/password_reset_confirm.html | 42 +
.../registration/password_reset_done.html | 19 +
.../registration/password_reset_email.html | 14 +
.../registration/password_reset_form.html | 29 +
.../simpleui/templatetags/__init__.py | 0
.../simpleui/templatetags/simpletags.py | 480 +
venv/Lib/site-packages/simpleui/widgets.py | 286 +
598 files changed, 178004 insertions(+)
create mode 100644 venv/Lib/site-packages/simpleui-4.0.2-py3.9.egg-info/PKG-INFO
create mode 100644 venv/Lib/site-packages/simpleui-4.0.2-py3.9.egg-info/SOURCES.txt
create mode 100644 venv/Lib/site-packages/simpleui-4.0.2-py3.9.egg-info/dependency_links.txt
create mode 100644 venv/Lib/site-packages/simpleui-4.0.2-py3.9.egg-info/installed-files.txt
create mode 100644 venv/Lib/site-packages/simpleui-4.0.2-py3.9.egg-info/not-zip-safe
create mode 100644 venv/Lib/site-packages/simpleui-4.0.2-py3.9.egg-info/requires.txt
create mode 100644 venv/Lib/site-packages/simpleui-4.0.2-py3.9.egg-info/top_level.txt
create mode 100644 venv/Lib/site-packages/simpleui/__init__.py
create mode 100644 venv/Lib/site-packages/simpleui/apps.py
create mode 100644 venv/Lib/site-packages/simpleui/forms.py
create mode 100644 venv/Lib/site-packages/simpleui/static/admin/css/autocomplete.css
create mode 100644 venv/Lib/site-packages/simpleui/static/admin/css/base.css
create mode 100644 venv/Lib/site-packages/simpleui/static/admin/css/changelists.css
create mode 100644 venv/Lib/site-packages/simpleui/static/admin/css/dashboard.css
create mode 100644 venv/Lib/site-packages/simpleui/static/admin/css/fonts.css
create mode 100644 venv/Lib/site-packages/simpleui/static/admin/css/forms.css
create mode 100644 venv/Lib/site-packages/simpleui/static/admin/css/login.css
create mode 100644 venv/Lib/site-packages/simpleui/static/admin/css/responsive.css
create mode 100644 venv/Lib/site-packages/simpleui/static/admin/css/responsive_rtl.css
create mode 100644 venv/Lib/site-packages/simpleui/static/admin/css/rtl.css
create mode 100644 venv/Lib/site-packages/simpleui/static/admin/css/ui.css
create mode 100644 venv/Lib/site-packages/simpleui/static/admin/css/vendor/select2/LICENSE-SELECT2.md
create mode 100644 venv/Lib/site-packages/simpleui/static/admin/css/vendor/select2/select2.css
create mode 100644 venv/Lib/site-packages/simpleui/static/admin/css/vendor/select2/select2.min.css
create mode 100644 venv/Lib/site-packages/simpleui/static/admin/css/widgets.css
create mode 100644 venv/Lib/site-packages/simpleui/static/admin/fonts/LICENSE.txt
create mode 100644 venv/Lib/site-packages/simpleui/static/admin/fonts/README.txt
create mode 100644 venv/Lib/site-packages/simpleui/static/admin/fonts/Roboto-Bold-webfont.woff
create mode 100644 venv/Lib/site-packages/simpleui/static/admin/fonts/Roboto-Light-webfont.woff
create mode 100644 venv/Lib/site-packages/simpleui/static/admin/fonts/Roboto-Regular-webfont.woff
create mode 100644 venv/Lib/site-packages/simpleui/static/admin/img/LICENSE
create mode 100644 venv/Lib/site-packages/simpleui/static/admin/img/README.txt
create mode 100644 venv/Lib/site-packages/simpleui/static/admin/img/calendar-icons.svg
create mode 100644 venv/Lib/site-packages/simpleui/static/admin/img/gis/move_vertex_off.svg
create mode 100644 venv/Lib/site-packages/simpleui/static/admin/img/gis/move_vertex_on.svg
create mode 100644 venv/Lib/site-packages/simpleui/static/admin/img/icon-addlink.svg
create mode 100644 venv/Lib/site-packages/simpleui/static/admin/img/icon-alert.svg
create mode 100644 venv/Lib/site-packages/simpleui/static/admin/img/icon-calendar.svg
create mode 100644 venv/Lib/site-packages/simpleui/static/admin/img/icon-changelink.svg
create mode 100644 venv/Lib/site-packages/simpleui/static/admin/img/icon-clock.svg
create mode 100644 venv/Lib/site-packages/simpleui/static/admin/img/icon-deletelink.svg
create mode 100644 venv/Lib/site-packages/simpleui/static/admin/img/icon-no.svg
create mode 100644 venv/Lib/site-packages/simpleui/static/admin/img/icon-unknown-alt.svg
create mode 100644 venv/Lib/site-packages/simpleui/static/admin/img/icon-unknown.svg
create mode 100644 venv/Lib/site-packages/simpleui/static/admin/img/icon-yes.svg
create mode 100644 venv/Lib/site-packages/simpleui/static/admin/img/inline-delete.svg
create mode 100644 venv/Lib/site-packages/simpleui/static/admin/img/search.svg
create mode 100644 venv/Lib/site-packages/simpleui/static/admin/img/selector-icons.svg
create mode 100644 venv/Lib/site-packages/simpleui/static/admin/img/sorting-icons.svg
create mode 100644 venv/Lib/site-packages/simpleui/static/admin/img/tooltag-add.svg
create mode 100644 venv/Lib/site-packages/simpleui/static/admin/img/tooltag-arrowright.svg
create mode 100644 venv/Lib/site-packages/simpleui/static/admin/js/SelectBox.js
create mode 100644 venv/Lib/site-packages/simpleui/static/admin/js/SelectFilter2.js
create mode 100644 venv/Lib/site-packages/simpleui/static/admin/js/actions.js
create mode 100644 venv/Lib/site-packages/simpleui/static/admin/js/actions.min.js
create mode 100644 venv/Lib/site-packages/simpleui/static/admin/js/admin/DateTimeShortcuts.js
create mode 100644 venv/Lib/site-packages/simpleui/static/admin/js/admin/RelatedObjectLookups.js
create mode 100644 venv/Lib/site-packages/simpleui/static/admin/js/autocomplete.js
create mode 100644 venv/Lib/site-packages/simpleui/static/admin/js/calendar.js
create mode 100644 venv/Lib/site-packages/simpleui/static/admin/js/cancel.js
create mode 100644 venv/Lib/site-packages/simpleui/static/admin/js/change_form.js
create mode 100644 venv/Lib/site-packages/simpleui/static/admin/js/collapse.js
create mode 100644 venv/Lib/site-packages/simpleui/static/admin/js/collapse.min.js
create mode 100644 venv/Lib/site-packages/simpleui/static/admin/js/core.js
create mode 100644 venv/Lib/site-packages/simpleui/static/admin/js/inlines.js
create mode 100644 venv/Lib/site-packages/simpleui/static/admin/js/inlines.min.js
create mode 100644 venv/Lib/site-packages/simpleui/static/admin/js/jquery.init.js
create mode 100644 venv/Lib/site-packages/simpleui/static/admin/js/popup_response.js
create mode 100644 venv/Lib/site-packages/simpleui/static/admin/js/prepopulate.js
create mode 100644 venv/Lib/site-packages/simpleui/static/admin/js/prepopulate.min.js
create mode 100644 venv/Lib/site-packages/simpleui/static/admin/js/prepopulate_init.js
create mode 100644 venv/Lib/site-packages/simpleui/static/admin/js/timeparse.js
create mode 100644 venv/Lib/site-packages/simpleui/static/admin/js/urlify.js
create mode 100644 venv/Lib/site-packages/simpleui/static/admin/js/vendor/jquery/LICENSE-JQUERY.txt
create mode 100644 venv/Lib/site-packages/simpleui/static/admin/js/vendor/jquery/jquery.js
create mode 100644 venv/Lib/site-packages/simpleui/static/admin/js/vendor/jquery/jquery.min.js
create mode 100644 venv/Lib/site-packages/simpleui/static/admin/js/vendor/select2/LICENSE-SELECT2.md
create mode 100644 venv/Lib/site-packages/simpleui/static/admin/js/vendor/select2/i18n/ar.js
create mode 100644 venv/Lib/site-packages/simpleui/static/admin/js/vendor/select2/i18n/az.js
create mode 100644 venv/Lib/site-packages/simpleui/static/admin/js/vendor/select2/i18n/bg.js
create mode 100644 venv/Lib/site-packages/simpleui/static/admin/js/vendor/select2/i18n/ca.js
create mode 100644 venv/Lib/site-packages/simpleui/static/admin/js/vendor/select2/i18n/cs.js
create mode 100644 venv/Lib/site-packages/simpleui/static/admin/js/vendor/select2/i18n/da.js
create mode 100644 venv/Lib/site-packages/simpleui/static/admin/js/vendor/select2/i18n/de.js
create mode 100644 venv/Lib/site-packages/simpleui/static/admin/js/vendor/select2/i18n/el.js
create mode 100644 venv/Lib/site-packages/simpleui/static/admin/js/vendor/select2/i18n/en.js
create mode 100644 venv/Lib/site-packages/simpleui/static/admin/js/vendor/select2/i18n/es.js
create mode 100644 venv/Lib/site-packages/simpleui/static/admin/js/vendor/select2/i18n/et.js
create mode 100644 venv/Lib/site-packages/simpleui/static/admin/js/vendor/select2/i18n/eu.js
create mode 100644 venv/Lib/site-packages/simpleui/static/admin/js/vendor/select2/i18n/fa.js
create mode 100644 venv/Lib/site-packages/simpleui/static/admin/js/vendor/select2/i18n/fi.js
create mode 100644 venv/Lib/site-packages/simpleui/static/admin/js/vendor/select2/i18n/fr.js
create mode 100644 venv/Lib/site-packages/simpleui/static/admin/js/vendor/select2/i18n/gl.js
create mode 100644 venv/Lib/site-packages/simpleui/static/admin/js/vendor/select2/i18n/he.js
create mode 100644 venv/Lib/site-packages/simpleui/static/admin/js/vendor/select2/i18n/hi.js
create mode 100644 venv/Lib/site-packages/simpleui/static/admin/js/vendor/select2/i18n/hr.js
create mode 100644 venv/Lib/site-packages/simpleui/static/admin/js/vendor/select2/i18n/hu.js
create mode 100644 venv/Lib/site-packages/simpleui/static/admin/js/vendor/select2/i18n/id.js
create mode 100644 venv/Lib/site-packages/simpleui/static/admin/js/vendor/select2/i18n/is.js
create mode 100644 venv/Lib/site-packages/simpleui/static/admin/js/vendor/select2/i18n/it.js
create mode 100644 venv/Lib/site-packages/simpleui/static/admin/js/vendor/select2/i18n/ja.js
create mode 100644 venv/Lib/site-packages/simpleui/static/admin/js/vendor/select2/i18n/km.js
create mode 100644 venv/Lib/site-packages/simpleui/static/admin/js/vendor/select2/i18n/ko.js
create mode 100644 venv/Lib/site-packages/simpleui/static/admin/js/vendor/select2/i18n/lt.js
create mode 100644 venv/Lib/site-packages/simpleui/static/admin/js/vendor/select2/i18n/lv.js
create mode 100644 venv/Lib/site-packages/simpleui/static/admin/js/vendor/select2/i18n/mk.js
create mode 100644 venv/Lib/site-packages/simpleui/static/admin/js/vendor/select2/i18n/ms.js
create mode 100644 venv/Lib/site-packages/simpleui/static/admin/js/vendor/select2/i18n/nb.js
create mode 100644 venv/Lib/site-packages/simpleui/static/admin/js/vendor/select2/i18n/nl.js
create mode 100644 venv/Lib/site-packages/simpleui/static/admin/js/vendor/select2/i18n/pl.js
create mode 100644 venv/Lib/site-packages/simpleui/static/admin/js/vendor/select2/i18n/pt-BR.js
create mode 100644 venv/Lib/site-packages/simpleui/static/admin/js/vendor/select2/i18n/pt.js
create mode 100644 venv/Lib/site-packages/simpleui/static/admin/js/vendor/select2/i18n/ro.js
create mode 100644 venv/Lib/site-packages/simpleui/static/admin/js/vendor/select2/i18n/ru.js
create mode 100644 venv/Lib/site-packages/simpleui/static/admin/js/vendor/select2/i18n/sk.js
create mode 100644 venv/Lib/site-packages/simpleui/static/admin/js/vendor/select2/i18n/sr-Cyrl.js
create mode 100644 venv/Lib/site-packages/simpleui/static/admin/js/vendor/select2/i18n/sr.js
create mode 100644 venv/Lib/site-packages/simpleui/static/admin/js/vendor/select2/i18n/sv.js
create mode 100644 venv/Lib/site-packages/simpleui/static/admin/js/vendor/select2/i18n/th.js
create mode 100644 venv/Lib/site-packages/simpleui/static/admin/js/vendor/select2/i18n/tr.js
create mode 100644 venv/Lib/site-packages/simpleui/static/admin/js/vendor/select2/i18n/uk.js
create mode 100644 venv/Lib/site-packages/simpleui/static/admin/js/vendor/select2/i18n/vi.js
create mode 100644 venv/Lib/site-packages/simpleui/static/admin/js/vendor/select2/i18n/zh-CN.js
create mode 100644 venv/Lib/site-packages/simpleui/static/admin/js/vendor/select2/i18n/zh-TW.js
create mode 100644 venv/Lib/site-packages/simpleui/static/admin/js/vendor/select2/select2.full.js
create mode 100644 venv/Lib/site-packages/simpleui/static/admin/js/vendor/select2/select2.full.min.js
create mode 100644 venv/Lib/site-packages/simpleui/static/admin/js/vendor/xregexp/LICENSE-XREGEXP.txt
create mode 100644 venv/Lib/site-packages/simpleui/static/admin/js/vendor/xregexp/xregexp.js
create mode 100644 venv/Lib/site-packages/simpleui/static/admin/js/vendor/xregexp/xregexp.min.js
create mode 100644 venv/Lib/site-packages/simpleui/static/admin/simpleui-x/automatic/dicts.js
create mode 100644 venv/Lib/site-packages/simpleui/static/admin/simpleui-x/automatic/segment.js
create mode 100644 venv/Lib/site-packages/simpleui/static/admin/simpleui-x/css/base.css
create mode 100644 venv/Lib/site-packages/simpleui/static/admin/simpleui-x/css/base.css.map
create mode 100644 venv/Lib/site-packages/simpleui/static/admin/simpleui-x/css/base.less
create mode 100644 venv/Lib/site-packages/simpleui/static/admin/simpleui-x/css/index.css
create mode 100644 venv/Lib/site-packages/simpleui/static/admin/simpleui-x/css/index.css.map
create mode 100644 venv/Lib/site-packages/simpleui/static/admin/simpleui-x/css/index.less
create mode 100644 venv/Lib/site-packages/simpleui/static/admin/simpleui-x/css/login.css
create mode 100644 venv/Lib/site-packages/simpleui/static/admin/simpleui-x/elementui/alert.js
create mode 100644 venv/Lib/site-packages/simpleui/static/admin/simpleui-x/elementui/aside.js
create mode 100644 venv/Lib/site-packages/simpleui/static/admin/simpleui-x/elementui/autocomplete.js
create mode 100644 venv/Lib/site-packages/simpleui/static/admin/simpleui-x/elementui/avatar.js
create mode 100644 venv/Lib/site-packages/simpleui/static/admin/simpleui-x/elementui/backtop.js
create mode 100644 venv/Lib/site-packages/simpleui/static/admin/simpleui-x/elementui/badge.js
create mode 100644 venv/Lib/site-packages/simpleui/static/admin/simpleui-x/elementui/breadcrumb-item.js
create mode 100644 venv/Lib/site-packages/simpleui/static/admin/simpleui-x/elementui/breadcrumb.js
create mode 100644 venv/Lib/site-packages/simpleui/static/admin/simpleui-x/elementui/button-group.js
create mode 100644 venv/Lib/site-packages/simpleui/static/admin/simpleui-x/elementui/button.js
create mode 100644 venv/Lib/site-packages/simpleui/static/admin/simpleui-x/elementui/calendar.js
create mode 100644 venv/Lib/site-packages/simpleui/static/admin/simpleui-x/elementui/card.js
create mode 100644 venv/Lib/site-packages/simpleui/static/admin/simpleui-x/elementui/carousel-item.js
create mode 100644 venv/Lib/site-packages/simpleui/static/admin/simpleui-x/elementui/carousel.js
create mode 100644 venv/Lib/site-packages/simpleui/static/admin/simpleui-x/elementui/cascader-panel.js
create mode 100644 venv/Lib/site-packages/simpleui/static/admin/simpleui-x/elementui/cascader.js
create mode 100644 venv/Lib/site-packages/simpleui/static/admin/simpleui-x/elementui/checkbox-button.js
create mode 100644 venv/Lib/site-packages/simpleui/static/admin/simpleui-x/elementui/checkbox-group.js
create mode 100644 venv/Lib/site-packages/simpleui/static/admin/simpleui-x/elementui/checkbox.js
create mode 100644 venv/Lib/site-packages/simpleui/static/admin/simpleui-x/elementui/col.js
create mode 100644 venv/Lib/site-packages/simpleui/static/admin/simpleui-x/elementui/collapse-item.js
create mode 100644 venv/Lib/site-packages/simpleui/static/admin/simpleui-x/elementui/collapse.js
create mode 100644 venv/Lib/site-packages/simpleui/static/admin/simpleui-x/elementui/color-picker.js
create mode 100644 venv/Lib/site-packages/simpleui/static/admin/simpleui-x/elementui/container.js
create mode 100644 venv/Lib/site-packages/simpleui/static/admin/simpleui-x/elementui/date-picker.js
create mode 100644 venv/Lib/site-packages/simpleui/static/admin/simpleui-x/elementui/dialog.js
create mode 100644 venv/Lib/site-packages/simpleui/static/admin/simpleui-x/elementui/directives/mousewheel.js
create mode 100644 venv/Lib/site-packages/simpleui/static/admin/simpleui-x/elementui/directives/repeat-click.js
create mode 100644 venv/Lib/site-packages/simpleui/static/admin/simpleui-x/elementui/divider.js
create mode 100644 venv/Lib/site-packages/simpleui/static/admin/simpleui-x/elementui/drawer.js
create mode 100644 venv/Lib/site-packages/simpleui/static/admin/simpleui-x/elementui/dropdown-item.js
create mode 100644 venv/Lib/site-packages/simpleui/static/admin/simpleui-x/elementui/dropdown-menu.js
create mode 100644 venv/Lib/site-packages/simpleui/static/admin/simpleui-x/elementui/dropdown.js
create mode 100644 venv/Lib/site-packages/simpleui/static/admin/simpleui-x/elementui/element-ui.common.js
create mode 100644 venv/Lib/site-packages/simpleui/static/admin/simpleui-x/elementui/footer.js
create mode 100644 venv/Lib/site-packages/simpleui/static/admin/simpleui-x/elementui/form-item.js
create mode 100644 venv/Lib/site-packages/simpleui/static/admin/simpleui-x/elementui/form.js
create mode 100644 venv/Lib/site-packages/simpleui/static/admin/simpleui-x/elementui/header.js
create mode 100644 venv/Lib/site-packages/simpleui/static/admin/simpleui-x/elementui/icon.js
create mode 100644 venv/Lib/site-packages/simpleui/static/admin/simpleui-x/elementui/image.js
create mode 100644 venv/Lib/site-packages/simpleui/static/admin/simpleui-x/elementui/index.js
create mode 100644 venv/Lib/site-packages/simpleui/static/admin/simpleui-x/elementui/infinite-scroll.js
create mode 100644 venv/Lib/site-packages/simpleui/static/admin/simpleui-x/elementui/input-number.js
create mode 100644 venv/Lib/site-packages/simpleui/static/admin/simpleui-x/elementui/input.js
create mode 100644 venv/Lib/site-packages/simpleui/static/admin/simpleui-x/elementui/link.js
create mode 100644 venv/Lib/site-packages/simpleui/static/admin/simpleui-x/elementui/loading.js
create mode 100644 venv/Lib/site-packages/simpleui/static/admin/simpleui-x/elementui/locale/format.js
create mode 100644 venv/Lib/site-packages/simpleui/static/admin/simpleui-x/elementui/locale/index.js
create mode 100644 venv/Lib/site-packages/simpleui/static/admin/simpleui-x/elementui/locale/lang/af-ZA.js
create mode 100644 venv/Lib/site-packages/simpleui/static/admin/simpleui-x/elementui/locale/lang/ar.js
create mode 100644 venv/Lib/site-packages/simpleui/static/admin/simpleui-x/elementui/locale/lang/bg.js
create mode 100644 venv/Lib/site-packages/simpleui/static/admin/simpleui-x/elementui/locale/lang/ca.js
create mode 100644 venv/Lib/site-packages/simpleui/static/admin/simpleui-x/elementui/locale/lang/cs-CZ.js
create mode 100644 venv/Lib/site-packages/simpleui/static/admin/simpleui-x/elementui/locale/lang/da.js
create mode 100644 venv/Lib/site-packages/simpleui/static/admin/simpleui-x/elementui/locale/lang/de.js
create mode 100644 venv/Lib/site-packages/simpleui/static/admin/simpleui-x/elementui/locale/lang/ee.js
create mode 100644 venv/Lib/site-packages/simpleui/static/admin/simpleui-x/elementui/locale/lang/el.js
create mode 100644 venv/Lib/site-packages/simpleui/static/admin/simpleui-x/elementui/locale/lang/en.js
create mode 100644 venv/Lib/site-packages/simpleui/static/admin/simpleui-x/elementui/locale/lang/es.js
create mode 100644 venv/Lib/site-packages/simpleui/static/admin/simpleui-x/elementui/locale/lang/eu.js
create mode 100644 venv/Lib/site-packages/simpleui/static/admin/simpleui-x/elementui/locale/lang/fa.js
create mode 100644 venv/Lib/site-packages/simpleui/static/admin/simpleui-x/elementui/locale/lang/fi.js
create mode 100644 venv/Lib/site-packages/simpleui/static/admin/simpleui-x/elementui/locale/lang/fr.js
create mode 100644 venv/Lib/site-packages/simpleui/static/admin/simpleui-x/elementui/locale/lang/he.js
create mode 100644 venv/Lib/site-packages/simpleui/static/admin/simpleui-x/elementui/locale/lang/hr.js
create mode 100644 venv/Lib/site-packages/simpleui/static/admin/simpleui-x/elementui/locale/lang/hu.js
create mode 100644 venv/Lib/site-packages/simpleui/static/admin/simpleui-x/elementui/locale/lang/hy-AM.js
create mode 100644 venv/Lib/site-packages/simpleui/static/admin/simpleui-x/elementui/locale/lang/id.js
create mode 100644 venv/Lib/site-packages/simpleui/static/admin/simpleui-x/elementui/locale/lang/it.js
create mode 100644 venv/Lib/site-packages/simpleui/static/admin/simpleui-x/elementui/locale/lang/ja.js
create mode 100644 venv/Lib/site-packages/simpleui/static/admin/simpleui-x/elementui/locale/lang/kg.js
create mode 100644 venv/Lib/site-packages/simpleui/static/admin/simpleui-x/elementui/locale/lang/km.js
create mode 100644 venv/Lib/site-packages/simpleui/static/admin/simpleui-x/elementui/locale/lang/ko.js
create mode 100644 venv/Lib/site-packages/simpleui/static/admin/simpleui-x/elementui/locale/lang/ku.js
create mode 100644 venv/Lib/site-packages/simpleui/static/admin/simpleui-x/elementui/locale/lang/kz.js
create mode 100644 venv/Lib/site-packages/simpleui/static/admin/simpleui-x/elementui/locale/lang/lt.js
create mode 100644 venv/Lib/site-packages/simpleui/static/admin/simpleui-x/elementui/locale/lang/lv.js
create mode 100644 venv/Lib/site-packages/simpleui/static/admin/simpleui-x/elementui/locale/lang/mn.js
create mode 100644 venv/Lib/site-packages/simpleui/static/admin/simpleui-x/elementui/locale/lang/nb-NO.js
create mode 100644 venv/Lib/site-packages/simpleui/static/admin/simpleui-x/elementui/locale/lang/nl.js
create mode 100644 venv/Lib/site-packages/simpleui/static/admin/simpleui-x/elementui/locale/lang/pl.js
create mode 100644 venv/Lib/site-packages/simpleui/static/admin/simpleui-x/elementui/locale/lang/pt-br.js
create mode 100644 venv/Lib/site-packages/simpleui/static/admin/simpleui-x/elementui/locale/lang/pt.js
create mode 100644 venv/Lib/site-packages/simpleui/static/admin/simpleui-x/elementui/locale/lang/ro.js
create mode 100644 venv/Lib/site-packages/simpleui/static/admin/simpleui-x/elementui/locale/lang/ru-RU.js
create mode 100644 venv/Lib/site-packages/simpleui/static/admin/simpleui-x/elementui/locale/lang/sk.js
create mode 100644 venv/Lib/site-packages/simpleui/static/admin/simpleui-x/elementui/locale/lang/sl.js
create mode 100644 venv/Lib/site-packages/simpleui/static/admin/simpleui-x/elementui/locale/lang/sr.js
create mode 100644 venv/Lib/site-packages/simpleui/static/admin/simpleui-x/elementui/locale/lang/sv-SE.js
create mode 100644 venv/Lib/site-packages/simpleui/static/admin/simpleui-x/elementui/locale/lang/ta.js
create mode 100644 venv/Lib/site-packages/simpleui/static/admin/simpleui-x/elementui/locale/lang/th.js
create mode 100644 venv/Lib/site-packages/simpleui/static/admin/simpleui-x/elementui/locale/lang/tk.js
create mode 100644 venv/Lib/site-packages/simpleui/static/admin/simpleui-x/elementui/locale/lang/tr-TR.js
create mode 100644 venv/Lib/site-packages/simpleui/static/admin/simpleui-x/elementui/locale/lang/ua.js
create mode 100644 venv/Lib/site-packages/simpleui/static/admin/simpleui-x/elementui/locale/lang/ug-CN.js
create mode 100644 venv/Lib/site-packages/simpleui/static/admin/simpleui-x/elementui/locale/lang/uz-UZ.js
create mode 100644 venv/Lib/site-packages/simpleui/static/admin/simpleui-x/elementui/locale/lang/vi.js
create mode 100644 venv/Lib/site-packages/simpleui/static/admin/simpleui-x/elementui/locale/lang/zh-CN.js
create mode 100644 venv/Lib/site-packages/simpleui/static/admin/simpleui-x/elementui/locale/lang/zh-TW.js
create mode 100644 venv/Lib/site-packages/simpleui/static/admin/simpleui-x/elementui/main.js
create mode 100644 venv/Lib/site-packages/simpleui/static/admin/simpleui-x/elementui/menu-item-group.js
create mode 100644 venv/Lib/site-packages/simpleui/static/admin/simpleui-x/elementui/menu-item.js
create mode 100644 venv/Lib/site-packages/simpleui/static/admin/simpleui-x/elementui/menu.js
create mode 100644 venv/Lib/site-packages/simpleui/static/admin/simpleui-x/elementui/message-box.js
create mode 100644 venv/Lib/site-packages/simpleui/static/admin/simpleui-x/elementui/message.js
create mode 100644 venv/Lib/site-packages/simpleui/static/admin/simpleui-x/elementui/mixins/emitter.js
create mode 100644 venv/Lib/site-packages/simpleui/static/admin/simpleui-x/elementui/mixins/focus.js
create mode 100644 venv/Lib/site-packages/simpleui/static/admin/simpleui-x/elementui/mixins/locale.js
create mode 100644 venv/Lib/site-packages/simpleui/static/admin/simpleui-x/elementui/mixins/migrating.js
create mode 100644 venv/Lib/site-packages/simpleui/static/admin/simpleui-x/elementui/notification.js
create mode 100644 venv/Lib/site-packages/simpleui/static/admin/simpleui-x/elementui/option-group.js
create mode 100644 venv/Lib/site-packages/simpleui/static/admin/simpleui-x/elementui/option.js
create mode 100644 venv/Lib/site-packages/simpleui/static/admin/simpleui-x/elementui/page-header.js
create mode 100644 venv/Lib/site-packages/simpleui/static/admin/simpleui-x/elementui/pagination.js
create mode 100644 venv/Lib/site-packages/simpleui/static/admin/simpleui-x/elementui/popover.js
create mode 100644 venv/Lib/site-packages/simpleui/static/admin/simpleui-x/elementui/progress.js
create mode 100644 venv/Lib/site-packages/simpleui/static/admin/simpleui-x/elementui/radio-button.js
create mode 100644 venv/Lib/site-packages/simpleui/static/admin/simpleui-x/elementui/radio-group.js
create mode 100644 venv/Lib/site-packages/simpleui/static/admin/simpleui-x/elementui/radio.js
create mode 100644 venv/Lib/site-packages/simpleui/static/admin/simpleui-x/elementui/rate.js
create mode 100644 venv/Lib/site-packages/simpleui/static/admin/simpleui-x/elementui/row.js
create mode 100644 venv/Lib/site-packages/simpleui/static/admin/simpleui-x/elementui/scrollbar.js
create mode 100644 venv/Lib/site-packages/simpleui/static/admin/simpleui-x/elementui/select.js
create mode 100644 venv/Lib/site-packages/simpleui/static/admin/simpleui-x/elementui/slider.js
create mode 100644 venv/Lib/site-packages/simpleui/static/admin/simpleui-x/elementui/spinner.js
create mode 100644 venv/Lib/site-packages/simpleui/static/admin/simpleui-x/elementui/step.js
create mode 100644 venv/Lib/site-packages/simpleui/static/admin/simpleui-x/elementui/steps.js
create mode 100644 venv/Lib/site-packages/simpleui/static/admin/simpleui-x/elementui/submenu.js
create mode 100644 venv/Lib/site-packages/simpleui/static/admin/simpleui-x/elementui/switch.js
create mode 100644 venv/Lib/site-packages/simpleui/static/admin/simpleui-x/elementui/tab-pane.js
create mode 100644 venv/Lib/site-packages/simpleui/static/admin/simpleui-x/elementui/table-column.js
create mode 100644 venv/Lib/site-packages/simpleui/static/admin/simpleui-x/elementui/table.js
create mode 100644 venv/Lib/site-packages/simpleui/static/admin/simpleui-x/elementui/tabs.js
create mode 100644 venv/Lib/site-packages/simpleui/static/admin/simpleui-x/elementui/tag.js
create mode 100644 venv/Lib/site-packages/simpleui/static/admin/simpleui-x/elementui/theme-chalk/alert.css
create mode 100644 venv/Lib/site-packages/simpleui/static/admin/simpleui-x/elementui/theme-chalk/aside.css
create mode 100644 venv/Lib/site-packages/simpleui/static/admin/simpleui-x/elementui/theme-chalk/autocomplete.css
create mode 100644 venv/Lib/site-packages/simpleui/static/admin/simpleui-x/elementui/theme-chalk/avatar.css
create mode 100644 venv/Lib/site-packages/simpleui/static/admin/simpleui-x/elementui/theme-chalk/backtop.css
create mode 100644 venv/Lib/site-packages/simpleui/static/admin/simpleui-x/elementui/theme-chalk/badge.css
create mode 100644 venv/Lib/site-packages/simpleui/static/admin/simpleui-x/elementui/theme-chalk/base.css
create mode 100644 venv/Lib/site-packages/simpleui/static/admin/simpleui-x/elementui/theme-chalk/breadcrumb-item.css
create mode 100644 venv/Lib/site-packages/simpleui/static/admin/simpleui-x/elementui/theme-chalk/breadcrumb.css
create mode 100644 venv/Lib/site-packages/simpleui/static/admin/simpleui-x/elementui/theme-chalk/button-group.css
create mode 100644 venv/Lib/site-packages/simpleui/static/admin/simpleui-x/elementui/theme-chalk/button.css
create mode 100644 venv/Lib/site-packages/simpleui/static/admin/simpleui-x/elementui/theme-chalk/calendar.css
create mode 100644 venv/Lib/site-packages/simpleui/static/admin/simpleui-x/elementui/theme-chalk/card.css
create mode 100644 venv/Lib/site-packages/simpleui/static/admin/simpleui-x/elementui/theme-chalk/carousel-item.css
create mode 100644 venv/Lib/site-packages/simpleui/static/admin/simpleui-x/elementui/theme-chalk/carousel.css
create mode 100644 venv/Lib/site-packages/simpleui/static/admin/simpleui-x/elementui/theme-chalk/cascader-panel.css
create mode 100644 venv/Lib/site-packages/simpleui/static/admin/simpleui-x/elementui/theme-chalk/cascader.css
create mode 100644 venv/Lib/site-packages/simpleui/static/admin/simpleui-x/elementui/theme-chalk/checkbox-button.css
create mode 100644 venv/Lib/site-packages/simpleui/static/admin/simpleui-x/elementui/theme-chalk/checkbox-group.css
create mode 100644 venv/Lib/site-packages/simpleui/static/admin/simpleui-x/elementui/theme-chalk/checkbox.css
create mode 100644 venv/Lib/site-packages/simpleui/static/admin/simpleui-x/elementui/theme-chalk/col.css
create mode 100644 venv/Lib/site-packages/simpleui/static/admin/simpleui-x/elementui/theme-chalk/collapse-item.css
create mode 100644 venv/Lib/site-packages/simpleui/static/admin/simpleui-x/elementui/theme-chalk/collapse.css
create mode 100644 venv/Lib/site-packages/simpleui/static/admin/simpleui-x/elementui/theme-chalk/color-picker.css
create mode 100644 venv/Lib/site-packages/simpleui/static/admin/simpleui-x/elementui/theme-chalk/container.css
create mode 100644 venv/Lib/site-packages/simpleui/static/admin/simpleui-x/elementui/theme-chalk/date-picker.css
create mode 100644 venv/Lib/site-packages/simpleui/static/admin/simpleui-x/elementui/theme-chalk/dialog.css
create mode 100644 venv/Lib/site-packages/simpleui/static/admin/simpleui-x/elementui/theme-chalk/display.css
create mode 100644 venv/Lib/site-packages/simpleui/static/admin/simpleui-x/elementui/theme-chalk/divider.css
create mode 100644 venv/Lib/site-packages/simpleui/static/admin/simpleui-x/elementui/theme-chalk/drawer.css
create mode 100644 venv/Lib/site-packages/simpleui/static/admin/simpleui-x/elementui/theme-chalk/dropdown-item.css
create mode 100644 venv/Lib/site-packages/simpleui/static/admin/simpleui-x/elementui/theme-chalk/dropdown-menu.css
create mode 100644 venv/Lib/site-packages/simpleui/static/admin/simpleui-x/elementui/theme-chalk/dropdown.css
create mode 100644 venv/Lib/site-packages/simpleui/static/admin/simpleui-x/elementui/theme-chalk/fonts/element-icons.ttf
create mode 100644 venv/Lib/site-packages/simpleui/static/admin/simpleui-x/elementui/theme-chalk/fonts/element-icons.woff
create mode 100644 venv/Lib/site-packages/simpleui/static/admin/simpleui-x/elementui/theme-chalk/footer.css
create mode 100644 venv/Lib/site-packages/simpleui/static/admin/simpleui-x/elementui/theme-chalk/form-item.css
create mode 100644 venv/Lib/site-packages/simpleui/static/admin/simpleui-x/elementui/theme-chalk/form.css
create mode 100644 venv/Lib/site-packages/simpleui/static/admin/simpleui-x/elementui/theme-chalk/header.css
create mode 100644 venv/Lib/site-packages/simpleui/static/admin/simpleui-x/elementui/theme-chalk/icon.css
create mode 100644 venv/Lib/site-packages/simpleui/static/admin/simpleui-x/elementui/theme-chalk/image.css
create mode 100644 venv/Lib/site-packages/simpleui/static/admin/simpleui-x/elementui/theme-chalk/index.css
create mode 100644 venv/Lib/site-packages/simpleui/static/admin/simpleui-x/elementui/theme-chalk/infinite-scroll.css
create mode 100644 venv/Lib/site-packages/simpleui/static/admin/simpleui-x/elementui/theme-chalk/infiniteScroll.css
create mode 100644 venv/Lib/site-packages/simpleui/static/admin/simpleui-x/elementui/theme-chalk/input-number.css
create mode 100644 venv/Lib/site-packages/simpleui/static/admin/simpleui-x/elementui/theme-chalk/input.css
create mode 100644 venv/Lib/site-packages/simpleui/static/admin/simpleui-x/elementui/theme-chalk/link.css
create mode 100644 venv/Lib/site-packages/simpleui/static/admin/simpleui-x/elementui/theme-chalk/loading.css
create mode 100644 venv/Lib/site-packages/simpleui/static/admin/simpleui-x/elementui/theme-chalk/main.css
create mode 100644 venv/Lib/site-packages/simpleui/static/admin/simpleui-x/elementui/theme-chalk/menu-item-group.css
create mode 100644 venv/Lib/site-packages/simpleui/static/admin/simpleui-x/elementui/theme-chalk/menu-item.css
create mode 100644 venv/Lib/site-packages/simpleui/static/admin/simpleui-x/elementui/theme-chalk/menu.css
create mode 100644 venv/Lib/site-packages/simpleui/static/admin/simpleui-x/elementui/theme-chalk/message-box.css
create mode 100644 venv/Lib/site-packages/simpleui/static/admin/simpleui-x/elementui/theme-chalk/message.css
create mode 100644 venv/Lib/site-packages/simpleui/static/admin/simpleui-x/elementui/theme-chalk/notification.css
create mode 100644 venv/Lib/site-packages/simpleui/static/admin/simpleui-x/elementui/theme-chalk/option-group.css
create mode 100644 venv/Lib/site-packages/simpleui/static/admin/simpleui-x/elementui/theme-chalk/option.css
create mode 100644 venv/Lib/site-packages/simpleui/static/admin/simpleui-x/elementui/theme-chalk/page-header.css
create mode 100644 venv/Lib/site-packages/simpleui/static/admin/simpleui-x/elementui/theme-chalk/pagination.css
create mode 100644 venv/Lib/site-packages/simpleui/static/admin/simpleui-x/elementui/theme-chalk/popover.css
create mode 100644 venv/Lib/site-packages/simpleui/static/admin/simpleui-x/elementui/theme-chalk/popper.css
create mode 100644 venv/Lib/site-packages/simpleui/static/admin/simpleui-x/elementui/theme-chalk/progress.css
create mode 100644 venv/Lib/site-packages/simpleui/static/admin/simpleui-x/elementui/theme-chalk/radio-button.css
create mode 100644 venv/Lib/site-packages/simpleui/static/admin/simpleui-x/elementui/theme-chalk/radio-group.css
create mode 100644 venv/Lib/site-packages/simpleui/static/admin/simpleui-x/elementui/theme-chalk/radio.css
create mode 100644 venv/Lib/site-packages/simpleui/static/admin/simpleui-x/elementui/theme-chalk/rate.css
create mode 100644 venv/Lib/site-packages/simpleui/static/admin/simpleui-x/elementui/theme-chalk/reset.css
create mode 100644 venv/Lib/site-packages/simpleui/static/admin/simpleui-x/elementui/theme-chalk/row.css
create mode 100644 venv/Lib/site-packages/simpleui/static/admin/simpleui-x/elementui/theme-chalk/scrollbar.css
create mode 100644 venv/Lib/site-packages/simpleui/static/admin/simpleui-x/elementui/theme-chalk/select-dropdown.css
create mode 100644 venv/Lib/site-packages/simpleui/static/admin/simpleui-x/elementui/theme-chalk/select.css
create mode 100644 venv/Lib/site-packages/simpleui/static/admin/simpleui-x/elementui/theme-chalk/slider.css
create mode 100644 venv/Lib/site-packages/simpleui/static/admin/simpleui-x/elementui/theme-chalk/spinner.css
create mode 100644 venv/Lib/site-packages/simpleui/static/admin/simpleui-x/elementui/theme-chalk/step.css
create mode 100644 venv/Lib/site-packages/simpleui/static/admin/simpleui-x/elementui/theme-chalk/steps.css
create mode 100644 venv/Lib/site-packages/simpleui/static/admin/simpleui-x/elementui/theme-chalk/submenu.css
create mode 100644 venv/Lib/site-packages/simpleui/static/admin/simpleui-x/elementui/theme-chalk/switch.css
create mode 100644 venv/Lib/site-packages/simpleui/static/admin/simpleui-x/elementui/theme-chalk/tab-pane.css
create mode 100644 venv/Lib/site-packages/simpleui/static/admin/simpleui-x/elementui/theme-chalk/table-column.css
create mode 100644 venv/Lib/site-packages/simpleui/static/admin/simpleui-x/elementui/theme-chalk/table.css
create mode 100644 venv/Lib/site-packages/simpleui/static/admin/simpleui-x/elementui/theme-chalk/tabs.css
create mode 100644 venv/Lib/site-packages/simpleui/static/admin/simpleui-x/elementui/theme-chalk/tag.css
create mode 100644 venv/Lib/site-packages/simpleui/static/admin/simpleui-x/elementui/theme-chalk/time-picker.css
create mode 100644 venv/Lib/site-packages/simpleui/static/admin/simpleui-x/elementui/theme-chalk/time-select.css
create mode 100644 venv/Lib/site-packages/simpleui/static/admin/simpleui-x/elementui/theme-chalk/timeline-item.css
create mode 100644 venv/Lib/site-packages/simpleui/static/admin/simpleui-x/elementui/theme-chalk/timeline.css
create mode 100644 venv/Lib/site-packages/simpleui/static/admin/simpleui-x/elementui/theme-chalk/tooltip.css
create mode 100644 venv/Lib/site-packages/simpleui/static/admin/simpleui-x/elementui/theme-chalk/transfer.css
create mode 100644 venv/Lib/site-packages/simpleui/static/admin/simpleui-x/elementui/theme-chalk/tree.css
create mode 100644 venv/Lib/site-packages/simpleui/static/admin/simpleui-x/elementui/theme-chalk/upload.css
create mode 100644 venv/Lib/site-packages/simpleui/static/admin/simpleui-x/elementui/time-picker.js
create mode 100644 venv/Lib/site-packages/simpleui/static/admin/simpleui-x/elementui/time-select.js
create mode 100644 venv/Lib/site-packages/simpleui/static/admin/simpleui-x/elementui/timeline-item.js
create mode 100644 venv/Lib/site-packages/simpleui/static/admin/simpleui-x/elementui/timeline.js
create mode 100644 venv/Lib/site-packages/simpleui/static/admin/simpleui-x/elementui/tooltip.js
create mode 100644 venv/Lib/site-packages/simpleui/static/admin/simpleui-x/elementui/transfer.js
create mode 100644 venv/Lib/site-packages/simpleui/static/admin/simpleui-x/elementui/transitions/collapse-transition.js
create mode 100644 venv/Lib/site-packages/simpleui/static/admin/simpleui-x/elementui/tree.js
create mode 100644 venv/Lib/site-packages/simpleui/static/admin/simpleui-x/elementui/umd/locale/af-ZA.js
create mode 100644 venv/Lib/site-packages/simpleui/static/admin/simpleui-x/elementui/umd/locale/ar.js
create mode 100644 venv/Lib/site-packages/simpleui/static/admin/simpleui-x/elementui/umd/locale/bg.js
create mode 100644 venv/Lib/site-packages/simpleui/static/admin/simpleui-x/elementui/umd/locale/ca.js
create mode 100644 venv/Lib/site-packages/simpleui/static/admin/simpleui-x/elementui/umd/locale/cs-CZ.js
create mode 100644 venv/Lib/site-packages/simpleui/static/admin/simpleui-x/elementui/umd/locale/da.js
create mode 100644 venv/Lib/site-packages/simpleui/static/admin/simpleui-x/elementui/umd/locale/de.js
create mode 100644 venv/Lib/site-packages/simpleui/static/admin/simpleui-x/elementui/umd/locale/ee.js
create mode 100644 venv/Lib/site-packages/simpleui/static/admin/simpleui-x/elementui/umd/locale/el.js
create mode 100644 venv/Lib/site-packages/simpleui/static/admin/simpleui-x/elementui/umd/locale/en.js
create mode 100644 venv/Lib/site-packages/simpleui/static/admin/simpleui-x/elementui/umd/locale/es.js
create mode 100644 venv/Lib/site-packages/simpleui/static/admin/simpleui-x/elementui/umd/locale/eu.js
create mode 100644 venv/Lib/site-packages/simpleui/static/admin/simpleui-x/elementui/umd/locale/fa.js
create mode 100644 venv/Lib/site-packages/simpleui/static/admin/simpleui-x/elementui/umd/locale/fi.js
create mode 100644 venv/Lib/site-packages/simpleui/static/admin/simpleui-x/elementui/umd/locale/fr.js
create mode 100644 venv/Lib/site-packages/simpleui/static/admin/simpleui-x/elementui/umd/locale/he.js
create mode 100644 venv/Lib/site-packages/simpleui/static/admin/simpleui-x/elementui/umd/locale/hr.js
create mode 100644 venv/Lib/site-packages/simpleui/static/admin/simpleui-x/elementui/umd/locale/hu.js
create mode 100644 venv/Lib/site-packages/simpleui/static/admin/simpleui-x/elementui/umd/locale/hy-AM.js
create mode 100644 venv/Lib/site-packages/simpleui/static/admin/simpleui-x/elementui/umd/locale/id.js
create mode 100644 venv/Lib/site-packages/simpleui/static/admin/simpleui-x/elementui/umd/locale/it.js
create mode 100644 venv/Lib/site-packages/simpleui/static/admin/simpleui-x/elementui/umd/locale/ja.js
create mode 100644 venv/Lib/site-packages/simpleui/static/admin/simpleui-x/elementui/umd/locale/kg.js
create mode 100644 venv/Lib/site-packages/simpleui/static/admin/simpleui-x/elementui/umd/locale/km.js
create mode 100644 venv/Lib/site-packages/simpleui/static/admin/simpleui-x/elementui/umd/locale/ko.js
create mode 100644 venv/Lib/site-packages/simpleui/static/admin/simpleui-x/elementui/umd/locale/ku.js
create mode 100644 venv/Lib/site-packages/simpleui/static/admin/simpleui-x/elementui/umd/locale/kz.js
create mode 100644 venv/Lib/site-packages/simpleui/static/admin/simpleui-x/elementui/umd/locale/lt.js
create mode 100644 venv/Lib/site-packages/simpleui/static/admin/simpleui-x/elementui/umd/locale/lv.js
create mode 100644 venv/Lib/site-packages/simpleui/static/admin/simpleui-x/elementui/umd/locale/mn.js
create mode 100644 venv/Lib/site-packages/simpleui/static/admin/simpleui-x/elementui/umd/locale/nb-NO.js
create mode 100644 venv/Lib/site-packages/simpleui/static/admin/simpleui-x/elementui/umd/locale/nl.js
create mode 100644 venv/Lib/site-packages/simpleui/static/admin/simpleui-x/elementui/umd/locale/pl.js
create mode 100644 venv/Lib/site-packages/simpleui/static/admin/simpleui-x/elementui/umd/locale/pt-br.js
create mode 100644 venv/Lib/site-packages/simpleui/static/admin/simpleui-x/elementui/umd/locale/pt.js
create mode 100644 venv/Lib/site-packages/simpleui/static/admin/simpleui-x/elementui/umd/locale/ro.js
create mode 100644 venv/Lib/site-packages/simpleui/static/admin/simpleui-x/elementui/umd/locale/ru-RU.js
create mode 100644 venv/Lib/site-packages/simpleui/static/admin/simpleui-x/elementui/umd/locale/sk.js
create mode 100644 venv/Lib/site-packages/simpleui/static/admin/simpleui-x/elementui/umd/locale/sl.js
create mode 100644 venv/Lib/site-packages/simpleui/static/admin/simpleui-x/elementui/umd/locale/sr.js
create mode 100644 venv/Lib/site-packages/simpleui/static/admin/simpleui-x/elementui/umd/locale/sv-SE.js
create mode 100644 venv/Lib/site-packages/simpleui/static/admin/simpleui-x/elementui/umd/locale/ta.js
create mode 100644 venv/Lib/site-packages/simpleui/static/admin/simpleui-x/elementui/umd/locale/th.js
create mode 100644 venv/Lib/site-packages/simpleui/static/admin/simpleui-x/elementui/umd/locale/tk.js
create mode 100644 venv/Lib/site-packages/simpleui/static/admin/simpleui-x/elementui/umd/locale/tr-TR.js
create mode 100644 venv/Lib/site-packages/simpleui/static/admin/simpleui-x/elementui/umd/locale/ua.js
create mode 100644 venv/Lib/site-packages/simpleui/static/admin/simpleui-x/elementui/umd/locale/ug-CN.js
create mode 100644 venv/Lib/site-packages/simpleui/static/admin/simpleui-x/elementui/umd/locale/uz-UZ.js
create mode 100644 venv/Lib/site-packages/simpleui/static/admin/simpleui-x/elementui/umd/locale/vi.js
create mode 100644 venv/Lib/site-packages/simpleui/static/admin/simpleui-x/elementui/umd/locale/zh-CN.js
create mode 100644 venv/Lib/site-packages/simpleui/static/admin/simpleui-x/elementui/umd/locale/zh-TW.js
create mode 100644 venv/Lib/site-packages/simpleui/static/admin/simpleui-x/elementui/upload.js
create mode 100644 venv/Lib/site-packages/simpleui/static/admin/simpleui-x/elementui/utils/after-leave.js
create mode 100644 venv/Lib/site-packages/simpleui/static/admin/simpleui-x/elementui/utils/aria-dialog.js
create mode 100644 venv/Lib/site-packages/simpleui/static/admin/simpleui-x/elementui/utils/aria-utils.js
create mode 100644 venv/Lib/site-packages/simpleui/static/admin/simpleui-x/elementui/utils/clickoutside.js
create mode 100644 venv/Lib/site-packages/simpleui/static/admin/simpleui-x/elementui/utils/date-util.js
create mode 100644 venv/Lib/site-packages/simpleui/static/admin/simpleui-x/elementui/utils/date.js
create mode 100644 venv/Lib/site-packages/simpleui/static/admin/simpleui-x/elementui/utils/dom.js
create mode 100644 venv/Lib/site-packages/simpleui/static/admin/simpleui-x/elementui/utils/menu/aria-menubar.js
create mode 100644 venv/Lib/site-packages/simpleui/static/admin/simpleui-x/elementui/utils/menu/aria-menuitem.js
create mode 100644 venv/Lib/site-packages/simpleui/static/admin/simpleui-x/elementui/utils/menu/aria-submenu.js
create mode 100644 venv/Lib/site-packages/simpleui/static/admin/simpleui-x/elementui/utils/merge.js
create mode 100644 venv/Lib/site-packages/simpleui/static/admin/simpleui-x/elementui/utils/popper.js
create mode 100644 venv/Lib/site-packages/simpleui/static/admin/simpleui-x/elementui/utils/popup/index.js
create mode 100644 venv/Lib/site-packages/simpleui/static/admin/simpleui-x/elementui/utils/popup/popup-manager.js
create mode 100644 venv/Lib/site-packages/simpleui/static/admin/simpleui-x/elementui/utils/resize-event.js
create mode 100644 venv/Lib/site-packages/simpleui/static/admin/simpleui-x/elementui/utils/scroll-into-view.js
create mode 100644 venv/Lib/site-packages/simpleui/static/admin/simpleui-x/elementui/utils/scrollbar-width.js
create mode 100644 venv/Lib/site-packages/simpleui/static/admin/simpleui-x/elementui/utils/shared.js
create mode 100644 venv/Lib/site-packages/simpleui/static/admin/simpleui-x/elementui/utils/types.js
create mode 100644 venv/Lib/site-packages/simpleui/static/admin/simpleui-x/elementui/utils/util.js
create mode 100644 venv/Lib/site-packages/simpleui/static/admin/simpleui-x/elementui/utils/vdom.js
create mode 100644 venv/Lib/site-packages/simpleui/static/admin/simpleui-x/elementui/utils/vue-popper.js
create mode 100644 venv/Lib/site-packages/simpleui/static/admin/simpleui-x/fontawesome-free-5.8.1-web/css/all.min.css
create mode 100644 venv/Lib/site-packages/simpleui/static/admin/simpleui-x/fontawesome-free-5.8.1-web/webfonts/fa-brands-400.eot
create mode 100644 venv/Lib/site-packages/simpleui/static/admin/simpleui-x/fontawesome-free-5.8.1-web/webfonts/fa-brands-400.svg
create mode 100644 venv/Lib/site-packages/simpleui/static/admin/simpleui-x/fontawesome-free-5.8.1-web/webfonts/fa-brands-400.ttf
create mode 100644 venv/Lib/site-packages/simpleui/static/admin/simpleui-x/fontawesome-free-5.8.1-web/webfonts/fa-brands-400.woff
create mode 100644 venv/Lib/site-packages/simpleui/static/admin/simpleui-x/fontawesome-free-5.8.1-web/webfonts/fa-brands-400.woff2
create mode 100644 venv/Lib/site-packages/simpleui/static/admin/simpleui-x/fontawesome-free-5.8.1-web/webfonts/fa-regular-400.eot
create mode 100644 venv/Lib/site-packages/simpleui/static/admin/simpleui-x/fontawesome-free-5.8.1-web/webfonts/fa-regular-400.svg
create mode 100644 venv/Lib/site-packages/simpleui/static/admin/simpleui-x/fontawesome-free-5.8.1-web/webfonts/fa-regular-400.ttf
create mode 100644 venv/Lib/site-packages/simpleui/static/admin/simpleui-x/fontawesome-free-5.8.1-web/webfonts/fa-regular-400.woff
create mode 100644 venv/Lib/site-packages/simpleui/static/admin/simpleui-x/fontawesome-free-5.8.1-web/webfonts/fa-regular-400.woff2
create mode 100644 venv/Lib/site-packages/simpleui/static/admin/simpleui-x/fontawesome-free-5.8.1-web/webfonts/fa-solid-900.eot
create mode 100644 venv/Lib/site-packages/simpleui/static/admin/simpleui-x/fontawesome-free-5.8.1-web/webfonts/fa-solid-900.svg
create mode 100644 venv/Lib/site-packages/simpleui/static/admin/simpleui-x/fontawesome-free-5.8.1-web/webfonts/fa-solid-900.ttf
create mode 100644 venv/Lib/site-packages/simpleui/static/admin/simpleui-x/fontawesome-free-5.8.1-web/webfonts/fa-solid-900.woff
create mode 100644 venv/Lib/site-packages/simpleui/static/admin/simpleui-x/fontawesome-free-5.8.1-web/webfonts/fa-solid-900.woff2
create mode 100644 venv/Lib/site-packages/simpleui/static/admin/simpleui-x/img/bg.svg
create mode 100644 venv/Lib/site-packages/simpleui/static/admin/simpleui-x/img/favicon.png
create mode 100644 venv/Lib/site-packages/simpleui/static/admin/simpleui-x/img/logo.png
create mode 100644 venv/Lib/site-packages/simpleui/static/admin/simpleui-x/js/cookie.js
create mode 100644 venv/Lib/site-packages/simpleui/static/admin/simpleui-x/js/index.js
create mode 100644 venv/Lib/site-packages/simpleui/static/admin/simpleui-x/js/language.js
create mode 100644 venv/Lib/site-packages/simpleui/static/admin/simpleui-x/js/login.js
create mode 100644 venv/Lib/site-packages/simpleui/static/admin/simpleui-x/js/vue.min.js
create mode 100644 venv/Lib/site-packages/simpleui/static/admin/simpleui-x/locale/en-us.js
create mode 100644 venv/Lib/site-packages/simpleui/static/admin/simpleui-x/locale/zh-hans.js
create mode 100644 venv/Lib/site-packages/simpleui/static/admin/simpleui-x/particles/app.js
create mode 100644 venv/Lib/site-packages/simpleui/static/admin/simpleui-x/particles/particles.js
create mode 100644 venv/Lib/site-packages/simpleui/static/admin/simpleui-x/theme/admin.lte.css
create mode 100644 venv/Lib/site-packages/simpleui/static/admin/simpleui-x/theme/admin.lte.css.map
create mode 100644 venv/Lib/site-packages/simpleui/static/admin/simpleui-x/theme/admin.lte.less
create mode 100644 venv/Lib/site-packages/simpleui/static/admin/simpleui-x/theme/aircraft.css
create mode 100644 venv/Lib/site-packages/simpleui/static/admin/simpleui-x/theme/aircraft.css.map
create mode 100644 venv/Lib/site-packages/simpleui/static/admin/simpleui-x/theme/aircraft.less
create mode 100644 venv/Lib/site-packages/simpleui/static/admin/simpleui-x/theme/ant.design.css
create mode 100644 venv/Lib/site-packages/simpleui/static/admin/simpleui-x/theme/ant.design.css.map
create mode 100644 venv/Lib/site-packages/simpleui/static/admin/simpleui-x/theme/ant.design.less
create mode 100644 venv/Lib/site-packages/simpleui/static/admin/simpleui-x/theme/base.less
create mode 100644 venv/Lib/site-packages/simpleui/static/admin/simpleui-x/theme/black.css
create mode 100644 venv/Lib/site-packages/simpleui/static/admin/simpleui-x/theme/black.css.map
create mode 100644 venv/Lib/site-packages/simpleui/static/admin/simpleui-x/theme/black.less
create mode 100644 venv/Lib/site-packages/simpleui/static/admin/simpleui-x/theme/dark.green.css
create mode 100644 venv/Lib/site-packages/simpleui/static/admin/simpleui-x/theme/dark.green.css.map
create mode 100644 venv/Lib/site-packages/simpleui/static/admin/simpleui-x/theme/dark.green.less
create mode 100644 venv/Lib/site-packages/simpleui/static/admin/simpleui-x/theme/e-black-pro.css
create mode 100644 venv/Lib/site-packages/simpleui/static/admin/simpleui-x/theme/e-black-pro.css.map
create mode 100644 venv/Lib/site-packages/simpleui/static/admin/simpleui-x/theme/e-black-pro.less
create mode 100644 venv/Lib/site-packages/simpleui/static/admin/simpleui-x/theme/e-black.css
create mode 100644 venv/Lib/site-packages/simpleui/static/admin/simpleui-x/theme/e-black.css.map
create mode 100644 venv/Lib/site-packages/simpleui/static/admin/simpleui-x/theme/e-black.less
create mode 100644 venv/Lib/site-packages/simpleui/static/admin/simpleui-x/theme/e-blue-pro.css
create mode 100644 venv/Lib/site-packages/simpleui/static/admin/simpleui-x/theme/e-blue-pro.css.map
create mode 100644 venv/Lib/site-packages/simpleui/static/admin/simpleui-x/theme/e-blue-pro.less
create mode 100644 venv/Lib/site-packages/simpleui/static/admin/simpleui-x/theme/e-blue.css
create mode 100644 venv/Lib/site-packages/simpleui/static/admin/simpleui-x/theme/e-blue.css.map
create mode 100644 venv/Lib/site-packages/simpleui/static/admin/simpleui-x/theme/e-blue.less
create mode 100644 venv/Lib/site-packages/simpleui/static/admin/simpleui-x/theme/e-green-pro.css
create mode 100644 venv/Lib/site-packages/simpleui/static/admin/simpleui-x/theme/e-green-pro.css.map
create mode 100644 venv/Lib/site-packages/simpleui/static/admin/simpleui-x/theme/e-green-pro.less
create mode 100644 venv/Lib/site-packages/simpleui/static/admin/simpleui-x/theme/e-green.css
create mode 100644 venv/Lib/site-packages/simpleui/static/admin/simpleui-x/theme/e-green.css.map
create mode 100644 venv/Lib/site-packages/simpleui/static/admin/simpleui-x/theme/e-green.less
create mode 100644 venv/Lib/site-packages/simpleui/static/admin/simpleui-x/theme/e-purple-pro.css
create mode 100644 venv/Lib/site-packages/simpleui/static/admin/simpleui-x/theme/e-purple-pro.css.map
create mode 100644 venv/Lib/site-packages/simpleui/static/admin/simpleui-x/theme/e-purple-pro.less
create mode 100644 venv/Lib/site-packages/simpleui/static/admin/simpleui-x/theme/e-purple.css
create mode 100644 venv/Lib/site-packages/simpleui/static/admin/simpleui-x/theme/e-purple.css.map
create mode 100644 venv/Lib/site-packages/simpleui/static/admin/simpleui-x/theme/e-purple.less
create mode 100644 venv/Lib/site-packages/simpleui/static/admin/simpleui-x/theme/e-red-pro.css
create mode 100644 venv/Lib/site-packages/simpleui/static/admin/simpleui-x/theme/e-red-pro.css.map
create mode 100644 venv/Lib/site-packages/simpleui/static/admin/simpleui-x/theme/e-red-pro.less
create mode 100644 venv/Lib/site-packages/simpleui/static/admin/simpleui-x/theme/e-red.css
create mode 100644 venv/Lib/site-packages/simpleui/static/admin/simpleui-x/theme/e-red.css.map
create mode 100644 venv/Lib/site-packages/simpleui/static/admin/simpleui-x/theme/e-red.less
create mode 100644 venv/Lib/site-packages/simpleui/static/admin/simpleui-x/theme/element.css
create mode 100644 venv/Lib/site-packages/simpleui/static/admin/simpleui-x/theme/element.css.map
create mode 100644 venv/Lib/site-packages/simpleui/static/admin/simpleui-x/theme/element.less
create mode 100644 venv/Lib/site-packages/simpleui/static/admin/simpleui-x/theme/gray.css
create mode 100644 venv/Lib/site-packages/simpleui/static/admin/simpleui-x/theme/gray.css.map
create mode 100644 venv/Lib/site-packages/simpleui/static/admin/simpleui-x/theme/gray.less
create mode 100644 venv/Lib/site-packages/simpleui/static/admin/simpleui-x/theme/green.css
create mode 100644 venv/Lib/site-packages/simpleui/static/admin/simpleui-x/theme/green.css.map
create mode 100644 venv/Lib/site-packages/simpleui/static/admin/simpleui-x/theme/green.less
create mode 100644 venv/Lib/site-packages/simpleui/static/admin/simpleui-x/theme/highdmin.css
create mode 100644 venv/Lib/site-packages/simpleui/static/admin/simpleui-x/theme/highdmin.css.map
create mode 100644 venv/Lib/site-packages/simpleui/static/admin/simpleui-x/theme/highdmin.less
create mode 100644 venv/Lib/site-packages/simpleui/static/admin/simpleui-x/theme/layui.css
create mode 100644 venv/Lib/site-packages/simpleui/static/admin/simpleui-x/theme/layui.css.map
create mode 100644 venv/Lib/site-packages/simpleui/static/admin/simpleui-x/theme/layui.less
create mode 100644 venv/Lib/site-packages/simpleui/static/admin/simpleui-x/theme/light.css
create mode 100644 venv/Lib/site-packages/simpleui/static/admin/simpleui-x/theme/light.css.map
create mode 100644 venv/Lib/site-packages/simpleui/static/admin/simpleui-x/theme/light.less
create mode 100644 venv/Lib/site-packages/simpleui/static/admin/simpleui-x/theme/orange.css
create mode 100644 venv/Lib/site-packages/simpleui/static/admin/simpleui-x/theme/orange.css.map
create mode 100644 venv/Lib/site-packages/simpleui/static/admin/simpleui-x/theme/orange.less
create mode 100644 venv/Lib/site-packages/simpleui/static/admin/simpleui-x/theme/purple.css
create mode 100644 venv/Lib/site-packages/simpleui/static/admin/simpleui-x/theme/purple.css.map
create mode 100644 venv/Lib/site-packages/simpleui/static/admin/simpleui-x/theme/purple.less
create mode 100644 venv/Lib/site-packages/simpleui/static/admin/simpleui-x/theme/simpleui.css
create mode 100644 venv/Lib/site-packages/simpleui/static/admin/simpleui-x/theme/simpleui.css.map
create mode 100644 venv/Lib/site-packages/simpleui/static/admin/simpleui-x/theme/simpleui.less
create mode 100644 venv/Lib/site-packages/simpleui/static/admin/simpleui-x/theme/theme.js
create mode 100644 venv/Lib/site-packages/simpleui/static/admin/simpleui-x/theme/x-blue.css
create mode 100644 venv/Lib/site-packages/simpleui/static/admin/simpleui-x/theme/x-blue.css.map
create mode 100644 venv/Lib/site-packages/simpleui/static/admin/simpleui-x/theme/x-blue.less
create mode 100644 venv/Lib/site-packages/simpleui/static/admin/simpleui-x/theme/x-green.css
create mode 100644 venv/Lib/site-packages/simpleui/static/admin/simpleui-x/theme/x-green.css.map
create mode 100644 venv/Lib/site-packages/simpleui/static/admin/simpleui-x/theme/x-green.less
create mode 100644 venv/Lib/site-packages/simpleui/static/admin/simpleui-x/theme/x-red.css
create mode 100644 venv/Lib/site-packages/simpleui/static/admin/simpleui-x/theme/x-red.css.map
create mode 100644 venv/Lib/site-packages/simpleui/static/admin/simpleui-x/theme/x-red.less
create mode 100644 venv/Lib/site-packages/simpleui/static/admin/simpleui-x/waves/waves.min.css
create mode 100644 venv/Lib/site-packages/simpleui/static/admin/simpleui-x/waves/waves.min.js
create mode 100644 venv/Lib/site-packages/simpleui/static/admin/simpleui-x/waves/waves.min.js.map
create mode 100644 venv/Lib/site-packages/simpleui/static/import_export/action_formats.js
create mode 100644 venv/Lib/site-packages/simpleui/templates/admin/404.html
create mode 100644 venv/Lib/site-packages/simpleui/templates/admin/500.html
create mode 100644 venv/Lib/site-packages/simpleui/templates/admin/actions.html
create mode 100644 venv/Lib/site-packages/simpleui/templates/admin/app_index.html
create mode 100644 venv/Lib/site-packages/simpleui/templates/admin/base.html
create mode 100644 venv/Lib/site-packages/simpleui/templates/admin/base_site.html
create mode 100644 venv/Lib/site-packages/simpleui/templates/admin/change_form.html
create mode 100644 venv/Lib/site-packages/simpleui/templates/admin/change_form_object_tools.html
create mode 100644 venv/Lib/site-packages/simpleui/templates/admin/change_list.html
create mode 100644 venv/Lib/site-packages/simpleui/templates/admin/change_list_object_tools.html
create mode 100644 venv/Lib/site-packages/simpleui/templates/admin/change_list_results.html
create mode 100644 venv/Lib/site-packages/simpleui/templates/admin/date_hierarchy.html
create mode 100644 venv/Lib/site-packages/simpleui/templates/admin/filter.html
create mode 100644 venv/Lib/site-packages/simpleui/templates/admin/home.html
create mode 100644 venv/Lib/site-packages/simpleui/templates/admin/includes/css-part.html
create mode 100644 venv/Lib/site-packages/simpleui/templates/admin/includes/fieldset.html
create mode 100644 venv/Lib/site-packages/simpleui/templates/admin/includes/js-part.html
create mode 100644 venv/Lib/site-packages/simpleui/templates/admin/index.html
create mode 100644 venv/Lib/site-packages/simpleui/templates/admin/invalid_setup.html
create mode 100644 venv/Lib/site-packages/simpleui/templates/admin/login.html
create mode 100644 venv/Lib/site-packages/simpleui/templates/admin/object_history.html
create mode 100644 venv/Lib/site-packages/simpleui/templates/admin/pagination.html
create mode 100644 venv/Lib/site-packages/simpleui/templates/admin/popup_response.html
create mode 100644 venv/Lib/site-packages/simpleui/templates/admin/prepopulated_fields_js.html
create mode 100644 venv/Lib/site-packages/simpleui/templates/admin/related_widget_wrapper.html
create mode 100644 venv/Lib/site-packages/simpleui/templates/admin/search_form.html
create mode 100644 venv/Lib/site-packages/simpleui/templates/admin/submit_line.html
create mode 100644 venv/Lib/site-packages/simpleui/templates/registration/logged_out.html
create mode 100644 venv/Lib/site-packages/simpleui/templates/registration/password_change_done.html
create mode 100644 venv/Lib/site-packages/simpleui/templates/registration/password_change_form.html
create mode 100644 venv/Lib/site-packages/simpleui/templates/registration/password_reset_complete.html
create mode 100644 venv/Lib/site-packages/simpleui/templates/registration/password_reset_confirm.html
create mode 100644 venv/Lib/site-packages/simpleui/templates/registration/password_reset_done.html
create mode 100644 venv/Lib/site-packages/simpleui/templates/registration/password_reset_email.html
create mode 100644 venv/Lib/site-packages/simpleui/templates/registration/password_reset_form.html
create mode 100644 venv/Lib/site-packages/simpleui/templatetags/__init__.py
create mode 100644 venv/Lib/site-packages/simpleui/templatetags/simpletags.py
create mode 100644 venv/Lib/site-packages/simpleui/widgets.py
diff --git a/utils/get_error_msg.py b/utils/get_error_msg.py
index f678730..eb09d95 100644
--- a/utils/get_error_msg.py
+++ b/utils/get_error_msg.py
@@ -5,6 +5,7 @@ def get_error_msg(code="20000"):
"50403": "Forbidden",
"40000": "请求方法错误",
"40001": "JSON解析错误",
+
"45030": "信息不存在",
"45032": "邮箱验证码过期",
"44031": "邮箱验证码错误",
diff --git a/venv/Lib/site-packages/simpleui-4.0.2-py3.9.egg-info/PKG-INFO b/venv/Lib/site-packages/simpleui-4.0.2-py3.9.egg-info/PKG-INFO
new file mode 100644
index 0000000..6ceed27
--- /dev/null
+++ b/venv/Lib/site-packages/simpleui-4.0.2-py3.9.egg-info/PKG-INFO
@@ -0,0 +1,26 @@
+Metadata-Version: 2.1
+Name: simpleui
+Version: 4.0.2
+Summary: django admin theme 后台模板
+Home-page: https://github.com/newpanjing/simpleui
+Author: panjing
+Author-email: newpanjing@icloud.com
+License: Apache License 2.0
+Platform: UNKNOWN
+Classifier: Programming Language :: Python :: 3
+Classifier: Operating System :: OS Independent
+
+**django-simpleui**
+
+github:
+
+https://github.com/newpanjing/django-simpleui
+
+gitee:
+
+https://gitee.com/tompeppa/simpleui
+
+
+QQ群:
+786576510
+
diff --git a/venv/Lib/site-packages/simpleui-4.0.2-py3.9.egg-info/SOURCES.txt b/venv/Lib/site-packages/simpleui-4.0.2-py3.9.egg-info/SOURCES.txt
new file mode 100644
index 0000000..d807140
--- /dev/null
+++ b/venv/Lib/site-packages/simpleui-4.0.2-py3.9.egg-info/SOURCES.txt
@@ -0,0 +1,604 @@
+MANIFEST.in
+README.rst
+setup.cfg
+setup.py
+simpleui/__init__.py
+simpleui/apps.py
+simpleui/forms.py
+simpleui/widgets.py
+simpleui.egg-info/PKG-INFO
+simpleui.egg-info/SOURCES.txt
+simpleui.egg-info/dependency_links.txt
+simpleui.egg-info/not-zip-safe
+simpleui.egg-info/requires.txt
+simpleui.egg-info/top_level.txt
+simpleui/__pycache__/__init__.cpython-37.pyc
+simpleui/__pycache__/apps.cpython-37.pyc
+simpleui/static/admin/css/autocomplete.css
+simpleui/static/admin/css/base.css
+simpleui/static/admin/css/changelists.css
+simpleui/static/admin/css/dashboard.css
+simpleui/static/admin/css/fonts.css
+simpleui/static/admin/css/forms.css
+simpleui/static/admin/css/login.css
+simpleui/static/admin/css/responsive.css
+simpleui/static/admin/css/responsive_rtl.css
+simpleui/static/admin/css/rtl.css
+simpleui/static/admin/css/ui.css
+simpleui/static/admin/css/widgets.css
+simpleui/static/admin/css/vendor/select2/LICENSE-SELECT2.md
+simpleui/static/admin/css/vendor/select2/select2.css
+simpleui/static/admin/css/vendor/select2/select2.min.css
+simpleui/static/admin/fonts/LICENSE.txt
+simpleui/static/admin/fonts/README.txt
+simpleui/static/admin/fonts/Roboto-Bold-webfont.woff
+simpleui/static/admin/fonts/Roboto-Light-webfont.woff
+simpleui/static/admin/fonts/Roboto-Regular-webfont.woff
+simpleui/static/admin/img/LICENSE
+simpleui/static/admin/img/README.txt
+simpleui/static/admin/img/calendar-icons.svg
+simpleui/static/admin/img/icon-addlink.svg
+simpleui/static/admin/img/icon-alert.svg
+simpleui/static/admin/img/icon-calendar.svg
+simpleui/static/admin/img/icon-changelink.svg
+simpleui/static/admin/img/icon-clock.svg
+simpleui/static/admin/img/icon-deletelink.svg
+simpleui/static/admin/img/icon-no.svg
+simpleui/static/admin/img/icon-unknown-alt.svg
+simpleui/static/admin/img/icon-unknown.svg
+simpleui/static/admin/img/icon-yes.svg
+simpleui/static/admin/img/inline-delete.svg
+simpleui/static/admin/img/search.svg
+simpleui/static/admin/img/selector-icons.svg
+simpleui/static/admin/img/sorting-icons.svg
+simpleui/static/admin/img/tooltag-add.svg
+simpleui/static/admin/img/tooltag-arrowright.svg
+simpleui/static/admin/img/gis/move_vertex_off.svg
+simpleui/static/admin/img/gis/move_vertex_on.svg
+simpleui/static/admin/js/SelectBox.js
+simpleui/static/admin/js/SelectFilter2.js
+simpleui/static/admin/js/actions.js
+simpleui/static/admin/js/actions.min.js
+simpleui/static/admin/js/autocomplete.js
+simpleui/static/admin/js/calendar.js
+simpleui/static/admin/js/cancel.js
+simpleui/static/admin/js/change_form.js
+simpleui/static/admin/js/collapse.js
+simpleui/static/admin/js/collapse.min.js
+simpleui/static/admin/js/core.js
+simpleui/static/admin/js/inlines.js
+simpleui/static/admin/js/inlines.min.js
+simpleui/static/admin/js/jquery.init.js
+simpleui/static/admin/js/popup_response.js
+simpleui/static/admin/js/prepopulate.js
+simpleui/static/admin/js/prepopulate.min.js
+simpleui/static/admin/js/prepopulate_init.js
+simpleui/static/admin/js/timeparse.js
+simpleui/static/admin/js/urlify.js
+simpleui/static/admin/js/admin/DateTimeShortcuts.js
+simpleui/static/admin/js/admin/RelatedObjectLookups.js
+simpleui/static/admin/js/vendor/jquery/LICENSE-JQUERY.txt
+simpleui/static/admin/js/vendor/jquery/jquery.js
+simpleui/static/admin/js/vendor/jquery/jquery.min.js
+simpleui/static/admin/js/vendor/select2/LICENSE-SELECT2.md
+simpleui/static/admin/js/vendor/select2/select2.full.js
+simpleui/static/admin/js/vendor/select2/select2.full.min.js
+simpleui/static/admin/js/vendor/select2/i18n/ar.js
+simpleui/static/admin/js/vendor/select2/i18n/az.js
+simpleui/static/admin/js/vendor/select2/i18n/bg.js
+simpleui/static/admin/js/vendor/select2/i18n/ca.js
+simpleui/static/admin/js/vendor/select2/i18n/cs.js
+simpleui/static/admin/js/vendor/select2/i18n/da.js
+simpleui/static/admin/js/vendor/select2/i18n/de.js
+simpleui/static/admin/js/vendor/select2/i18n/el.js
+simpleui/static/admin/js/vendor/select2/i18n/en.js
+simpleui/static/admin/js/vendor/select2/i18n/es.js
+simpleui/static/admin/js/vendor/select2/i18n/et.js
+simpleui/static/admin/js/vendor/select2/i18n/eu.js
+simpleui/static/admin/js/vendor/select2/i18n/fa.js
+simpleui/static/admin/js/vendor/select2/i18n/fi.js
+simpleui/static/admin/js/vendor/select2/i18n/fr.js
+simpleui/static/admin/js/vendor/select2/i18n/gl.js
+simpleui/static/admin/js/vendor/select2/i18n/he.js
+simpleui/static/admin/js/vendor/select2/i18n/hi.js
+simpleui/static/admin/js/vendor/select2/i18n/hr.js
+simpleui/static/admin/js/vendor/select2/i18n/hu.js
+simpleui/static/admin/js/vendor/select2/i18n/id.js
+simpleui/static/admin/js/vendor/select2/i18n/is.js
+simpleui/static/admin/js/vendor/select2/i18n/it.js
+simpleui/static/admin/js/vendor/select2/i18n/ja.js
+simpleui/static/admin/js/vendor/select2/i18n/km.js
+simpleui/static/admin/js/vendor/select2/i18n/ko.js
+simpleui/static/admin/js/vendor/select2/i18n/lt.js
+simpleui/static/admin/js/vendor/select2/i18n/lv.js
+simpleui/static/admin/js/vendor/select2/i18n/mk.js
+simpleui/static/admin/js/vendor/select2/i18n/ms.js
+simpleui/static/admin/js/vendor/select2/i18n/nb.js
+simpleui/static/admin/js/vendor/select2/i18n/nl.js
+simpleui/static/admin/js/vendor/select2/i18n/pl.js
+simpleui/static/admin/js/vendor/select2/i18n/pt-BR.js
+simpleui/static/admin/js/vendor/select2/i18n/pt.js
+simpleui/static/admin/js/vendor/select2/i18n/ro.js
+simpleui/static/admin/js/vendor/select2/i18n/ru.js
+simpleui/static/admin/js/vendor/select2/i18n/sk.js
+simpleui/static/admin/js/vendor/select2/i18n/sr-Cyrl.js
+simpleui/static/admin/js/vendor/select2/i18n/sr.js
+simpleui/static/admin/js/vendor/select2/i18n/sv.js
+simpleui/static/admin/js/vendor/select2/i18n/th.js
+simpleui/static/admin/js/vendor/select2/i18n/tr.js
+simpleui/static/admin/js/vendor/select2/i18n/uk.js
+simpleui/static/admin/js/vendor/select2/i18n/vi.js
+simpleui/static/admin/js/vendor/select2/i18n/zh-CN.js
+simpleui/static/admin/js/vendor/select2/i18n/zh-TW.js
+simpleui/static/admin/js/vendor/xregexp/LICENSE-XREGEXP.txt
+simpleui/static/admin/js/vendor/xregexp/xregexp.js
+simpleui/static/admin/js/vendor/xregexp/xregexp.min.js
+simpleui/static/admin/simpleui-x/automatic/dicts.js
+simpleui/static/admin/simpleui-x/automatic/segment.js
+simpleui/static/admin/simpleui-x/css/base.css
+simpleui/static/admin/simpleui-x/css/base.css.map
+simpleui/static/admin/simpleui-x/css/base.less
+simpleui/static/admin/simpleui-x/css/index.css
+simpleui/static/admin/simpleui-x/css/index.css.map
+simpleui/static/admin/simpleui-x/css/index.less
+simpleui/static/admin/simpleui-x/css/login.css
+simpleui/static/admin/simpleui-x/elementui/alert.js
+simpleui/static/admin/simpleui-x/elementui/aside.js
+simpleui/static/admin/simpleui-x/elementui/autocomplete.js
+simpleui/static/admin/simpleui-x/elementui/avatar.js
+simpleui/static/admin/simpleui-x/elementui/backtop.js
+simpleui/static/admin/simpleui-x/elementui/badge.js
+simpleui/static/admin/simpleui-x/elementui/breadcrumb-item.js
+simpleui/static/admin/simpleui-x/elementui/breadcrumb.js
+simpleui/static/admin/simpleui-x/elementui/button-group.js
+simpleui/static/admin/simpleui-x/elementui/button.js
+simpleui/static/admin/simpleui-x/elementui/calendar.js
+simpleui/static/admin/simpleui-x/elementui/card.js
+simpleui/static/admin/simpleui-x/elementui/carousel-item.js
+simpleui/static/admin/simpleui-x/elementui/carousel.js
+simpleui/static/admin/simpleui-x/elementui/cascader-panel.js
+simpleui/static/admin/simpleui-x/elementui/cascader.js
+simpleui/static/admin/simpleui-x/elementui/checkbox-button.js
+simpleui/static/admin/simpleui-x/elementui/checkbox-group.js
+simpleui/static/admin/simpleui-x/elementui/checkbox.js
+simpleui/static/admin/simpleui-x/elementui/col.js
+simpleui/static/admin/simpleui-x/elementui/collapse-item.js
+simpleui/static/admin/simpleui-x/elementui/collapse.js
+simpleui/static/admin/simpleui-x/elementui/color-picker.js
+simpleui/static/admin/simpleui-x/elementui/container.js
+simpleui/static/admin/simpleui-x/elementui/date-picker.js
+simpleui/static/admin/simpleui-x/elementui/dialog.js
+simpleui/static/admin/simpleui-x/elementui/divider.js
+simpleui/static/admin/simpleui-x/elementui/drawer.js
+simpleui/static/admin/simpleui-x/elementui/dropdown-item.js
+simpleui/static/admin/simpleui-x/elementui/dropdown-menu.js
+simpleui/static/admin/simpleui-x/elementui/dropdown.js
+simpleui/static/admin/simpleui-x/elementui/element-ui.common.js
+simpleui/static/admin/simpleui-x/elementui/footer.js
+simpleui/static/admin/simpleui-x/elementui/form-item.js
+simpleui/static/admin/simpleui-x/elementui/form.js
+simpleui/static/admin/simpleui-x/elementui/header.js
+simpleui/static/admin/simpleui-x/elementui/icon.js
+simpleui/static/admin/simpleui-x/elementui/image.js
+simpleui/static/admin/simpleui-x/elementui/index.js
+simpleui/static/admin/simpleui-x/elementui/infinite-scroll.js
+simpleui/static/admin/simpleui-x/elementui/input-number.js
+simpleui/static/admin/simpleui-x/elementui/input.js
+simpleui/static/admin/simpleui-x/elementui/link.js
+simpleui/static/admin/simpleui-x/elementui/loading.js
+simpleui/static/admin/simpleui-x/elementui/main.js
+simpleui/static/admin/simpleui-x/elementui/menu-item-group.js
+simpleui/static/admin/simpleui-x/elementui/menu-item.js
+simpleui/static/admin/simpleui-x/elementui/menu.js
+simpleui/static/admin/simpleui-x/elementui/message-box.js
+simpleui/static/admin/simpleui-x/elementui/message.js
+simpleui/static/admin/simpleui-x/elementui/notification.js
+simpleui/static/admin/simpleui-x/elementui/option-group.js
+simpleui/static/admin/simpleui-x/elementui/option.js
+simpleui/static/admin/simpleui-x/elementui/page-header.js
+simpleui/static/admin/simpleui-x/elementui/pagination.js
+simpleui/static/admin/simpleui-x/elementui/popover.js
+simpleui/static/admin/simpleui-x/elementui/progress.js
+simpleui/static/admin/simpleui-x/elementui/radio-button.js
+simpleui/static/admin/simpleui-x/elementui/radio-group.js
+simpleui/static/admin/simpleui-x/elementui/radio.js
+simpleui/static/admin/simpleui-x/elementui/rate.js
+simpleui/static/admin/simpleui-x/elementui/row.js
+simpleui/static/admin/simpleui-x/elementui/scrollbar.js
+simpleui/static/admin/simpleui-x/elementui/select.js
+simpleui/static/admin/simpleui-x/elementui/slider.js
+simpleui/static/admin/simpleui-x/elementui/spinner.js
+simpleui/static/admin/simpleui-x/elementui/step.js
+simpleui/static/admin/simpleui-x/elementui/steps.js
+simpleui/static/admin/simpleui-x/elementui/submenu.js
+simpleui/static/admin/simpleui-x/elementui/switch.js
+simpleui/static/admin/simpleui-x/elementui/tab-pane.js
+simpleui/static/admin/simpleui-x/elementui/table-column.js
+simpleui/static/admin/simpleui-x/elementui/table.js
+simpleui/static/admin/simpleui-x/elementui/tabs.js
+simpleui/static/admin/simpleui-x/elementui/tag.js
+simpleui/static/admin/simpleui-x/elementui/time-picker.js
+simpleui/static/admin/simpleui-x/elementui/time-select.js
+simpleui/static/admin/simpleui-x/elementui/timeline-item.js
+simpleui/static/admin/simpleui-x/elementui/timeline.js
+simpleui/static/admin/simpleui-x/elementui/tooltip.js
+simpleui/static/admin/simpleui-x/elementui/transfer.js
+simpleui/static/admin/simpleui-x/elementui/tree.js
+simpleui/static/admin/simpleui-x/elementui/upload.js
+simpleui/static/admin/simpleui-x/elementui/directives/mousewheel.js
+simpleui/static/admin/simpleui-x/elementui/directives/repeat-click.js
+simpleui/static/admin/simpleui-x/elementui/locale/format.js
+simpleui/static/admin/simpleui-x/elementui/locale/index.js
+simpleui/static/admin/simpleui-x/elementui/locale/lang/af-ZA.js
+simpleui/static/admin/simpleui-x/elementui/locale/lang/ar.js
+simpleui/static/admin/simpleui-x/elementui/locale/lang/bg.js
+simpleui/static/admin/simpleui-x/elementui/locale/lang/ca.js
+simpleui/static/admin/simpleui-x/elementui/locale/lang/cs-CZ.js
+simpleui/static/admin/simpleui-x/elementui/locale/lang/da.js
+simpleui/static/admin/simpleui-x/elementui/locale/lang/de.js
+simpleui/static/admin/simpleui-x/elementui/locale/lang/ee.js
+simpleui/static/admin/simpleui-x/elementui/locale/lang/el.js
+simpleui/static/admin/simpleui-x/elementui/locale/lang/en.js
+simpleui/static/admin/simpleui-x/elementui/locale/lang/es.js
+simpleui/static/admin/simpleui-x/elementui/locale/lang/eu.js
+simpleui/static/admin/simpleui-x/elementui/locale/lang/fa.js
+simpleui/static/admin/simpleui-x/elementui/locale/lang/fi.js
+simpleui/static/admin/simpleui-x/elementui/locale/lang/fr.js
+simpleui/static/admin/simpleui-x/elementui/locale/lang/he.js
+simpleui/static/admin/simpleui-x/elementui/locale/lang/hr.js
+simpleui/static/admin/simpleui-x/elementui/locale/lang/hu.js
+simpleui/static/admin/simpleui-x/elementui/locale/lang/hy-AM.js
+simpleui/static/admin/simpleui-x/elementui/locale/lang/id.js
+simpleui/static/admin/simpleui-x/elementui/locale/lang/it.js
+simpleui/static/admin/simpleui-x/elementui/locale/lang/ja.js
+simpleui/static/admin/simpleui-x/elementui/locale/lang/kg.js
+simpleui/static/admin/simpleui-x/elementui/locale/lang/km.js
+simpleui/static/admin/simpleui-x/elementui/locale/lang/ko.js
+simpleui/static/admin/simpleui-x/elementui/locale/lang/ku.js
+simpleui/static/admin/simpleui-x/elementui/locale/lang/kz.js
+simpleui/static/admin/simpleui-x/elementui/locale/lang/lt.js
+simpleui/static/admin/simpleui-x/elementui/locale/lang/lv.js
+simpleui/static/admin/simpleui-x/elementui/locale/lang/mn.js
+simpleui/static/admin/simpleui-x/elementui/locale/lang/nb-NO.js
+simpleui/static/admin/simpleui-x/elementui/locale/lang/nl.js
+simpleui/static/admin/simpleui-x/elementui/locale/lang/pl.js
+simpleui/static/admin/simpleui-x/elementui/locale/lang/pt-br.js
+simpleui/static/admin/simpleui-x/elementui/locale/lang/pt.js
+simpleui/static/admin/simpleui-x/elementui/locale/lang/ro.js
+simpleui/static/admin/simpleui-x/elementui/locale/lang/ru-RU.js
+simpleui/static/admin/simpleui-x/elementui/locale/lang/sk.js
+simpleui/static/admin/simpleui-x/elementui/locale/lang/sl.js
+simpleui/static/admin/simpleui-x/elementui/locale/lang/sr.js
+simpleui/static/admin/simpleui-x/elementui/locale/lang/sv-SE.js
+simpleui/static/admin/simpleui-x/elementui/locale/lang/ta.js
+simpleui/static/admin/simpleui-x/elementui/locale/lang/th.js
+simpleui/static/admin/simpleui-x/elementui/locale/lang/tk.js
+simpleui/static/admin/simpleui-x/elementui/locale/lang/tr-TR.js
+simpleui/static/admin/simpleui-x/elementui/locale/lang/ua.js
+simpleui/static/admin/simpleui-x/elementui/locale/lang/ug-CN.js
+simpleui/static/admin/simpleui-x/elementui/locale/lang/uz-UZ.js
+simpleui/static/admin/simpleui-x/elementui/locale/lang/vi.js
+simpleui/static/admin/simpleui-x/elementui/locale/lang/zh-CN.js
+simpleui/static/admin/simpleui-x/elementui/locale/lang/zh-TW.js
+simpleui/static/admin/simpleui-x/elementui/mixins/emitter.js
+simpleui/static/admin/simpleui-x/elementui/mixins/focus.js
+simpleui/static/admin/simpleui-x/elementui/mixins/locale.js
+simpleui/static/admin/simpleui-x/elementui/mixins/migrating.js
+simpleui/static/admin/simpleui-x/elementui/theme-chalk/alert.css
+simpleui/static/admin/simpleui-x/elementui/theme-chalk/aside.css
+simpleui/static/admin/simpleui-x/elementui/theme-chalk/autocomplete.css
+simpleui/static/admin/simpleui-x/elementui/theme-chalk/avatar.css
+simpleui/static/admin/simpleui-x/elementui/theme-chalk/backtop.css
+simpleui/static/admin/simpleui-x/elementui/theme-chalk/badge.css
+simpleui/static/admin/simpleui-x/elementui/theme-chalk/base.css
+simpleui/static/admin/simpleui-x/elementui/theme-chalk/breadcrumb-item.css
+simpleui/static/admin/simpleui-x/elementui/theme-chalk/breadcrumb.css
+simpleui/static/admin/simpleui-x/elementui/theme-chalk/button-group.css
+simpleui/static/admin/simpleui-x/elementui/theme-chalk/button.css
+simpleui/static/admin/simpleui-x/elementui/theme-chalk/calendar.css
+simpleui/static/admin/simpleui-x/elementui/theme-chalk/card.css
+simpleui/static/admin/simpleui-x/elementui/theme-chalk/carousel-item.css
+simpleui/static/admin/simpleui-x/elementui/theme-chalk/carousel.css
+simpleui/static/admin/simpleui-x/elementui/theme-chalk/cascader-panel.css
+simpleui/static/admin/simpleui-x/elementui/theme-chalk/cascader.css
+simpleui/static/admin/simpleui-x/elementui/theme-chalk/checkbox-button.css
+simpleui/static/admin/simpleui-x/elementui/theme-chalk/checkbox-group.css
+simpleui/static/admin/simpleui-x/elementui/theme-chalk/checkbox.css
+simpleui/static/admin/simpleui-x/elementui/theme-chalk/col.css
+simpleui/static/admin/simpleui-x/elementui/theme-chalk/collapse-item.css
+simpleui/static/admin/simpleui-x/elementui/theme-chalk/collapse.css
+simpleui/static/admin/simpleui-x/elementui/theme-chalk/color-picker.css
+simpleui/static/admin/simpleui-x/elementui/theme-chalk/container.css
+simpleui/static/admin/simpleui-x/elementui/theme-chalk/date-picker.css
+simpleui/static/admin/simpleui-x/elementui/theme-chalk/dialog.css
+simpleui/static/admin/simpleui-x/elementui/theme-chalk/display.css
+simpleui/static/admin/simpleui-x/elementui/theme-chalk/divider.css
+simpleui/static/admin/simpleui-x/elementui/theme-chalk/drawer.css
+simpleui/static/admin/simpleui-x/elementui/theme-chalk/dropdown-item.css
+simpleui/static/admin/simpleui-x/elementui/theme-chalk/dropdown-menu.css
+simpleui/static/admin/simpleui-x/elementui/theme-chalk/dropdown.css
+simpleui/static/admin/simpleui-x/elementui/theme-chalk/footer.css
+simpleui/static/admin/simpleui-x/elementui/theme-chalk/form-item.css
+simpleui/static/admin/simpleui-x/elementui/theme-chalk/form.css
+simpleui/static/admin/simpleui-x/elementui/theme-chalk/header.css
+simpleui/static/admin/simpleui-x/elementui/theme-chalk/icon.css
+simpleui/static/admin/simpleui-x/elementui/theme-chalk/image.css
+simpleui/static/admin/simpleui-x/elementui/theme-chalk/index.css
+simpleui/static/admin/simpleui-x/elementui/theme-chalk/infinite-scroll.css
+simpleui/static/admin/simpleui-x/elementui/theme-chalk/infiniteScroll.css
+simpleui/static/admin/simpleui-x/elementui/theme-chalk/input-number.css
+simpleui/static/admin/simpleui-x/elementui/theme-chalk/input.css
+simpleui/static/admin/simpleui-x/elementui/theme-chalk/link.css
+simpleui/static/admin/simpleui-x/elementui/theme-chalk/loading.css
+simpleui/static/admin/simpleui-x/elementui/theme-chalk/main.css
+simpleui/static/admin/simpleui-x/elementui/theme-chalk/menu-item-group.css
+simpleui/static/admin/simpleui-x/elementui/theme-chalk/menu-item.css
+simpleui/static/admin/simpleui-x/elementui/theme-chalk/menu.css
+simpleui/static/admin/simpleui-x/elementui/theme-chalk/message-box.css
+simpleui/static/admin/simpleui-x/elementui/theme-chalk/message.css
+simpleui/static/admin/simpleui-x/elementui/theme-chalk/notification.css
+simpleui/static/admin/simpleui-x/elementui/theme-chalk/option-group.css
+simpleui/static/admin/simpleui-x/elementui/theme-chalk/option.css
+simpleui/static/admin/simpleui-x/elementui/theme-chalk/page-header.css
+simpleui/static/admin/simpleui-x/elementui/theme-chalk/pagination.css
+simpleui/static/admin/simpleui-x/elementui/theme-chalk/popover.css
+simpleui/static/admin/simpleui-x/elementui/theme-chalk/popper.css
+simpleui/static/admin/simpleui-x/elementui/theme-chalk/progress.css
+simpleui/static/admin/simpleui-x/elementui/theme-chalk/radio-button.css
+simpleui/static/admin/simpleui-x/elementui/theme-chalk/radio-group.css
+simpleui/static/admin/simpleui-x/elementui/theme-chalk/radio.css
+simpleui/static/admin/simpleui-x/elementui/theme-chalk/rate.css
+simpleui/static/admin/simpleui-x/elementui/theme-chalk/reset.css
+simpleui/static/admin/simpleui-x/elementui/theme-chalk/row.css
+simpleui/static/admin/simpleui-x/elementui/theme-chalk/scrollbar.css
+simpleui/static/admin/simpleui-x/elementui/theme-chalk/select-dropdown.css
+simpleui/static/admin/simpleui-x/elementui/theme-chalk/select.css
+simpleui/static/admin/simpleui-x/elementui/theme-chalk/slider.css
+simpleui/static/admin/simpleui-x/elementui/theme-chalk/spinner.css
+simpleui/static/admin/simpleui-x/elementui/theme-chalk/step.css
+simpleui/static/admin/simpleui-x/elementui/theme-chalk/steps.css
+simpleui/static/admin/simpleui-x/elementui/theme-chalk/submenu.css
+simpleui/static/admin/simpleui-x/elementui/theme-chalk/switch.css
+simpleui/static/admin/simpleui-x/elementui/theme-chalk/tab-pane.css
+simpleui/static/admin/simpleui-x/elementui/theme-chalk/table-column.css
+simpleui/static/admin/simpleui-x/elementui/theme-chalk/table.css
+simpleui/static/admin/simpleui-x/elementui/theme-chalk/tabs.css
+simpleui/static/admin/simpleui-x/elementui/theme-chalk/tag.css
+simpleui/static/admin/simpleui-x/elementui/theme-chalk/time-picker.css
+simpleui/static/admin/simpleui-x/elementui/theme-chalk/time-select.css
+simpleui/static/admin/simpleui-x/elementui/theme-chalk/timeline-item.css
+simpleui/static/admin/simpleui-x/elementui/theme-chalk/timeline.css
+simpleui/static/admin/simpleui-x/elementui/theme-chalk/tooltip.css
+simpleui/static/admin/simpleui-x/elementui/theme-chalk/transfer.css
+simpleui/static/admin/simpleui-x/elementui/theme-chalk/tree.css
+simpleui/static/admin/simpleui-x/elementui/theme-chalk/upload.css
+simpleui/static/admin/simpleui-x/elementui/theme-chalk/fonts/element-icons.ttf
+simpleui/static/admin/simpleui-x/elementui/theme-chalk/fonts/element-icons.woff
+simpleui/static/admin/simpleui-x/elementui/transitions/collapse-transition.js
+simpleui/static/admin/simpleui-x/elementui/umd/locale/af-ZA.js
+simpleui/static/admin/simpleui-x/elementui/umd/locale/ar.js
+simpleui/static/admin/simpleui-x/elementui/umd/locale/bg.js
+simpleui/static/admin/simpleui-x/elementui/umd/locale/ca.js
+simpleui/static/admin/simpleui-x/elementui/umd/locale/cs-CZ.js
+simpleui/static/admin/simpleui-x/elementui/umd/locale/da.js
+simpleui/static/admin/simpleui-x/elementui/umd/locale/de.js
+simpleui/static/admin/simpleui-x/elementui/umd/locale/ee.js
+simpleui/static/admin/simpleui-x/elementui/umd/locale/el.js
+simpleui/static/admin/simpleui-x/elementui/umd/locale/en.js
+simpleui/static/admin/simpleui-x/elementui/umd/locale/es.js
+simpleui/static/admin/simpleui-x/elementui/umd/locale/eu.js
+simpleui/static/admin/simpleui-x/elementui/umd/locale/fa.js
+simpleui/static/admin/simpleui-x/elementui/umd/locale/fi.js
+simpleui/static/admin/simpleui-x/elementui/umd/locale/fr.js
+simpleui/static/admin/simpleui-x/elementui/umd/locale/he.js
+simpleui/static/admin/simpleui-x/elementui/umd/locale/hr.js
+simpleui/static/admin/simpleui-x/elementui/umd/locale/hu.js
+simpleui/static/admin/simpleui-x/elementui/umd/locale/hy-AM.js
+simpleui/static/admin/simpleui-x/elementui/umd/locale/id.js
+simpleui/static/admin/simpleui-x/elementui/umd/locale/it.js
+simpleui/static/admin/simpleui-x/elementui/umd/locale/ja.js
+simpleui/static/admin/simpleui-x/elementui/umd/locale/kg.js
+simpleui/static/admin/simpleui-x/elementui/umd/locale/km.js
+simpleui/static/admin/simpleui-x/elementui/umd/locale/ko.js
+simpleui/static/admin/simpleui-x/elementui/umd/locale/ku.js
+simpleui/static/admin/simpleui-x/elementui/umd/locale/kz.js
+simpleui/static/admin/simpleui-x/elementui/umd/locale/lt.js
+simpleui/static/admin/simpleui-x/elementui/umd/locale/lv.js
+simpleui/static/admin/simpleui-x/elementui/umd/locale/mn.js
+simpleui/static/admin/simpleui-x/elementui/umd/locale/nb-NO.js
+simpleui/static/admin/simpleui-x/elementui/umd/locale/nl.js
+simpleui/static/admin/simpleui-x/elementui/umd/locale/pl.js
+simpleui/static/admin/simpleui-x/elementui/umd/locale/pt-br.js
+simpleui/static/admin/simpleui-x/elementui/umd/locale/pt.js
+simpleui/static/admin/simpleui-x/elementui/umd/locale/ro.js
+simpleui/static/admin/simpleui-x/elementui/umd/locale/ru-RU.js
+simpleui/static/admin/simpleui-x/elementui/umd/locale/sk.js
+simpleui/static/admin/simpleui-x/elementui/umd/locale/sl.js
+simpleui/static/admin/simpleui-x/elementui/umd/locale/sr.js
+simpleui/static/admin/simpleui-x/elementui/umd/locale/sv-SE.js
+simpleui/static/admin/simpleui-x/elementui/umd/locale/ta.js
+simpleui/static/admin/simpleui-x/elementui/umd/locale/th.js
+simpleui/static/admin/simpleui-x/elementui/umd/locale/tk.js
+simpleui/static/admin/simpleui-x/elementui/umd/locale/tr-TR.js
+simpleui/static/admin/simpleui-x/elementui/umd/locale/ua.js
+simpleui/static/admin/simpleui-x/elementui/umd/locale/ug-CN.js
+simpleui/static/admin/simpleui-x/elementui/umd/locale/uz-UZ.js
+simpleui/static/admin/simpleui-x/elementui/umd/locale/vi.js
+simpleui/static/admin/simpleui-x/elementui/umd/locale/zh-CN.js
+simpleui/static/admin/simpleui-x/elementui/umd/locale/zh-TW.js
+simpleui/static/admin/simpleui-x/elementui/utils/after-leave.js
+simpleui/static/admin/simpleui-x/elementui/utils/aria-dialog.js
+simpleui/static/admin/simpleui-x/elementui/utils/aria-utils.js
+simpleui/static/admin/simpleui-x/elementui/utils/clickoutside.js
+simpleui/static/admin/simpleui-x/elementui/utils/date-util.js
+simpleui/static/admin/simpleui-x/elementui/utils/date.js
+simpleui/static/admin/simpleui-x/elementui/utils/dom.js
+simpleui/static/admin/simpleui-x/elementui/utils/merge.js
+simpleui/static/admin/simpleui-x/elementui/utils/popper.js
+simpleui/static/admin/simpleui-x/elementui/utils/resize-event.js
+simpleui/static/admin/simpleui-x/elementui/utils/scroll-into-view.js
+simpleui/static/admin/simpleui-x/elementui/utils/scrollbar-width.js
+simpleui/static/admin/simpleui-x/elementui/utils/shared.js
+simpleui/static/admin/simpleui-x/elementui/utils/types.js
+simpleui/static/admin/simpleui-x/elementui/utils/util.js
+simpleui/static/admin/simpleui-x/elementui/utils/vdom.js
+simpleui/static/admin/simpleui-x/elementui/utils/vue-popper.js
+simpleui/static/admin/simpleui-x/elementui/utils/menu/aria-menubar.js
+simpleui/static/admin/simpleui-x/elementui/utils/menu/aria-menuitem.js
+simpleui/static/admin/simpleui-x/elementui/utils/menu/aria-submenu.js
+simpleui/static/admin/simpleui-x/elementui/utils/popup/index.js
+simpleui/static/admin/simpleui-x/elementui/utils/popup/popup-manager.js
+simpleui/static/admin/simpleui-x/fontawesome-free-5.8.1-web/css/all.min.css
+simpleui/static/admin/simpleui-x/fontawesome-free-5.8.1-web/webfonts/fa-brands-400.eot
+simpleui/static/admin/simpleui-x/fontawesome-free-5.8.1-web/webfonts/fa-brands-400.svg
+simpleui/static/admin/simpleui-x/fontawesome-free-5.8.1-web/webfonts/fa-brands-400.ttf
+simpleui/static/admin/simpleui-x/fontawesome-free-5.8.1-web/webfonts/fa-brands-400.woff
+simpleui/static/admin/simpleui-x/fontawesome-free-5.8.1-web/webfonts/fa-brands-400.woff2
+simpleui/static/admin/simpleui-x/fontawesome-free-5.8.1-web/webfonts/fa-regular-400.eot
+simpleui/static/admin/simpleui-x/fontawesome-free-5.8.1-web/webfonts/fa-regular-400.svg
+simpleui/static/admin/simpleui-x/fontawesome-free-5.8.1-web/webfonts/fa-regular-400.ttf
+simpleui/static/admin/simpleui-x/fontawesome-free-5.8.1-web/webfonts/fa-regular-400.woff
+simpleui/static/admin/simpleui-x/fontawesome-free-5.8.1-web/webfonts/fa-regular-400.woff2
+simpleui/static/admin/simpleui-x/fontawesome-free-5.8.1-web/webfonts/fa-solid-900.eot
+simpleui/static/admin/simpleui-x/fontawesome-free-5.8.1-web/webfonts/fa-solid-900.svg
+simpleui/static/admin/simpleui-x/fontawesome-free-5.8.1-web/webfonts/fa-solid-900.ttf
+simpleui/static/admin/simpleui-x/fontawesome-free-5.8.1-web/webfonts/fa-solid-900.woff
+simpleui/static/admin/simpleui-x/fontawesome-free-5.8.1-web/webfonts/fa-solid-900.woff2
+simpleui/static/admin/simpleui-x/img/bg.svg
+simpleui/static/admin/simpleui-x/img/favicon.png
+simpleui/static/admin/simpleui-x/img/logo.png
+simpleui/static/admin/simpleui-x/js/cookie.js
+simpleui/static/admin/simpleui-x/js/index.js
+simpleui/static/admin/simpleui-x/js/language.js
+simpleui/static/admin/simpleui-x/js/login.js
+simpleui/static/admin/simpleui-x/js/vue.min.js
+simpleui/static/admin/simpleui-x/locale/en-us.js
+simpleui/static/admin/simpleui-x/locale/zh-hans.js
+simpleui/static/admin/simpleui-x/particles/app.js
+simpleui/static/admin/simpleui-x/particles/particles.js
+simpleui/static/admin/simpleui-x/theme/admin.lte.css
+simpleui/static/admin/simpleui-x/theme/admin.lte.css.map
+simpleui/static/admin/simpleui-x/theme/admin.lte.less
+simpleui/static/admin/simpleui-x/theme/aircraft.css
+simpleui/static/admin/simpleui-x/theme/aircraft.css.map
+simpleui/static/admin/simpleui-x/theme/aircraft.less
+simpleui/static/admin/simpleui-x/theme/ant.design.css
+simpleui/static/admin/simpleui-x/theme/ant.design.css.map
+simpleui/static/admin/simpleui-x/theme/ant.design.less
+simpleui/static/admin/simpleui-x/theme/base.less
+simpleui/static/admin/simpleui-x/theme/black.css
+simpleui/static/admin/simpleui-x/theme/black.css.map
+simpleui/static/admin/simpleui-x/theme/black.less
+simpleui/static/admin/simpleui-x/theme/dark.green.css
+simpleui/static/admin/simpleui-x/theme/dark.green.css.map
+simpleui/static/admin/simpleui-x/theme/dark.green.less
+simpleui/static/admin/simpleui-x/theme/e-black-pro.css
+simpleui/static/admin/simpleui-x/theme/e-black-pro.css.map
+simpleui/static/admin/simpleui-x/theme/e-black-pro.less
+simpleui/static/admin/simpleui-x/theme/e-black.css
+simpleui/static/admin/simpleui-x/theme/e-black.css.map
+simpleui/static/admin/simpleui-x/theme/e-black.less
+simpleui/static/admin/simpleui-x/theme/e-blue-pro.css
+simpleui/static/admin/simpleui-x/theme/e-blue-pro.css.map
+simpleui/static/admin/simpleui-x/theme/e-blue-pro.less
+simpleui/static/admin/simpleui-x/theme/e-blue.css
+simpleui/static/admin/simpleui-x/theme/e-blue.css.map
+simpleui/static/admin/simpleui-x/theme/e-blue.less
+simpleui/static/admin/simpleui-x/theme/e-green-pro.css
+simpleui/static/admin/simpleui-x/theme/e-green-pro.css.map
+simpleui/static/admin/simpleui-x/theme/e-green-pro.less
+simpleui/static/admin/simpleui-x/theme/e-green.css
+simpleui/static/admin/simpleui-x/theme/e-green.css.map
+simpleui/static/admin/simpleui-x/theme/e-green.less
+simpleui/static/admin/simpleui-x/theme/e-purple-pro.css
+simpleui/static/admin/simpleui-x/theme/e-purple-pro.css.map
+simpleui/static/admin/simpleui-x/theme/e-purple-pro.less
+simpleui/static/admin/simpleui-x/theme/e-purple.css
+simpleui/static/admin/simpleui-x/theme/e-purple.css.map
+simpleui/static/admin/simpleui-x/theme/e-purple.less
+simpleui/static/admin/simpleui-x/theme/e-red-pro.css
+simpleui/static/admin/simpleui-x/theme/e-red-pro.css.map
+simpleui/static/admin/simpleui-x/theme/e-red-pro.less
+simpleui/static/admin/simpleui-x/theme/e-red.css
+simpleui/static/admin/simpleui-x/theme/e-red.css.map
+simpleui/static/admin/simpleui-x/theme/e-red.less
+simpleui/static/admin/simpleui-x/theme/element.css
+simpleui/static/admin/simpleui-x/theme/element.css.map
+simpleui/static/admin/simpleui-x/theme/element.less
+simpleui/static/admin/simpleui-x/theme/gray.css
+simpleui/static/admin/simpleui-x/theme/gray.css.map
+simpleui/static/admin/simpleui-x/theme/gray.less
+simpleui/static/admin/simpleui-x/theme/green.css
+simpleui/static/admin/simpleui-x/theme/green.css.map
+simpleui/static/admin/simpleui-x/theme/green.less
+simpleui/static/admin/simpleui-x/theme/highdmin.css
+simpleui/static/admin/simpleui-x/theme/highdmin.css.map
+simpleui/static/admin/simpleui-x/theme/highdmin.less
+simpleui/static/admin/simpleui-x/theme/layui.css
+simpleui/static/admin/simpleui-x/theme/layui.css.map
+simpleui/static/admin/simpleui-x/theme/layui.less
+simpleui/static/admin/simpleui-x/theme/light.css
+simpleui/static/admin/simpleui-x/theme/light.css.map
+simpleui/static/admin/simpleui-x/theme/light.less
+simpleui/static/admin/simpleui-x/theme/orange.css
+simpleui/static/admin/simpleui-x/theme/orange.css.map
+simpleui/static/admin/simpleui-x/theme/orange.less
+simpleui/static/admin/simpleui-x/theme/purple.css
+simpleui/static/admin/simpleui-x/theme/purple.css.map
+simpleui/static/admin/simpleui-x/theme/purple.less
+simpleui/static/admin/simpleui-x/theme/simpleui.css
+simpleui/static/admin/simpleui-x/theme/simpleui.css.map
+simpleui/static/admin/simpleui-x/theme/simpleui.less
+simpleui/static/admin/simpleui-x/theme/theme.js
+simpleui/static/admin/simpleui-x/theme/x-blue.css
+simpleui/static/admin/simpleui-x/theme/x-blue.css.map
+simpleui/static/admin/simpleui-x/theme/x-blue.less
+simpleui/static/admin/simpleui-x/theme/x-green.css
+simpleui/static/admin/simpleui-x/theme/x-green.css.map
+simpleui/static/admin/simpleui-x/theme/x-green.less
+simpleui/static/admin/simpleui-x/theme/x-red.css
+simpleui/static/admin/simpleui-x/theme/x-red.css.map
+simpleui/static/admin/simpleui-x/theme/x-red.less
+simpleui/static/admin/simpleui-x/waves/waves.min.css
+simpleui/static/admin/simpleui-x/waves/waves.min.js
+simpleui/static/admin/simpleui-x/waves/waves.min.js.map
+simpleui/static/import_export/action_formats.js
+simpleui/templates/admin/404.html
+simpleui/templates/admin/500.html
+simpleui/templates/admin/actions.html
+simpleui/templates/admin/app_index.html
+simpleui/templates/admin/base.html
+simpleui/templates/admin/base_site.html
+simpleui/templates/admin/change_form.html
+simpleui/templates/admin/change_form_object_tools.html
+simpleui/templates/admin/change_list.html
+simpleui/templates/admin/change_list_object_tools.html
+simpleui/templates/admin/change_list_results.html
+simpleui/templates/admin/date_hierarchy.html
+simpleui/templates/admin/filter.html
+simpleui/templates/admin/home.html
+simpleui/templates/admin/index.html
+simpleui/templates/admin/invalid_setup.html
+simpleui/templates/admin/login.html
+simpleui/templates/admin/object_history.html
+simpleui/templates/admin/pagination.html
+simpleui/templates/admin/popup_response.html
+simpleui/templates/admin/prepopulated_fields_js.html
+simpleui/templates/admin/related_widget_wrapper.html
+simpleui/templates/admin/search_form.html
+simpleui/templates/admin/submit_line.html
+simpleui/templates/admin/includes/css-part.html
+simpleui/templates/admin/includes/fieldset.html
+simpleui/templates/admin/includes/js-part.html
+simpleui/templates/registration/logged_out.html
+simpleui/templates/registration/password_change_done.html
+simpleui/templates/registration/password_change_form.html
+simpleui/templates/registration/password_reset_complete.html
+simpleui/templates/registration/password_reset_confirm.html
+simpleui/templates/registration/password_reset_done.html
+simpleui/templates/registration/password_reset_email.html
+simpleui/templates/registration/password_reset_form.html
+simpleui/templatetags/__init__.py
+simpleui/templatetags/simpletags.py
+simpleui/templatetags/__pycache__/__init__.cpython-37.pyc
+simpleui/templatetags/__pycache__/simpletags.cpython-37.pyc
\ No newline at end of file
diff --git a/venv/Lib/site-packages/simpleui-4.0.2-py3.9.egg-info/dependency_links.txt b/venv/Lib/site-packages/simpleui-4.0.2-py3.9.egg-info/dependency_links.txt
new file mode 100644
index 0000000..8b13789
--- /dev/null
+++ b/venv/Lib/site-packages/simpleui-4.0.2-py3.9.egg-info/dependency_links.txt
@@ -0,0 +1 @@
+
diff --git a/venv/Lib/site-packages/simpleui-4.0.2-py3.9.egg-info/installed-files.txt b/venv/Lib/site-packages/simpleui-4.0.2-py3.9.egg-info/installed-files.txt
new file mode 100644
index 0000000..b4cf8ef
--- /dev/null
+++ b/venv/Lib/site-packages/simpleui-4.0.2-py3.9.egg-info/installed-files.txt
@@ -0,0 +1,606 @@
+..\simpleui\__init__.py
+..\simpleui\__pycache__\__init__.cpython-37.pyc
+..\simpleui\__pycache__\__init__.cpython-39.pyc
+..\simpleui\__pycache__\apps.cpython-37.pyc
+..\simpleui\__pycache__\apps.cpython-39.pyc
+..\simpleui\__pycache__\forms.cpython-39.pyc
+..\simpleui\__pycache__\widgets.cpython-39.pyc
+..\simpleui\apps.py
+..\simpleui\forms.py
+..\simpleui\static\admin\css\autocomplete.css
+..\simpleui\static\admin\css\base.css
+..\simpleui\static\admin\css\changelists.css
+..\simpleui\static\admin\css\dashboard.css
+..\simpleui\static\admin\css\fonts.css
+..\simpleui\static\admin\css\forms.css
+..\simpleui\static\admin\css\login.css
+..\simpleui\static\admin\css\responsive.css
+..\simpleui\static\admin\css\responsive_rtl.css
+..\simpleui\static\admin\css\rtl.css
+..\simpleui\static\admin\css\ui.css
+..\simpleui\static\admin\css\vendor\select2\LICENSE-SELECT2.md
+..\simpleui\static\admin\css\vendor\select2\select2.css
+..\simpleui\static\admin\css\vendor\select2\select2.min.css
+..\simpleui\static\admin\css\widgets.css
+..\simpleui\static\admin\fonts\LICENSE.txt
+..\simpleui\static\admin\fonts\README.txt
+..\simpleui\static\admin\fonts\Roboto-Bold-webfont.woff
+..\simpleui\static\admin\fonts\Roboto-Light-webfont.woff
+..\simpleui\static\admin\fonts\Roboto-Regular-webfont.woff
+..\simpleui\static\admin\img\LICENSE
+..\simpleui\static\admin\img\README.txt
+..\simpleui\static\admin\img\calendar-icons.svg
+..\simpleui\static\admin\img\gis\move_vertex_off.svg
+..\simpleui\static\admin\img\gis\move_vertex_on.svg
+..\simpleui\static\admin\img\icon-addlink.svg
+..\simpleui\static\admin\img\icon-alert.svg
+..\simpleui\static\admin\img\icon-calendar.svg
+..\simpleui\static\admin\img\icon-changelink.svg
+..\simpleui\static\admin\img\icon-clock.svg
+..\simpleui\static\admin\img\icon-deletelink.svg
+..\simpleui\static\admin\img\icon-no.svg
+..\simpleui\static\admin\img\icon-unknown-alt.svg
+..\simpleui\static\admin\img\icon-unknown.svg
+..\simpleui\static\admin\img\icon-yes.svg
+..\simpleui\static\admin\img\inline-delete.svg
+..\simpleui\static\admin\img\search.svg
+..\simpleui\static\admin\img\selector-icons.svg
+..\simpleui\static\admin\img\sorting-icons.svg
+..\simpleui\static\admin\img\tooltag-add.svg
+..\simpleui\static\admin\img\tooltag-arrowright.svg
+..\simpleui\static\admin\js\SelectBox.js
+..\simpleui\static\admin\js\SelectFilter2.js
+..\simpleui\static\admin\js\actions.js
+..\simpleui\static\admin\js\actions.min.js
+..\simpleui\static\admin\js\admin\DateTimeShortcuts.js
+..\simpleui\static\admin\js\admin\RelatedObjectLookups.js
+..\simpleui\static\admin\js\autocomplete.js
+..\simpleui\static\admin\js\calendar.js
+..\simpleui\static\admin\js\cancel.js
+..\simpleui\static\admin\js\change_form.js
+..\simpleui\static\admin\js\collapse.js
+..\simpleui\static\admin\js\collapse.min.js
+..\simpleui\static\admin\js\core.js
+..\simpleui\static\admin\js\inlines.js
+..\simpleui\static\admin\js\inlines.min.js
+..\simpleui\static\admin\js\jquery.init.js
+..\simpleui\static\admin\js\popup_response.js
+..\simpleui\static\admin\js\prepopulate.js
+..\simpleui\static\admin\js\prepopulate.min.js
+..\simpleui\static\admin\js\prepopulate_init.js
+..\simpleui\static\admin\js\timeparse.js
+..\simpleui\static\admin\js\urlify.js
+..\simpleui\static\admin\js\vendor\jquery\LICENSE-JQUERY.txt
+..\simpleui\static\admin\js\vendor\jquery\jquery.js
+..\simpleui\static\admin\js\vendor\jquery\jquery.min.js
+..\simpleui\static\admin\js\vendor\select2\LICENSE-SELECT2.md
+..\simpleui\static\admin\js\vendor\select2\i18n\ar.js
+..\simpleui\static\admin\js\vendor\select2\i18n\az.js
+..\simpleui\static\admin\js\vendor\select2\i18n\bg.js
+..\simpleui\static\admin\js\vendor\select2\i18n\ca.js
+..\simpleui\static\admin\js\vendor\select2\i18n\cs.js
+..\simpleui\static\admin\js\vendor\select2\i18n\da.js
+..\simpleui\static\admin\js\vendor\select2\i18n\de.js
+..\simpleui\static\admin\js\vendor\select2\i18n\el.js
+..\simpleui\static\admin\js\vendor\select2\i18n\en.js
+..\simpleui\static\admin\js\vendor\select2\i18n\es.js
+..\simpleui\static\admin\js\vendor\select2\i18n\et.js
+..\simpleui\static\admin\js\vendor\select2\i18n\eu.js
+..\simpleui\static\admin\js\vendor\select2\i18n\fa.js
+..\simpleui\static\admin\js\vendor\select2\i18n\fi.js
+..\simpleui\static\admin\js\vendor\select2\i18n\fr.js
+..\simpleui\static\admin\js\vendor\select2\i18n\gl.js
+..\simpleui\static\admin\js\vendor\select2\i18n\he.js
+..\simpleui\static\admin\js\vendor\select2\i18n\hi.js
+..\simpleui\static\admin\js\vendor\select2\i18n\hr.js
+..\simpleui\static\admin\js\vendor\select2\i18n\hu.js
+..\simpleui\static\admin\js\vendor\select2\i18n\id.js
+..\simpleui\static\admin\js\vendor\select2\i18n\is.js
+..\simpleui\static\admin\js\vendor\select2\i18n\it.js
+..\simpleui\static\admin\js\vendor\select2\i18n\ja.js
+..\simpleui\static\admin\js\vendor\select2\i18n\km.js
+..\simpleui\static\admin\js\vendor\select2\i18n\ko.js
+..\simpleui\static\admin\js\vendor\select2\i18n\lt.js
+..\simpleui\static\admin\js\vendor\select2\i18n\lv.js
+..\simpleui\static\admin\js\vendor\select2\i18n\mk.js
+..\simpleui\static\admin\js\vendor\select2\i18n\ms.js
+..\simpleui\static\admin\js\vendor\select2\i18n\nb.js
+..\simpleui\static\admin\js\vendor\select2\i18n\nl.js
+..\simpleui\static\admin\js\vendor\select2\i18n\pl.js
+..\simpleui\static\admin\js\vendor\select2\i18n\pt-BR.js
+..\simpleui\static\admin\js\vendor\select2\i18n\pt.js
+..\simpleui\static\admin\js\vendor\select2\i18n\ro.js
+..\simpleui\static\admin\js\vendor\select2\i18n\ru.js
+..\simpleui\static\admin\js\vendor\select2\i18n\sk.js
+..\simpleui\static\admin\js\vendor\select2\i18n\sr-Cyrl.js
+..\simpleui\static\admin\js\vendor\select2\i18n\sr.js
+..\simpleui\static\admin\js\vendor\select2\i18n\sv.js
+..\simpleui\static\admin\js\vendor\select2\i18n\th.js
+..\simpleui\static\admin\js\vendor\select2\i18n\tr.js
+..\simpleui\static\admin\js\vendor\select2\i18n\uk.js
+..\simpleui\static\admin\js\vendor\select2\i18n\vi.js
+..\simpleui\static\admin\js\vendor\select2\i18n\zh-CN.js
+..\simpleui\static\admin\js\vendor\select2\i18n\zh-TW.js
+..\simpleui\static\admin\js\vendor\select2\select2.full.js
+..\simpleui\static\admin\js\vendor\select2\select2.full.min.js
+..\simpleui\static\admin\js\vendor\xregexp\LICENSE-XREGEXP.txt
+..\simpleui\static\admin\js\vendor\xregexp\xregexp.js
+..\simpleui\static\admin\js\vendor\xregexp\xregexp.min.js
+..\simpleui\static\admin\simpleui-x\automatic\dicts.js
+..\simpleui\static\admin\simpleui-x\automatic\segment.js
+..\simpleui\static\admin\simpleui-x\css\base.css
+..\simpleui\static\admin\simpleui-x\css\base.css.map
+..\simpleui\static\admin\simpleui-x\css\base.less
+..\simpleui\static\admin\simpleui-x\css\index.css
+..\simpleui\static\admin\simpleui-x\css\index.css.map
+..\simpleui\static\admin\simpleui-x\css\index.less
+..\simpleui\static\admin\simpleui-x\css\login.css
+..\simpleui\static\admin\simpleui-x\elementui\alert.js
+..\simpleui\static\admin\simpleui-x\elementui\aside.js
+..\simpleui\static\admin\simpleui-x\elementui\autocomplete.js
+..\simpleui\static\admin\simpleui-x\elementui\avatar.js
+..\simpleui\static\admin\simpleui-x\elementui\backtop.js
+..\simpleui\static\admin\simpleui-x\elementui\badge.js
+..\simpleui\static\admin\simpleui-x\elementui\breadcrumb-item.js
+..\simpleui\static\admin\simpleui-x\elementui\breadcrumb.js
+..\simpleui\static\admin\simpleui-x\elementui\button-group.js
+..\simpleui\static\admin\simpleui-x\elementui\button.js
+..\simpleui\static\admin\simpleui-x\elementui\calendar.js
+..\simpleui\static\admin\simpleui-x\elementui\card.js
+..\simpleui\static\admin\simpleui-x\elementui\carousel-item.js
+..\simpleui\static\admin\simpleui-x\elementui\carousel.js
+..\simpleui\static\admin\simpleui-x\elementui\cascader-panel.js
+..\simpleui\static\admin\simpleui-x\elementui\cascader.js
+..\simpleui\static\admin\simpleui-x\elementui\checkbox-button.js
+..\simpleui\static\admin\simpleui-x\elementui\checkbox-group.js
+..\simpleui\static\admin\simpleui-x\elementui\checkbox.js
+..\simpleui\static\admin\simpleui-x\elementui\col.js
+..\simpleui\static\admin\simpleui-x\elementui\collapse-item.js
+..\simpleui\static\admin\simpleui-x\elementui\collapse.js
+..\simpleui\static\admin\simpleui-x\elementui\color-picker.js
+..\simpleui\static\admin\simpleui-x\elementui\container.js
+..\simpleui\static\admin\simpleui-x\elementui\date-picker.js
+..\simpleui\static\admin\simpleui-x\elementui\dialog.js
+..\simpleui\static\admin\simpleui-x\elementui\directives\mousewheel.js
+..\simpleui\static\admin\simpleui-x\elementui\directives\repeat-click.js
+..\simpleui\static\admin\simpleui-x\elementui\divider.js
+..\simpleui\static\admin\simpleui-x\elementui\drawer.js
+..\simpleui\static\admin\simpleui-x\elementui\dropdown-item.js
+..\simpleui\static\admin\simpleui-x\elementui\dropdown-menu.js
+..\simpleui\static\admin\simpleui-x\elementui\dropdown.js
+..\simpleui\static\admin\simpleui-x\elementui\element-ui.common.js
+..\simpleui\static\admin\simpleui-x\elementui\footer.js
+..\simpleui\static\admin\simpleui-x\elementui\form-item.js
+..\simpleui\static\admin\simpleui-x\elementui\form.js
+..\simpleui\static\admin\simpleui-x\elementui\header.js
+..\simpleui\static\admin\simpleui-x\elementui\icon.js
+..\simpleui\static\admin\simpleui-x\elementui\image.js
+..\simpleui\static\admin\simpleui-x\elementui\index.js
+..\simpleui\static\admin\simpleui-x\elementui\infinite-scroll.js
+..\simpleui\static\admin\simpleui-x\elementui\input-number.js
+..\simpleui\static\admin\simpleui-x\elementui\input.js
+..\simpleui\static\admin\simpleui-x\elementui\link.js
+..\simpleui\static\admin\simpleui-x\elementui\loading.js
+..\simpleui\static\admin\simpleui-x\elementui\locale\format.js
+..\simpleui\static\admin\simpleui-x\elementui\locale\index.js
+..\simpleui\static\admin\simpleui-x\elementui\locale\lang\af-ZA.js
+..\simpleui\static\admin\simpleui-x\elementui\locale\lang\ar.js
+..\simpleui\static\admin\simpleui-x\elementui\locale\lang\bg.js
+..\simpleui\static\admin\simpleui-x\elementui\locale\lang\ca.js
+..\simpleui\static\admin\simpleui-x\elementui\locale\lang\cs-CZ.js
+..\simpleui\static\admin\simpleui-x\elementui\locale\lang\da.js
+..\simpleui\static\admin\simpleui-x\elementui\locale\lang\de.js
+..\simpleui\static\admin\simpleui-x\elementui\locale\lang\ee.js
+..\simpleui\static\admin\simpleui-x\elementui\locale\lang\el.js
+..\simpleui\static\admin\simpleui-x\elementui\locale\lang\en.js
+..\simpleui\static\admin\simpleui-x\elementui\locale\lang\es.js
+..\simpleui\static\admin\simpleui-x\elementui\locale\lang\eu.js
+..\simpleui\static\admin\simpleui-x\elementui\locale\lang\fa.js
+..\simpleui\static\admin\simpleui-x\elementui\locale\lang\fi.js
+..\simpleui\static\admin\simpleui-x\elementui\locale\lang\fr.js
+..\simpleui\static\admin\simpleui-x\elementui\locale\lang\he.js
+..\simpleui\static\admin\simpleui-x\elementui\locale\lang\hr.js
+..\simpleui\static\admin\simpleui-x\elementui\locale\lang\hu.js
+..\simpleui\static\admin\simpleui-x\elementui\locale\lang\hy-AM.js
+..\simpleui\static\admin\simpleui-x\elementui\locale\lang\id.js
+..\simpleui\static\admin\simpleui-x\elementui\locale\lang\it.js
+..\simpleui\static\admin\simpleui-x\elementui\locale\lang\ja.js
+..\simpleui\static\admin\simpleui-x\elementui\locale\lang\kg.js
+..\simpleui\static\admin\simpleui-x\elementui\locale\lang\km.js
+..\simpleui\static\admin\simpleui-x\elementui\locale\lang\ko.js
+..\simpleui\static\admin\simpleui-x\elementui\locale\lang\ku.js
+..\simpleui\static\admin\simpleui-x\elementui\locale\lang\kz.js
+..\simpleui\static\admin\simpleui-x\elementui\locale\lang\lt.js
+..\simpleui\static\admin\simpleui-x\elementui\locale\lang\lv.js
+..\simpleui\static\admin\simpleui-x\elementui\locale\lang\mn.js
+..\simpleui\static\admin\simpleui-x\elementui\locale\lang\nb-NO.js
+..\simpleui\static\admin\simpleui-x\elementui\locale\lang\nl.js
+..\simpleui\static\admin\simpleui-x\elementui\locale\lang\pl.js
+..\simpleui\static\admin\simpleui-x\elementui\locale\lang\pt-br.js
+..\simpleui\static\admin\simpleui-x\elementui\locale\lang\pt.js
+..\simpleui\static\admin\simpleui-x\elementui\locale\lang\ro.js
+..\simpleui\static\admin\simpleui-x\elementui\locale\lang\ru-RU.js
+..\simpleui\static\admin\simpleui-x\elementui\locale\lang\sk.js
+..\simpleui\static\admin\simpleui-x\elementui\locale\lang\sl.js
+..\simpleui\static\admin\simpleui-x\elementui\locale\lang\sr.js
+..\simpleui\static\admin\simpleui-x\elementui\locale\lang\sv-SE.js
+..\simpleui\static\admin\simpleui-x\elementui\locale\lang\ta.js
+..\simpleui\static\admin\simpleui-x\elementui\locale\lang\th.js
+..\simpleui\static\admin\simpleui-x\elementui\locale\lang\tk.js
+..\simpleui\static\admin\simpleui-x\elementui\locale\lang\tr-TR.js
+..\simpleui\static\admin\simpleui-x\elementui\locale\lang\ua.js
+..\simpleui\static\admin\simpleui-x\elementui\locale\lang\ug-CN.js
+..\simpleui\static\admin\simpleui-x\elementui\locale\lang\uz-UZ.js
+..\simpleui\static\admin\simpleui-x\elementui\locale\lang\vi.js
+..\simpleui\static\admin\simpleui-x\elementui\locale\lang\zh-CN.js
+..\simpleui\static\admin\simpleui-x\elementui\locale\lang\zh-TW.js
+..\simpleui\static\admin\simpleui-x\elementui\main.js
+..\simpleui\static\admin\simpleui-x\elementui\menu-item-group.js
+..\simpleui\static\admin\simpleui-x\elementui\menu-item.js
+..\simpleui\static\admin\simpleui-x\elementui\menu.js
+..\simpleui\static\admin\simpleui-x\elementui\message-box.js
+..\simpleui\static\admin\simpleui-x\elementui\message.js
+..\simpleui\static\admin\simpleui-x\elementui\mixins\emitter.js
+..\simpleui\static\admin\simpleui-x\elementui\mixins\focus.js
+..\simpleui\static\admin\simpleui-x\elementui\mixins\locale.js
+..\simpleui\static\admin\simpleui-x\elementui\mixins\migrating.js
+..\simpleui\static\admin\simpleui-x\elementui\notification.js
+..\simpleui\static\admin\simpleui-x\elementui\option-group.js
+..\simpleui\static\admin\simpleui-x\elementui\option.js
+..\simpleui\static\admin\simpleui-x\elementui\page-header.js
+..\simpleui\static\admin\simpleui-x\elementui\pagination.js
+..\simpleui\static\admin\simpleui-x\elementui\popover.js
+..\simpleui\static\admin\simpleui-x\elementui\progress.js
+..\simpleui\static\admin\simpleui-x\elementui\radio-button.js
+..\simpleui\static\admin\simpleui-x\elementui\radio-group.js
+..\simpleui\static\admin\simpleui-x\elementui\radio.js
+..\simpleui\static\admin\simpleui-x\elementui\rate.js
+..\simpleui\static\admin\simpleui-x\elementui\row.js
+..\simpleui\static\admin\simpleui-x\elementui\scrollbar.js
+..\simpleui\static\admin\simpleui-x\elementui\select.js
+..\simpleui\static\admin\simpleui-x\elementui\slider.js
+..\simpleui\static\admin\simpleui-x\elementui\spinner.js
+..\simpleui\static\admin\simpleui-x\elementui\step.js
+..\simpleui\static\admin\simpleui-x\elementui\steps.js
+..\simpleui\static\admin\simpleui-x\elementui\submenu.js
+..\simpleui\static\admin\simpleui-x\elementui\switch.js
+..\simpleui\static\admin\simpleui-x\elementui\tab-pane.js
+..\simpleui\static\admin\simpleui-x\elementui\table-column.js
+..\simpleui\static\admin\simpleui-x\elementui\table.js
+..\simpleui\static\admin\simpleui-x\elementui\tabs.js
+..\simpleui\static\admin\simpleui-x\elementui\tag.js
+..\simpleui\static\admin\simpleui-x\elementui\theme-chalk\alert.css
+..\simpleui\static\admin\simpleui-x\elementui\theme-chalk\aside.css
+..\simpleui\static\admin\simpleui-x\elementui\theme-chalk\autocomplete.css
+..\simpleui\static\admin\simpleui-x\elementui\theme-chalk\avatar.css
+..\simpleui\static\admin\simpleui-x\elementui\theme-chalk\backtop.css
+..\simpleui\static\admin\simpleui-x\elementui\theme-chalk\badge.css
+..\simpleui\static\admin\simpleui-x\elementui\theme-chalk\base.css
+..\simpleui\static\admin\simpleui-x\elementui\theme-chalk\breadcrumb-item.css
+..\simpleui\static\admin\simpleui-x\elementui\theme-chalk\breadcrumb.css
+..\simpleui\static\admin\simpleui-x\elementui\theme-chalk\button-group.css
+..\simpleui\static\admin\simpleui-x\elementui\theme-chalk\button.css
+..\simpleui\static\admin\simpleui-x\elementui\theme-chalk\calendar.css
+..\simpleui\static\admin\simpleui-x\elementui\theme-chalk\card.css
+..\simpleui\static\admin\simpleui-x\elementui\theme-chalk\carousel-item.css
+..\simpleui\static\admin\simpleui-x\elementui\theme-chalk\carousel.css
+..\simpleui\static\admin\simpleui-x\elementui\theme-chalk\cascader-panel.css
+..\simpleui\static\admin\simpleui-x\elementui\theme-chalk\cascader.css
+..\simpleui\static\admin\simpleui-x\elementui\theme-chalk\checkbox-button.css
+..\simpleui\static\admin\simpleui-x\elementui\theme-chalk\checkbox-group.css
+..\simpleui\static\admin\simpleui-x\elementui\theme-chalk\checkbox.css
+..\simpleui\static\admin\simpleui-x\elementui\theme-chalk\col.css
+..\simpleui\static\admin\simpleui-x\elementui\theme-chalk\collapse-item.css
+..\simpleui\static\admin\simpleui-x\elementui\theme-chalk\collapse.css
+..\simpleui\static\admin\simpleui-x\elementui\theme-chalk\color-picker.css
+..\simpleui\static\admin\simpleui-x\elementui\theme-chalk\container.css
+..\simpleui\static\admin\simpleui-x\elementui\theme-chalk\date-picker.css
+..\simpleui\static\admin\simpleui-x\elementui\theme-chalk\dialog.css
+..\simpleui\static\admin\simpleui-x\elementui\theme-chalk\display.css
+..\simpleui\static\admin\simpleui-x\elementui\theme-chalk\divider.css
+..\simpleui\static\admin\simpleui-x\elementui\theme-chalk\drawer.css
+..\simpleui\static\admin\simpleui-x\elementui\theme-chalk\dropdown-item.css
+..\simpleui\static\admin\simpleui-x\elementui\theme-chalk\dropdown-menu.css
+..\simpleui\static\admin\simpleui-x\elementui\theme-chalk\dropdown.css
+..\simpleui\static\admin\simpleui-x\elementui\theme-chalk\fonts\element-icons.ttf
+..\simpleui\static\admin\simpleui-x\elementui\theme-chalk\fonts\element-icons.woff
+..\simpleui\static\admin\simpleui-x\elementui\theme-chalk\footer.css
+..\simpleui\static\admin\simpleui-x\elementui\theme-chalk\form-item.css
+..\simpleui\static\admin\simpleui-x\elementui\theme-chalk\form.css
+..\simpleui\static\admin\simpleui-x\elementui\theme-chalk\header.css
+..\simpleui\static\admin\simpleui-x\elementui\theme-chalk\icon.css
+..\simpleui\static\admin\simpleui-x\elementui\theme-chalk\image.css
+..\simpleui\static\admin\simpleui-x\elementui\theme-chalk\index.css
+..\simpleui\static\admin\simpleui-x\elementui\theme-chalk\infinite-scroll.css
+..\simpleui\static\admin\simpleui-x\elementui\theme-chalk\infiniteScroll.css
+..\simpleui\static\admin\simpleui-x\elementui\theme-chalk\input-number.css
+..\simpleui\static\admin\simpleui-x\elementui\theme-chalk\input.css
+..\simpleui\static\admin\simpleui-x\elementui\theme-chalk\link.css
+..\simpleui\static\admin\simpleui-x\elementui\theme-chalk\loading.css
+..\simpleui\static\admin\simpleui-x\elementui\theme-chalk\main.css
+..\simpleui\static\admin\simpleui-x\elementui\theme-chalk\menu-item-group.css
+..\simpleui\static\admin\simpleui-x\elementui\theme-chalk\menu-item.css
+..\simpleui\static\admin\simpleui-x\elementui\theme-chalk\menu.css
+..\simpleui\static\admin\simpleui-x\elementui\theme-chalk\message-box.css
+..\simpleui\static\admin\simpleui-x\elementui\theme-chalk\message.css
+..\simpleui\static\admin\simpleui-x\elementui\theme-chalk\notification.css
+..\simpleui\static\admin\simpleui-x\elementui\theme-chalk\option-group.css
+..\simpleui\static\admin\simpleui-x\elementui\theme-chalk\option.css
+..\simpleui\static\admin\simpleui-x\elementui\theme-chalk\page-header.css
+..\simpleui\static\admin\simpleui-x\elementui\theme-chalk\pagination.css
+..\simpleui\static\admin\simpleui-x\elementui\theme-chalk\popover.css
+..\simpleui\static\admin\simpleui-x\elementui\theme-chalk\popper.css
+..\simpleui\static\admin\simpleui-x\elementui\theme-chalk\progress.css
+..\simpleui\static\admin\simpleui-x\elementui\theme-chalk\radio-button.css
+..\simpleui\static\admin\simpleui-x\elementui\theme-chalk\radio-group.css
+..\simpleui\static\admin\simpleui-x\elementui\theme-chalk\radio.css
+..\simpleui\static\admin\simpleui-x\elementui\theme-chalk\rate.css
+..\simpleui\static\admin\simpleui-x\elementui\theme-chalk\reset.css
+..\simpleui\static\admin\simpleui-x\elementui\theme-chalk\row.css
+..\simpleui\static\admin\simpleui-x\elementui\theme-chalk\scrollbar.css
+..\simpleui\static\admin\simpleui-x\elementui\theme-chalk\select-dropdown.css
+..\simpleui\static\admin\simpleui-x\elementui\theme-chalk\select.css
+..\simpleui\static\admin\simpleui-x\elementui\theme-chalk\slider.css
+..\simpleui\static\admin\simpleui-x\elementui\theme-chalk\spinner.css
+..\simpleui\static\admin\simpleui-x\elementui\theme-chalk\step.css
+..\simpleui\static\admin\simpleui-x\elementui\theme-chalk\steps.css
+..\simpleui\static\admin\simpleui-x\elementui\theme-chalk\submenu.css
+..\simpleui\static\admin\simpleui-x\elementui\theme-chalk\switch.css
+..\simpleui\static\admin\simpleui-x\elementui\theme-chalk\tab-pane.css
+..\simpleui\static\admin\simpleui-x\elementui\theme-chalk\table-column.css
+..\simpleui\static\admin\simpleui-x\elementui\theme-chalk\table.css
+..\simpleui\static\admin\simpleui-x\elementui\theme-chalk\tabs.css
+..\simpleui\static\admin\simpleui-x\elementui\theme-chalk\tag.css
+..\simpleui\static\admin\simpleui-x\elementui\theme-chalk\time-picker.css
+..\simpleui\static\admin\simpleui-x\elementui\theme-chalk\time-select.css
+..\simpleui\static\admin\simpleui-x\elementui\theme-chalk\timeline-item.css
+..\simpleui\static\admin\simpleui-x\elementui\theme-chalk\timeline.css
+..\simpleui\static\admin\simpleui-x\elementui\theme-chalk\tooltip.css
+..\simpleui\static\admin\simpleui-x\elementui\theme-chalk\transfer.css
+..\simpleui\static\admin\simpleui-x\elementui\theme-chalk\tree.css
+..\simpleui\static\admin\simpleui-x\elementui\theme-chalk\upload.css
+..\simpleui\static\admin\simpleui-x\elementui\time-picker.js
+..\simpleui\static\admin\simpleui-x\elementui\time-select.js
+..\simpleui\static\admin\simpleui-x\elementui\timeline-item.js
+..\simpleui\static\admin\simpleui-x\elementui\timeline.js
+..\simpleui\static\admin\simpleui-x\elementui\tooltip.js
+..\simpleui\static\admin\simpleui-x\elementui\transfer.js
+..\simpleui\static\admin\simpleui-x\elementui\transitions\collapse-transition.js
+..\simpleui\static\admin\simpleui-x\elementui\tree.js
+..\simpleui\static\admin\simpleui-x\elementui\umd\locale\af-ZA.js
+..\simpleui\static\admin\simpleui-x\elementui\umd\locale\ar.js
+..\simpleui\static\admin\simpleui-x\elementui\umd\locale\bg.js
+..\simpleui\static\admin\simpleui-x\elementui\umd\locale\ca.js
+..\simpleui\static\admin\simpleui-x\elementui\umd\locale\cs-CZ.js
+..\simpleui\static\admin\simpleui-x\elementui\umd\locale\da.js
+..\simpleui\static\admin\simpleui-x\elementui\umd\locale\de.js
+..\simpleui\static\admin\simpleui-x\elementui\umd\locale\ee.js
+..\simpleui\static\admin\simpleui-x\elementui\umd\locale\el.js
+..\simpleui\static\admin\simpleui-x\elementui\umd\locale\en.js
+..\simpleui\static\admin\simpleui-x\elementui\umd\locale\es.js
+..\simpleui\static\admin\simpleui-x\elementui\umd\locale\eu.js
+..\simpleui\static\admin\simpleui-x\elementui\umd\locale\fa.js
+..\simpleui\static\admin\simpleui-x\elementui\umd\locale\fi.js
+..\simpleui\static\admin\simpleui-x\elementui\umd\locale\fr.js
+..\simpleui\static\admin\simpleui-x\elementui\umd\locale\he.js
+..\simpleui\static\admin\simpleui-x\elementui\umd\locale\hr.js
+..\simpleui\static\admin\simpleui-x\elementui\umd\locale\hu.js
+..\simpleui\static\admin\simpleui-x\elementui\umd\locale\hy-AM.js
+..\simpleui\static\admin\simpleui-x\elementui\umd\locale\id.js
+..\simpleui\static\admin\simpleui-x\elementui\umd\locale\it.js
+..\simpleui\static\admin\simpleui-x\elementui\umd\locale\ja.js
+..\simpleui\static\admin\simpleui-x\elementui\umd\locale\kg.js
+..\simpleui\static\admin\simpleui-x\elementui\umd\locale\km.js
+..\simpleui\static\admin\simpleui-x\elementui\umd\locale\ko.js
+..\simpleui\static\admin\simpleui-x\elementui\umd\locale\ku.js
+..\simpleui\static\admin\simpleui-x\elementui\umd\locale\kz.js
+..\simpleui\static\admin\simpleui-x\elementui\umd\locale\lt.js
+..\simpleui\static\admin\simpleui-x\elementui\umd\locale\lv.js
+..\simpleui\static\admin\simpleui-x\elementui\umd\locale\mn.js
+..\simpleui\static\admin\simpleui-x\elementui\umd\locale\nb-NO.js
+..\simpleui\static\admin\simpleui-x\elementui\umd\locale\nl.js
+..\simpleui\static\admin\simpleui-x\elementui\umd\locale\pl.js
+..\simpleui\static\admin\simpleui-x\elementui\umd\locale\pt-br.js
+..\simpleui\static\admin\simpleui-x\elementui\umd\locale\pt.js
+..\simpleui\static\admin\simpleui-x\elementui\umd\locale\ro.js
+..\simpleui\static\admin\simpleui-x\elementui\umd\locale\ru-RU.js
+..\simpleui\static\admin\simpleui-x\elementui\umd\locale\sk.js
+..\simpleui\static\admin\simpleui-x\elementui\umd\locale\sl.js
+..\simpleui\static\admin\simpleui-x\elementui\umd\locale\sr.js
+..\simpleui\static\admin\simpleui-x\elementui\umd\locale\sv-SE.js
+..\simpleui\static\admin\simpleui-x\elementui\umd\locale\ta.js
+..\simpleui\static\admin\simpleui-x\elementui\umd\locale\th.js
+..\simpleui\static\admin\simpleui-x\elementui\umd\locale\tk.js
+..\simpleui\static\admin\simpleui-x\elementui\umd\locale\tr-TR.js
+..\simpleui\static\admin\simpleui-x\elementui\umd\locale\ua.js
+..\simpleui\static\admin\simpleui-x\elementui\umd\locale\ug-CN.js
+..\simpleui\static\admin\simpleui-x\elementui\umd\locale\uz-UZ.js
+..\simpleui\static\admin\simpleui-x\elementui\umd\locale\vi.js
+..\simpleui\static\admin\simpleui-x\elementui\umd\locale\zh-CN.js
+..\simpleui\static\admin\simpleui-x\elementui\umd\locale\zh-TW.js
+..\simpleui\static\admin\simpleui-x\elementui\upload.js
+..\simpleui\static\admin\simpleui-x\elementui\utils\after-leave.js
+..\simpleui\static\admin\simpleui-x\elementui\utils\aria-dialog.js
+..\simpleui\static\admin\simpleui-x\elementui\utils\aria-utils.js
+..\simpleui\static\admin\simpleui-x\elementui\utils\clickoutside.js
+..\simpleui\static\admin\simpleui-x\elementui\utils\date-util.js
+..\simpleui\static\admin\simpleui-x\elementui\utils\date.js
+..\simpleui\static\admin\simpleui-x\elementui\utils\dom.js
+..\simpleui\static\admin\simpleui-x\elementui\utils\menu\aria-menubar.js
+..\simpleui\static\admin\simpleui-x\elementui\utils\menu\aria-menuitem.js
+..\simpleui\static\admin\simpleui-x\elementui\utils\menu\aria-submenu.js
+..\simpleui\static\admin\simpleui-x\elementui\utils\merge.js
+..\simpleui\static\admin\simpleui-x\elementui\utils\popper.js
+..\simpleui\static\admin\simpleui-x\elementui\utils\popup\index.js
+..\simpleui\static\admin\simpleui-x\elementui\utils\popup\popup-manager.js
+..\simpleui\static\admin\simpleui-x\elementui\utils\resize-event.js
+..\simpleui\static\admin\simpleui-x\elementui\utils\scroll-into-view.js
+..\simpleui\static\admin\simpleui-x\elementui\utils\scrollbar-width.js
+..\simpleui\static\admin\simpleui-x\elementui\utils\shared.js
+..\simpleui\static\admin\simpleui-x\elementui\utils\types.js
+..\simpleui\static\admin\simpleui-x\elementui\utils\util.js
+..\simpleui\static\admin\simpleui-x\elementui\utils\vdom.js
+..\simpleui\static\admin\simpleui-x\elementui\utils\vue-popper.js
+..\simpleui\static\admin\simpleui-x\fontawesome-free-5.8.1-web\css\all.min.css
+..\simpleui\static\admin\simpleui-x\fontawesome-free-5.8.1-web\webfonts\fa-brands-400.eot
+..\simpleui\static\admin\simpleui-x\fontawesome-free-5.8.1-web\webfonts\fa-brands-400.svg
+..\simpleui\static\admin\simpleui-x\fontawesome-free-5.8.1-web\webfonts\fa-brands-400.ttf
+..\simpleui\static\admin\simpleui-x\fontawesome-free-5.8.1-web\webfonts\fa-brands-400.woff
+..\simpleui\static\admin\simpleui-x\fontawesome-free-5.8.1-web\webfonts\fa-brands-400.woff2
+..\simpleui\static\admin\simpleui-x\fontawesome-free-5.8.1-web\webfonts\fa-regular-400.eot
+..\simpleui\static\admin\simpleui-x\fontawesome-free-5.8.1-web\webfonts\fa-regular-400.svg
+..\simpleui\static\admin\simpleui-x\fontawesome-free-5.8.1-web\webfonts\fa-regular-400.ttf
+..\simpleui\static\admin\simpleui-x\fontawesome-free-5.8.1-web\webfonts\fa-regular-400.woff
+..\simpleui\static\admin\simpleui-x\fontawesome-free-5.8.1-web\webfonts\fa-regular-400.woff2
+..\simpleui\static\admin\simpleui-x\fontawesome-free-5.8.1-web\webfonts\fa-solid-900.eot
+..\simpleui\static\admin\simpleui-x\fontawesome-free-5.8.1-web\webfonts\fa-solid-900.svg
+..\simpleui\static\admin\simpleui-x\fontawesome-free-5.8.1-web\webfonts\fa-solid-900.ttf
+..\simpleui\static\admin\simpleui-x\fontawesome-free-5.8.1-web\webfonts\fa-solid-900.woff
+..\simpleui\static\admin\simpleui-x\fontawesome-free-5.8.1-web\webfonts\fa-solid-900.woff2
+..\simpleui\static\admin\simpleui-x\img\bg.svg
+..\simpleui\static\admin\simpleui-x\img\favicon.png
+..\simpleui\static\admin\simpleui-x\img\logo.png
+..\simpleui\static\admin\simpleui-x\js\cookie.js
+..\simpleui\static\admin\simpleui-x\js\index.js
+..\simpleui\static\admin\simpleui-x\js\language.js
+..\simpleui\static\admin\simpleui-x\js\login.js
+..\simpleui\static\admin\simpleui-x\js\vue.min.js
+..\simpleui\static\admin\simpleui-x\locale\en-us.js
+..\simpleui\static\admin\simpleui-x\locale\zh-hans.js
+..\simpleui\static\admin\simpleui-x\particles\app.js
+..\simpleui\static\admin\simpleui-x\particles\particles.js
+..\simpleui\static\admin\simpleui-x\theme\admin.lte.css
+..\simpleui\static\admin\simpleui-x\theme\admin.lte.css.map
+..\simpleui\static\admin\simpleui-x\theme\admin.lte.less
+..\simpleui\static\admin\simpleui-x\theme\aircraft.css
+..\simpleui\static\admin\simpleui-x\theme\aircraft.css.map
+..\simpleui\static\admin\simpleui-x\theme\aircraft.less
+..\simpleui\static\admin\simpleui-x\theme\ant.design.css
+..\simpleui\static\admin\simpleui-x\theme\ant.design.css.map
+..\simpleui\static\admin\simpleui-x\theme\ant.design.less
+..\simpleui\static\admin\simpleui-x\theme\base.less
+..\simpleui\static\admin\simpleui-x\theme\black.css
+..\simpleui\static\admin\simpleui-x\theme\black.css.map
+..\simpleui\static\admin\simpleui-x\theme\black.less
+..\simpleui\static\admin\simpleui-x\theme\dark.green.css
+..\simpleui\static\admin\simpleui-x\theme\dark.green.css.map
+..\simpleui\static\admin\simpleui-x\theme\dark.green.less
+..\simpleui\static\admin\simpleui-x\theme\e-black-pro.css
+..\simpleui\static\admin\simpleui-x\theme\e-black-pro.css.map
+..\simpleui\static\admin\simpleui-x\theme\e-black-pro.less
+..\simpleui\static\admin\simpleui-x\theme\e-black.css
+..\simpleui\static\admin\simpleui-x\theme\e-black.css.map
+..\simpleui\static\admin\simpleui-x\theme\e-black.less
+..\simpleui\static\admin\simpleui-x\theme\e-blue-pro.css
+..\simpleui\static\admin\simpleui-x\theme\e-blue-pro.css.map
+..\simpleui\static\admin\simpleui-x\theme\e-blue-pro.less
+..\simpleui\static\admin\simpleui-x\theme\e-blue.css
+..\simpleui\static\admin\simpleui-x\theme\e-blue.css.map
+..\simpleui\static\admin\simpleui-x\theme\e-blue.less
+..\simpleui\static\admin\simpleui-x\theme\e-green-pro.css
+..\simpleui\static\admin\simpleui-x\theme\e-green-pro.css.map
+..\simpleui\static\admin\simpleui-x\theme\e-green-pro.less
+..\simpleui\static\admin\simpleui-x\theme\e-green.css
+..\simpleui\static\admin\simpleui-x\theme\e-green.css.map
+..\simpleui\static\admin\simpleui-x\theme\e-green.less
+..\simpleui\static\admin\simpleui-x\theme\e-purple-pro.css
+..\simpleui\static\admin\simpleui-x\theme\e-purple-pro.css.map
+..\simpleui\static\admin\simpleui-x\theme\e-purple-pro.less
+..\simpleui\static\admin\simpleui-x\theme\e-purple.css
+..\simpleui\static\admin\simpleui-x\theme\e-purple.css.map
+..\simpleui\static\admin\simpleui-x\theme\e-purple.less
+..\simpleui\static\admin\simpleui-x\theme\e-red-pro.css
+..\simpleui\static\admin\simpleui-x\theme\e-red-pro.css.map
+..\simpleui\static\admin\simpleui-x\theme\e-red-pro.less
+..\simpleui\static\admin\simpleui-x\theme\e-red.css
+..\simpleui\static\admin\simpleui-x\theme\e-red.css.map
+..\simpleui\static\admin\simpleui-x\theme\e-red.less
+..\simpleui\static\admin\simpleui-x\theme\element.css
+..\simpleui\static\admin\simpleui-x\theme\element.css.map
+..\simpleui\static\admin\simpleui-x\theme\element.less
+..\simpleui\static\admin\simpleui-x\theme\gray.css
+..\simpleui\static\admin\simpleui-x\theme\gray.css.map
+..\simpleui\static\admin\simpleui-x\theme\gray.less
+..\simpleui\static\admin\simpleui-x\theme\green.css
+..\simpleui\static\admin\simpleui-x\theme\green.css.map
+..\simpleui\static\admin\simpleui-x\theme\green.less
+..\simpleui\static\admin\simpleui-x\theme\highdmin.css
+..\simpleui\static\admin\simpleui-x\theme\highdmin.css.map
+..\simpleui\static\admin\simpleui-x\theme\highdmin.less
+..\simpleui\static\admin\simpleui-x\theme\layui.css
+..\simpleui\static\admin\simpleui-x\theme\layui.css.map
+..\simpleui\static\admin\simpleui-x\theme\layui.less
+..\simpleui\static\admin\simpleui-x\theme\light.css
+..\simpleui\static\admin\simpleui-x\theme\light.css.map
+..\simpleui\static\admin\simpleui-x\theme\light.less
+..\simpleui\static\admin\simpleui-x\theme\orange.css
+..\simpleui\static\admin\simpleui-x\theme\orange.css.map
+..\simpleui\static\admin\simpleui-x\theme\orange.less
+..\simpleui\static\admin\simpleui-x\theme\purple.css
+..\simpleui\static\admin\simpleui-x\theme\purple.css.map
+..\simpleui\static\admin\simpleui-x\theme\purple.less
+..\simpleui\static\admin\simpleui-x\theme\simpleui.css
+..\simpleui\static\admin\simpleui-x\theme\simpleui.css.map
+..\simpleui\static\admin\simpleui-x\theme\simpleui.less
+..\simpleui\static\admin\simpleui-x\theme\theme.js
+..\simpleui\static\admin\simpleui-x\theme\x-blue.css
+..\simpleui\static\admin\simpleui-x\theme\x-blue.css.map
+..\simpleui\static\admin\simpleui-x\theme\x-blue.less
+..\simpleui\static\admin\simpleui-x\theme\x-green.css
+..\simpleui\static\admin\simpleui-x\theme\x-green.css.map
+..\simpleui\static\admin\simpleui-x\theme\x-green.less
+..\simpleui\static\admin\simpleui-x\theme\x-red.css
+..\simpleui\static\admin\simpleui-x\theme\x-red.css.map
+..\simpleui\static\admin\simpleui-x\theme\x-red.less
+..\simpleui\static\admin\simpleui-x\waves\waves.min.css
+..\simpleui\static\admin\simpleui-x\waves\waves.min.js
+..\simpleui\static\admin\simpleui-x\waves\waves.min.js.map
+..\simpleui\static\import_export\action_formats.js
+..\simpleui\templates\admin\404.html
+..\simpleui\templates\admin\500.html
+..\simpleui\templates\admin\actions.html
+..\simpleui\templates\admin\app_index.html
+..\simpleui\templates\admin\base.html
+..\simpleui\templates\admin\base_site.html
+..\simpleui\templates\admin\change_form.html
+..\simpleui\templates\admin\change_form_object_tools.html
+..\simpleui\templates\admin\change_list.html
+..\simpleui\templates\admin\change_list_object_tools.html
+..\simpleui\templates\admin\change_list_results.html
+..\simpleui\templates\admin\date_hierarchy.html
+..\simpleui\templates\admin\filter.html
+..\simpleui\templates\admin\home.html
+..\simpleui\templates\admin\includes\css-part.html
+..\simpleui\templates\admin\includes\fieldset.html
+..\simpleui\templates\admin\includes\js-part.html
+..\simpleui\templates\admin\index.html
+..\simpleui\templates\admin\invalid_setup.html
+..\simpleui\templates\admin\login.html
+..\simpleui\templates\admin\object_history.html
+..\simpleui\templates\admin\pagination.html
+..\simpleui\templates\admin\popup_response.html
+..\simpleui\templates\admin\prepopulated_fields_js.html
+..\simpleui\templates\admin\related_widget_wrapper.html
+..\simpleui\templates\admin\search_form.html
+..\simpleui\templates\admin\submit_line.html
+..\simpleui\templates\registration\logged_out.html
+..\simpleui\templates\registration\password_change_done.html
+..\simpleui\templates\registration\password_change_form.html
+..\simpleui\templates\registration\password_reset_complete.html
+..\simpleui\templates\registration\password_reset_confirm.html
+..\simpleui\templates\registration\password_reset_done.html
+..\simpleui\templates\registration\password_reset_email.html
+..\simpleui\templates\registration\password_reset_form.html
+..\simpleui\templatetags\__init__.py
+..\simpleui\templatetags\__pycache__\__init__.cpython-37.pyc
+..\simpleui\templatetags\__pycache__\__init__.cpython-39.pyc
+..\simpleui\templatetags\__pycache__\simpletags.cpython-37.pyc
+..\simpleui\templatetags\__pycache__\simpletags.cpython-39.pyc
+..\simpleui\templatetags\simpletags.py
+..\simpleui\widgets.py
+PKG-INFO
+SOURCES.txt
+dependency_links.txt
+not-zip-safe
+requires.txt
+top_level.txt
diff --git a/venv/Lib/site-packages/simpleui-4.0.2-py3.9.egg-info/not-zip-safe b/venv/Lib/site-packages/simpleui-4.0.2-py3.9.egg-info/not-zip-safe
new file mode 100644
index 0000000..8b13789
--- /dev/null
+++ b/venv/Lib/site-packages/simpleui-4.0.2-py3.9.egg-info/not-zip-safe
@@ -0,0 +1 @@
+
diff --git a/venv/Lib/site-packages/simpleui-4.0.2-py3.9.egg-info/requires.txt b/venv/Lib/site-packages/simpleui-4.0.2-py3.9.egg-info/requires.txt
new file mode 100644
index 0000000..d3e4ba5
--- /dev/null
+++ b/venv/Lib/site-packages/simpleui-4.0.2-py3.9.egg-info/requires.txt
@@ -0,0 +1 @@
+django
diff --git a/venv/Lib/site-packages/simpleui-4.0.2-py3.9.egg-info/top_level.txt b/venv/Lib/site-packages/simpleui-4.0.2-py3.9.egg-info/top_level.txt
new file mode 100644
index 0000000..a4732b8
--- /dev/null
+++ b/venv/Lib/site-packages/simpleui-4.0.2-py3.9.egg-info/top_level.txt
@@ -0,0 +1 @@
+simpleui
diff --git a/venv/Lib/site-packages/simpleui/__init__.py b/venv/Lib/site-packages/simpleui/__init__.py
new file mode 100644
index 0000000..d8741a9
--- /dev/null
+++ b/venv/Lib/site-packages/simpleui/__init__.py
@@ -0,0 +1,5 @@
+default_app_config = 'simpleui.apps.SimpleApp'
+
+
+def get_version():
+ return '4.0.2'
diff --git a/venv/Lib/site-packages/simpleui/apps.py b/venv/Lib/site-packages/simpleui/apps.py
new file mode 100644
index 0000000..9673fbc
--- /dev/null
+++ b/venv/Lib/site-packages/simpleui/apps.py
@@ -0,0 +1,21 @@
+from django.apps import AppConfig
+
+
+class SimpleApp(AppConfig):
+ name = 'simpleui'
+
+ def ready(self):
+ # 如果是django3+ 就使用中间件,删除header中的X-Frame-Options
+
+ try:
+ import django
+ version = django.get_version()
+ if int(version.split('.')[0]) >= 3:
+ from django.conf import settings
+ for index, item in enumerate(settings.MIDDLEWARE):
+ if item == 'django.middleware.clickjacking.XFrameOptionsMiddleware':
+ settings.MIDDLEWARE.pop(index)
+
+ except Exception as e:
+ pass
+ pass
diff --git a/venv/Lib/site-packages/simpleui/forms.py b/venv/Lib/site-packages/simpleui/forms.py
new file mode 100644
index 0000000..7a8f856
--- /dev/null
+++ b/venv/Lib/site-packages/simpleui/forms.py
@@ -0,0 +1,202 @@
+# -*- encoding: utf-8 -*-
+"""
+@File : forms.py
+@Time : 2020/1/3 11:14
+@Author : chise
+@Email : chise123@live.com
+@Software: PyCharm
+@info :simpleui自定义表单
+"""
+from django import forms
+import uuid
+
+from django.core import validators
+from django.core.exceptions import ValidationError
+# Provide this import for backwards compatibility.
+from django.core.validators import EMPTY_VALUES # NOQA
+from django.forms.boundfield import BoundField
+from django.forms.forms import DeclarativeFieldsMetaclass, BaseForm
+from django.forms.utils import from_current_timezone, to_current_timezone
+from django.forms.widgets import (
+ FILE_INPUT_CONTRADICTION, CheckboxInput, ClearableFileInput, DateInput,
+ DateTimeInput, EmailInput, FileInput, HiddenInput, MultipleHiddenInput,
+ NullBooleanSelect, NumberInput, Select, SelectMultiple,
+ SplitDateTimeWidget, SplitHiddenDateTimeWidget, TextInput, TimeInput,
+ URLInput,
+)
+from django.utils import formats
+from django.utils.dateparse import parse_duration
+from django.utils.duration import duration_string
+from django.utils.ipv6 import clean_ipv6_address
+from django.utils.safestring import mark_safe
+from django.utils.translation import gettext_lazy as _, ngettext_lazy
+
+
+import copy
+
+from django.core.exceptions import NON_FIELD_ERRORS, ValidationError
+# BoundField is imported for backwards compatibility in Django 1.9
+from django.forms.boundfield import BoundField # NOQA
+from django.forms.fields import Field, FileField
+# pretty_name is imported for backwards compatibility in Django 1.9
+from django.forms.utils import ErrorDict, ErrorList, pretty_name # NOQA
+from django.forms.widgets import Media, MediaDefiningClass
+from django.utils.functional import cached_property
+from django.utils.html import conditional_escape, html_safe
+from django.utils.safestring import mark_safe
+from django.utils.translation import gettext as _
+from widgets import *
+
+class SimpleForm(BaseForm, metaclass=DeclarativeFieldsMetaclass):
+ def get_vue_app_js(self,app_id):
+ """
+ 将该方法需要的js渲染进去
+ :return:
+ """
+ base_vue_app="""
+
+ """
+ data={}
+ for name, field in self.fields.items():
+ data[name] = ''
+ data.update(self.data)
+ data_s=""
+ for key,value in data.items():
+ data_s+="%(key)s:'%(value)s'"%{
+ 'key':key,
+ 'value':value
+ }+','
+ return base_vue_app %{"app_name":app_id,"data":data_s}
+ def submit_button(self):
+ """
+ 渲染模板增加submit格式
+ :return:
+ """
+ # return ' '
+
+
+ pass
+ def as_element(self):
+ "Return this form rendered as HTML
s -- excluding the ."
+ x= self._html_output(
+ normal_row='%(label)s %(field)s%(help_text)s
',
+ error_row='%s',
+ row_ender='',
+ help_text_html=' %s ',
+ errors_on_separate_row=True,flag=True
+ )
+ return x
+
+ def _html_output(self, normal_row, error_row, row_ender, help_text_html, errors_on_separate_row,flag=False):
+ "Output HTML. Used by as_table(), as_ul(), as_p()."
+ top_errors = self.non_field_errors() # Errors that should be displayed above all fields.
+ output, hidden_fields = [], []
+
+ for name, field in self.fields.items():
+ html_class_attr = ''
+ bf = self[name]
+ if flag:
+ bf.field.widget.flag=True
+ bf_errors = self.error_class(bf.errors)
+ if bf.is_hidden:
+ if bf_errors:
+ top_errors.extend(
+ [_('(Hidden field %(name)s) %(error)s') % {'name': name, 'error': str(e)}
+ for e in bf_errors])
+ hidden_fields.append(str(bf))
+ else:
+ # Create a 'class="..."' attribute if the row should have any
+ # CSS classes applied.
+ css_classes = bf.css_classes()
+ if css_classes:
+ html_class_attr = ' class="%s"' % css_classes
+
+ if errors_on_separate_row and bf_errors:
+ output.append(error_row % str(bf_errors))
+
+ if bf.label:
+ label = conditional_escape(bf.label)
+ label = bf.label_tag(label) or ''
+ else:
+ label = ''
+
+ if field.help_text:
+ help_text = help_text_html % field.help_text
+ else:
+ help_text = ''
+
+ output.append(normal_row % {
+ 'errors': bf_errors,
+ 'label': label,
+ 'field': bf,
+ 'help_text': help_text,
+ 'html_class_attr': html_class_attr,
+ 'css_classes': css_classes,
+ 'field_name': bf.html_name,
+ })
+
+ if top_errors:
+ output.insert(0, error_row % top_errors)
+ if hidden_fields: # Insert any hidden fields in the last row.
+ str_hidden = ''.join(hidden_fields)
+ if output:
+ last_row = output[-1]
+ # Chop off the trailing row_ender (e.g. ' ') and
+ # insert the hidden fields.
+ if not last_row.endswith(row_ender):
+ # This can happen in the as_p() case (and possibly others
+ # that users write): if there are only top errors, we may
+ # not be able to conscript the last row for our purposes,
+ # so insert a new, empty row.
+ last_row = (normal_row % {
+ 'errors': '',
+ 'label': '',
+ 'field': '',
+ 'help_text': '',
+ 'html_class_attr': html_class_attr,
+ 'css_classes': '',
+ 'field_name': '',
+ })
+ output.append(last_row)
+ output[-1] = last_row[:-len(row_ender)] + str_hidden + row_ender
+ else:
+ # If there aren't any rows in the output, just append the
+ # hidden fields.
+ output.append(str_hidden)
+ if flag:
+ app_id = "x" + str(uuid.uuid4())[0:5]
+ output.insert(0, "" %app_id)
+ output.append('
')
+ output.append(self.get_vue_app_js(app_id))
+ return mark_safe('\n'.join(output))
+
+class SCharField(forms.CharField):
+ widget = STextInput
+class SIntegerField(forms.IntegerField):
+ def widget_attrs(self, widget):
+ """
+ 解决max和min无法传递到widget的问题
+ """
+ attrs = super().widget_attrs(widget)
+ if isinstance(widget, NumberInput) or isinstance(widget,SNumberInput):
+ if self.min_value is not None:
+ attrs['min'] = self.min_value
+ if self.max_value is not None:
+ attrs['max'] = self.max_value
+ return attrs
+ widget = SNumberInput
+
+class SEmailField(forms.EmailField):
+ widget = SEmailInput
+
+class SURLField(forms.URLField):
+ widget = SURLInput
\ No newline at end of file
diff --git a/venv/Lib/site-packages/simpleui/static/admin/css/autocomplete.css b/venv/Lib/site-packages/simpleui/static/admin/css/autocomplete.css
new file mode 100644
index 0000000..3ef95d1
--- /dev/null
+++ b/venv/Lib/site-packages/simpleui/static/admin/css/autocomplete.css
@@ -0,0 +1,260 @@
+select.admin-autocomplete {
+ width: 20em;
+}
+
+.select2-container--admin-autocomplete.select2-container {
+ min-height: 30px;
+}
+
+.select2-container--admin-autocomplete .select2-selection--single,
+.select2-container--admin-autocomplete .select2-selection--multiple {
+ min-height: 30px;
+ padding: 0;
+}
+
+.select2-container--admin-autocomplete.select2-container--focus .select2-selection,
+.select2-container--admin-autocomplete.select2-container--open .select2-selection {
+ border-color: #999;
+ min-height: 30px;
+}
+
+.select2-container--admin-autocomplete.select2-container--focus .select2-selection.select2-selection--single,
+.select2-container--admin-autocomplete.select2-container--open .select2-selection.select2-selection--single {
+ padding: 0;
+}
+
+.select2-container--admin-autocomplete.select2-container--focus .select2-selection.select2-selection--multiple,
+.select2-container--admin-autocomplete.select2-container--open .select2-selection.select2-selection--multiple {
+ padding: 0;
+}
+
+.select2-container--admin-autocomplete .select2-selection--single {
+ background-color: #fff;
+ border: 1px solid #ccc;
+ border-radius: 4px;
+}
+
+.select2-container--admin-autocomplete .select2-selection--single .select2-selection__rendered {
+ color: #444;
+ line-height: 30px;
+}
+
+.select2-container--admin-autocomplete .select2-selection--single .select2-selection__clear {
+ cursor: pointer;
+ float: right;
+ font-weight: bold;
+}
+
+.select2-container--admin-autocomplete .select2-selection--single .select2-selection__placeholder {
+ color: #999;
+}
+
+.select2-container--admin-autocomplete .select2-selection--single .select2-selection__arrow {
+ height: 26px;
+ position: absolute;
+ top: 1px;
+ right: 1px;
+ width: 20px;
+}
+
+.select2-container--admin-autocomplete .select2-selection--single .select2-selection__arrow b {
+ border-color: #888 transparent transparent transparent;
+ border-style: solid;
+ border-width: 5px 4px 0 4px;
+ height: 0;
+ left: 50%;
+ margin-left: -4px;
+ margin-top: -2px;
+ position: absolute;
+ top: 50%;
+ width: 0;
+}
+
+.select2-container--admin-autocomplete[dir="rtl"] .select2-selection--single .select2-selection__clear {
+ float: left;
+}
+
+.select2-container--admin-autocomplete[dir="rtl"] .select2-selection--single .select2-selection__arrow {
+ left: 1px;
+ right: auto;
+}
+
+.select2-container--admin-autocomplete.select2-container--disabled .select2-selection--single {
+ background-color: #eee;
+ cursor: default;
+}
+
+.select2-container--admin-autocomplete.select2-container--disabled .select2-selection--single .select2-selection__clear {
+ display: none;
+}
+
+.select2-container--admin-autocomplete.select2-container--open .select2-selection--single .select2-selection__arrow b {
+ border-color: transparent transparent #888 transparent;
+ border-width: 0 4px 5px 4px;
+}
+
+.select2-container--admin-autocomplete .select2-selection--multiple {
+ background-color: white;
+ border: 1px solid #ccc;
+ border-radius: 4px;
+ cursor: text;
+}
+
+.select2-container--admin-autocomplete .select2-selection--multiple .select2-selection__rendered {
+ box-sizing: border-box;
+ list-style: none;
+ margin: 0;
+ padding: 0 5px;
+ width: 100%;
+}
+
+.select2-container--admin-autocomplete .select2-selection--multiple .select2-selection__rendered li {
+ list-style: none;
+}
+
+.select2-container--admin-autocomplete .select2-selection--multiple .select2-selection__placeholder {
+ color: #999;
+ margin-top: 5px;
+ float: left;
+}
+
+.select2-container--admin-autocomplete .select2-selection--multiple .select2-selection__clear {
+ cursor: pointer;
+ float: right;
+ font-weight: bold;
+ margin: 5px;
+}
+
+.select2-container--admin-autocomplete .select2-selection--multiple .select2-selection__choice {
+ background-color: #e4e4e4;
+ border: 1px solid #ccc;
+ border-radius: 4px;
+ cursor: default;
+ float: left;
+ margin-right: 5px;
+ margin-top: 5px;
+ padding: 0 5px;
+}
+
+.select2-container--admin-autocomplete .select2-selection--multiple .select2-selection__choice__remove {
+ color: #999;
+ cursor: pointer;
+ display: inline-block;
+ font-weight: bold;
+ margin-right: 2px;
+}
+
+.select2-container--admin-autocomplete .select2-selection--multiple .select2-selection__choice__remove:hover {
+ color: #333;
+}
+
+.select2-container--admin-autocomplete[dir="rtl"] .select2-selection--multiple .select2-selection__choice, .select2-container--admin-autocomplete[dir="rtl"] .select2-selection--multiple .select2-selection__placeholder, .select2-container--admin-autocomplete[dir="rtl"] .select2-selection--multiple .select2-search--inline {
+ float: right;
+}
+
+.select2-container--admin-autocomplete[dir="rtl"] .select2-selection--multiple .select2-selection__choice {
+ margin-left: 5px;
+ margin-right: auto;
+}
+
+.select2-container--admin-autocomplete[dir="rtl"] .select2-selection--multiple .select2-selection__choice__remove {
+ margin-left: 2px;
+ margin-right: auto;
+}
+
+.select2-container--admin-autocomplete.select2-container--focus .select2-selection--multiple {
+ border: solid #999 1px;
+ outline: 0;
+}
+
+.select2-container--admin-autocomplete.select2-container--disabled .select2-selection--multiple {
+ background-color: #eee;
+ cursor: default;
+}
+
+.select2-container--admin-autocomplete.select2-container--disabled .select2-selection__choice__remove {
+ display: none;
+}
+
+.select2-container--admin-autocomplete.select2-container--open.select2-container--above .select2-selection--single, .select2-container--admin-autocomplete.select2-container--open.select2-container--above .select2-selection--multiple {
+ border-top-left-radius: 0;
+ border-top-right-radius: 0;
+}
+
+.select2-container--admin-autocomplete.select2-container--open.select2-container--below .select2-selection--single, .select2-container--admin-autocomplete.select2-container--open.select2-container--below .select2-selection--multiple {
+ border-bottom-left-radius: 0;
+ border-bottom-right-radius: 0;
+}
+
+.select2-container--admin-autocomplete .select2-search--dropdown .select2-search__field {
+ border: 1px solid #ccc;
+}
+
+.select2-container--admin-autocomplete .select2-search--inline .select2-search__field {
+ background: transparent;
+ border: none;
+ outline: 0;
+ box-shadow: none;
+ -webkit-appearance: textfield;
+}
+
+.select2-container--admin-autocomplete .select2-results > .select2-results__options {
+ max-height: 200px;
+ overflow-y: auto;
+}
+
+.select2-container--admin-autocomplete .select2-results__option[role=group] {
+ padding: 0;
+}
+
+.select2-container--admin-autocomplete .select2-results__option[aria-disabled=true] {
+ color: #999;
+}
+
+.select2-container--admin-autocomplete .select2-results__option[aria-selected=true] {
+ background-color: #ddd;
+}
+
+.select2-container--admin-autocomplete .select2-results__option .select2-results__option {
+ padding-left: 1em;
+}
+
+.select2-container--admin-autocomplete .select2-results__option .select2-results__option .select2-results__group {
+ padding-left: 0;
+}
+
+.select2-container--admin-autocomplete .select2-results__option .select2-results__option .select2-results__option {
+ margin-left: -1em;
+ padding-left: 2em;
+}
+
+.select2-container--admin-autocomplete .select2-results__option .select2-results__option .select2-results__option .select2-results__option {
+ margin-left: -2em;
+ padding-left: 3em;
+}
+
+.select2-container--admin-autocomplete .select2-results__option .select2-results__option .select2-results__option .select2-results__option .select2-results__option {
+ margin-left: -3em;
+ padding-left: 4em;
+}
+
+.select2-container--admin-autocomplete .select2-results__option .select2-results__option .select2-results__option .select2-results__option .select2-results__option .select2-results__option {
+ margin-left: -4em;
+ padding-left: 5em;
+}
+
+.select2-container--admin-autocomplete .select2-results__option .select2-results__option .select2-results__option .select2-results__option .select2-results__option .select2-results__option .select2-results__option {
+ margin-left: -5em;
+ padding-left: 6em;
+}
+
+.select2-container--admin-autocomplete .select2-results__option--highlighted[aria-selected] {
+ background-color: #79aec8;
+ color: white;
+}
+
+.select2-container--admin-autocomplete .select2-results__group {
+ cursor: default;
+ display: block;
+ padding: 6px;
+}
diff --git a/venv/Lib/site-packages/simpleui/static/admin/css/base.css b/venv/Lib/site-packages/simpleui/static/admin/css/base.css
new file mode 100644
index 0000000..b87f94e
--- /dev/null
+++ b/venv/Lib/site-packages/simpleui/static/admin/css/base.css
@@ -0,0 +1,981 @@
+/*
+ DJANGO Admin styles
+*/
+@import url(fonts.css);
+
+body {
+ margin: 0;
+ padding: 0;
+ font-size: 14px;
+ font-family: "Roboto", "Lucida Grande", "DejaVu Sans", "Bitstream Vera Sans", Verdana, Arial, sans-serif;
+ color: #333;
+ background: #fff;
+}
+
+/* LINKS */
+
+a:link, a:visited {
+ color: #447e9b;
+ text-decoration: none;
+}
+
+a:focus, a:hover {
+ color: #036;
+}
+
+a:focus {
+ text-decoration: underline;
+}
+
+a img {
+ border: none;
+}
+
+a.section:link, a.section:visited {
+ color: #fff;
+ text-decoration: none;
+}
+
+a.section:focus, a.section:hover {
+ text-decoration: underline;
+}
+
+/* GLOBAL DEFAULTS */
+
+p, ol, ul, dl {
+ margin: .2em 0 .8em 0;
+}
+
+p {
+ padding: 0;
+ line-height: 140%;
+}
+
+h1, h2, h3, h4, h5 {
+ font-weight: bold;
+}
+
+h1 {
+ margin: 0 0 20px;
+ font-weight: 300;
+ font-size: 20px;
+ color: #666;
+}
+
+h2 {
+ font-size: 16px;
+ margin: 1em 0 .5em 0;
+}
+
+h2.subhead {
+ font-weight: normal;
+ margin-top: 0;
+}
+
+h3 {
+ font-size: 14px;
+ margin: .8em 0 .3em 0;
+ color: #666;
+ font-weight: bold;
+}
+
+h4 {
+ font-size: 12px;
+ margin: 1em 0 .8em 0;
+ padding-bottom: 3px;
+}
+
+h5 {
+ font-size: 10px;
+ margin: 1.5em 0 .5em 0;
+ color: #666;
+ text-transform: uppercase;
+ letter-spacing: 1px;
+}
+
+ul li {
+ list-style-type: square;
+ padding: 1px 0;
+}
+
+li ul {
+ margin-bottom: 0;
+}
+
+li, dt, dd {
+ font-size: 13px;
+ line-height: 20px;
+}
+
+dt {
+ font-weight: bold;
+ margin-top: 4px;
+}
+
+dd {
+ margin-left: 0;
+}
+
+form {
+ margin: 0;
+ padding: 0;
+}
+
+fieldset {
+ margin: 0;
+ padding: 0;
+ border: none;
+ border-top: 1px solid #eee;
+}
+
+blockquote {
+ font-size: 11px;
+ color: #777;
+ margin-left: 2px;
+ padding-left: 10px;
+ border-left: 5px solid #ddd;
+}
+
+code, pre {
+ font-family: "Bitstream Vera Sans Mono", Monaco, "Courier New", Courier, monospace;
+ color: #666;
+ font-size: 12px;
+}
+
+pre.literal-block {
+ margin: 10px;
+ background: #eee;
+ padding: 6px 8px;
+}
+
+code strong {
+ color: #930;
+}
+
+hr {
+ clear: both;
+ color: #eee;
+ background-color: #eee;
+ height: 1px;
+ border: none;
+ margin: 0;
+ padding: 0;
+ font-size: 1px;
+ line-height: 1px;
+}
+
+/* TEXT STYLES & MODIFIERS */
+
+.small {
+ font-size: 11px;
+}
+
+.tiny {
+ font-size: 10px;
+}
+
+p.tiny {
+ margin-top: -2px;
+}
+
+.mini {
+ font-size: 10px;
+}
+
+p.mini {
+ margin-top: -3px;
+}
+
+.help, p.help, form p.help, div.help, form div.help, div.help li {
+ font-size: 11px;
+ color: #999;
+}
+
+div.help ul {
+ margin-bottom: 0;
+}
+
+.help-tooltip {
+ cursor: help;
+}
+
+p img, h1 img, h2 img, h3 img, h4 img, td img {
+ vertical-align: middle;
+}
+
+.quiet, a.quiet:link, a.quiet:visited {
+ color: #999;
+ font-weight: normal;
+}
+
+.float-right {
+ float: right;
+}
+
+.float-left {
+ float: left;
+}
+
+.clear {
+ clear: both;
+}
+
+.align-left {
+ text-align: left;
+}
+
+.align-right {
+ text-align: right;
+}
+
+.example {
+ margin: 10px 0;
+ padding: 5px 10px;
+ background: #efefef;
+}
+
+.nowrap {
+ white-space: nowrap;
+}
+
+/* TABLES */
+
+table {
+ border-collapse: collapse;
+ border-color: #ccc;
+}
+
+td, th {
+ font-size: 13px;
+ line-height: 16px;
+ border-bottom: 1px solid #eee;
+ vertical-align: top;
+ padding: 8px;
+ font-family: "Roboto", "Lucida Grande", Verdana, Arial, sans-serif;
+}
+
+th {
+ font-weight: 600;
+ text-align: left;
+}
+
+thead th,
+tfoot td {
+ color: #666;
+ padding: 5px 10px;
+ font-size: 11px;
+ background: #fff;
+ border: none;
+ border-top: 1px solid #eee;
+ border-bottom: 1px solid #eee;
+}
+
+tfoot td {
+ border-bottom: none;
+ border-top: 1px solid #eee;
+}
+
+thead th.required {
+ color: #000;
+}
+
+tr.alt {
+ background: #f6f6f6;
+}
+
+.row1 {
+ background: #fff;
+}
+
+.row2 {
+ background: #f9f9f9;
+}
+
+/* SORTABLE TABLES */
+
+thead th {
+ padding: 5px 10px;
+ line-height: normal;
+ text-transform: uppercase;
+ background: #f6f6f6;
+}
+
+thead th a:link, thead th a:visited {
+ color: #666;
+}
+
+thead th.sorted {
+ background: #eee;
+}
+
+thead th.sorted .text {
+ padding-right: 42px;
+}
+
+table thead th .text span {
+ padding: 8px 10px;
+ display: block;
+}
+
+table thead th .text a {
+ display: block;
+ cursor: pointer;
+ padding: 8px 10px;
+}
+
+table thead th .text a:focus, table thead th .text a:hover {
+ background: #eee;
+}
+
+thead th.sorted a.sortremove {
+ visibility: hidden;
+}
+
+table thead th.sorted:hover a.sortremove {
+ visibility: visible;
+}
+
+table thead th.sorted .sortoptions {
+ display: block;
+ padding: 9px 5px 0 5px;
+ float: right;
+ text-align: right;
+}
+
+table thead th.sorted .sortpriority {
+ font-size: .8em;
+ min-width: 12px;
+ text-align: center;
+ vertical-align: 3px;
+ margin-left: 2px;
+ margin-right: 2px;
+}
+
+table thead th.sorted .sortoptions a {
+ position: relative;
+ width: 14px;
+ height: 14px;
+ display: inline-block;
+ background: url(../img/sorting-icons.svg) 0 0 no-repeat;
+ background-size: 14px auto;
+}
+
+table thead th.sorted .sortoptions a.sortremove {
+ background-position: 0 0;
+}
+
+table thead th.sorted .sortoptions a.sortremove:after {
+ content: '\\';
+ position: absolute;
+ top: -6px;
+ left: 3px;
+ font-weight: 200;
+ font-size: 18px;
+ color: #999;
+}
+
+table thead th.sorted .sortoptions a.sortremove:focus:after,
+table thead th.sorted .sortoptions a.sortremove:hover:after {
+ color: #447e9b;
+}
+
+table thead th.sorted .sortoptions a.sortremove:focus,
+table thead th.sorted .sortoptions a.sortremove:hover {
+ background-position: 0 -14px;
+}
+
+table thead th.sorted .sortoptions a.ascending {
+ background-position: 0 -28px;
+}
+
+table thead th.sorted .sortoptions a.ascending:focus,
+table thead th.sorted .sortoptions a.ascending:hover {
+ background-position: 0 -42px;
+}
+
+table thead th.sorted .sortoptions a.descending {
+ top: 1px;
+ background-position: 0 -56px;
+}
+
+table thead th.sorted .sortoptions a.descending:focus,
+table thead th.sorted .sortoptions a.descending:hover {
+ background-position: 0 -70px;
+}
+
+/* FORM DEFAULTS */
+
+input, textarea, select, .form-row p, form .button {
+ margin: 2px 0;
+ padding: 2px 3px;
+ vertical-align: middle;
+ font-family: "Roboto", "Lucida Grande", Verdana, Arial, sans-serif;
+ font-weight: normal;
+ font-size: 13px;
+}
+
+.form-row div.help {
+ padding: 2px 3px;
+}
+
+textarea {
+ vertical-align: top;
+}
+
+input[type=text], input[type=password], input[type=email], input[type=url],
+input[type=number], input[type=tel], textarea, select, .vTextField {
+ border: 1px solid #ccc;
+ border-radius: 4px;
+ padding: 5px 6px;
+ margin-top: 0;
+}
+
+input[type=text]:focus, input[type=password]:focus, input[type=email]:focus,
+input[type=url]:focus, input[type=number]:focus, input[type=tel]:focus,
+textarea:focus, select:focus, .vTextField:focus {
+ border-color: #409EFF;
+}
+
+select {
+ height: 30px;
+}
+
+select[multiple] {
+ min-height: 150px;
+}
+
+/* FORM BUTTONS */
+
+.button, input[type=submit], input[type=button], .submit-row input, a.button {
+ background: #79aec8;
+ padding: 10px 15px;
+ border: none;
+ border-radius: 4px;
+ color: #fff;
+ cursor: pointer;
+}
+
+a.button {
+ padding: 4px 5px;
+}
+
+.button:active, input[type=submit]:active, input[type=button]:active,
+.button:focus, input[type=submit]:focus, input[type=button]:focus,
+.button:hover, input[type=submit]:hover, input[type=button]:hover {
+ background: #609ab6;
+}
+
+.button[disabled], input[type=submit][disabled], input[type=button][disabled] {
+ opacity: 0.4;
+}
+
+.button.default, input[type=submit].default, .submit-row input.default {
+ float: right;
+ border: none;
+ font-weight: 400;
+ background: #417690;
+}
+
+.button.default:active, input[type=submit].default:active,
+.button.default:focus, input[type=submit].default:focus,
+.button.default:hover, input[type=submit].default:hover {
+ background: #205067;
+}
+
+.button[disabled].default,
+input[type=submit][disabled].default,
+input[type=button][disabled].default {
+ opacity: 0.4;
+}
+
+
+/* MODULES */
+
+.module {
+ border: none;
+ margin-bottom: 30px;
+ background: #fff;
+}
+
+.module p, .module ul, .module h3, .module h4, .module dl, .module pre {
+ padding-left: 10px;
+ padding-right: 10px;
+}
+
+.module blockquote {
+ margin-left: 12px;
+}
+
+.module ul, .module ol {
+ margin-left: 1.5em;
+}
+
+.module h3 {
+ margin-top: .6em;
+}
+
+.module h2, .module caption, .inline-group h2 {
+ margin: 0;
+ padding: 8px;
+ font-weight: 400;
+ font-size: 13px;
+ text-align: left;
+ background: #79aec8;
+ color: #fff;
+}
+
+.module caption,
+.inline-group h2 {
+ font-size: 12px;
+ letter-spacing: 0.5px;
+ text-transform: uppercase;
+}
+
+.module table {
+ border-collapse: collapse;
+}
+
+/* MESSAGES & ERRORS */
+
+ul.messagelist {
+ padding: 0;
+ margin: 0;
+}
+
+ul.messagelist li {
+ display: block;
+ font-weight: 400;
+ font-size: 13px;
+ padding: 10px 10px 10px 65px;
+ margin: 0 0 10px 0;
+ background: #dfd url(../img/icon-yes.svg) 40px 12px no-repeat;
+ background-size: 16px auto;
+ color: #333;
+}
+
+ul.messagelist li.warning {
+ background: #ffc url(../img/icon-alert.svg) 40px 14px no-repeat;
+ background-size: 14px auto;
+}
+
+ul.messagelist li.error {
+ background: #ffefef url(../img/icon-no.svg) 40px 12px no-repeat;
+ background-size: 16px auto;
+}
+
+.errornote {
+ font-size: 14px;
+ font-weight: 700;
+ display: block;
+ padding: 10px 12px;
+ margin: 0 0 10px 0;
+ color: #ba2121;
+ border: 1px solid #ba2121;
+ border-radius: 4px;
+ background-color: #fff;
+ background-position: 5px 12px;
+}
+
+ul.errorlist {
+ margin: 0 0 4px;
+ padding: 0;
+ color: #ba2121;
+ background: #fff;
+}
+
+ul.errorlist li {
+ font-size: 13px;
+ display: block;
+ margin-bottom: 4px;
+}
+
+ul.errorlist li:first-child {
+ margin-top: 0;
+}
+
+ul.errorlist li a {
+ color: inherit;
+ text-decoration: underline;
+}
+
+td ul.errorlist {
+ margin: 0;
+ padding: 0;
+}
+
+td ul.errorlist li {
+ margin: 0;
+}
+
+.form-row.errors {
+ margin: 0;
+ border: none;
+ border-bottom: 1px solid #eee;
+ background: none;
+}
+
+.form-row.errors ul.errorlist li {
+ padding-left: 0;
+}
+
+.errors input, .errors select, .errors textarea {
+ border: 1px solid #ba2121;
+}
+
+div.system-message {
+ background: #ffc;
+ margin: 10px;
+ padding: 6px 8px;
+ font-size: .8em;
+}
+
+div.system-message p.system-message-title {
+ padding: 4px 5px 4px 25px;
+ margin: 0;
+ color: #c11;
+ background: #ffefef url(../img/icon-no.svg) 5px 5px no-repeat;
+}
+
+.description {
+ font-size: 12px;
+ padding: 5px 0 0 12px;
+}
+
+/* BREADCRUMBS */
+
+div.breadcrumbs {
+ background: #79aec8;
+ padding: 10px 40px;
+ border: none;
+ font-size: 14px;
+ color: #c4dce8;
+ text-align: left;
+}
+
+div.breadcrumbs a {
+ color: #fff;
+}
+
+div.breadcrumbs a:focus, div.breadcrumbs a:hover {
+ color: #c4dce8;
+}
+
+/* ACTION ICONS */
+
+.addlink {
+ padding-left: 16px;
+ background: url(../img/icon-addlink.svg) 0 1px no-repeat;
+}
+
+.changelink, .inlinechangelink {
+ padding-left: 16px;
+ background: url(../img/icon-changelink.svg) 0 1px no-repeat;
+}
+
+.deletelink {
+ padding-left: 16px;
+ background: url(../img/icon-deletelink.svg) 0 1px no-repeat;
+}
+
+a.deletelink:link, a.deletelink:visited {
+ color: #CC3434;
+}
+
+a.deletelink:focus, a.deletelink:hover {
+ color: #993333;
+ text-decoration: none;
+}
+
+/* OBJECT TOOLS */
+
+.object-tools {
+ font-size: 10px;
+ font-weight: bold;
+ padding-left: 0;
+ float: right;
+ position: relative;
+ margin-top: -30px;
+}
+
+.form-row .object-tools {
+ margin-top: 5px;
+ margin-bottom: 5px;
+ float: none;
+ height: 2em;
+ padding-left: 3.5em;
+}
+
+.object-tools li {
+ display: block;
+ float: left;
+ margin-left: 5px;
+ height: 16px;
+}
+
+.object-tools a {
+ border-radius: 15px;
+}
+
+.object-tools a:link, .object-tools a:visited {
+ display: block;
+ float: left;
+ padding: 3px 12px;
+ background: #999;
+ font-weight: 400;
+ font-size: 11px;
+ text-transform: uppercase;
+ letter-spacing: 0.5px;
+ color: #fff;
+}
+
+.object-tools a:focus, .object-tools a:hover {
+ background-color: #417690;
+}
+
+.object-tools a:focus {
+ text-decoration: none;
+}
+
+.object-tools a.viewsitelink, .object-tools a.golink, .object-tools a.addlink {
+ background-repeat: no-repeat;
+ background-position: right 7px center;
+ padding-right: 26px;
+}
+
+.object-tools a.viewsitelink, .object-tools a.golink {
+ background-image: url(../img/tooltag-arrowright.svg);
+}
+
+.object-tools a.addlink {
+ background-image: url(../img/tooltag-add.svg);
+}
+
+/* OBJECT HISTORY */
+
+table#change-history {
+ width: 100%;
+}
+
+table#change-history tbody th {
+ width: 16em;
+}
+
+/* PAGE STRUCTURE */
+
+#container {
+ position: relative;
+ width: 100%;
+ min-width: 980px;
+ padding: 0;
+}
+
+#content {
+ padding: 20px;
+ background-color: white;
+ margin: 20px;
+ box-shadow: 0 2px 12px 0 rgba(0, 0, 0, .1);
+}
+
+.dashboard #content {
+ width: 600px;
+}
+
+#content-main {
+ float: left;
+ width: 100%;
+}
+
+#content-related {
+ float: right;
+ width: 260px;
+ position: relative;
+ margin-right: -300px;
+}
+
+#footer {
+ clear: both;
+ padding: 10px;
+}
+
+/* COLUMN TYPES */
+
+.colMS {
+ margin-right: 300px;
+}
+
+.colSM {
+ margin-left: 300px;
+}
+
+.colSM #content-related {
+ float: left;
+ margin-right: 0;
+ margin-left: -300px;
+}
+
+.colSM #content-main {
+ float: right;
+}
+
+.popup .colM {
+ width: auto;
+}
+
+/* HEADER */
+
+#header {
+ width: auto;
+ height: 40px;
+ padding: 10px 40px;
+ background: #1b93e1;
+ line-height: 40px;
+ color: #ffc;
+ overflow: hidden;
+}
+
+#header a:link, #header a:visited {
+ color: #fff;
+}
+
+#header a:focus, #header a:hover {
+ text-decoration: underline;
+}
+
+#branding {
+ float: left;
+}
+
+#branding h1 {
+ padding: 0;
+ margin: 0 20px 0 0;
+ font-weight: 300;
+ font-size: 24px;
+ color: #f5dd5d;
+}
+
+#branding h1, #branding h1 a:link, #branding h1 a:visited {
+ color: #FFF;
+}
+
+#branding h2 {
+ padding: 0 10px;
+ font-size: 14px;
+ margin: -8px 0 8px 0;
+ font-weight: normal;
+ color: #ffc;
+}
+
+#branding a:hover {
+ text-decoration: none;
+}
+
+#user-tools {
+ float: right;
+ padding: 0;
+ margin: 0 0 0 20px;
+ font-weight: 300;
+ font-size: 11px;
+ letter-spacing: 0.5px;
+ text-transform: uppercase;
+ text-align: right;
+}
+
+#user-tools a {
+ border-bottom: 1px solid rgba(255, 255, 255, 0.25);
+}
+
+#user-tools a:focus, #user-tools a:hover {
+ text-decoration: none;
+ border-bottom-color: #79aec8;
+ color: #79aec8;
+}
+
+/* SIDEBAR */
+
+#content-related {
+ background: #f8f8f8;
+}
+
+#content-related .module {
+ background: none;
+}
+
+#content-related h3 {
+ font-size: 14px;
+ color: #666;
+ padding: 0 16px;
+ margin: 0 0 16px;
+}
+
+#content-related h4 {
+ font-size: 13px;
+}
+
+#content-related p {
+ padding-left: 16px;
+ padding-right: 16px;
+}
+
+#content-related .actionlist {
+ padding: 0;
+ margin: 16px;
+}
+
+#content-related .actionlist li {
+ line-height: 1.2;
+ margin-bottom: 10px;
+ padding-left: 18px;
+}
+
+#content-related .module h2 {
+ background: none;
+ padding: 16px;
+ margin-bottom: 16px;
+ border-bottom: 1px solid #eaeaea;
+ font-size: 18px;
+ color: #333;
+}
+
+.delete-confirmation form input[type="submit"] {
+ background: #ba2121;
+ border-radius: 4px;
+ padding: 10px 15px;
+ color: #fff;
+}
+
+.delete-confirmation form input[type="submit"]:active,
+.delete-confirmation form input[type="submit"]:focus,
+.delete-confirmation form input[type="submit"]:hover {
+ background: #a41515;
+}
+
+.delete-confirmation form .cancel-link {
+ display: inline-block;
+ vertical-align: middle;
+ height: 15px;
+ line-height: 15px;
+ background: #ddd;
+ border-radius: 4px;
+ padding: 10px 15px;
+ color: #333;
+ margin: 0 0 0 10px;
+}
+
+.delete-confirmation form .cancel-link:active,
+.delete-confirmation form .cancel-link:focus,
+.delete-confirmation form .cancel-link:hover {
+ background: #ccc;
+}
+
+/* POPUP */
+.popup #content {
+ padding: 20px;
+}
+
+.popup #container {
+ min-width: 0;
+}
+
+.popup #header {
+ padding: 10px 20px;
+}
diff --git a/venv/Lib/site-packages/simpleui/static/admin/css/changelists.css b/venv/Lib/site-packages/simpleui/static/admin/css/changelists.css
new file mode 100644
index 0000000..60be83f
--- /dev/null
+++ b/venv/Lib/site-packages/simpleui/static/admin/css/changelists.css
@@ -0,0 +1,346 @@
+/* CHANGELISTS */
+
+#changelist {
+ position: relative;
+ width: 100%;
+}
+
+#changelist table {
+ width: 100%;
+}
+
+.change-list .hiddenfields {
+ display: none;
+}
+
+.change-list .filtered table {
+ border-right: none;
+}
+
+.change-list .filtered {
+ min-height: 400px;
+}
+
+.change-list .filtered .results, .change-list .filtered .paginator,
+.filtered #toolbar, .filtered div.xfull {
+ /*margin-right: 280px;*/
+ width: auto;
+}
+
+.change-list .filtered table tbody th {
+ padding-right: 1em;
+}
+
+#changelist-form .results {
+ overflow-x: auto;
+}
+
+#changelist .toplinks {
+ border-bottom: 1px solid #ddd;
+}
+
+#changelist .paginator {
+ color: #666;
+ border-bottom: 1px solid #eee;
+ background: #fff;
+ overflow: hidden;
+}
+
+/* CHANGELIST TABLES */
+
+#changelist table thead th {
+ padding: 0;
+ white-space: nowrap;
+ vertical-align: middle;
+}
+
+#changelist table thead th.action-checkbox-column {
+ width: 1.5em;
+ text-align: center;
+}
+
+#changelist table tbody td.action-checkbox {
+ text-align: center;
+}
+
+#changelist table tfoot {
+ color: #666;
+}
+
+/* TOOLBAR */
+
+#changelist #toolbar {
+ padding: 8px 10px;
+ margin-bottom: 15px;
+ border-top: 1px solid #eee;
+ border-bottom: 1px solid #eee;
+ background: #f8f8f8;
+ color: #666;
+}
+
+/*#changelist #toolbar form input {*/
+/* border-radius: 4px;*/
+/* font-size: 14px;*/
+/* padding: 5px;*/
+/* color: #333;*/
+/*}*/
+
+/*#changelist #toolbar form #searchbar {*/
+/* height: 32px;*/
+/* border: 1px solid #ccc;*/
+/* padding: 2px 5px;*/
+/* margin: 0;*/
+/* vertical-align: top;*/
+/* font-size: 13px;*/
+/*}*/
+
+/*#changelist #toolbar form #searchbar:focus {*/
+/* border-color: #999;*/
+/*}*/
+
+/*#changelist #toolbar form input[type="submit"] {*/
+/* border: 1px solid #ccc;*/
+/* padding: 2px 10px;*/
+/* margin: 0;*/
+/* vertical-align: middle;*/
+/* background: #fff;*/
+/* box-shadow: 0 -15px 20px -10px rgba(0, 0, 0, 0.15) inset;*/
+/* cursor: pointer;*/
+/* color: #333;*/
+/*}*/
+
+/*#changelist #toolbar form input[type="submit"]:focus,*/
+/*#changelist #toolbar form input[type="submit"]:hover {*/
+/* border-color: #999;*/
+/*}*/
+
+#changelist #changelist-search img {
+ vertical-align: middle;
+ margin-right: 4px;
+}
+
+/* FILTER COLUMN */
+
+#changelist-filter {
+ position: absolute;
+ top: 0;
+ right: 0;
+ z-index: 1000;
+ width: 240px;
+ background: #f8f8f8;
+ border-left: none;
+ margin: 0;
+}
+
+#changelist-filter h2 {
+ font-size: 14px;
+ text-transform: uppercase;
+ letter-spacing: 0.5px;
+ padding: 5px 15px;
+ margin-bottom: 12px;
+ border-bottom: none;
+}
+
+#changelist-filter h3 {
+ font-weight: 400;
+ font-size: 14px;
+ padding: 0 15px;
+ margin-bottom: 10px;
+}
+
+#changelist-filter ul {
+ margin: 5px 0;
+ padding: 0 15px 15px;
+ border-bottom: 1px solid #eaeaea;
+}
+
+#changelist-filter ul:last-child {
+ border-bottom: none;
+ padding-bottom: none;
+}
+
+#changelist-filter li {
+ list-style-type: none;
+ margin-left: 0;
+ padding-left: 0;
+}
+
+#changelist-filter a {
+ display: block;
+ color: #999;
+ text-overflow: ellipsis;
+ overflow-x: hidden;
+}
+
+#changelist-filter li.selected {
+ border-left: 5px solid #eaeaea;
+ padding-left: 10px;
+ margin-left: -15px;
+}
+
+#changelist-filter li.selected a {
+ color: #5b80b2;
+}
+
+#changelist-filter a:focus, #changelist-filter a:hover,
+#changelist-filter li.selected a:focus,
+#changelist-filter li.selected a:hover {
+ color: #036;
+}
+
+/* DATE DRILLDOWN */
+
+.change-list ul.toplinks {
+ display: block;
+ float: left;
+ padding: 0;
+ margin: 0;
+ width: 100%;
+}
+
+.change-list ul.toplinks li {
+ padding: 3px 6px;
+ font-weight: bold;
+ list-style-type: none;
+ display: inline-block;
+}
+
+.change-list ul.toplinks .date-back a {
+ color: #999;
+}
+
+.change-list ul.toplinks .date-back a:focus,
+.change-list ul.toplinks .date-back a:hover {
+ color: #036;
+}
+
+/* PAGINATOR */
+
+.paginator {
+ font-size: 13px;
+ padding-top: 10px;
+ padding-bottom: 10px;
+ line-height: 22px;
+ margin: 0;
+ border-top: 1px solid #ddd;
+}
+
+.paginator a:link, .paginator a:visited {
+ padding: 2px 6px;
+ background: #79aec8;
+ text-decoration: none;
+ color: #fff;
+}
+
+.paginator a.showall {
+ padding: 0;
+ border: none;
+ background: none;
+ color: #5b80b2;
+}
+
+.paginator a.showall:focus, .paginator a.showall:hover {
+ background: none;
+ color: #036;
+}
+
+.paginator .end {
+ margin-right: 6px;
+}
+
+.paginator .this-page {
+ padding: 2px 6px;
+ font-weight: bold;
+ font-size: 13px;
+ vertical-align: top;
+}
+
+.paginator a:focus, .paginator a:hover {
+ color: white;
+ background: #036;
+}
+
+/* ACTIONS */
+
+.filtered .actions {
+ margin-right: 280px;
+ border-right: none;
+}
+
+#changelist table input {
+ margin: 0;
+ vertical-align: baseline;
+}
+
+#changelist table tbody tr.selected {
+ background-color: #FFFFCC;
+}
+
+#changelist .actions {
+ padding: 10px;
+ background: #fff;
+ border-top: none;
+ border-bottom: none;
+ line-height: 24px;
+ color: #999;
+}
+
+#changelist .actions.selected {
+ background: #fffccf;
+ border-top: 1px solid #fffee8;
+ border-bottom: 1px solid #edecd6;
+}
+
+#changelist .actions span.all,
+#changelist .actions span.action-counter,
+#changelist .actions span.clear,
+#changelist .actions span.question {
+ font-size: 13px;
+ margin: 0 0.5em;
+ display: none;
+}
+
+#changelist .actions:last-child {
+ border-bottom: none;
+}
+
+#changelist .actions select {
+ vertical-align: top;
+ height: 24px;
+ background: none;
+ color: #000;
+ border: 1px solid #ccc;
+ border-radius: 4px;
+ font-size: 14px;
+ padding: 0 0 0 4px;
+ margin: 0;
+ margin-left: 10px;
+}
+
+#changelist .actions select:focus {
+ border-color: #999;
+}
+
+#changelist .actions label {
+ display: inline-block;
+ vertical-align: middle;
+ font-size: 13px;
+}
+
+#changelist .actions .button {
+ font-size: 13px;
+ border: 1px solid #ccc;
+ border-radius: 4px;
+ background: #fff;
+ box-shadow: 0 -15px 20px -10px rgba(0, 0, 0, 0.15) inset;
+ cursor: pointer;
+ height: 24px;
+ line-height: 1;
+ padding: 4px 8px;
+ margin: 0;
+ color: #333;
+}
+
+#changelist .actions .button:focus, #changelist .actions .button:hover {
+ border-color: #999;
+}
diff --git a/venv/Lib/site-packages/simpleui/static/admin/css/dashboard.css b/venv/Lib/site-packages/simpleui/static/admin/css/dashboard.css
new file mode 100644
index 0000000..1560c7b
--- /dev/null
+++ b/venv/Lib/site-packages/simpleui/static/admin/css/dashboard.css
@@ -0,0 +1,27 @@
+/* DASHBOARD */
+
+.dashboard .module table th {
+ width: 100%;
+}
+
+.dashboard .module table td {
+ white-space: nowrap;
+}
+
+.dashboard .module table td a {
+ display: block;
+ padding-right: .6em;
+}
+
+/* RECENT ACTIONS MODULE */
+
+.module ul.actionlist {
+ margin-left: 0;
+}
+
+ul.actionlist li {
+ list-style-type: none;
+ overflow: hidden;
+ text-overflow: ellipsis;
+ -o-text-overflow: ellipsis;
+}
diff --git a/venv/Lib/site-packages/simpleui/static/admin/css/fonts.css b/venv/Lib/site-packages/simpleui/static/admin/css/fonts.css
new file mode 100644
index 0000000..c837e01
--- /dev/null
+++ b/venv/Lib/site-packages/simpleui/static/admin/css/fonts.css
@@ -0,0 +1,20 @@
+@font-face {
+ font-family: 'Roboto';
+ src: url('../fonts/Roboto-Bold-webfont.woff');
+ font-weight: 700;
+ font-style: normal;
+}
+
+@font-face {
+ font-family: 'Roboto';
+ src: url('../fonts/Roboto-Regular-webfont.woff');
+ font-weight: 400;
+ font-style: normal;
+}
+
+@font-face {
+ font-family: 'Roboto';
+ src: url('../fonts/Roboto-Light-webfont.woff');
+ font-weight: 300;
+ font-style: normal;
+}
diff --git a/venv/Lib/site-packages/simpleui/static/admin/css/forms.css b/venv/Lib/site-packages/simpleui/static/admin/css/forms.css
new file mode 100644
index 0000000..77985d5
--- /dev/null
+++ b/venv/Lib/site-packages/simpleui/static/admin/css/forms.css
@@ -0,0 +1,515 @@
+@import url('widgets.css');
+
+/* FORM ROWS */
+
+.form-row {
+ overflow: hidden;
+ padding: 10px;
+ font-size: 13px;
+ border-bottom: 1px solid #eee;
+}
+
+.form-row img, .form-row input {
+ vertical-align: middle;
+}
+
+.form-row label input[type="checkbox"] {
+ margin-top: 0;
+ vertical-align: 0;
+}
+
+form .form-row p {
+ padding-left: 0;
+}
+
+.hidden {
+ display: none;
+}
+
+/* FORM LABELS */
+
+label {
+ font-weight: normal;
+ color: #666;
+ font-size: 13px;
+}
+
+.required label, label.required {
+ font-weight: bold;
+ color: #333;
+}
+
+/* RADIO BUTTONS */
+
+form ul.radiolist li {
+ list-style-type: none;
+}
+
+form ul.radiolist label {
+ float: none;
+ display: inline;
+}
+
+form ul.radiolist input[type="radio"] {
+ margin: -2px 4px 0 0;
+ padding: 0;
+}
+
+form ul.inline {
+ margin-left: 0;
+ padding: 0;
+}
+
+form ul.inline li {
+ float: left;
+ padding-right: 7px;
+}
+
+/* ALIGNED FIELDSETS */
+
+.aligned label {
+ display: block;
+ padding: 4px 10px 0 0;
+ float: left;
+ width: 160px;
+ word-wrap: break-word;
+ line-height: 1;
+}
+
+.aligned label:not(.vCheckboxLabel):after {
+ content: '';
+ display: inline-block;
+ vertical-align: middle;
+ height: 26px;
+}
+
+.aligned label + p, .aligned label + div.help, .aligned label + div.readonly {
+ padding: 6px 0;
+ margin-top: 0;
+ margin-bottom: 0;
+ margin-left: 170px;
+}
+
+.aligned ul label {
+ display: inline;
+ float: none;
+ width: auto;
+}
+
+.aligned .form-row input {
+ margin-bottom: 0;
+}
+
+.colMS .aligned .vLargeTextField, .colMS .aligned .vXMLLargeTextField {
+ width: 350px;
+}
+
+form .aligned ul {
+ margin-left: 160px;
+ padding-left: 10px;
+}
+
+form .aligned ul.radiolist {
+ display: inline-block;
+ margin: 0;
+ padding: 0;
+}
+
+form .aligned p.help,
+form .aligned div.help {
+ clear: left;
+ margin-top: 0;
+ margin-left: 160px;
+ padding-left: 10px;
+}
+
+form .aligned label + p.help,
+form .aligned label + div.help {
+ margin-left: 0;
+ padding-left: 0;
+}
+
+form .aligned p.help:last-child,
+form .aligned div.help:last-child {
+ margin-bottom: 0;
+ padding-bottom: 0;
+}
+
+form .aligned input + p.help,
+form .aligned textarea + p.help,
+form .aligned select + p.help,
+form .aligned input + div.help,
+form .aligned textarea + div.help,
+form .aligned select + div.help {
+ margin-left: 160px;
+ padding-left: 10px;
+}
+
+form .aligned ul li {
+ list-style: none;
+}
+
+form .aligned table p {
+ margin-left: 0;
+ padding-left: 0;
+}
+
+.aligned .vCheckboxLabel {
+ float: none;
+ width: auto;
+ display: inline-block;
+ vertical-align: -3px;
+ padding: 0 0 5px 5px;
+}
+
+.aligned .vCheckboxLabel + p.help,
+.aligned .vCheckboxLabel + div.help {
+ margin-top: -4px;
+}
+
+.colM .aligned .vLargeTextField, .colM .aligned .vXMLLargeTextField {
+ width: 610px;
+}
+
+.checkbox-row p.help,
+.checkbox-row div.help {
+ margin-left: 0;
+ padding-left: 0;
+}
+
+fieldset .field-box {
+ float: left;
+ margin-right: 20px;
+}
+
+/* WIDE FIELDSETS */
+
+.wide label {
+ width: 200px;
+}
+
+form .wide p,
+form .wide input + p.help,
+form .wide input + div.help {
+ margin-left: 200px;
+}
+
+form .wide p.help,
+form .wide div.help {
+ padding-left: 38px;
+}
+
+form div.help ul {
+ padding-left: 0;
+ margin-left: 0;
+}
+
+.colM fieldset.wide .vLargeTextField, .colM fieldset.wide .vXMLLargeTextField {
+ width: 450px;
+}
+
+/* COLLAPSED FIELDSETS */
+
+fieldset.collapsed * {
+ display: none;
+}
+
+fieldset.collapsed h2, fieldset.collapsed {
+ display: block;
+}
+
+fieldset.collapsed {
+ border: 1px solid #eee;
+ border-radius: 4px;
+ overflow: hidden;
+}
+
+fieldset.collapsed h2 {
+ background: #f8f8f8;
+ color: #666;
+}
+
+fieldset .collapse-toggle {
+ color: #fff;
+}
+
+fieldset.collapsed .collapse-toggle {
+ background: transparent;
+ display: inline;
+ color: #447e9b;
+}
+
+/* MONOSPACE TEXTAREAS */
+
+fieldset.monospace textarea {
+ font-family: "Bitstream Vera Sans Mono", Monaco, "Courier New", Courier, monospace;
+}
+
+/* SUBMIT ROW */
+
+.submit-row {
+ padding: 12px 14px;
+ margin: 0 0 20px;
+ background: #f8f8f8;
+ border: 1px solid #eee;
+ border-radius: 4px;
+ text-align: right;
+ overflow: hidden;
+}
+
+body.popup .submit-row {
+ overflow: auto;
+}
+
+.submit-row input {
+ height: 35px;
+ line-height: 15px;
+ margin: 0 0 0 5px;
+}
+
+.submit-row input.default {
+ margin: 0 0 0 8px;
+ text-transform: uppercase;
+}
+
+.submit-row p {
+ margin: 0.3em;
+}
+
+.submit-row p.deletelink-box {
+ float: left;
+ margin: 0;
+}
+
+.submit-row a.deletelink {
+ display: block;
+ background: #ba2121;
+ border-radius: 4px;
+ padding: 10px 15px;
+ height: 15px;
+ line-height: 15px;
+ color: #fff;
+}
+
+.submit-row a.deletelink:focus,
+.submit-row a.deletelink:hover,
+.submit-row a.deletelink:active {
+ background: #a41515;
+}
+
+/* CUSTOM FORM FIELDS */
+
+.vSelectMultipleField {
+ vertical-align: top;
+}
+
+.vCheckboxField {
+ border: none;
+}
+
+.vDateField, .vTimeField {
+ margin-right: 2px;
+ margin-bottom: 4px;
+}
+
+.vDateField {
+ min-width: 6.85em;
+}
+
+.vTimeField {
+ min-width: 4.7em;
+}
+
+.vURLField {
+ width: 30em;
+}
+
+.vLargeTextField, .vXMLLargeTextField {
+ width: 48em;
+}
+
+.flatpages-flatpage #id_content {
+ height: 40.2em;
+}
+
+.module table .vPositiveSmallIntegerField {
+ width: 2.2em;
+}
+
+.vTextField {
+ width: 20em;
+}
+
+.vIntegerField {
+ width: 5em;
+}
+
+.vBigIntegerField {
+ width: 10em;
+}
+
+.vForeignKeyRawIdAdminField {
+ width: 5em;
+}
+
+/* INLINES */
+
+.inline-group {
+ padding: 0;
+ margin: 0 0 30px;
+}
+
+.inline-group thead th {
+ padding: 8px 10px;
+}
+
+.inline-group .aligned label {
+ width: 160px;
+}
+
+.inline-related {
+ position: relative;
+}
+
+.inline-related h3 {
+ margin: 0;
+ color: #666;
+ padding: 5px;
+ font-size: 13px;
+ background: #f8f8f8;
+ border-top: 1px solid #eee;
+ border-bottom: 1px solid #eee;
+}
+
+.inline-related h3 span.delete {
+ float: right;
+}
+
+.inline-related h3 span.delete label {
+ margin-left: 2px;
+ font-size: 11px;
+}
+
+.inline-related fieldset {
+ margin: 0;
+ background: #fff;
+ border: none;
+ width: 100%;
+}
+
+.inline-related fieldset.module h3 {
+ margin: 0;
+ padding: 2px 5px 3px 5px;
+ font-size: 11px;
+ text-align: left;
+ font-weight: bold;
+ background: #bcd;
+ color: #fff;
+}
+
+.inline-group .tabular fieldset.module {
+ border: none;
+}
+
+.inline-related.tabular fieldset.module table {
+ width: 100%;
+}
+
+.last-related fieldset {
+ border: none;
+}
+
+.inline-group .tabular tr.has_original td {
+ padding-top: 2em;
+}
+
+.inline-group .tabular tr td.original {
+ padding: 2px 0 0 0;
+ width: 0;
+ _position: relative;
+}
+
+.inline-group .tabular th.original {
+ width: 0px;
+ padding: 0;
+}
+
+.inline-group .tabular td.original p {
+ position: absolute;
+ left: 0;
+ height: 1.1em;
+ padding: 2px 9px;
+ overflow: hidden;
+ font-size: 9px;
+ font-weight: bold;
+ color: #666;
+ _width: 700px;
+}
+
+.inline-group ul.tools {
+ padding: 0;
+ margin: 0;
+ list-style: none;
+}
+
+.inline-group ul.tools li {
+ display: inline;
+ padding: 0 5px;
+}
+
+.inline-group div.add-row,
+.inline-group .tabular tr.add-row td {
+ color: #666;
+ background: #f8f8f8;
+ padding: 8px 10px;
+ border-bottom: 1px solid #eee;
+}
+
+.inline-group .tabular tr.add-row td {
+ padding: 8px 10px;
+ border-bottom: 1px solid #eee;
+}
+
+.inline-group ul.tools a.add,
+.inline-group div.add-row a,
+.inline-group .tabular tr.add-row td a {
+ background: url(../img/icon-addlink.svg) 0 1px no-repeat;
+ padding-left: 16px;
+ font-size: 12px;
+}
+
+.empty-form {
+ display: none;
+}
+
+/* RELATED FIELD ADD ONE / LOOKUP */
+
+.add-another, .related-lookup {
+ margin-left: 5px;
+ display: inline-block;
+ vertical-align: middle;
+ background-repeat: no-repeat;
+ background-size: 14px;
+}
+
+.add-another {
+ width: 16px;
+ height: 16px;
+ background-image: url(../img/icon-addlink.svg);
+}
+
+.related-lookup {
+ width: 16px;
+ height: 16px;
+ background-image: url(../img/search.svg);
+}
+
+form .related-widget-wrapper ul {
+ display: inline-block;
+ margin-left: 0;
+ padding-left: 0;
+}
+
+.clearable-file-input input {
+ margin-top: 0;
+}
diff --git a/venv/Lib/site-packages/simpleui/static/admin/css/login.css b/venv/Lib/site-packages/simpleui/static/admin/css/login.css
new file mode 100644
index 0000000..b9f38ea
--- /dev/null
+++ b/venv/Lib/site-packages/simpleui/static/admin/css/login.css
@@ -0,0 +1,78 @@
+/* LOGIN FORM */
+
+body.login {
+ background: #f8f8f8;
+}
+
+.login #header {
+ height: auto;
+ padding: 5px 16px;
+}
+
+.login #header h1 {
+ font-size: 18px;
+}
+
+.login #header h1 a {
+ color: #fff;
+}
+
+.login #content {
+ padding: 20px 20px 0;
+}
+
+.login #container {
+ background: #fff;
+ border: 1px solid #eaeaea;
+ border-radius: 4px;
+ overflow: hidden;
+ width: 28em;
+ min-width: 300px;
+ margin: 100px auto;
+}
+
+.login #content-main {
+ width: 100%;
+}
+
+.login .form-row {
+ padding: 4px 0;
+ float: left;
+ width: 100%;
+ border-bottom: none;
+}
+
+.login .form-row label {
+ padding-right: 0.5em;
+ line-height: 2em;
+ font-size: 1em;
+ clear: both;
+ color: #333;
+}
+
+.login .form-row #id_username, .login .form-row #id_password {
+ clear: both;
+ padding: 8px;
+ width: 100%;
+ -webkit-box-sizing: border-box;
+ -moz-box-sizing: border-box;
+ box-sizing: border-box;
+}
+
+.login span.help {
+ font-size: 10px;
+ display: block;
+}
+
+.login .submit-row {
+ clear: both;
+ padding: 1em 0 0 9.4em;
+ margin: 0;
+ border: none;
+ background: none;
+ text-align: left;
+}
+
+.login .password-reset-link {
+ text-align: center;
+}
diff --git a/venv/Lib/site-packages/simpleui/static/admin/css/responsive.css b/venv/Lib/site-packages/simpleui/static/admin/css/responsive.css
new file mode 100644
index 0000000..2b2f76f
--- /dev/null
+++ b/venv/Lib/site-packages/simpleui/static/admin/css/responsive.css
@@ -0,0 +1,964 @@
+/* Tablets */
+
+input[type="submit"], button {
+ -webkit-appearance: none;
+ appearance: none;
+}
+
+@media (max-width: 1024px) {
+ /* Basic */
+ html {
+ -webkit-text-size-adjust: 100%;
+ }
+
+ td, th {
+ padding: 10px;
+ font-size: 14px;
+ }
+
+ .small {
+ font-size: 12px;
+ }
+
+ /* Layout */
+ #container {
+ min-width: 0;
+ }
+
+ #content {
+ padding: 20px 30px 30px;
+ }
+
+ div.breadcrumbs {
+ padding: 10px 30px;
+ }
+
+ /* Header */
+ #header {
+ display: flex;
+ flex-direction: column;
+ padding: 15px 30px;
+ height: auto;
+ line-height: 1;
+ }
+
+ #branding h1 {
+ margin: 0 0 8px;
+ font-size: 20px;
+ line-height: 1.2;
+ }
+
+ #user-tools {
+ margin: 0;
+ font-weight: 400;
+ line-height: 1.85;
+ text-align: left;
+ }
+
+ #user-tools a {
+ display: inline-block;
+ line-height: 1.4;
+ }
+
+ /* Dashboard */
+ .dashboard #content {
+ width: auto;
+ }
+
+ #content-related {
+ margin-right: -290px;
+ }
+
+ .colSM #content-related {
+ margin-left: -290px;
+ }
+
+ .colMS {
+ margin-right: 290px;
+ }
+
+ .colSM {
+ margin-left: 290px;
+ }
+
+ .dashboard .module table td a {
+ padding-right: 0;
+ }
+
+ td .changelink, td .addlink {
+ font-size: 13px;
+ }
+
+ /* Changelist */
+ #changelist #toolbar {
+ border: none;
+ padding: 15px;
+ }
+
+ #changelist-search > div {
+ display: -webkit-flex;
+ display: flex;
+ -webkit-flex-wrap: wrap;
+ flex-wrap: wrap;
+ max-width: 480px;
+ }
+
+ #changelist-search label {
+ line-height: 22px;
+ }
+
+ #changelist #toolbar form #searchbar {
+ -webkit-flex: 1 0 auto;
+ flex: 1 0 auto;
+ width: 0;
+ height: 22px;
+ margin: 0 10px 0 6px;
+ }
+
+ #changelist-search .quiet {
+ width: 100%;
+ margin: 5px 0 0 25px;
+ }
+
+ #changelist .actions {
+ display: flex;
+ flex-wrap: wrap;
+ padding: 15px 0;
+ }
+
+ #changelist .actions.selected {
+ border: none;
+ }
+
+ #changelist .actions label {
+ display: flex;
+ }
+
+ #changelist .actions select {
+ background: #fff;
+ }
+
+ #changelist .actions .button {
+ min-width: 48px;
+ margin: 0 10px;
+ }
+
+ #changelist .actions span.all,
+ #changelist .actions span.clear,
+ #changelist .actions span.question,
+ #changelist .actions span.action-counter {
+ font-size: 11px;
+ margin: 0 10px 0 0;
+ }
+
+ #changelist-filter {
+ width: 200px;
+ }
+
+ .change-list .filtered .results,
+ .change-list .filtered .paginator,
+ .filtered #toolbar,
+ .filtered .actions,
+ .filtered div.xfull {
+ margin-right: 230px;
+ }
+
+ #changelist .paginator {
+ border-top-color: #eee;
+ }
+
+ #changelist .results + .paginator {
+ border-top: none;
+ }
+
+ /* Forms */
+ label {
+ font-size: 14px;
+ }
+
+ .form-row input[type=text],
+ .form-row input[type=password],
+ .form-row input[type=email],
+ .form-row input[type=url],
+ .form-row input[type=tel],
+ .form-row input[type=number],
+ .form-row textarea,
+ .form-row select,
+ .form-row .vTextField {
+ box-sizing: border-box;
+ margin: 0;
+ padding: 6px 8px;
+ min-height: 36px;
+ font-size: 14px;
+ }
+
+ .form-row select {
+ height: 36px;
+ }
+
+ .form-row select[multiple] {
+ height: auto;
+ min-height: 0;
+ }
+
+ fieldset .field-box {
+ float: none;
+ margin: 0 -10px;
+ padding: 0 10px;
+ }
+
+ fieldset .field-box + .field-box {
+ margin-top: 10px;
+ padding-top: 10px;
+ border-top: 1px solid #eee;
+ }
+
+ textarea {
+ max-width: 518px;
+ max-height: 120px;
+ }
+
+ .aligned label {
+ padding-top: 6px;
+ }
+
+ .aligned .add-another,
+ .aligned .related-lookup,
+ .aligned .datetimeshortcuts,
+ .aligned .related-lookup + strong {
+ align-self: center;
+ margin-left: 15px;
+ }
+
+ form .aligned ul.radiolist {
+ margin-left: 2px;
+ }
+
+ /* Related widget */
+ .related-widget-wrapper {
+ float: none;
+ }
+
+ .related-widget-wrapper-link + .selector {
+ max-width: calc(100% - 30px);
+ margin-right: 15px;
+ }
+
+ select + .related-widget-wrapper-link,
+ .related-widget-wrapper-link + .related-widget-wrapper-link {
+ margin-left: 10px;
+ }
+
+ /* Selector */
+ .selector {
+ display: flex;
+ width: 100%;
+ }
+
+ .selector .selector-filter {
+ display: flex;
+ align-items: center;
+ }
+
+ .selector .selector-filter label {
+ margin: 0 8px 0 0;
+ }
+
+ .selector .selector-filter input {
+ width: auto;
+ min-height: 0;
+ flex: 1 1;
+ }
+
+ .selector-available, .selector-chosen {
+ width: auto;
+ flex: 1 1;
+ display: flex;
+ flex-direction: column;
+ }
+
+ .selector select {
+ width: 100%;
+ flex: 1 0 auto;
+ margin-bottom: 5px;
+ }
+
+ .selector ul.selector-chooser {
+ width: 26px;
+ height: 52px;
+ padding: 2px 0;
+ margin: auto 15px;
+ border-radius: 20px;
+ transform: translateY(-10px);
+ }
+
+ .selector-add, .selector-remove {
+ width: 20px;
+ height: 20px;
+ background-size: 20px auto;
+ }
+
+ .selector-add {
+ background-position: 0 -120px;
+ }
+
+ .selector-remove {
+ background-position: 0 -80px;
+ }
+
+ a.selector-chooseall, a.selector-clearall {
+ align-self: center;
+ }
+
+ .stacked {
+ flex-direction: column;
+ max-width: 480px;
+ }
+
+ .stacked > * {
+ flex: 0 1 auto;
+ }
+
+ .stacked select {
+ margin-bottom: 0;
+ }
+
+ .stacked .selector-available, .stacked .selector-chosen {
+ width: auto;
+ }
+
+ .stacked ul.selector-chooser {
+ width: 52px;
+ height: 26px;
+ padding: 0 2px;
+ margin: 15px auto;
+ transform: none;
+ }
+
+ .stacked .selector-chooser li {
+ padding: 3px;
+ }
+
+ .stacked .selector-add, .stacked .selector-remove {
+ background-size: 20px auto;
+ }
+
+ .stacked .selector-add {
+ background-position: 0 -40px;
+ }
+
+ .stacked .active.selector-add {
+ background-position: 0 -60px;
+ }
+
+ .stacked .selector-remove {
+ background-position: 0 0;
+ }
+
+ .stacked .active.selector-remove {
+ background-position: 0 -20px;
+ }
+
+ .help-tooltip, .selector .help-icon {
+ display: none;
+ }
+
+ form .form-row p.datetime {
+ width: 100%;
+ }
+
+ .datetime input {
+ width: 50%;
+ max-width: 120px;
+ }
+
+ .datetime span {
+ font-size: 13px;
+ }
+
+ .datetime .timezonewarning {
+ display: block;
+ font-size: 11px;
+ color: #999;
+ }
+
+ .datetimeshortcuts {
+ color: #ccc;
+ }
+
+ .inline-group {
+ overflow: auto;
+ }
+
+ /* Messages */
+ ul.messagelist li {
+ padding-left: 55px;
+ background-position: 30px 12px;
+ }
+
+ ul.messagelist li.error {
+ background-position: 30px 12px;
+ }
+
+ ul.messagelist li.warning {
+ background-position: 30px 14px;
+ }
+
+ /* Login */
+ .login #header {
+ padding: 15px 20px;
+ }
+
+ .login #branding h1 {
+ margin: 0;
+ }
+
+ /* GIS */
+ div.olMap {
+ max-width: calc(100vw - 30px);
+ max-height: 300px;
+ }
+
+ .olMap + .clear_features {
+ display: block;
+ margin-top: 10px;
+ }
+
+ /* Docs */
+ .module table.xfull {
+ width: 100%;
+ }
+
+ pre.literal-block {
+ overflow: auto;
+ }
+}
+
+/* Mobile */
+
+@media (max-width: 767px) {
+ /* Layout */
+ #header, #content, #footer {
+ padding: 15px;
+ }
+
+ #footer:empty {
+ padding: 0;
+ }
+
+ div.breadcrumbs {
+ padding: 10px 15px;
+ }
+
+ /* Dashboard */
+ .colMS, .colSM {
+ margin: 0;
+ }
+
+ #content-related, .colSM #content-related {
+ width: 100%;
+ margin: 0;
+ }
+
+ #content-related .module {
+ margin-bottom: 0;
+ }
+
+ #content-related .module h2 {
+ padding: 10px 15px;
+ font-size: 16px;
+ }
+
+ /* Changelist */
+ #changelist {
+ display: flex;
+ flex-direction: column;
+ }
+
+ #changelist #toolbar {
+ order: 1;
+ padding: 10px;
+ }
+
+ #changelist .xfull {
+ order: 2;
+ }
+
+ #changelist-form {
+ order: 3;
+ }
+
+ #changelist-filter {
+ order: 4;
+ }
+
+ #changelist .actions label {
+ flex: 1 1;
+ }
+
+ #changelist .actions select {
+ flex: 1 0;
+ width: 100%;
+ }
+
+ #changelist .actions span {
+ flex: 1 0 100%;
+ }
+
+ .change-list .filtered .results, .change-list .filtered .paginator,
+ .filtered #toolbar, .filtered .actions, .filtered div.xfull {
+ margin-right: 0;
+ }
+
+ #changelist-filter {
+ position: static;
+ width: auto;
+ margin-top: 30px;
+ }
+
+ .object-tools {
+ float: none;
+ margin: 0 0 15px;
+ padding: 0;
+ overflow: hidden;
+ }
+
+ .object-tools li {
+ height: auto;
+ margin-left: 0;
+ }
+
+ .object-tools li + li {
+ margin-left: 15px;
+ }
+
+ /* Forms */
+ .form-row {
+ padding: 15px 0;
+ }
+
+ .aligned .form-row,
+ .aligned .form-row > div {
+ display: flex;
+ flex-wrap: wrap;
+ max-width: 100vw;
+ }
+
+ .aligned .form-row > div {
+ width: calc(100vw - 30px);
+ }
+
+ textarea {
+ max-width: none;
+ }
+
+ .vURLField {
+ width: auto;
+ }
+
+ fieldset .field-box + .field-box {
+ margin-top: 15px;
+ padding-top: 15px;
+ }
+
+ fieldset.collapsed .form-row {
+ display: none;
+ }
+
+ .aligned label {
+ width: 100%;
+ padding: 0 0 10px;
+ }
+
+ .aligned label:after {
+ max-height: 0;
+ }
+
+ .aligned .form-row input,
+ .aligned .form-row select,
+ .aligned .form-row textarea {
+ flex: 1 1 auto;
+ max-width: 100%;
+ }
+
+ .aligned .checkbox-row {
+ align-items: center;
+ }
+
+ .aligned .checkbox-row input {
+ flex: 0 1 auto;
+ margin: 0;
+ }
+
+ .aligned .vCheckboxLabel {
+ flex: 1 0;
+ padding: 1px 0 0 5px;
+ }
+
+ .aligned label + p,
+ .aligned label + div.help,
+ .aligned label + div.readonly {
+ padding: 0;
+ margin-left: 0;
+ }
+
+ .aligned p.file-upload {
+ margin-left: 0;
+ font-size: 13px;
+ }
+
+ span.clearable-file-input {
+ margin-left: 15px;
+ }
+
+ span.clearable-file-input label {
+ font-size: 13px;
+ padding-bottom: 0;
+ }
+
+ .aligned .timezonewarning {
+ flex: 1 0 100%;
+ margin-top: 5px;
+ }
+
+ form .aligned .form-row div.help {
+ width: 100%;
+ margin: 5px 0 0;
+ padding: 0;
+ }
+
+ form .aligned ul {
+ margin-left: 0;
+ padding-left: 0;
+ }
+
+ form .aligned ul.radiolist {
+ margin-right: 15px;
+ margin-bottom: -3px;
+ }
+
+ form .aligned ul.radiolist li + li {
+ margin-top: 5px;
+ }
+
+ /* Related widget */
+ .related-widget-wrapper {
+ width: 100%;
+ display: flex;
+ align-items: flex-start;
+ }
+
+ .related-widget-wrapper .selector {
+ order: 1;
+ }
+
+ .related-widget-wrapper > a {
+ order: 2;
+ }
+
+ .related-widget-wrapper .radiolist ~ a {
+ align-self: flex-end;
+ }
+
+ .related-widget-wrapper > select ~ a {
+ align-self: center;
+ }
+
+ select + .related-widget-wrapper-link,
+ .related-widget-wrapper-link + .related-widget-wrapper-link {
+ margin-left: 15px;
+ }
+
+ /* Selector */
+ .selector {
+ flex-direction: column;
+ }
+
+ .selector > * {
+ float: none;
+ }
+
+ .selector-available, .selector-chosen {
+ margin-bottom: 0;
+ flex: 1 1 auto;
+ }
+
+ .selector select {
+ max-height: 96px;
+ }
+
+ .selector ul.selector-chooser {
+ display: block;
+ float: none;
+ width: 52px;
+ height: 26px;
+ padding: 0 2px;
+ margin: 15px auto 20px;
+ transform: none;
+ }
+
+ .selector ul.selector-chooser li {
+ float: left;
+ }
+
+ .selector-remove {
+ background-position: 0 0;
+ }
+
+ .selector-add {
+ background-position: 0 -40px;
+ }
+
+ /* Inlines */
+ .inline-group[data-inline-type="stacked"] .inline-related {
+ border: 2px solid #eee;
+ border-radius: 4px;
+ margin-top: 15px;
+ overflow: auto;
+ }
+
+ .inline-group[data-inline-type="stacked"] .inline-related > * {
+ box-sizing: border-box;
+ }
+
+ .inline-group[data-inline-type="stacked"] .inline-related + .inline-related {
+ margin-top: 30px;
+ }
+
+ .inline-group[data-inline-type="stacked"] .inline-related .module {
+ padding: 0 10px;
+ }
+
+ .inline-group[data-inline-type="stacked"] .inline-related .module .form-row:last-child {
+ border-bottom: none;
+ }
+
+ .inline-group[data-inline-type="stacked"] .inline-related h3 {
+ padding: 10px;
+ border-top-width: 0;
+ border-bottom-width: 2px;
+ display: flex;
+ flex-wrap: wrap;
+ align-items: center;
+ }
+
+ .inline-group[data-inline-type="stacked"] .inline-related h3 .inline_label {
+ margin-right: auto;
+ }
+
+ .inline-group[data-inline-type="stacked"] .inline-related h3 span.delete {
+ float: none;
+ flex: 1 1 100%;
+ margin-top: 5px;
+ }
+
+ .inline-group[data-inline-type="stacked"] .aligned .form-row > div:not([class]) {
+ width: 100%;
+ }
+
+ .inline-group[data-inline-type="stacked"] .aligned label {
+ width: 100%;
+ }
+
+ .inline-group[data-inline-type="stacked"] div.add-row {
+ margin-top: 15px;
+ border: 1px solid #eee;
+ border-radius: 4px;
+ }
+
+ .inline-group div.add-row,
+ .inline-group .tabular tr.add-row td {
+ padding: 0;
+ }
+
+ .inline-group div.add-row a,
+ .inline-group .tabular tr.add-row td a {
+ display: block;
+ padding: 8px 10px 8px 26px;
+ background-position: 8px 9px;
+ }
+
+ /* Submit row */
+ .submit-row {
+ padding: 10px 10px 0;
+ margin: 0 0 15px;
+ display: flex;
+ flex-direction: column;
+ }
+
+ .submit-row > * {
+ width: 100%;
+ }
+
+ .submit-row input, .submit-row input.default, .submit-row a {
+ float: none;
+ margin: 0 0 10px;
+ text-align: center;
+ }
+
+ .submit-row p.deletelink-box {
+ order: 4;
+ }
+
+ /* Messages */
+ ul.messagelist li {
+ padding-left: 40px;
+ background-position: 15px 12px;
+ }
+
+ ul.messagelist li.error {
+ background-position: 15px 12px;
+ }
+
+ ul.messagelist li.warning {
+ background-position: 15px 14px;
+ }
+
+ /* Paginator */
+ .paginator .this-page, .paginator a:link, .paginator a:visited {
+ padding: 4px 10px;
+ }
+
+ /* Login */
+ body.login {
+ padding: 0 15px;
+ }
+
+ .login #container {
+ width: auto;
+ max-width: 480px;
+ margin: 50px auto;
+ }
+
+ .login #header,
+ .login #content {
+ padding: 15px;
+ }
+
+ .login #content-main {
+ float: none;
+ }
+
+ .login .form-row {
+ padding: 0;
+ }
+
+ .login .form-row + .form-row {
+ margin-top: 15px;
+ }
+
+ .login .form-row label {
+ display: block;
+ margin: 0 0 5px;
+ padding: 0;
+ line-height: 1.2;
+ }
+
+ .login .submit-row {
+ padding: 15px 0 0;
+ }
+
+ .login br, .login .submit-row label {
+ display: none;
+ }
+
+ .login .submit-row input {
+ margin: 0;
+ text-transform: uppercase;
+ }
+
+ .errornote {
+ margin: 0 0 20px;
+ padding: 8px 12px;
+ font-size: 13px;
+ }
+
+ /* Calendar and clock */
+ .calendarbox, .clockbox {
+ position: fixed !important;
+ top: 50% !important;
+ left: 50% !important;
+ transform: translate(-50%, -50%);
+ margin: 0;
+ border: none;
+ overflow: visible;
+ }
+
+ .calendarbox:before, .clockbox:before {
+ content: '';
+ position: fixed;
+ top: 50%;
+ left: 50%;
+ width: 100vw;
+ height: 100vh;
+ background: rgba(0, 0, 0, 0.75);
+ transform: translate(-50%, -50%);
+ }
+
+ .calendarbox > *, .clockbox > * {
+ position: relative;
+ z-index: 1;
+ }
+
+ .calendarbox > div:first-child {
+ z-index: 2;
+ }
+
+ .calendarbox .calendar, .clockbox h2 {
+ border-radius: 4px 4px 0 0;
+ overflow: hidden;
+ }
+
+ .calendarbox .calendar-cancel, .clockbox .calendar-cancel {
+ border-radius: 0 0 4px 4px;
+ overflow: hidden;
+ }
+
+ .calendar-shortcuts {
+ padding: 10px 0;
+ font-size: 12px;
+ line-height: 12px;
+ }
+
+ .calendar-shortcuts a {
+ margin: 0 4px;
+ }
+
+ .timelist a {
+ background: #fff;
+ padding: 4px;
+ }
+
+ .calendar-cancel {
+ padding: 8px 10px;
+ }
+
+ .clockbox h2 {
+ padding: 8px 15px;
+ }
+
+ .calendar caption {
+ padding: 10px;
+ }
+
+ .calendarbox .calendarnav-previous, .calendarbox .calendarnav-next {
+ z-index: 1;
+ top: 10px;
+ }
+
+ /* History */
+ table#change-history tbody th, table#change-history tbody td {
+ font-size: 13px;
+ word-break: break-word;
+ }
+
+ table#change-history tbody th {
+ width: auto;
+ }
+
+ /* Docs */
+ table.model tbody th, table.model tbody td {
+ font-size: 13px;
+ word-break: break-word;
+ }
+}
diff --git a/venv/Lib/site-packages/simpleui/static/admin/css/responsive_rtl.css b/venv/Lib/site-packages/simpleui/static/admin/css/responsive_rtl.css
new file mode 100644
index 0000000..aaffa91
--- /dev/null
+++ b/venv/Lib/site-packages/simpleui/static/admin/css/responsive_rtl.css
@@ -0,0 +1,80 @@
+/* TABLETS */
+
+@media (max-width: 1024px) {
+ [dir="rtl"] .colMS {
+ margin-right: 0;
+ }
+
+ [dir="rtl"] #user-tools {
+ text-align: right;
+ }
+
+ [dir="rtl"] #changelist .actions label {
+ padding-left: 10px;
+ padding-right: 0;
+ }
+
+ [dir="rtl"] #changelist .actions select {
+ margin-left: 0;
+ margin-right: 15px;
+ }
+
+ [dir="rtl"] .change-list .filtered .results,
+ [dir="rtl"] .change-list .filtered .paginator,
+ [dir="rtl"] .filtered #toolbar,
+ [dir="rtl"] .filtered div.xfull,
+ [dir="rtl"] .filtered .actions {
+ margin-right: 0;
+ margin-left: 230px;
+ }
+
+ [dir="rtl"] .inline-group ul.tools a.add,
+ [dir="rtl"] .inline-group div.add-row a,
+ [dir="rtl"] .inline-group .tabular tr.add-row td a {
+ padding: 8px 26px 8px 10px;
+ background-position: calc(100% - 8px) 9px;
+ }
+
+ [dir="rtl"] .related-widget-wrapper-link + .selector {
+ margin-right: 0;
+ margin-left: 15px;
+ }
+
+ [dir="rtl"] .selector .selector-filter label {
+ margin-right: 0;
+ margin-left: 8px;
+ }
+
+ [dir="rtl"] .object-tools li {
+ float: right;
+ }
+
+ [dir="rtl"] .object-tools li + li {
+ margin-left: 0;
+ margin-right: 15px;
+ }
+
+ [dir="rtl"] .dashboard .module table td a {
+ padding-left: 0;
+ padding-right: 16px;
+ }
+}
+
+/* MOBILE */
+
+@media (max-width: 767px) {
+ [dir="rtl"] .change-list .filtered .results,
+ [dir="rtl"] .change-list .filtered .paginator,
+ [dir="rtl"] .filtered #toolbar,
+ [dir="rtl"] .filtered div.xfull,
+ [dir="rtl"] .filtered .actions {
+ margin-left: 0;
+ }
+
+ [dir="rtl"] .aligned .add-another,
+ [dir="rtl"] .aligned .related-lookup,
+ [dir="rtl"] .aligned .datetimeshortcuts {
+ margin-left: 0;
+ margin-right: 15px;
+ }
+}
diff --git a/venv/Lib/site-packages/simpleui/static/admin/css/rtl.css b/venv/Lib/site-packages/simpleui/static/admin/css/rtl.css
new file mode 100644
index 0000000..542cddb
--- /dev/null
+++ b/venv/Lib/site-packages/simpleui/static/admin/css/rtl.css
@@ -0,0 +1,264 @@
+body {
+ direction: rtl;
+}
+
+/* LOGIN */
+
+.login .form-row {
+ float: right;
+}
+
+.login .form-row label {
+ float: right;
+ padding-left: 0.5em;
+ padding-right: 0;
+ text-align: left;
+}
+
+.login .submit-row {
+ clear: both;
+ padding: 1em 9.4em 0 0;
+}
+
+/* GLOBAL */
+
+th {
+ text-align: right;
+}
+
+.module h2, .module caption {
+ text-align: right;
+}
+
+.module ul, .module ol {
+ margin-left: 0;
+ margin-right: 1.5em;
+}
+
+.addlink, .changelink {
+ padding-left: 0;
+ padding-right: 16px;
+ background-position: 100% 1px;
+}
+
+.deletelink {
+ padding-left: 0;
+ padding-right: 16px;
+ background-position: 100% 1px;
+}
+
+.object-tools {
+ float: left;
+}
+
+thead th:first-child,
+tfoot td:first-child {
+ border-left: none;
+}
+
+/* LAYOUT */
+
+#user-tools {
+ right: auto;
+ left: 0;
+ text-align: left;
+}
+
+div.breadcrumbs {
+ text-align: right;
+}
+
+#content-main {
+ float: right;
+}
+
+#content-related {
+ float: left;
+ margin-left: -300px;
+ margin-right: auto;
+}
+
+.colMS {
+ margin-left: 300px;
+ margin-right: 0;
+}
+
+/* SORTABLE TABLES */
+
+table thead th.sorted .sortoptions {
+ float: left;
+}
+
+thead th.sorted .text {
+ padding-right: 0;
+ padding-left: 42px;
+}
+
+/* dashboard styles */
+
+.dashboard .module table td a {
+ padding-left: .6em;
+ padding-right: 16px;
+}
+
+/* changelists styles */
+
+.change-list .filtered table {
+ border-left: none;
+ border-right: 0px none;
+}
+
+#changelist-filter {
+ right: auto;
+ left: 0;
+ border-left: none;
+ border-right: none;
+}
+
+.change-list .filtered .results, .change-list .filtered .paginator, .filtered #toolbar, .filtered div.xfull {
+ margin-right: 0;
+ margin-left: 280px;
+}
+
+#changelist-filter li.selected {
+ border-left: none;
+ padding-left: 10px;
+ margin-left: 0;
+ border-right: 5px solid #eaeaea;
+ padding-right: 10px;
+ margin-right: -15px;
+}
+
+.filtered .actions {
+ margin-left: 280px;
+ margin-right: 0;
+}
+
+#changelist table tbody td:first-child, #changelist table tbody th:first-child {
+ border-right: none;
+ border-left: none;
+}
+
+/* FORMS */
+
+.aligned label {
+ padding: 0 0 3px 1em;
+ float: right;
+}
+
+.submit-row {
+ text-align: left
+}
+
+.submit-row p.deletelink-box {
+ float: right;
+}
+
+.submit-row input.default {
+ margin-left: 0;
+}
+
+.vDateField, .vTimeField {
+ margin-left: 2px;
+}
+
+.aligned .form-row input {
+ margin-left: 5px;
+}
+
+form .aligned p.help, form .aligned div.help {
+ clear: right;
+}
+
+form ul.inline li {
+ float: right;
+ padding-right: 0;
+ padding-left: 7px;
+}
+
+input[type=submit].default, .submit-row input.default {
+ float: left;
+}
+
+fieldset .field-box {
+ float: right;
+ margin-left: 20px;
+ margin-right: 0;
+}
+
+.errorlist li {
+ background-position: 100% 12px;
+ padding: 0;
+}
+
+.errornote {
+ background-position: 100% 12px;
+ padding: 10px 12px;
+}
+
+/* WIDGETS */
+
+.calendarnav-previous {
+ top: 0;
+ left: auto;
+ right: 10px;
+}
+
+.calendarnav-next {
+ top: 0;
+ right: auto;
+ left: 10px;
+}
+
+.calendar caption, .calendarbox h2 {
+ text-align: center;
+}
+
+.selector {
+ float: right;
+}
+
+.selector .selector-filter {
+ text-align: right;
+}
+
+.inline-deletelink {
+ float: left;
+}
+
+form .form-row p.datetime {
+ overflow: hidden;
+}
+
+.related-widget-wrapper {
+ float: right;
+}
+
+/* MISC */
+
+.inline-related h2, .inline-group h2 {
+ text-align: right
+}
+
+.inline-related h3 span.delete {
+ padding-right: 20px;
+ padding-left: inherit;
+ left: 10px;
+ right: inherit;
+ float: left;
+}
+
+.inline-related h3 span.delete label {
+ margin-left: inherit;
+ margin-right: 2px;
+}
+
+/* IE7 specific bug fixes */
+
+div.colM {
+ position: relative;
+}
+
+.submit-row input {
+ float: left;
+}
diff --git a/venv/Lib/site-packages/simpleui/static/admin/css/ui.css b/venv/Lib/site-packages/simpleui/static/admin/css/ui.css
new file mode 100644
index 0000000..4186053
--- /dev/null
+++ b/venv/Lib/site-packages/simpleui/static/admin/css/ui.css
@@ -0,0 +1,17 @@
+body {
+ margin: 0;
+ padding: 0;
+}
+
+.errornote {
+ font-size: 14px;
+ font-weight: 700;
+ display: block;
+ padding: 10px 12px;
+ margin: 0 0 10px 0;
+ color: #ba2121;
+ border: 1px solid #ba2121;
+ border-radius: 4px;
+ background-color: #fff;
+ background-position: 5px 12px;
+}
diff --git a/venv/Lib/site-packages/simpleui/static/admin/css/vendor/select2/LICENSE-SELECT2.md b/venv/Lib/site-packages/simpleui/static/admin/css/vendor/select2/LICENSE-SELECT2.md
new file mode 100644
index 0000000..86c7c29
--- /dev/null
+++ b/venv/Lib/site-packages/simpleui/static/admin/css/vendor/select2/LICENSE-SELECT2.md
@@ -0,0 +1,21 @@
+The MIT License (MIT)
+
+Copyright (c) 2012-2015 Kevin Brown, Igor Vaynberg, and Select2 contributors
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.
diff --git a/venv/Lib/site-packages/simpleui/static/admin/css/vendor/select2/select2.css b/venv/Lib/site-packages/simpleui/static/admin/css/vendor/select2/select2.css
new file mode 100644
index 0000000..f1e5cdb
--- /dev/null
+++ b/venv/Lib/site-packages/simpleui/static/admin/css/vendor/select2/select2.css
@@ -0,0 +1,634 @@
+.select2-container {
+ box-sizing: border-box;
+ display: inline-block;
+ margin: 0;
+ position: relative;
+ vertical-align: middle;
+}
+
+.select2-container .select2-selection--single {
+ box-sizing: border-box;
+ cursor: pointer;
+ display: block;
+ height: 28px;
+ user-select: none;
+ -webkit-user-select: none;
+}
+
+.select2-container .select2-selection--single .select2-selection__rendered {
+ display: block;
+ padding-left: 8px;
+ padding-right: 20px;
+ overflow: hidden;
+ text-overflow: ellipsis;
+ white-space: nowrap;
+}
+
+.select2-container .select2-selection--single .select2-selection__clear {
+ position: relative;
+}
+
+.select2-container[dir="rtl"] .select2-selection--single .select2-selection__rendered {
+ padding-right: 8px;
+ padding-left: 20px;
+}
+
+.select2-container .select2-selection--multiple {
+ box-sizing: border-box;
+ cursor: pointer;
+ display: block;
+ min-height: 32px;
+ user-select: none;
+ -webkit-user-select: none;
+}
+
+.select2-container .select2-selection--multiple .select2-selection__rendered {
+ display: inline-block;
+ overflow: hidden;
+ padding-left: 8px;
+ text-overflow: ellipsis;
+ white-space: nowrap;
+}
+
+.select2-container .select2-search--inline {
+ float: left;
+}
+
+.select2-container .select2-search--inline .select2-search__field {
+ box-sizing: border-box;
+ border: none;
+ font-size: 100%;
+ margin-top: 5px;
+ padding: 0;
+}
+
+.select2-container .select2-search--inline .select2-search__field::-webkit-search-cancel-button {
+ -webkit-appearance: none;
+}
+
+.select2-dropdown {
+ background-color: white;
+ border: 1px solid #aaa;
+ border-radius: 4px;
+ box-sizing: border-box;
+ display: block;
+ position: absolute;
+ left: -100000px;
+ width: 100%;
+ z-index: 1051;
+}
+
+.select2-results {
+ display: block;
+}
+
+.select2-results__options {
+ list-style: none;
+ margin: 0;
+ padding: 0;
+}
+
+.select2-results__option {
+ padding: 6px;
+ user-select: none;
+ -webkit-user-select: none;
+}
+
+.select2-results__option[aria-selected] {
+ cursor: pointer;
+}
+
+.select2-container--open .select2-dropdown {
+ left: 0;
+}
+
+.select2-container--open .select2-dropdown--above {
+ border-bottom: none;
+ border-bottom-left-radius: 0;
+ border-bottom-right-radius: 0;
+}
+
+.select2-container--open .select2-dropdown--below {
+ border-top: none;
+ border-top-left-radius: 0;
+ border-top-right-radius: 0;
+}
+
+.select2-search--dropdown {
+ display: block;
+ padding: 4px;
+}
+
+.select2-search--dropdown .select2-search__field {
+ padding: 4px;
+ width: 100%;
+ box-sizing: border-box;
+}
+
+.select2-search--dropdown .select2-search__field::-webkit-search-cancel-button {
+ -webkit-appearance: none;
+}
+
+.select2-search--dropdown.select2-search--hide {
+ display: none;
+}
+
+.select2-close-mask {
+ border: 0;
+ margin: 0;
+ padding: 0;
+ display: block;
+ position: fixed;
+ left: 0;
+ top: 0;
+ min-height: 100%;
+ min-width: 100%;
+ height: auto;
+ width: auto;
+ opacity: 0;
+ z-index: 99;
+ background-color: #fff;
+ filter: alpha(opacity=0);
+}
+
+.select2-hidden-accessible {
+ border: 0 !important;
+ clip: rect(0 0 0 0) !important;
+ height: 1px !important;
+ margin: -1px !important;
+ overflow: hidden !important;
+ padding: 0 !important;
+ position: absolute !important;
+ width: 1px !important;
+}
+
+.select2-container--default .select2-selection--single {
+ background-color: #fff;
+ border: 1px solid #aaa;
+ border-radius: 4px;
+}
+
+.select2-container--default .select2-selection--single .select2-selection__rendered {
+ color: #444;
+ line-height: 28px;
+}
+
+.select2-container--default .select2-selection--single .select2-selection__clear {
+ cursor: pointer;
+ float: right;
+ font-weight: bold;
+}
+
+.select2-container--default .select2-selection--single .select2-selection__placeholder {
+ color: #999;
+}
+
+.select2-container--default .select2-selection--single .select2-selection__arrow {
+ height: 26px;
+ position: absolute;
+ top: 1px;
+ right: 1px;
+ width: 20px;
+}
+
+.select2-container--default .select2-selection--single .select2-selection__arrow b {
+ border-color: #888 transparent transparent transparent;
+ border-style: solid;
+ border-width: 5px 4px 0 4px;
+ height: 0;
+ left: 50%;
+ margin-left: -4px;
+ margin-top: -2px;
+ position: absolute;
+ top: 50%;
+ width: 0;
+}
+
+.select2-container--default[dir="rtl"] .select2-selection--single .select2-selection__clear {
+ float: left;
+}
+
+.select2-container--default[dir="rtl"] .select2-selection--single .select2-selection__arrow {
+ left: 1px;
+ right: auto;
+}
+
+.select2-container--default.select2-container--disabled .select2-selection--single {
+ background-color: #eee;
+ cursor: default;
+}
+
+.select2-container--default.select2-container--disabled .select2-selection--single .select2-selection__clear {
+ display: none;
+}
+
+.select2-container--default.select2-container--open .select2-selection--single .select2-selection__arrow b {
+ border-color: transparent transparent #888 transparent;
+ border-width: 0 4px 5px 4px;
+}
+
+.select2-container--default .select2-selection--multiple {
+ background-color: white;
+ border: 1px solid #aaa;
+ border-radius: 4px;
+ cursor: text;
+}
+
+.select2-container--default .select2-selection--multiple .select2-selection__rendered {
+ box-sizing: border-box;
+ list-style: none;
+ margin: 0;
+ padding: 0 5px;
+ width: 100%;
+}
+
+.select2-container--default .select2-selection--multiple .select2-selection__rendered li {
+ list-style: none;
+}
+
+.select2-container--default .select2-selection--multiple .select2-selection__placeholder {
+ color: #999;
+ margin-top: 5px;
+ float: left;
+}
+
+.select2-container--default .select2-selection--multiple .select2-selection__clear {
+ cursor: pointer;
+ float: right;
+ font-weight: bold;
+ margin-top: 5px;
+ margin-right: 10px;
+}
+
+.select2-container--default .select2-selection--multiple .select2-selection__choice {
+ background-color: #e4e4e4;
+ border: 1px solid #aaa;
+ border-radius: 4px;
+ cursor: default;
+ float: left;
+ margin-right: 5px;
+ margin-top: 5px;
+ padding: 0 5px;
+}
+
+.select2-container--default .select2-selection--multiple .select2-selection__choice__remove {
+ color: #999;
+ cursor: pointer;
+ display: inline-block;
+ font-weight: bold;
+ margin-right: 2px;
+}
+
+.select2-container--default .select2-selection--multiple .select2-selection__choice__remove:hover {
+ color: #333;
+}
+
+.select2-container--default[dir="rtl"] .select2-selection--multiple .select2-selection__choice, .select2-container--default[dir="rtl"] .select2-selection--multiple .select2-selection__placeholder, .select2-container--default[dir="rtl"] .select2-selection--multiple .select2-search--inline {
+ float: right;
+}
+
+.select2-container--default[dir="rtl"] .select2-selection--multiple .select2-selection__choice {
+ margin-left: 5px;
+ margin-right: auto;
+}
+
+.select2-container--default[dir="rtl"] .select2-selection--multiple .select2-selection__choice__remove {
+ margin-left: 2px;
+ margin-right: auto;
+}
+
+.select2-container--default.select2-container--focus .select2-selection--multiple {
+ border: solid black 1px;
+ outline: 0;
+}
+
+.select2-container--default.select2-container--disabled .select2-selection--multiple {
+ background-color: #eee;
+ cursor: default;
+}
+
+.select2-container--default.select2-container--disabled .select2-selection__choice__remove {
+ display: none;
+}
+
+.select2-container--default.select2-container--open.select2-container--above .select2-selection--single, .select2-container--default.select2-container--open.select2-container--above .select2-selection--multiple {
+ border-top-left-radius: 0;
+ border-top-right-radius: 0;
+}
+
+.select2-container--default.select2-container--open.select2-container--below .select2-selection--single, .select2-container--default.select2-container--open.select2-container--below .select2-selection--multiple {
+ border-bottom-left-radius: 0;
+ border-bottom-right-radius: 0;
+}
+
+.select2-container--default .select2-search--dropdown .select2-search__field {
+ border: 1px solid #aaa;
+}
+
+.select2-container--default .select2-search--inline .select2-search__field {
+ background: transparent;
+ border: none;
+ outline: 0;
+ box-shadow: none;
+ -webkit-appearance: textfield;
+}
+
+.select2-container--default .select2-results > .select2-results__options {
+ max-height: 200px;
+ overflow-y: auto;
+}
+
+.select2-container--default .select2-results__option[role=group] {
+ padding: 0;
+}
+
+.select2-container--default .select2-results__option[aria-disabled=true] {
+ color: #999;
+}
+
+.select2-container--default .select2-results__option[aria-selected=true] {
+ background-color: #ddd;
+}
+
+.select2-container--default .select2-results__option .select2-results__option {
+ padding-left: 1em;
+}
+
+.select2-container--default .select2-results__option .select2-results__option .select2-results__group {
+ padding-left: 0;
+}
+
+.select2-container--default .select2-results__option .select2-results__option .select2-results__option {
+ margin-left: -1em;
+ padding-left: 2em;
+}
+
+.select2-container--default .select2-results__option .select2-results__option .select2-results__option .select2-results__option {
+ margin-left: -2em;
+ padding-left: 3em;
+}
+
+.select2-container--default .select2-results__option .select2-results__option .select2-results__option .select2-results__option .select2-results__option {
+ margin-left: -3em;
+ padding-left: 4em;
+}
+
+.select2-container--default .select2-results__option .select2-results__option .select2-results__option .select2-results__option .select2-results__option .select2-results__option {
+ margin-left: -4em;
+ padding-left: 5em;
+}
+
+.select2-container--default .select2-results__option .select2-results__option .select2-results__option .select2-results__option .select2-results__option .select2-results__option .select2-results__option {
+ margin-left: -5em;
+ padding-left: 6em;
+}
+
+.select2-container--default .select2-results__option--highlighted[aria-selected] {
+ background-color: #5897fb;
+ color: white;
+}
+
+.select2-container--default .select2-results__group {
+ cursor: default;
+ display: block;
+ padding: 6px;
+}
+
+.select2-container--classic .select2-selection--single {
+ background-color: #f7f7f7;
+ border: 1px solid #aaa;
+ border-radius: 4px;
+ outline: 0;
+ background-image: -webkit-linear-gradient(top, white 50%, #eeeeee 100%);
+ background-image: -o-linear-gradient(top, white 50%, #eeeeee 100%);
+ background-image: linear-gradient(to bottom, white 50%, #eeeeee 100%);
+ background-repeat: repeat-x;
+ filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#FFFFFFFF', endColorstr='#FFEEEEEE', GradientType=0);
+}
+
+.select2-container--classic .select2-selection--single:focus {
+ border: 1px solid #5897fb;
+}
+
+.select2-container--classic .select2-selection--single .select2-selection__rendered {
+ color: #444;
+ line-height: 28px;
+}
+
+.select2-container--classic .select2-selection--single .select2-selection__clear {
+ cursor: pointer;
+ float: right;
+ font-weight: bold;
+ margin-right: 10px;
+}
+
+.select2-container--classic .select2-selection--single .select2-selection__placeholder {
+ color: #999;
+}
+
+.select2-container--classic .select2-selection--single .select2-selection__arrow {
+ background-color: #ddd;
+ border: none;
+ border-left: 1px solid #aaa;
+ border-top-right-radius: 4px;
+ border-bottom-right-radius: 4px;
+ height: 26px;
+ position: absolute;
+ top: 1px;
+ right: 1px;
+ width: 20px;
+ background-image: -webkit-linear-gradient(top, #eeeeee 50%, #cccccc 100%);
+ background-image: -o-linear-gradient(top, #eeeeee 50%, #cccccc 100%);
+ background-image: linear-gradient(to bottom, #eeeeee 50%, #cccccc 100%);
+ background-repeat: repeat-x;
+ filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#FFEEEEEE', endColorstr='#FFCCCCCC', GradientType=0);
+}
+
+.select2-container--classic .select2-selection--single .select2-selection__arrow b {
+ border-color: #888 transparent transparent transparent;
+ border-style: solid;
+ border-width: 5px 4px 0 4px;
+ height: 0;
+ left: 50%;
+ margin-left: -4px;
+ margin-top: -2px;
+ position: absolute;
+ top: 50%;
+ width: 0;
+}
+
+.select2-container--classic[dir="rtl"] .select2-selection--single .select2-selection__clear {
+ float: left;
+}
+
+.select2-container--classic[dir="rtl"] .select2-selection--single .select2-selection__arrow {
+ border: none;
+ border-right: 1px solid #aaa;
+ border-radius: 0;
+ border-top-left-radius: 4px;
+ border-bottom-left-radius: 4px;
+ left: 1px;
+ right: auto;
+}
+
+.select2-container--classic.select2-container--open .select2-selection--single {
+ border: 1px solid #5897fb;
+}
+
+.select2-container--classic.select2-container--open .select2-selection--single .select2-selection__arrow {
+ background: transparent;
+ border: none;
+}
+
+.select2-container--classic.select2-container--open .select2-selection--single .select2-selection__arrow b {
+ border-color: transparent transparent #888 transparent;
+ border-width: 0 4px 5px 4px;
+}
+
+.select2-container--classic.select2-container--open.select2-container--above .select2-selection--single {
+ border-top: none;
+ border-top-left-radius: 0;
+ border-top-right-radius: 0;
+ background-image: -webkit-linear-gradient(top, white 0%, #eeeeee 50%);
+ background-image: -o-linear-gradient(top, white 0%, #eeeeee 50%);
+ background-image: linear-gradient(to bottom, white 0%, #eeeeee 50%);
+ background-repeat: repeat-x;
+ filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#FFFFFFFF', endColorstr='#FFEEEEEE', GradientType=0);
+}
+
+.select2-container--classic.select2-container--open.select2-container--below .select2-selection--single {
+ border-bottom: none;
+ border-bottom-left-radius: 0;
+ border-bottom-right-radius: 0;
+ background-image: -webkit-linear-gradient(top, #eeeeee 50%, white 100%);
+ background-image: -o-linear-gradient(top, #eeeeee 50%, white 100%);
+ background-image: linear-gradient(to bottom, #eeeeee 50%, white 100%);
+ background-repeat: repeat-x;
+ filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#FFEEEEEE', endColorstr='#FFFFFFFF', GradientType=0);
+}
+
+.select2-container--classic .select2-selection--multiple {
+ background-color: white;
+ border: 1px solid #aaa;
+ border-radius: 4px;
+ cursor: text;
+ outline: 0;
+}
+
+.select2-container--classic .select2-selection--multiple:focus {
+ border: 1px solid #5897fb;
+}
+
+.select2-container--classic .select2-selection--multiple .select2-selection__rendered {
+ list-style: none;
+ margin: 0;
+ padding: 0 5px;
+}
+
+.select2-container--classic .select2-selection--multiple .select2-selection__clear {
+ display: none;
+}
+
+.select2-container--classic .select2-selection--multiple .select2-selection__choice {
+ background-color: #e4e4e4;
+ border: 1px solid #aaa;
+ border-radius: 4px;
+ cursor: default;
+ float: left;
+ margin-right: 5px;
+ margin-top: 5px;
+ padding: 0 5px;
+}
+
+.select2-container--classic .select2-selection--multiple .select2-selection__choice__remove {
+ color: #888;
+ cursor: pointer;
+ display: inline-block;
+ font-weight: bold;
+ margin-right: 2px;
+}
+
+.select2-container--classic .select2-selection--multiple .select2-selection__choice__remove:hover {
+ color: #555;
+}
+
+.select2-container--classic[dir="rtl"] .select2-selection--multiple .select2-selection__choice {
+ float: right;
+}
+
+.select2-container--classic[dir="rtl"] .select2-selection--multiple .select2-selection__choice {
+ margin-left: 5px;
+ margin-right: auto;
+}
+
+.select2-container--classic[dir="rtl"] .select2-selection--multiple .select2-selection__choice__remove {
+ margin-left: 2px;
+ margin-right: auto;
+}
+
+.select2-container--classic.select2-container--open .select2-selection--multiple {
+ border: 1px solid #5897fb;
+}
+
+.select2-container--classic.select2-container--open.select2-container--above .select2-selection--multiple {
+ border-top: none;
+ border-top-left-radius: 0;
+ border-top-right-radius: 0;
+}
+
+.select2-container--classic.select2-container--open.select2-container--below .select2-selection--multiple {
+ border-bottom: none;
+ border-bottom-left-radius: 0;
+ border-bottom-right-radius: 0;
+}
+
+.select2-container--classic .select2-search--dropdown .select2-search__field {
+ border: 1px solid #aaa;
+ outline: 0;
+}
+
+.select2-container--classic .select2-search--inline .select2-search__field {
+ outline: 0;
+ box-shadow: none;
+}
+
+.select2-container--classic .select2-dropdown {
+ background-color: white;
+ border: 1px solid transparent;
+}
+
+.select2-container--classic .select2-dropdown--above {
+ border-bottom: none;
+}
+
+.select2-container--classic .select2-dropdown--below {
+ border-top: none;
+}
+
+.select2-container--classic .select2-results > .select2-results__options {
+ max-height: 200px;
+ overflow-y: auto;
+}
+
+.select2-container--classic .select2-results__option[role=group] {
+ padding: 0;
+}
+
+.select2-container--classic .select2-results__option[aria-disabled=true] {
+ color: grey;
+}
+
+.select2-container--classic .select2-results__option--highlighted[aria-selected] {
+ background-color: #3875d7;
+ color: white;
+}
+
+.select2-container--classic .select2-results__group {
+ cursor: default;
+ display: block;
+ padding: 6px;
+}
+
+.select2-container--classic.select2-container--open .select2-dropdown {
+ border-color: #5897fb;
+}
diff --git a/venv/Lib/site-packages/simpleui/static/admin/css/vendor/select2/select2.min.css b/venv/Lib/site-packages/simpleui/static/admin/css/vendor/select2/select2.min.css
new file mode 100644
index 0000000..76de04d
--- /dev/null
+++ b/venv/Lib/site-packages/simpleui/static/admin/css/vendor/select2/select2.min.css
@@ -0,0 +1 @@
+.select2-container{box-sizing:border-box;display:inline-block;margin:0;position:relative;vertical-align:middle}.select2-container .select2-selection--single{box-sizing:border-box;cursor:pointer;display:block;height:28px;user-select:none;-webkit-user-select:none}.select2-container .select2-selection--single .select2-selection__rendered{display:block;padding-left:8px;padding-right:20px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.select2-container .select2-selection--single .select2-selection__clear{position:relative}.select2-container[dir="rtl"] .select2-selection--single .select2-selection__rendered{padding-right:8px;padding-left:20px}.select2-container .select2-selection--multiple{box-sizing:border-box;cursor:pointer;display:block;min-height:32px;user-select:none;-webkit-user-select:none}.select2-container .select2-selection--multiple .select2-selection__rendered{display:inline-block;overflow:hidden;padding-left:8px;text-overflow:ellipsis;white-space:nowrap}.select2-container .select2-search--inline{float:left}.select2-container .select2-search--inline .select2-search__field{box-sizing:border-box;border:none;font-size:100%;margin-top:5px;padding:0}.select2-container .select2-search--inline .select2-search__field::-webkit-search-cancel-button{-webkit-appearance:none}.select2-dropdown{background-color:white;border:1px solid #aaa;border-radius:4px;box-sizing:border-box;display:block;position:absolute;left:-100000px;width:100%;z-index:1051}.select2-results{display:block}.select2-results__options{list-style:none;margin:0;padding:0}.select2-results__option{padding:6px;user-select:none;-webkit-user-select:none}.select2-results__option[aria-selected]{cursor:pointer}.select2-container--open .select2-dropdown{left:0}.select2-container--open .select2-dropdown--above{border-bottom:none;border-bottom-left-radius:0;border-bottom-right-radius:0}.select2-container--open .select2-dropdown--below{border-top:none;border-top-left-radius:0;border-top-right-radius:0}.select2-search--dropdown{display:block;padding:4px}.select2-search--dropdown .select2-search__field{padding:4px;width:100%;box-sizing:border-box}.select2-search--dropdown .select2-search__field::-webkit-search-cancel-button{-webkit-appearance:none}.select2-search--dropdown.select2-search--hide{display:none}.select2-close-mask{border:0;margin:0;padding:0;display:block;position:fixed;left:0;top:0;min-height:100%;min-width:100%;height:auto;width:auto;opacity:0;z-index:99;background-color:#fff;filter:alpha(opacity=0)}.select2-hidden-accessible{border:0 !important;clip:rect(0 0 0 0) !important;height:1px !important;margin:-1px !important;overflow:hidden !important;padding:0 !important;position:absolute !important;width:1px !important}.select2-container--default .select2-selection--single{background-color:#fff;border:1px solid #aaa;border-radius:4px}.select2-container--default .select2-selection--single .select2-selection__rendered{color:#444;line-height:28px}.select2-container--default .select2-selection--single .select2-selection__clear{cursor:pointer;float:right;font-weight:bold}.select2-container--default .select2-selection--single .select2-selection__placeholder{color:#999}.select2-container--default .select2-selection--single .select2-selection__arrow{height:26px;position:absolute;top:1px;right:1px;width:20px}.select2-container--default .select2-selection--single .select2-selection__arrow b{border-color:#888 transparent transparent transparent;border-style:solid;border-width:5px 4px 0 4px;height:0;left:50%;margin-left:-4px;margin-top:-2px;position:absolute;top:50%;width:0}.select2-container--default[dir="rtl"] .select2-selection--single .select2-selection__clear{float:left}.select2-container--default[dir="rtl"] .select2-selection--single .select2-selection__arrow{left:1px;right:auto}.select2-container--default.select2-container--disabled .select2-selection--single{background-color:#eee;cursor:default}.select2-container--default.select2-container--disabled .select2-selection--single .select2-selection__clear{display:none}.select2-container--default.select2-container--open .select2-selection--single .select2-selection__arrow b{border-color:transparent transparent #888 transparent;border-width:0 4px 5px 4px}.select2-container--default .select2-selection--multiple{background-color:white;border:1px solid #aaa;border-radius:4px;cursor:text}.select2-container--default .select2-selection--multiple .select2-selection__rendered{box-sizing:border-box;list-style:none;margin:0;padding:0 5px;width:100%}.select2-container--default .select2-selection--multiple .select2-selection__rendered li{list-style:none}.select2-container--default .select2-selection--multiple .select2-selection__placeholder{color:#999;margin-top:5px;float:left}.select2-container--default .select2-selection--multiple .select2-selection__clear{cursor:pointer;float:right;font-weight:bold;margin-top:5px;margin-right:10px}.select2-container--default .select2-selection--multiple .select2-selection__choice{background-color:#e4e4e4;border:1px solid #aaa;border-radius:4px;cursor:default;float:left;margin-right:5px;margin-top:5px;padding:0 5px}.select2-container--default .select2-selection--multiple .select2-selection__choice__remove{color:#999;cursor:pointer;display:inline-block;font-weight:bold;margin-right:2px}.select2-container--default .select2-selection--multiple .select2-selection__choice__remove:hover{color:#333}.select2-container--default[dir="rtl"] .select2-selection--multiple .select2-selection__choice,.select2-container--default[dir="rtl"] .select2-selection--multiple .select2-selection__placeholder,.select2-container--default[dir="rtl"] .select2-selection--multiple .select2-search--inline{float:right}.select2-container--default[dir="rtl"] .select2-selection--multiple .select2-selection__choice{margin-left:5px;margin-right:auto}.select2-container--default[dir="rtl"] .select2-selection--multiple .select2-selection__choice__remove{margin-left:2px;margin-right:auto}.select2-container--default.select2-container--focus .select2-selection--multiple{border:solid black 1px;outline:0}.select2-container--default.select2-container--disabled .select2-selection--multiple{background-color:#eee;cursor:default}.select2-container--default.select2-container--disabled .select2-selection__choice__remove{display:none}.select2-container--default.select2-container--open.select2-container--above .select2-selection--single,.select2-container--default.select2-container--open.select2-container--above .select2-selection--multiple{border-top-left-radius:0;border-top-right-radius:0}.select2-container--default.select2-container--open.select2-container--below .select2-selection--single,.select2-container--default.select2-container--open.select2-container--below .select2-selection--multiple{border-bottom-left-radius:0;border-bottom-right-radius:0}.select2-container--default .select2-search--dropdown .select2-search__field{border:1px solid #aaa}.select2-container--default .select2-search--inline .select2-search__field{background:transparent;border:none;outline:0;box-shadow:none;-webkit-appearance:textfield}.select2-container--default .select2-results>.select2-results__options{max-height:200px;overflow-y:auto}.select2-container--default .select2-results__option[role=group]{padding:0}.select2-container--default .select2-results__option[aria-disabled=true]{color:#999}.select2-container--default .select2-results__option[aria-selected=true]{background-color:#ddd}.select2-container--default .select2-results__option .select2-results__option{padding-left:1em}.select2-container--default .select2-results__option .select2-results__option .select2-results__group{padding-left:0}.select2-container--default .select2-results__option .select2-results__option .select2-results__option{margin-left:-1em;padding-left:2em}.select2-container--default .select2-results__option .select2-results__option .select2-results__option .select2-results__option{margin-left:-2em;padding-left:3em}.select2-container--default .select2-results__option .select2-results__option .select2-results__option .select2-results__option .select2-results__option{margin-left:-3em;padding-left:4em}.select2-container--default .select2-results__option .select2-results__option .select2-results__option .select2-results__option .select2-results__option .select2-results__option{margin-left:-4em;padding-left:5em}.select2-container--default .select2-results__option .select2-results__option .select2-results__option .select2-results__option .select2-results__option .select2-results__option .select2-results__option{margin-left:-5em;padding-left:6em}.select2-container--default .select2-results__option--highlighted[aria-selected]{background-color:#5897fb;color:white}.select2-container--default .select2-results__group{cursor:default;display:block;padding:6px}.select2-container--classic .select2-selection--single{background-color:#f7f7f7;border:1px solid #aaa;border-radius:4px;outline:0;background-image:-webkit-linear-gradient(top, #fff 50%, #eee 100%);background-image:-o-linear-gradient(top, #fff 50%, #eee 100%);background-image:linear-gradient(to bottom, #fff 50%, #eee 100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#FFFFFFFF', endColorstr='#FFEEEEEE', GradientType=0)}.select2-container--classic .select2-selection--single:focus{border:1px solid #5897fb}.select2-container--classic .select2-selection--single .select2-selection__rendered{color:#444;line-height:28px}.select2-container--classic .select2-selection--single .select2-selection__clear{cursor:pointer;float:right;font-weight:bold;margin-right:10px}.select2-container--classic .select2-selection--single .select2-selection__placeholder{color:#999}.select2-container--classic .select2-selection--single .select2-selection__arrow{background-color:#ddd;border:none;border-left:1px solid #aaa;border-top-right-radius:4px;border-bottom-right-radius:4px;height:26px;position:absolute;top:1px;right:1px;width:20px;background-image:-webkit-linear-gradient(top, #eee 50%, #ccc 100%);background-image:-o-linear-gradient(top, #eee 50%, #ccc 100%);background-image:linear-gradient(to bottom, #eee 50%, #ccc 100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#FFEEEEEE', endColorstr='#FFCCCCCC', GradientType=0)}.select2-container--classic .select2-selection--single .select2-selection__arrow b{border-color:#888 transparent transparent transparent;border-style:solid;border-width:5px 4px 0 4px;height:0;left:50%;margin-left:-4px;margin-top:-2px;position:absolute;top:50%;width:0}.select2-container--classic[dir="rtl"] .select2-selection--single .select2-selection__clear{float:left}.select2-container--classic[dir="rtl"] .select2-selection--single .select2-selection__arrow{border:none;border-right:1px solid #aaa;border-radius:0;border-top-left-radius:4px;border-bottom-left-radius:4px;left:1px;right:auto}.select2-container--classic.select2-container--open .select2-selection--single{border:1px solid #5897fb}.select2-container--classic.select2-container--open .select2-selection--single .select2-selection__arrow{background:transparent;border:none}.select2-container--classic.select2-container--open .select2-selection--single .select2-selection__arrow b{border-color:transparent transparent #888 transparent;border-width:0 4px 5px 4px}.select2-container--classic.select2-container--open.select2-container--above .select2-selection--single{border-top:none;border-top-left-radius:0;border-top-right-radius:0;background-image:-webkit-linear-gradient(top, #fff 0%, #eee 50%);background-image:-o-linear-gradient(top, #fff 0%, #eee 50%);background-image:linear-gradient(to bottom, #fff 0%, #eee 50%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#FFFFFFFF', endColorstr='#FFEEEEEE', GradientType=0)}.select2-container--classic.select2-container--open.select2-container--below .select2-selection--single{border-bottom:none;border-bottom-left-radius:0;border-bottom-right-radius:0;background-image:-webkit-linear-gradient(top, #eee 50%, #fff 100%);background-image:-o-linear-gradient(top, #eee 50%, #fff 100%);background-image:linear-gradient(to bottom, #eee 50%, #fff 100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#FFEEEEEE', endColorstr='#FFFFFFFF', GradientType=0)}.select2-container--classic .select2-selection--multiple{background-color:white;border:1px solid #aaa;border-radius:4px;cursor:text;outline:0}.select2-container--classic .select2-selection--multiple:focus{border:1px solid #5897fb}.select2-container--classic .select2-selection--multiple .select2-selection__rendered{list-style:none;margin:0;padding:0 5px}.select2-container--classic .select2-selection--multiple .select2-selection__clear{display:none}.select2-container--classic .select2-selection--multiple .select2-selection__choice{background-color:#e4e4e4;border:1px solid #aaa;border-radius:4px;cursor:default;float:left;margin-right:5px;margin-top:5px;padding:0 5px}.select2-container--classic .select2-selection--multiple .select2-selection__choice__remove{color:#888;cursor:pointer;display:inline-block;font-weight:bold;margin-right:2px}.select2-container--classic .select2-selection--multiple .select2-selection__choice__remove:hover{color:#555}.select2-container--classic[dir="rtl"] .select2-selection--multiple .select2-selection__choice{float:right}.select2-container--classic[dir="rtl"] .select2-selection--multiple .select2-selection__choice{margin-left:5px;margin-right:auto}.select2-container--classic[dir="rtl"] .select2-selection--multiple .select2-selection__choice__remove{margin-left:2px;margin-right:auto}.select2-container--classic.select2-container--open .select2-selection--multiple{border:1px solid #5897fb}.select2-container--classic.select2-container--open.select2-container--above .select2-selection--multiple{border-top:none;border-top-left-radius:0;border-top-right-radius:0}.select2-container--classic.select2-container--open.select2-container--below .select2-selection--multiple{border-bottom:none;border-bottom-left-radius:0;border-bottom-right-radius:0}.select2-container--classic .select2-search--dropdown .select2-search__field{border:1px solid #aaa;outline:0}.select2-container--classic .select2-search--inline .select2-search__field{outline:0;box-shadow:none}.select2-container--classic .select2-dropdown{background-color:#fff;border:1px solid transparent}.select2-container--classic .select2-dropdown--above{border-bottom:none}.select2-container--classic .select2-dropdown--below{border-top:none}.select2-container--classic .select2-results>.select2-results__options{max-height:200px;overflow-y:auto}.select2-container--classic .select2-results__option[role=group]{padding:0}.select2-container--classic .select2-results__option[aria-disabled=true]{color:grey}.select2-container--classic .select2-results__option--highlighted[aria-selected]{background-color:#3875d7;color:#fff}.select2-container--classic .select2-results__group{cursor:default;display:block;padding:6px}.select2-container--classic.select2-container--open .select2-dropdown{border-color:#5897fb}
diff --git a/venv/Lib/site-packages/simpleui/static/admin/css/widgets.css b/venv/Lib/site-packages/simpleui/static/admin/css/widgets.css
new file mode 100644
index 0000000..d71b7c7
--- /dev/null
+++ b/venv/Lib/site-packages/simpleui/static/admin/css/widgets.css
@@ -0,0 +1,565 @@
+/* SELECTOR (FILTER INTERFACE) */
+
+.selector {
+ width: 800px;
+ float: left;
+}
+
+.selector select {
+ width: 380px;
+ height: 17.2em;
+}
+
+.selector-available, .selector-chosen {
+ float: left;
+ width: 380px;
+ text-align: center;
+ margin-bottom: 5px;
+}
+
+.selector-chosen select {
+ border-top: none;
+}
+
+.selector-available h2, .selector-chosen h2 {
+ border: 1px solid #ccc;
+ border-radius: 4px 4px 0 0;
+}
+
+.selector-chosen h2 {
+ background: #79aec8;
+ color: #fff;
+}
+
+.selector .selector-available h2 {
+ background: #f8f8f8;
+ color: #666;
+}
+
+.selector .selector-filter {
+ background: white;
+ border: 1px solid #ccc;
+ border-width: 0 1px;
+ padding: 8px;
+ color: #999;
+ font-size: 10px;
+ margin: 0;
+ text-align: left;
+}
+
+.selector .selector-filter label,
+.inline-group .aligned .selector .selector-filter label {
+ float: left;
+ margin: 7px 0 0;
+ width: 18px;
+ height: 18px;
+ padding: 0;
+ overflow: hidden;
+ line-height: 1;
+}
+
+.selector .selector-available input {
+ width: 320px;
+ margin-left: 8px;
+}
+
+.selector ul.selector-chooser {
+ float: left;
+ width: 22px;
+ background-color: #eee;
+ border-radius: 10px;
+ margin: 10em 5px 0 5px;
+ padding: 0;
+}
+
+.selector-chooser li {
+ margin: 0;
+ padding: 3px;
+ list-style-type: none;
+}
+
+.selector select {
+ padding: 0 10px;
+ margin: 0 0 10px;
+ border-radius: 0 0 4px 4px;
+}
+
+.selector-add, .selector-remove {
+ width: 16px;
+ height: 16px;
+ display: block;
+ text-indent: -3000px;
+ overflow: hidden;
+ cursor: default;
+ opacity: 0.3;
+}
+
+.active.selector-add, .active.selector-remove {
+ opacity: 1;
+}
+
+.active.selector-add:hover, .active.selector-remove:hover {
+ cursor: pointer;
+}
+
+.selector-add {
+ background: url(../img/selector-icons.svg) 0 -96px no-repeat;
+}
+
+.active.selector-add:focus, .active.selector-add:hover {
+ background-position: 0 -112px;
+}
+
+.selector-remove {
+ background: url(../img/selector-icons.svg) 0 -64px no-repeat;
+}
+
+.active.selector-remove:focus, .active.selector-remove:hover {
+ background-position: 0 -80px;
+}
+
+a.selector-chooseall, a.selector-clearall {
+ display: inline-block;
+ height: 16px;
+ text-align: left;
+ margin: 1px auto 3px;
+ overflow: hidden;
+ font-weight: bold;
+ line-height: 16px;
+ color: #666;
+ text-decoration: none;
+ opacity: 0.3;
+}
+
+a.active.selector-chooseall:focus, a.active.selector-clearall:focus,
+a.active.selector-chooseall:hover, a.active.selector-clearall:hover {
+ color: #447e9b;
+}
+
+a.active.selector-chooseall, a.active.selector-clearall {
+ opacity: 1;
+}
+
+a.active.selector-chooseall:hover, a.active.selector-clearall:hover {
+ cursor: pointer;
+}
+
+a.selector-chooseall {
+ padding: 0 18px 0 0;
+ background: url(../img/selector-icons.svg) right -160px no-repeat;
+ cursor: default;
+}
+
+a.active.selector-chooseall:focus, a.active.selector-chooseall:hover {
+ background-position: 100% -176px;
+}
+
+a.selector-clearall {
+ padding: 0 0 0 18px;
+ background: url(../img/selector-icons.svg) 0 -128px no-repeat;
+ cursor: default;
+}
+
+a.active.selector-clearall:focus, a.active.selector-clearall:hover {
+ background-position: 0 -144px;
+}
+
+/* STACKED SELECTORS */
+
+.stacked {
+ float: left;
+ width: 490px;
+}
+
+.stacked select {
+ width: 480px;
+ height: 10.1em;
+}
+
+.stacked .selector-available, .stacked .selector-chosen {
+ width: 480px;
+}
+
+.stacked .selector-available {
+ margin-bottom: 0;
+}
+
+.stacked .selector-available input {
+ width: 422px;
+}
+
+.stacked ul.selector-chooser {
+ height: 22px;
+ width: 50px;
+ margin: 0 0 10px 40%;
+ background-color: #eee;
+ border-radius: 10px;
+}
+
+.stacked .selector-chooser li {
+ float: left;
+ padding: 3px 3px 3px 5px;
+}
+
+.stacked .selector-chooseall, .stacked .selector-clearall {
+ display: none;
+}
+
+.stacked .selector-add {
+ background: url(../img/selector-icons.svg) 0 -32px no-repeat;
+ cursor: default;
+}
+
+.stacked .active.selector-add {
+ background-position: 0 -48px;
+ cursor: pointer;
+}
+
+.stacked .selector-remove {
+ background: url(../img/selector-icons.svg) 0 0 no-repeat;
+ cursor: default;
+}
+
+.stacked .active.selector-remove {
+ background-position: 0 -16px;
+ cursor: pointer;
+}
+
+.selector .help-icon {
+ background: url(../img/icon-unknown.svg) 0 0 no-repeat;
+ display: inline-block;
+ vertical-align: middle;
+ margin: -2px 0 0 2px;
+ width: 13px;
+ height: 13px;
+}
+
+.selector .selector-chosen .help-icon {
+ background: url(../img/icon-unknown-alt.svg) 0 0 no-repeat;
+}
+
+.selector .search-label-icon {
+ background: url(../img/search.svg) 0 0 no-repeat;
+ display: inline-block;
+ height: 18px;
+ width: 18px;
+}
+
+/* DATE AND TIME */
+
+p.datetime {
+ line-height: 20px;
+ margin: 0;
+ padding: 0;
+ color: #666;
+ font-weight: bold;
+}
+
+.datetime span {
+ white-space: nowrap;
+ font-weight: normal;
+ font-size: 11px;
+ color: #ccc;
+}
+
+.datetime input, .form-row .datetime input.vDateField, .form-row .datetime input.vTimeField {
+ min-width: 0;
+ margin-left: 5px;
+ margin-bottom: 4px;
+}
+
+table p.datetime {
+ font-size: 11px;
+ margin-left: 0;
+ padding-left: 0;
+}
+
+.datetimeshortcuts .clock-icon, .datetimeshortcuts .date-icon {
+ position: relative;
+ display: inline-block;
+ vertical-align: middle;
+ height: 16px;
+ width: 16px;
+ overflow: hidden;
+}
+
+.datetimeshortcuts .clock-icon {
+ background: url(../img/icon-clock.svg) 0 0 no-repeat;
+}
+
+.datetimeshortcuts a:focus .clock-icon,
+.datetimeshortcuts a:hover .clock-icon {
+ background-position: 0 -16px;
+}
+
+.datetimeshortcuts .date-icon {
+ background: url(../img/icon-calendar.svg) 0 0 no-repeat;
+ top: -1px;
+}
+
+.datetimeshortcuts a:focus .date-icon,
+.datetimeshortcuts a:hover .date-icon {
+ background-position: 0 -16px;
+}
+
+.timezonewarning {
+ font-size: 11px;
+ color: #999;
+}
+
+/* URL */
+
+p.url {
+ line-height: 20px;
+ margin: 0;
+ padding: 0;
+ color: #666;
+ font-size: 11px;
+ font-weight: bold;
+}
+
+.url a {
+ font-weight: normal;
+}
+
+/* FILE UPLOADS */
+
+p.file-upload {
+ line-height: 20px;
+ margin: 0;
+ padding: 0;
+ color: #666;
+ font-size: 11px;
+ font-weight: bold;
+}
+
+.aligned p.file-upload {
+ margin-left: 170px;
+}
+
+.file-upload a {
+ font-weight: normal;
+}
+
+.file-upload .deletelink {
+ margin-left: 5px;
+}
+
+span.clearable-file-input label {
+ color: #333;
+ font-size: 11px;
+ display: inline;
+ float: none;
+}
+
+/* CALENDARS & CLOCKS */
+
+.calendarbox, .clockbox {
+ margin: 5px auto;
+ font-size: 12px;
+ width: 19em;
+ text-align: center;
+ background: white;
+ border: 1px solid #ddd;
+ border-radius: 4px;
+ box-shadow: 0 2px 4px rgba(0, 0, 0, 0.15);
+ overflow: hidden;
+ position: relative;
+}
+
+.clockbox {
+ width: auto;
+}
+
+.calendar {
+ margin: 0;
+ padding: 0;
+}
+
+.calendar table {
+ margin: 0;
+ padding: 0;
+ border-collapse: collapse;
+ background: white;
+ width: 100%;
+}
+
+.calendar caption, .calendarbox h2 {
+ margin: 0;
+ text-align: center;
+ border-top: none;
+ background: #f5dd5d;
+ font-weight: 700;
+ font-size: 12px;
+ color: #333;
+}
+
+.calendar th {
+ padding: 8px 5px;
+ background: #f8f8f8;
+ border-bottom: 1px solid #ddd;
+ font-weight: 400;
+ font-size: 12px;
+ text-align: center;
+ color: #666;
+}
+
+.calendar td {
+ font-weight: 400;
+ font-size: 12px;
+ text-align: center;
+ padding: 0;
+ border-top: 1px solid #eee;
+ border-bottom: none;
+}
+
+.calendar td.selected a {
+ background: #79aec8;
+ color: #fff;
+}
+
+.calendar td.nonday {
+ background: #f8f8f8;
+}
+
+.calendar td.today a {
+ font-weight: 700;
+}
+
+.calendar td a, .timelist a {
+ display: block;
+ font-weight: 400;
+ padding: 6px;
+ text-decoration: none;
+ color: #444;
+}
+
+.calendar td a:focus, .timelist a:focus,
+.calendar td a:hover, .timelist a:hover {
+ background: #79aec8;
+ color: white;
+}
+
+.calendar td a:active, .timelist a:active {
+ background: #417690;
+ color: white;
+}
+
+.calendarnav {
+ font-size: 10px;
+ text-align: center;
+ color: #ccc;
+ margin: 0;
+ padding: 1px 3px;
+}
+
+.calendarnav a:link, #calendarnav a:visited,
+#calendarnav a:focus, #calendarnav a:hover {
+ color: #999;
+}
+
+.calendar-shortcuts {
+ background: white;
+ font-size: 11px;
+ line-height: 11px;
+ border-top: 1px solid #eee;
+ padding: 8px 0;
+ color: #ccc;
+}
+
+.calendarbox .calendarnav-previous, .calendarbox .calendarnav-next {
+ display: block;
+ position: absolute;
+ top: 8px;
+ width: 15px;
+ height: 15px;
+ text-indent: -9999px;
+ padding: 0;
+}
+
+.calendarnav-previous {
+ left: 10px;
+ background: url(../img/calendar-icons.svg) 0 0 no-repeat;
+}
+
+.calendarbox .calendarnav-previous:focus,
+.calendarbox .calendarnav-previous:hover {
+ background-position: 0 -15px;
+}
+
+.calendarnav-next {
+ right: 10px;
+ background: url(../img/calendar-icons.svg) 0 -30px no-repeat;
+}
+
+.calendarbox .calendarnav-next:focus,
+.calendarbox .calendarnav-next:hover {
+ background-position: 0 -45px;
+}
+
+.calendar-cancel {
+ margin: 0;
+ padding: 4px 0;
+ font-size: 12px;
+ background: #eee;
+ border-top: 1px solid #ddd;
+ color: #333;
+}
+
+.calendar-cancel:focus, .calendar-cancel:hover {
+ background: #ddd;
+}
+
+.calendar-cancel a {
+ color: black;
+ display: block;
+}
+
+ul.timelist, .timelist li {
+ list-style-type: none;
+ margin: 0;
+ padding: 0;
+}
+
+.timelist a {
+ padding: 2px;
+}
+
+/* EDIT INLINE */
+
+.inline-deletelink {
+ float: right;
+ text-indent: -9999px;
+ background: url(../img/inline-delete.svg) 0 0 no-repeat;
+ width: 16px;
+ height: 16px;
+ border: 0px none;
+}
+
+.inline-deletelink:focus, .inline-deletelink:hover {
+ cursor: pointer;
+}
+
+/* RELATED WIDGET WRAPPER */
+.related-widget-wrapper {
+ float: left; /* display properly in form rows with multiple fields */
+ overflow: hidden; /* clear floated contents */
+}
+
+.related-widget-wrapper-link {
+ opacity: 0.3;
+}
+
+.related-widget-wrapper-link:link {
+ opacity: .8;
+}
+
+.related-widget-wrapper-link:link:focus,
+.related-widget-wrapper-link:link:hover {
+ opacity: 1;
+}
+
+select + .related-widget-wrapper-link,
+.related-widget-wrapper-link + .related-widget-wrapper-link {
+ margin-left: 7px;
+}
diff --git a/venv/Lib/site-packages/simpleui/static/admin/fonts/LICENSE.txt b/venv/Lib/site-packages/simpleui/static/admin/fonts/LICENSE.txt
new file mode 100644
index 0000000..d645695
--- /dev/null
+++ b/venv/Lib/site-packages/simpleui/static/admin/fonts/LICENSE.txt
@@ -0,0 +1,202 @@
+
+ Apache License
+ Version 2.0, January 2004
+ http://www.apache.org/licenses/
+
+ TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
+
+ 1. Definitions.
+
+ "License" shall mean the terms and conditions for use, reproduction,
+ and distribution as defined by Sections 1 through 9 of this document.
+
+ "Licensor" shall mean the copyright owner or entity authorized by
+ the copyright owner that is granting the License.
+
+ "Legal Entity" shall mean the union of the acting entity and all
+ other entities that control, are controlled by, or are under common
+ control with that entity. For the purposes of this definition,
+ "control" means (i) the power, direct or indirect, to cause the
+ direction or management of such entity, whether by contract or
+ otherwise, or (ii) ownership of fifty percent (50%) or more of the
+ outstanding shares, or (iii) beneficial ownership of such entity.
+
+ "You" (or "Your") shall mean an individual or Legal Entity
+ exercising permissions granted by this License.
+
+ "Source" form shall mean the preferred form for making modifications,
+ including but not limited to software source code, documentation
+ source, and configuration files.
+
+ "Object" form shall mean any form resulting from mechanical
+ transformation or translation of a Source form, including but
+ not limited to compiled object code, generated documentation,
+ and conversions to other media types.
+
+ "Work" shall mean the work of authorship, whether in Source or
+ Object form, made available under the License, as indicated by a
+ copyright notice that is included in or attached to the work
+ (an example is provided in the Appendix below).
+
+ "Derivative Works" shall mean any work, whether in Source or Object
+ form, that is based on (or derived from) the Work and for which the
+ editorial revisions, annotations, elaborations, or other modifications
+ represent, as a whole, an original work of authorship. For the purposes
+ of this License, Derivative Works shall not include works that remain
+ separable from, or merely link (or bind by name) to the interfaces of,
+ the Work and Derivative Works thereof.
+
+ "Contribution" shall mean any work of authorship, including
+ the original version of the Work and any modifications or additions
+ to that Work or Derivative Works thereof, that is intentionally
+ submitted to Licensor for inclusion in the Work by the copyright owner
+ or by an individual or Legal Entity authorized to submit on behalf of
+ the copyright owner. For the purposes of this definition, "submitted"
+ means any form of electronic, verbal, or written communication sent
+ to the Licensor or its representatives, including but not limited to
+ communication on electronic mailing lists, source code control systems,
+ and issue tracking systems that are managed by, or on behalf of, the
+ Licensor for the purpose of discussing and improving the Work, but
+ excluding communication that is conspicuously marked or otherwise
+ designated in writing by the copyright owner as "Not a Contribution."
+
+ "Contributor" shall mean Licensor and any individual or Legal Entity
+ on behalf of whom a Contribution has been received by Licensor and
+ subsequently incorporated within the Work.
+
+ 2. Grant of Copyright License. Subject to the terms and conditions of
+ this License, each Contributor hereby grants to You a perpetual,
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+ copyright license to reproduce, prepare Derivative Works of,
+ publicly display, publicly perform, sublicense, and distribute the
+ Work and such Derivative Works in Source or Object form.
+
+ 3. Grant of Patent License. Subject to the terms and conditions of
+ this License, each Contributor hereby grants to You a perpetual,
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+ (except as stated in this section) patent license to make, have made,
+ use, offer to sell, sell, import, and otherwise transfer the Work,
+ where such license applies only to those patent claims licensable
+ by such Contributor that are necessarily infringed by their
+ Contribution(s) alone or by combination of their Contribution(s)
+ with the Work to which such Contribution(s) was submitted. If You
+ institute patent litigation against any entity (including a
+ cross-claim or counterclaim in a lawsuit) alleging that the Work
+ or a Contribution incorporated within the Work constitutes direct
+ or contributory patent infringement, then any patent licenses
+ granted to You under this License for that Work shall terminate
+ as of the date such litigation is filed.
+
+ 4. Redistribution. You may reproduce and distribute copies of the
+ Work or Derivative Works thereof in any medium, with or without
+ modifications, and in Source or Object form, provided that You
+ meet the following conditions:
+
+ (a) You must give any other recipients of the Work or
+ Derivative Works a copy of this License; and
+
+ (b) You must cause any modified files to carry prominent notices
+ stating that You changed the files; and
+
+ (c) You must retain, in the Source form of any Derivative Works
+ that You distribute, all copyright, patent, trademark, and
+ attribution notices from the Source form of the Work,
+ excluding those notices that do not pertain to any part of
+ the Derivative Works; and
+
+ (d) If the Work includes a "NOTICE" text file as part of its
+ distribution, then any Derivative Works that You distribute must
+ include a readable copy of the attribution notices contained
+ within such NOTICE file, excluding those notices that do not
+ pertain to any part of the Derivative Works, in at least one
+ of the following places: within a NOTICE text file distributed
+ as part of the Derivative Works; within the Source form or
+ documentation, if provided along with the Derivative Works; or,
+ within a display generated by the Derivative Works, if and
+ wherever such third-party notices normally appear. The contents
+ of the NOTICE file are for informational purposes only and
+ do not modify the License. You may add Your own attribution
+ notices within Derivative Works that You distribute, alongside
+ or as an addendum to the NOTICE text from the Work, provided
+ that such additional attribution notices cannot be construed
+ as modifying the License.
+
+ You may add Your own copyright statement to Your modifications and
+ may provide additional or different license terms and conditions
+ for use, reproduction, or distribution of Your modifications, or
+ for any such Derivative Works as a whole, provided Your use,
+ reproduction, and distribution of the Work otherwise complies with
+ the conditions stated in this License.
+
+ 5. Submission of Contributions. Unless You explicitly state otherwise,
+ any Contribution intentionally submitted for inclusion in the Work
+ by You to the Licensor shall be under the terms and conditions of
+ this License, without any additional terms or conditions.
+ Notwithstanding the above, nothing herein shall supersede or modify
+ the terms of any separate license agreement you may have executed
+ with Licensor regarding such Contributions.
+
+ 6. Trademarks. This License does not grant permission to use the trade
+ names, trademarks, service marks, or product names of the Licensor,
+ except as required for reasonable and customary use in describing the
+ origin of the Work and reproducing the content of the NOTICE file.
+
+ 7. Disclaimer of Warranty. Unless required by applicable law or
+ agreed to in writing, Licensor provides the Work (and each
+ Contributor provides its Contributions) on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
+ implied, including, without limitation, any warranties or conditions
+ of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
+ PARTICULAR PURPOSE. You are solely responsible for determining the
+ appropriateness of using or redistributing the Work and assume any
+ risks associated with Your exercise of permissions under this License.
+
+ 8. Limitation of Liability. In no event and under no legal theory,
+ whether in tort (including negligence), contract, or otherwise,
+ unless required by applicable law (such as deliberate and grossly
+ negligent acts) or agreed to in writing, shall any Contributor be
+ liable to You for damages, including any direct, indirect, special,
+ incidental, or consequential damages of any character arising as a
+ result of this License or out of the use or inability to use the
+ Work (including but not limited to damages for loss of goodwill,
+ work stoppage, computer failure or malfunction, or any and all
+ other commercial damages or losses), even if such Contributor
+ has been advised of the possibility of such damages.
+
+ 9. Accepting Warranty or Additional Liability. While redistributing
+ the Work or Derivative Works thereof, You may choose to offer,
+ and charge a fee for, acceptance of support, warranty, indemnity,
+ or other liability obligations and/or rights consistent with this
+ License. However, in accepting such obligations, You may act only
+ on Your own behalf and on Your sole responsibility, not on behalf
+ of any other Contributor, and only if You agree to indemnify,
+ defend, and hold each Contributor harmless for any liability
+ incurred by, or claims asserted against, such Contributor by reason
+ of your accepting any such warranty or additional liability.
+
+ END OF TERMS AND CONDITIONS
+
+ APPENDIX: How to apply the Apache License to your work.
+
+ To apply the Apache License to your work, attach the following
+ boilerplate notice, with the fields enclosed by brackets "[]"
+ replaced with your own identifying information. (Don't include
+ the brackets!) The text should be enclosed in the appropriate
+ comment syntax for the file format. We also recommend that a
+ file or class name and description of purpose be included on the
+ same "printed page" as the copyright notice for easier
+ identification within third-party archives.
+
+ Copyright [yyyy] [name of copyright owner]
+
+ 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
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
diff --git a/venv/Lib/site-packages/simpleui/static/admin/fonts/README.txt b/venv/Lib/site-packages/simpleui/static/admin/fonts/README.txt
new file mode 100644
index 0000000..cc2135a
--- /dev/null
+++ b/venv/Lib/site-packages/simpleui/static/admin/fonts/README.txt
@@ -0,0 +1,2 @@
+Roboto webfont source: https://www.google.com/fonts/specimen/Roboto
+Weights used in this project: Light (300), Regular (400), Bold (700)
diff --git a/venv/Lib/site-packages/simpleui/static/admin/fonts/Roboto-Bold-webfont.woff b/venv/Lib/site-packages/simpleui/static/admin/fonts/Roboto-Bold-webfont.woff
new file mode 100644
index 0000000000000000000000000000000000000000..03357ce4f5833006114f2e790a7b89dbf69d4f90
GIT binary patch
literal 82564
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