Fisrt import
22
manage.py
Normal file
@ -0,0 +1,22 @@
|
|||||||
|
#!/usr/bin/env python
|
||||||
|
"""Django's command-line utility for administrative tasks."""
|
||||||
|
import os
|
||||||
|
import sys
|
||||||
|
|
||||||
|
|
||||||
|
def main():
|
||||||
|
"""Run administrative tasks."""
|
||||||
|
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "mirri_tools_web.settings")
|
||||||
|
try:
|
||||||
|
from django.core.management import execute_from_command_line
|
||||||
|
except ImportError as exc:
|
||||||
|
raise ImportError(
|
||||||
|
"Couldn't import Django. Are you sure it's installed and "
|
||||||
|
"available on your PYTHONPATH environment variable? Did you "
|
||||||
|
"forget to activate a virtual environment?"
|
||||||
|
) from exc
|
||||||
|
execute_from_command_line(sys.argv)
|
||||||
|
|
||||||
|
|
||||||
|
if __name__ == "__main__":
|
||||||
|
main()
|
||||||
0
mirri_tools_web/__init__.py
Normal file
16
mirri_tools_web/asgi.py
Normal file
@ -0,0 +1,16 @@
|
|||||||
|
"""
|
||||||
|
ASGI config for mirri_validator_web project.
|
||||||
|
|
||||||
|
It exposes the ASGI callable as a module-level variable named ``application``.
|
||||||
|
|
||||||
|
For more information on this file, see
|
||||||
|
https://docs.djangoproject.com/en/3.1/howto/deployment/asgi/
|
||||||
|
"""
|
||||||
|
|
||||||
|
import os
|
||||||
|
|
||||||
|
from django.core.asgi import get_asgi_application
|
||||||
|
|
||||||
|
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "mirri_tools_web.settings")
|
||||||
|
|
||||||
|
application = get_asgi_application()
|
||||||
33
mirri_tools_web/deployment/virtual_host.conf
Normal file
@ -0,0 +1,33 @@
|
|||||||
|
<VirtualHost *:80>
|
||||||
|
ServerName localhost
|
||||||
|
ServerAdmin pziarsolo@cect.org
|
||||||
|
|
||||||
|
Alias /static /home/webadmin/devel/mirri_tools/static
|
||||||
|
Alias /media /home/webadmin/devel/mirri_tools/media
|
||||||
|
|
||||||
|
WSGIPassAuthorization On
|
||||||
|
WSGIDaemonProcess tools.mirri.org python-path=/home/webadmin/devel/mirri_tools:/home/webadmin/devel/mirri_utils:/home/webadmin/devel/pyenv/lib/python3.7/site-packages
|
||||||
|
WSGIProcessGroup tools.mirri.org
|
||||||
|
|
||||||
|
WSGIScriptAlias / /home/webadmin/devel/mirri_tools/mirri_tools_web/wsgi.py
|
||||||
|
|
||||||
|
<Directory /home/webadmin/devel/mirri_tools/mirri_tools_web/ >
|
||||||
|
<Files wsgi.py>
|
||||||
|
Require all granted
|
||||||
|
</Files>
|
||||||
|
</Directory>
|
||||||
|
<Directory /home/webadmin/devel/mirri_tools/static>
|
||||||
|
Require all granted
|
||||||
|
</Directory>
|
||||||
|
<Directory /home/webadmin/devel/mirri_tools/media>
|
||||||
|
Require all granted
|
||||||
|
</Directory>
|
||||||
|
|
||||||
|
DocumentRoot /var/www/html
|
||||||
|
|
||||||
|
CustomLog ${APACHE_LOG_DIR}/validator_access.log combined
|
||||||
|
ErrorLog ${APACHE_LOG_DIR}/validator_error.log
|
||||||
|
LogLevel warn
|
||||||
|
</VirtualHost>
|
||||||
|
|
||||||
|
# vim: syntax=apache ts=4 sw=4 sts=4 sr noet
|
||||||
150
mirri_tools_web/settings.py
Normal file
@ -0,0 +1,150 @@
|
|||||||
|
"""
|
||||||
|
Django settings for mirri_validator_web project.
|
||||||
|
|
||||||
|
Generated by 'django-admin startproject' using Django 3.1.2.
|
||||||
|
|
||||||
|
For more information on this file, see
|
||||||
|
https://docs.djangoproject.com/en/3.1/topics/settings/
|
||||||
|
|
||||||
|
For the full list of settings and their values, see
|
||||||
|
https://docs.djangoproject.com/en/3.1/ref/settings/
|
||||||
|
"""
|
||||||
|
import os
|
||||||
|
import socket
|
||||||
|
|
||||||
|
from pathlib import Path
|
||||||
|
try:
|
||||||
|
from .secrets import SITE_SECRET_ID
|
||||||
|
except ImportError as error:
|
||||||
|
raise ImportError('You need a secrets.py file with SITE_SECRET_ID on it') from error
|
||||||
|
|
||||||
|
|
||||||
|
def get_ip_address():
|
||||||
|
s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
|
||||||
|
s.connect(("8.8.8.8", 80))
|
||||||
|
ip = s.getsockname()[0]
|
||||||
|
s.close()
|
||||||
|
return ip
|
||||||
|
|
||||||
|
|
||||||
|
BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
|
||||||
|
CACHE_DIR = os.path.join(BASE_DIR, 'cache')
|
||||||
|
SITE_ID = 1
|
||||||
|
|
||||||
|
# Quick-start development settings - unsuitable for production
|
||||||
|
# See https://docs.djangoproject.com/en/1.8/howto/deployment/checklist/
|
||||||
|
|
||||||
|
# SECURITY WARNING: keep the secret key used in production secret!
|
||||||
|
SECRET_KEY = SITE_SECRET_ID
|
||||||
|
|
||||||
|
# SECURITY WARNING: don't run with debug turned on in production!
|
||||||
|
|
||||||
|
HOST_IP = get_ip_address()
|
||||||
|
DEVELOPMENT_MACHINE = not HOST_IP.startswith('192.168')
|
||||||
|
# Build paths inside the project like this: BASE_DIR / 'subdir'.
|
||||||
|
BASE_DIR = Path(__file__).resolve().parent.parent
|
||||||
|
|
||||||
|
# Quick-start development settings - unsuitable for production
|
||||||
|
# See https://docs.djangoproject.com/en/3.1/howto/deployment/checklist/
|
||||||
|
|
||||||
|
DEBUG = DEVELOPMENT_MACHINE
|
||||||
|
ALLOWED_HOSTS = ["192.168.3.2", "localhost"]
|
||||||
|
|
||||||
|
# Application definition
|
||||||
|
|
||||||
|
INSTALLED_APPS = [
|
||||||
|
"django.contrib.admin",
|
||||||
|
"django.contrib.auth",
|
||||||
|
"django.contrib.contenttypes",
|
||||||
|
"django.contrib.sessions",
|
||||||
|
"django.contrib.messages",
|
||||||
|
"django.contrib.staticfiles",
|
||||||
|
"web_tools",
|
||||||
|
]
|
||||||
|
|
||||||
|
MIDDLEWARE = [
|
||||||
|
"django.middleware.security.SecurityMiddleware",
|
||||||
|
"django.contrib.sessions.middleware.SessionMiddleware",
|
||||||
|
"django.middleware.common.CommonMiddleware",
|
||||||
|
"django.middleware.csrf.CsrfViewMiddleware",
|
||||||
|
"django.contrib.auth.middleware.AuthenticationMiddleware",
|
||||||
|
"django.contrib.messages.middleware.MessageMiddleware",
|
||||||
|
"django.middleware.clickjacking.XFrameOptionsMiddleware",
|
||||||
|
]
|
||||||
|
|
||||||
|
ROOT_URLCONF = "mirri_tools_web.urls"
|
||||||
|
|
||||||
|
TEMPLATES = [
|
||||||
|
{
|
||||||
|
"BACKEND": "django.template.backends.django.DjangoTemplates",
|
||||||
|
"DIRS": [],
|
||||||
|
"APP_DIRS": True,
|
||||||
|
"OPTIONS": {
|
||||||
|
"context_processors": [
|
||||||
|
"django.template.context_processors.debug",
|
||||||
|
"django.template.context_processors.request",
|
||||||
|
"django.contrib.auth.context_processors.auth",
|
||||||
|
"django.contrib.messages.context_processors.messages",
|
||||||
|
],
|
||||||
|
},
|
||||||
|
},
|
||||||
|
]
|
||||||
|
|
||||||
|
WSGI_APPLICATION = "mirri_tools_web.wsgi.application"
|
||||||
|
|
||||||
|
|
||||||
|
# Database
|
||||||
|
# https://docs.djangoproject.com/en/3.1/ref/settings/#databases
|
||||||
|
|
||||||
|
DATABASES = {
|
||||||
|
"default": {
|
||||||
|
"ENGINE": "django.db.backends.sqlite3",
|
||||||
|
"NAME": BASE_DIR / "db.sqlite3",
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
# Password validation
|
||||||
|
# https://docs.djangoproject.com/en/3.1/ref/settings/#auth-password-validators
|
||||||
|
|
||||||
|
AUTH_PASSWORD_VALIDATORS = [
|
||||||
|
{
|
||||||
|
"NAME": "django.contrib.auth.password_validation.UserAttributeSimilarityValidator",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"NAME": "django.contrib.auth.password_validation.MinimumLengthValidator",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"NAME": "django.contrib.auth.password_validation.CommonPasswordValidator",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"NAME": "django.contrib.auth.password_validation.NumericPasswordValidator",
|
||||||
|
},
|
||||||
|
]
|
||||||
|
|
||||||
|
|
||||||
|
# Internationalization
|
||||||
|
# https://docs.djangoproject.com/en/3.1/topics/i18n/
|
||||||
|
|
||||||
|
LANGUAGE_CODE = "en-us"
|
||||||
|
|
||||||
|
TIME_ZONE = "UTC"
|
||||||
|
|
||||||
|
USE_I18N = True
|
||||||
|
|
||||||
|
USE_L10N = True
|
||||||
|
|
||||||
|
USE_TZ = True
|
||||||
|
|
||||||
|
|
||||||
|
# Static files (CSS, JavaScript, Images)
|
||||||
|
# https://docs.djangoproject.com/en/3.1/howto/static-files/
|
||||||
|
|
||||||
|
STATIC_URL = "/static/"
|
||||||
|
STATIC_ROOT = str(BASE_DIR / "static")
|
||||||
|
|
||||||
|
MEDIA_URL = "/media/"
|
||||||
|
MEDIA_ROOT = str(BASE_DIR / "media")
|
||||||
|
|
||||||
|
WEB_TOOLS_VALID_EXCEL_UPLOAD_DIR = BASE_DIR / 'uploaded'
|
||||||
|
WEB_TOOLS_NOTIFICATION_RECEIVERS = ['jmlopez@cect.org']
|
||||||
28
mirri_tools_web/urls.py
Normal file
@ -0,0 +1,28 @@
|
|||||||
|
"""mirri_validator_web URL Configuration
|
||||||
|
|
||||||
|
The `urlpatterns` list routes URLs to views. For more information please see:
|
||||||
|
https://docs.djangoproject.com/en/3.1/topics/http/urls/
|
||||||
|
Examples:
|
||||||
|
Function views
|
||||||
|
1. Add an import: from my_app import views
|
||||||
|
2. Add a URL to urlpatterns: path('', views.home, name='home')
|
||||||
|
Class-based views
|
||||||
|
1. Add an import: from other_app.views import Home
|
||||||
|
2. Add a URL to urlpatterns: path('', Home.as_view(), name='home')
|
||||||
|
Including another URLconf
|
||||||
|
1. Import the include() function: from django.urls import include, path
|
||||||
|
2. Add a URL to urlpatterns: path('blog/', include('blog.urls'))
|
||||||
|
"""
|
||||||
|
from django.contrib import admin
|
||||||
|
from django.urls import path
|
||||||
|
from django.urls.conf import include
|
||||||
|
from django.conf import settings
|
||||||
|
from django.conf.urls.static import static
|
||||||
|
import web_tools.urls
|
||||||
|
|
||||||
|
urlpatterns = [
|
||||||
|
path("admin/", admin.site.urls),
|
||||||
|
path("", include(web_tools.urls)),
|
||||||
|
]
|
||||||
|
urlpatterns += static(settings.STATIC_URL, document_root=settings.STATIC_ROOT)
|
||||||
|
urlpatterns += static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)
|
||||||
19
mirri_tools_web/wsgi.py
Normal file
@ -0,0 +1,19 @@
|
|||||||
|
"""
|
||||||
|
WSGI config for mirri_validator_web project.
|
||||||
|
|
||||||
|
It exposes the WSGI callable as a module-level variable named ``application``.
|
||||||
|
|
||||||
|
For more information on this file, see
|
||||||
|
https://docs.djangoproject.com/en/3.1/howto/deployment/wsgi/
|
||||||
|
"""
|
||||||
|
|
||||||
|
import os
|
||||||
|
|
||||||
|
from django.core.wsgi import get_wsgi_application
|
||||||
|
import sys
|
||||||
|
|
||||||
|
sys.path.append("/home/peio/devel/cect/mirri_utils")
|
||||||
|
|
||||||
|
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "mirri_tools_web.settings")
|
||||||
|
|
||||||
|
application = get_wsgi_application()
|
||||||
2
requirements.txt
Normal file
@ -0,0 +1,2 @@
|
|||||||
|
django
|
||||||
|
xhtml2pdf
|
||||||
0
web_tools/__init__.py
Normal file
3
web_tools/admin.py
Normal file
@ -0,0 +1,3 @@
|
|||||||
|
from django.contrib import admin
|
||||||
|
|
||||||
|
# Register your models here.
|
||||||
5
web_tools/apps.py
Normal file
@ -0,0 +1,5 @@
|
|||||||
|
from django.apps import AppConfig
|
||||||
|
|
||||||
|
|
||||||
|
class WebToolsConfig(AppConfig):
|
||||||
|
name = "web_tools"
|
||||||
9
web_tools/forms.py
Normal file
@ -0,0 +1,9 @@
|
|||||||
|
from django import forms
|
||||||
|
|
||||||
|
|
||||||
|
class ValidationUploadForm(forms.Form):
|
||||||
|
file = forms.FileField(
|
||||||
|
max_length=100, label="Add an excel file with the MIRRI specs", required=True
|
||||||
|
)
|
||||||
|
do_upload = forms.BooleanField(
|
||||||
|
label='Check it if you want to uploaad the file', required=False)
|
||||||
0
web_tools/migrations/__init__.py
Normal file
3
web_tools/models.py
Normal file
@ -0,0 +1,3 @@
|
|||||||
|
from django.db import models
|
||||||
|
|
||||||
|
# Create your models here.
|
||||||
27
web_tools/send_mail.py
Normal file
@ -0,0 +1,27 @@
|
|||||||
|
import smtplib
|
||||||
|
from email.mime.multipart import MIMEMultipart
|
||||||
|
from email.mime.text import MIMEText
|
||||||
|
|
||||||
|
|
||||||
|
def send_mail(receivers, fname):
|
||||||
|
subject = "New file uploaded with validator"
|
||||||
|
body = f"A new file has been uploaded using the validator file: {fname}"
|
||||||
|
sender_email = "pziarsolo@cect.org"
|
||||||
|
|
||||||
|
# Create a multipart message and set headers
|
||||||
|
message = MIMEMultipart()
|
||||||
|
message["From"] = sender_email
|
||||||
|
|
||||||
|
message["To"] = ", ".join(receivers)
|
||||||
|
message["Subject"] = subject
|
||||||
|
|
||||||
|
# Add body to email
|
||||||
|
message.attach(MIMEText(body))
|
||||||
|
text = message.as_string()
|
||||||
|
|
||||||
|
# Log in to server using secure context and send email
|
||||||
|
server = smtplib.SMTP("localhost")
|
||||||
|
# server.login(sender_email, password)
|
||||||
|
server.sendmail(sender_email, receivers, text)
|
||||||
|
server.close()
|
||||||
|
|
||||||
5
web_tools/settings.py
Normal file
@ -0,0 +1,5 @@
|
|||||||
|
from django.conf import settings
|
||||||
|
|
||||||
|
VALID_EXCEL_UPLOAD_DIR = getattr(settings, 'WEB_TOOLS_VALID_EXCEL_UPLOAD_DIR')
|
||||||
|
NUM_ERROR_LIMIT = getattr(settings, 'WEB_TOOLS_NUM_ERROR_LIMIT', 100)
|
||||||
|
NOTIFICATION_RECEIVERS = getattr(settings, 'WEB_TOOLS_NOTIFICATION_RECEIVERS', [])
|
||||||
BIN
web_tools/static/web_tools/favicon.ico
Normal file
|
After Width: | Height: | Size: 15 KiB |
154
web_tools/static/web_tools/style.css
Normal file
@ -0,0 +1,154 @@
|
|||||||
|
/* CSS Document */
|
||||||
|
|
||||||
|
@import url(https://fonts.googleapis.com/css?family=Open+Sans);
|
||||||
|
@import url(https://fonts.googleapis.com/css?family=Bree+Serif);
|
||||||
|
|
||||||
|
body {
|
||||||
|
background: #ffffff;
|
||||||
|
font-size: 22px;
|
||||||
|
line-height: 32px;
|
||||||
|
color: #567084;
|
||||||
|
word-wrap: break-word !important;
|
||||||
|
font-family: "Open Sans", sans-serif;
|
||||||
|
margin: 0;
|
||||||
|
padding: 0;
|
||||||
|
}
|
||||||
|
#page-container {
|
||||||
|
margin: 0;
|
||||||
|
position: relative;
|
||||||
|
min-height: 100vh;
|
||||||
|
/* min-height: 100%; */
|
||||||
|
}
|
||||||
|
|
||||||
|
#content-wrap {
|
||||||
|
padding-bottom: 2.5rem; /* Footer height */
|
||||||
|
|
||||||
|
/* display: flex;
|
||||||
|
flex-direction: column;
|
||||||
|
justify-content: center;
|
||||||
|
align-items: center; */
|
||||||
|
/* text-align: center; */
|
||||||
|
}
|
||||||
|
#content {
|
||||||
|
position: absolute;
|
||||||
|
left: 50%;
|
||||||
|
margin-right: -50%;
|
||||||
|
transform: translate(-50%, -50%);
|
||||||
|
}
|
||||||
|
#footer {
|
||||||
|
position: absolute;
|
||||||
|
bottom: 0;
|
||||||
|
width: 100%;
|
||||||
|
height: 2.5rem; /* Footer height */
|
||||||
|
align-items: center;
|
||||||
|
text-align: center;
|
||||||
|
background-color: #000000;
|
||||||
|
}
|
||||||
|
|
||||||
|
h1 {
|
||||||
|
font-size: 60px;
|
||||||
|
text-align: center;
|
||||||
|
color: #fff;
|
||||||
|
}
|
||||||
|
|
||||||
|
h3 {
|
||||||
|
font-size: 30px;
|
||||||
|
/* text-align: center; */
|
||||||
|
color: #567084;
|
||||||
|
}
|
||||||
|
|
||||||
|
h3 a {
|
||||||
|
color: #ef7c16;
|
||||||
|
}
|
||||||
|
|
||||||
|
a {
|
||||||
|
color: #ef7c16;
|
||||||
|
}
|
||||||
|
|
||||||
|
h1 {
|
||||||
|
margin-top: 100px;
|
||||||
|
text-align: center;
|
||||||
|
font-size: 60px;
|
||||||
|
font-family: "Bree Serif", "serif";
|
||||||
|
}
|
||||||
|
|
||||||
|
#header {
|
||||||
|
margin: 0 auto;
|
||||||
|
}
|
||||||
|
|
||||||
|
p {
|
||||||
|
/* text-align: center; */
|
||||||
|
}
|
||||||
|
|
||||||
|
nav {
|
||||||
|
margin: 0 0 50px 0;
|
||||||
|
background-color: #929292;
|
||||||
|
display: flex;
|
||||||
|
flex-direction: column;
|
||||||
|
justify-content: center;
|
||||||
|
align-items: center;
|
||||||
|
}
|
||||||
|
|
||||||
|
nav ul {
|
||||||
|
padding: 0;
|
||||||
|
margin: 0;
|
||||||
|
list-style: none;
|
||||||
|
position: relative;
|
||||||
|
}
|
||||||
|
|
||||||
|
nav ul li {
|
||||||
|
display: inline-block;
|
||||||
|
background-color: #ffffff;
|
||||||
|
}
|
||||||
|
|
||||||
|
nav a {
|
||||||
|
display: block;
|
||||||
|
padding: 0 10px;
|
||||||
|
color: rgb(68, 68, 68);
|
||||||
|
font-size: 20px;
|
||||||
|
line-height: 60px;
|
||||||
|
text-decoration: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
nav a:hover {
|
||||||
|
background-color: #9c9c9c;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Hide Dropdowns by Default */
|
||||||
|
nav ul ul {
|
||||||
|
display: none;
|
||||||
|
position: absolute;
|
||||||
|
top: 60px; /* the height of the main nav */
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Display Dropdowns on Hover */
|
||||||
|
nav ul li:hover > ul {
|
||||||
|
display: inherit;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Fisrt Tier Dropdown */
|
||||||
|
nav ul ul li {
|
||||||
|
width: 170px;
|
||||||
|
float: none;
|
||||||
|
display: list-item;
|
||||||
|
position: relative;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Second, Third and more Tiers */
|
||||||
|
nav ul ul ul li {
|
||||||
|
position: relative;
|
||||||
|
top: -60px;
|
||||||
|
left: 170px;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Change this in order to change the Dropdown symbol */
|
||||||
|
li > a:after {
|
||||||
|
content: " +";
|
||||||
|
}
|
||||||
|
li > a:only-child:after {
|
||||||
|
content: "";
|
||||||
|
}
|
||||||
|
|
||||||
|
.strong {
|
||||||
|
color: #ef7c16;
|
||||||
|
}
|
||||||
44
web_tools/static/web_tools/style/css/734e5f942.min.css
vendored
Normal file
BIN
web_tools/static/web_tools/style/css/MIRRIOrangeNOERIC.png
Normal file
|
After Width: | Height: | Size: 33 KiB |
@ -0,0 +1 @@
|
|||||||
|
.elementor-kit-9{--e-global-color-primary:#ea7118;--e-global-color-secondary:#577186;--e-global-color-text:#595f6e;--e-global-color-accent:#61ce70;--e-global-color-3f3a565:#fff;--e-global-typography-primary-font-family:"Rubik";--e-global-typography-primary-font-size:1rem;--e-global-typography-primary-font-weight:400;--e-global-typography-primary-line-height:1.8em;--e-global-typography-secondary-font-family:"Montserrat";--e-global-typography-secondary-font-weight:500;--e-global-typography-secondary-line-height:1.2em;--e-global-typography-text-font-family:"Rubik";--e-global-typography-text-font-size:1rem;--e-global-typography-text-font-weight:400;--e-global-typography-text-line-height:1.8em;--e-global-typography-accent-font-family:"Roboto";--e-global-typography-accent-font-weight:500;color:var(--e-global-color-secondary);font-family:var(--e-global-typography-primary-font-family),Rubik;font-size:var(--e-global-typography-primary-font-size);font-weight:var(--e-global-typography-primary-font-weight);line-height:var(--e-global-typography-primary-line-height)}.elementor-kit-9 a{font-family:"Montserrat",Rubik;font-weight:500;line-height:1.2em}.elementor-kit-9 h1{color:var(--e-global-color-secondary);font-family:"Montserrat",Rubik;font-weight:400}.elementor-kit-9 button,.elementor-kit-9 input[type=button],.elementor-kit-9 input[type=submit],.elementor-kit-9 .elementor-button{font-family:var(--e-global-typography-primary-font-family),Rubik;font-size:var(--e-global-typography-primary-font-size);font-weight:var(--e-global-typography-primary-font-weight);line-height:var(--e-global-typography-primary-line-height);color:var(--e-global-color-primary);background-color:#fff;border-style:solid;border-color:var(--e-global-color-primary);border-radius:9px;padding:8px}.elementor-kit-9 button:hover,.elementor-kit-9 button:focus,.elementor-kit-9 input[type=button]:hover,.elementor-kit-9 input[type=button]:focus,.elementor-kit-9 input[type=submit]:hover,.elementor-kit-9 input[type=submit]:focus,.elementor-kit-9 .elementor-button:hover,.elementor-kit-9 .elementor-button:focus{color:#fff;background-color:var(--e-global-color-primary)}.elementor-kit-9 label{font-family:var(--e-global-typography-primary-font-family),Rubik;font-size:var(--e-global-typography-primary-font-size);font-weight:var(--e-global-typography-primary-font-weight);line-height:var(--e-global-typography-primary-line-height)}.elementor-kit-9 input:not([type=button]):not([type=submit]),.elementor-kit-9 textarea,.elementor-kit-9 .elementor-field-textual{font-family:var(--e-global-typography-primary-font-family),Rubik;font-size:var(--e-global-typography-primary-font-size);font-weight:var(--e-global-typography-primary-font-weight);line-height:var(--e-global-typography-primary-line-height);border-style:solid;border-color:#0201014D;border-radius:6px;padding:7px}.elementor-section.elementor-section-boxed>.elementor-container{max-width:1140px}.elementor-widget:not(:last-child){margin-bottom:20px}{}h1.entry-title{display:var(--page-title-display)}@media(max-width:1024px){.elementor-kit-9{font-size:var(--e-global-typography-primary-font-size);line-height:var(--e-global-typography-primary-line-height)}.elementor-kit-9 button,.elementor-kit-9 input[type=button],.elementor-kit-9 input[type=submit],.elementor-kit-9 .elementor-button{font-size:var(--e-global-typography-primary-font-size);line-height:var(--e-global-typography-primary-line-height)}.elementor-kit-9 label{font-size:var(--e-global-typography-primary-font-size);line-height:var(--e-global-typography-primary-line-height)}.elementor-kit-9 input:not([type=button]):not([type=submit]),.elementor-kit-9 textarea,.elementor-kit-9 .elementor-field-textual{font-size:var(--e-global-typography-primary-font-size);line-height:var(--e-global-typography-primary-line-height)}.elementor-section.elementor-section-boxed>.elementor-container{max-width:1025px}}@media(max-width:767px){.elementor-kit-9{font-size:var(--e-global-typography-primary-font-size);line-height:var(--e-global-typography-primary-line-height)}.elementor-kit-9 button,.elementor-kit-9 input[type=button],.elementor-kit-9 input[type=submit],.elementor-kit-9 .elementor-button{font-size:var(--e-global-typography-primary-font-size);line-height:var(--e-global-typography-primary-line-height)}.elementor-kit-9 label{font-size:var(--e-global-typography-primary-font-size);line-height:var(--e-global-typography-primary-line-height)}.elementor-kit-9 input:not([type=button]):not([type=submit]),.elementor-kit-9 textarea,.elementor-kit-9 .elementor-field-textual{font-size:var(--e-global-typography-primary-font-size);line-height:var(--e-global-typography-primary-line-height)}.elementor-section.elementor-section-boxed>.elementor-container{max-width:768px}}
|
||||||
@ -0,0 +1 @@
|
|||||||
|
.elementor-1094 .elementor-element.elementor-element-adab34d .elementor-spacer-inner{height:20px}.elementor-1094 .elementor-element.elementor-element-f3c87b8 .elementor-heading-title{color:var(--e-global-color-secondary);font-family:"Rubik",Rubik;font-size:1.3rem;font-weight:600;line-height:1.8em;letter-spacing:0px}.elementor-1094 .elementor-element.elementor-element-f3c87b8>.elementor-widget-container{margin:0}.elementor-1094 .elementor-element.elementor-element-c4057a3 .elementor-heading-title{color:var(--e-global-color-secondary);font-family:"Rubik",Rubik;font-size:1.3rem;font-weight:600;line-height:1.8em;letter-spacing:0px}.elementor-1094 .elementor-element.elementor-element-cfe333f .elementor-text-editor{text-align:justify}.elementor-1094 .elementor-element.elementor-element-0c4ea1a .elementor-heading-title{color:#595f6e;font-family:"Rubik",Rubik;font-size:1rem;font-weight:600;line-height:1.8em;letter-spacing:0px}.elementor-1094 .elementor-element.elementor-element-5f17b5a .elementor-text-editor{text-align:justify}.elementor-1094 .elementor-element.elementor-element-622d409 .elementor-spacer-inner{height:20px}
|
||||||
BIN
web_tools/static/web_tools/style/css/eicons.woff2
Normal file
BIN
web_tools/static/web_tools/style/css/fa-brands-400.woff2
Normal file
BIN
web_tools/static/web_tools/style/css/fa-regular-400.woff2
Normal file
BIN
web_tools/static/web_tools/style/css/fa-solid-900.woff2
Normal file
BIN
web_tools/static/web_tools/style/css/favicon.ico
Normal file
|
After Width: | Height: | Size: 8.9 KiB |
1952
web_tools/static/web_tools/style/css/google-fonts-1.css
Normal file
1952
web_tools/static/web_tools/style/css/google.css
Normal file
BIN
web_tools/static/web_tools/style/css/logo-gray-half-down.png
Normal file
|
After Width: | Height: | Size: 2.0 KiB |
BIN
web_tools/static/web_tools/style/css/logo-gray-half-up.png
Normal file
|
After Width: | Height: | Size: 1.9 KiB |
304
web_tools/static/web_tools/style/css/mec-google-fonts.css
Normal file
@ -0,0 +1,304 @@
|
|||||||
|
/* cyrillic-ext */
|
||||||
|
@font-face {
|
||||||
|
font-family: 'Montserrat';
|
||||||
|
font-style: normal;
|
||||||
|
font-weight: 400;
|
||||||
|
src: url(https://fonts.gstatic.com/s/montserrat/v15/JTUSjIg1_i6t8kCHKm459WRhyzbi.woff2) format('woff2');
|
||||||
|
unicode-range: U+0460-052F, U+1C80-1C88, U+20B4, U+2DE0-2DFF, U+A640-A69F, U+FE2E-FE2F;
|
||||||
|
}
|
||||||
|
/* cyrillic */
|
||||||
|
@font-face {
|
||||||
|
font-family: 'Montserrat';
|
||||||
|
font-style: normal;
|
||||||
|
font-weight: 400;
|
||||||
|
src: url(https://fonts.gstatic.com/s/montserrat/v15/JTUSjIg1_i6t8kCHKm459W1hyzbi.woff2) format('woff2');
|
||||||
|
unicode-range: U+0400-045F, U+0490-0491, U+04B0-04B1, U+2116;
|
||||||
|
}
|
||||||
|
/* vietnamese */
|
||||||
|
@font-face {
|
||||||
|
font-family: 'Montserrat';
|
||||||
|
font-style: normal;
|
||||||
|
font-weight: 400;
|
||||||
|
src: url(https://fonts.gstatic.com/s/montserrat/v15/JTUSjIg1_i6t8kCHKm459WZhyzbi.woff2) format('woff2');
|
||||||
|
unicode-range: U+0102-0103, U+0110-0111, U+0128-0129, U+0168-0169, U+01A0-01A1, U+01AF-01B0, U+1EA0-1EF9, U+20AB;
|
||||||
|
}
|
||||||
|
/* latin-ext */
|
||||||
|
@font-face {
|
||||||
|
font-family: 'Montserrat';
|
||||||
|
font-style: normal;
|
||||||
|
font-weight: 400;
|
||||||
|
src: url(https://fonts.gstatic.com/s/montserrat/v15/JTUSjIg1_i6t8kCHKm459Wdhyzbi.woff2) format('woff2');
|
||||||
|
unicode-range: U+0100-024F, U+0259, U+1E00-1EFF, U+2020, U+20A0-20AB, U+20AD-20CF, U+2113, U+2C60-2C7F, U+A720-A7FF;
|
||||||
|
}
|
||||||
|
/* latin */
|
||||||
|
@font-face {
|
||||||
|
font-family: 'Montserrat';
|
||||||
|
font-style: normal;
|
||||||
|
font-weight: 400;
|
||||||
|
src: url(https://fonts.gstatic.com/s/montserrat/v15/JTUSjIg1_i6t8kCHKm459Wlhyw.woff2) format('woff2');
|
||||||
|
unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+2000-206F, U+2074, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
|
||||||
|
}
|
||||||
|
/* cyrillic-ext */
|
||||||
|
@font-face {
|
||||||
|
font-family: 'Montserrat';
|
||||||
|
font-style: normal;
|
||||||
|
font-weight: 700;
|
||||||
|
src: url(https://fonts.gstatic.com/s/montserrat/v15/JTURjIg1_i6t8kCHKm45_dJE3gTD_u50.woff2) format('woff2');
|
||||||
|
unicode-range: U+0460-052F, U+1C80-1C88, U+20B4, U+2DE0-2DFF, U+A640-A69F, U+FE2E-FE2F;
|
||||||
|
}
|
||||||
|
/* cyrillic */
|
||||||
|
@font-face {
|
||||||
|
font-family: 'Montserrat';
|
||||||
|
font-style: normal;
|
||||||
|
font-weight: 700;
|
||||||
|
src: url(https://fonts.gstatic.com/s/montserrat/v15/JTURjIg1_i6t8kCHKm45_dJE3g3D_u50.woff2) format('woff2');
|
||||||
|
unicode-range: U+0400-045F, U+0490-0491, U+04B0-04B1, U+2116;
|
||||||
|
}
|
||||||
|
/* vietnamese */
|
||||||
|
@font-face {
|
||||||
|
font-family: 'Montserrat';
|
||||||
|
font-style: normal;
|
||||||
|
font-weight: 700;
|
||||||
|
src: url(https://fonts.gstatic.com/s/montserrat/v15/JTURjIg1_i6t8kCHKm45_dJE3gbD_u50.woff2) format('woff2');
|
||||||
|
unicode-range: U+0102-0103, U+0110-0111, U+0128-0129, U+0168-0169, U+01A0-01A1, U+01AF-01B0, U+1EA0-1EF9, U+20AB;
|
||||||
|
}
|
||||||
|
/* latin-ext */
|
||||||
|
@font-face {
|
||||||
|
font-family: 'Montserrat';
|
||||||
|
font-style: normal;
|
||||||
|
font-weight: 700;
|
||||||
|
src: url(https://fonts.gstatic.com/s/montserrat/v15/JTURjIg1_i6t8kCHKm45_dJE3gfD_u50.woff2) format('woff2');
|
||||||
|
unicode-range: U+0100-024F, U+0259, U+1E00-1EFF, U+2020, U+20A0-20AB, U+20AD-20CF, U+2113, U+2C60-2C7F, U+A720-A7FF;
|
||||||
|
}
|
||||||
|
/* latin */
|
||||||
|
@font-face {
|
||||||
|
font-family: 'Montserrat';
|
||||||
|
font-style: normal;
|
||||||
|
font-weight: 700;
|
||||||
|
src: url(https://fonts.gstatic.com/s/montserrat/v15/JTURjIg1_i6t8kCHKm45_dJE3gnD_g.woff2) format('woff2');
|
||||||
|
unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+2000-206F, U+2074, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
|
||||||
|
}
|
||||||
|
/* cyrillic-ext */
|
||||||
|
@font-face {
|
||||||
|
font-family: 'Roboto';
|
||||||
|
font-style: normal;
|
||||||
|
font-weight: 100;
|
||||||
|
src: url(https://fonts.gstatic.com/s/roboto/v20/KFOkCnqEu92Fr1MmgVxFIzIFKw.woff2) format('woff2');
|
||||||
|
unicode-range: U+0460-052F, U+1C80-1C88, U+20B4, U+2DE0-2DFF, U+A640-A69F, U+FE2E-FE2F;
|
||||||
|
}
|
||||||
|
/* cyrillic */
|
||||||
|
@font-face {
|
||||||
|
font-family: 'Roboto';
|
||||||
|
font-style: normal;
|
||||||
|
font-weight: 100;
|
||||||
|
src: url(https://fonts.gstatic.com/s/roboto/v20/KFOkCnqEu92Fr1MmgVxMIzIFKw.woff2) format('woff2');
|
||||||
|
unicode-range: U+0400-045F, U+0490-0491, U+04B0-04B1, U+2116;
|
||||||
|
}
|
||||||
|
/* greek-ext */
|
||||||
|
@font-face {
|
||||||
|
font-family: 'Roboto';
|
||||||
|
font-style: normal;
|
||||||
|
font-weight: 100;
|
||||||
|
src: url(https://fonts.gstatic.com/s/roboto/v20/KFOkCnqEu92Fr1MmgVxEIzIFKw.woff2) format('woff2');
|
||||||
|
unicode-range: U+1F00-1FFF;
|
||||||
|
}
|
||||||
|
/* greek */
|
||||||
|
@font-face {
|
||||||
|
font-family: 'Roboto';
|
||||||
|
font-style: normal;
|
||||||
|
font-weight: 100;
|
||||||
|
src: url(https://fonts.gstatic.com/s/roboto/v20/KFOkCnqEu92Fr1MmgVxLIzIFKw.woff2) format('woff2');
|
||||||
|
unicode-range: U+0370-03FF;
|
||||||
|
}
|
||||||
|
/* vietnamese */
|
||||||
|
@font-face {
|
||||||
|
font-family: 'Roboto';
|
||||||
|
font-style: normal;
|
||||||
|
font-weight: 100;
|
||||||
|
src: url(https://fonts.gstatic.com/s/roboto/v20/KFOkCnqEu92Fr1MmgVxHIzIFKw.woff2) format('woff2');
|
||||||
|
unicode-range: U+0102-0103, U+0110-0111, U+0128-0129, U+0168-0169, U+01A0-01A1, U+01AF-01B0, U+1EA0-1EF9, U+20AB;
|
||||||
|
}
|
||||||
|
/* latin-ext */
|
||||||
|
@font-face {
|
||||||
|
font-family: 'Roboto';
|
||||||
|
font-style: normal;
|
||||||
|
font-weight: 100;
|
||||||
|
src: url(https://fonts.gstatic.com/s/roboto/v20/KFOkCnqEu92Fr1MmgVxGIzIFKw.woff2) format('woff2');
|
||||||
|
unicode-range: U+0100-024F, U+0259, U+1E00-1EFF, U+2020, U+20A0-20AB, U+20AD-20CF, U+2113, U+2C60-2C7F, U+A720-A7FF;
|
||||||
|
}
|
||||||
|
/* latin */
|
||||||
|
@font-face {
|
||||||
|
font-family: 'Roboto';
|
||||||
|
font-style: normal;
|
||||||
|
font-weight: 100;
|
||||||
|
src: url(https://fonts.gstatic.com/s/roboto/v20/KFOkCnqEu92Fr1MmgVxIIzI.woff2) format('woff2');
|
||||||
|
unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+2000-206F, U+2074, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
|
||||||
|
}
|
||||||
|
/* cyrillic-ext */
|
||||||
|
@font-face {
|
||||||
|
font-family: 'Roboto';
|
||||||
|
font-style: normal;
|
||||||
|
font-weight: 300;
|
||||||
|
src: url(https://fonts.gstatic.com/s/roboto/v20/KFOlCnqEu92Fr1MmSU5fCRc4EsA.woff2) format('woff2');
|
||||||
|
unicode-range: U+0460-052F, U+1C80-1C88, U+20B4, U+2DE0-2DFF, U+A640-A69F, U+FE2E-FE2F;
|
||||||
|
}
|
||||||
|
/* cyrillic */
|
||||||
|
@font-face {
|
||||||
|
font-family: 'Roboto';
|
||||||
|
font-style: normal;
|
||||||
|
font-weight: 300;
|
||||||
|
src: url(https://fonts.gstatic.com/s/roboto/v20/KFOlCnqEu92Fr1MmSU5fABc4EsA.woff2) format('woff2');
|
||||||
|
unicode-range: U+0400-045F, U+0490-0491, U+04B0-04B1, U+2116;
|
||||||
|
}
|
||||||
|
/* greek-ext */
|
||||||
|
@font-face {
|
||||||
|
font-family: 'Roboto';
|
||||||
|
font-style: normal;
|
||||||
|
font-weight: 300;
|
||||||
|
src: url(https://fonts.gstatic.com/s/roboto/v20/KFOlCnqEu92Fr1MmSU5fCBc4EsA.woff2) format('woff2');
|
||||||
|
unicode-range: U+1F00-1FFF;
|
||||||
|
}
|
||||||
|
/* greek */
|
||||||
|
@font-face {
|
||||||
|
font-family: 'Roboto';
|
||||||
|
font-style: normal;
|
||||||
|
font-weight: 300;
|
||||||
|
src: url(https://fonts.gstatic.com/s/roboto/v20/KFOlCnqEu92Fr1MmSU5fBxc4EsA.woff2) format('woff2');
|
||||||
|
unicode-range: U+0370-03FF;
|
||||||
|
}
|
||||||
|
/* vietnamese */
|
||||||
|
@font-face {
|
||||||
|
font-family: 'Roboto';
|
||||||
|
font-style: normal;
|
||||||
|
font-weight: 300;
|
||||||
|
src: url(https://fonts.gstatic.com/s/roboto/v20/KFOlCnqEu92Fr1MmSU5fCxc4EsA.woff2) format('woff2');
|
||||||
|
unicode-range: U+0102-0103, U+0110-0111, U+0128-0129, U+0168-0169, U+01A0-01A1, U+01AF-01B0, U+1EA0-1EF9, U+20AB;
|
||||||
|
}
|
||||||
|
/* latin-ext */
|
||||||
|
@font-face {
|
||||||
|
font-family: 'Roboto';
|
||||||
|
font-style: normal;
|
||||||
|
font-weight: 300;
|
||||||
|
src: url(https://fonts.gstatic.com/s/roboto/v20/KFOlCnqEu92Fr1MmSU5fChc4EsA.woff2) format('woff2');
|
||||||
|
unicode-range: U+0100-024F, U+0259, U+1E00-1EFF, U+2020, U+20A0-20AB, U+20AD-20CF, U+2113, U+2C60-2C7F, U+A720-A7FF;
|
||||||
|
}
|
||||||
|
/* latin */
|
||||||
|
@font-face {
|
||||||
|
font-family: 'Roboto';
|
||||||
|
font-style: normal;
|
||||||
|
font-weight: 300;
|
||||||
|
src: url(https://fonts.gstatic.com/s/roboto/v20/KFOlCnqEu92Fr1MmSU5fBBc4.woff2) format('woff2');
|
||||||
|
unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+2000-206F, U+2074, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
|
||||||
|
}
|
||||||
|
/* cyrillic-ext */
|
||||||
|
@font-face {
|
||||||
|
font-family: 'Roboto';
|
||||||
|
font-style: normal;
|
||||||
|
font-weight: 400;
|
||||||
|
src: url(https://fonts.gstatic.com/s/roboto/v20/KFOmCnqEu92Fr1Mu72xKOzY.woff2) format('woff2');
|
||||||
|
unicode-range: U+0460-052F, U+1C80-1C88, U+20B4, U+2DE0-2DFF, U+A640-A69F, U+FE2E-FE2F;
|
||||||
|
}
|
||||||
|
/* cyrillic */
|
||||||
|
@font-face {
|
||||||
|
font-family: 'Roboto';
|
||||||
|
font-style: normal;
|
||||||
|
font-weight: 400;
|
||||||
|
src: url(https://fonts.gstatic.com/s/roboto/v20/KFOmCnqEu92Fr1Mu5mxKOzY.woff2) format('woff2');
|
||||||
|
unicode-range: U+0400-045F, U+0490-0491, U+04B0-04B1, U+2116;
|
||||||
|
}
|
||||||
|
/* greek-ext */
|
||||||
|
@font-face {
|
||||||
|
font-family: 'Roboto';
|
||||||
|
font-style: normal;
|
||||||
|
font-weight: 400;
|
||||||
|
src: url(https://fonts.gstatic.com/s/roboto/v20/KFOmCnqEu92Fr1Mu7mxKOzY.woff2) format('woff2');
|
||||||
|
unicode-range: U+1F00-1FFF;
|
||||||
|
}
|
||||||
|
/* greek */
|
||||||
|
@font-face {
|
||||||
|
font-family: 'Roboto';
|
||||||
|
font-style: normal;
|
||||||
|
font-weight: 400;
|
||||||
|
src: url(https://fonts.gstatic.com/s/roboto/v20/KFOmCnqEu92Fr1Mu4WxKOzY.woff2) format('woff2');
|
||||||
|
unicode-range: U+0370-03FF;
|
||||||
|
}
|
||||||
|
/* vietnamese */
|
||||||
|
@font-face {
|
||||||
|
font-family: 'Roboto';
|
||||||
|
font-style: normal;
|
||||||
|
font-weight: 400;
|
||||||
|
src: url(https://fonts.gstatic.com/s/roboto/v20/KFOmCnqEu92Fr1Mu7WxKOzY.woff2) format('woff2');
|
||||||
|
unicode-range: U+0102-0103, U+0110-0111, U+0128-0129, U+0168-0169, U+01A0-01A1, U+01AF-01B0, U+1EA0-1EF9, U+20AB;
|
||||||
|
}
|
||||||
|
/* latin-ext */
|
||||||
|
@font-face {
|
||||||
|
font-family: 'Roboto';
|
||||||
|
font-style: normal;
|
||||||
|
font-weight: 400;
|
||||||
|
src: url(https://fonts.gstatic.com/s/roboto/v20/KFOmCnqEu92Fr1Mu7GxKOzY.woff2) format('woff2');
|
||||||
|
unicode-range: U+0100-024F, U+0259, U+1E00-1EFF, U+2020, U+20A0-20AB, U+20AD-20CF, U+2113, U+2C60-2C7F, U+A720-A7FF;
|
||||||
|
}
|
||||||
|
/* latin */
|
||||||
|
@font-face {
|
||||||
|
font-family: 'Roboto';
|
||||||
|
font-style: normal;
|
||||||
|
font-weight: 400;
|
||||||
|
src: url(https://fonts.gstatic.com/s/roboto/v20/KFOmCnqEu92Fr1Mu4mxK.woff2) format('woff2');
|
||||||
|
unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+2000-206F, U+2074, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
|
||||||
|
}
|
||||||
|
/* cyrillic-ext */
|
||||||
|
@font-face {
|
||||||
|
font-family: 'Roboto';
|
||||||
|
font-style: normal;
|
||||||
|
font-weight: 700;
|
||||||
|
src: url(https://fonts.gstatic.com/s/roboto/v20/KFOlCnqEu92Fr1MmWUlfCRc4EsA.woff2) format('woff2');
|
||||||
|
unicode-range: U+0460-052F, U+1C80-1C88, U+20B4, U+2DE0-2DFF, U+A640-A69F, U+FE2E-FE2F;
|
||||||
|
}
|
||||||
|
/* cyrillic */
|
||||||
|
@font-face {
|
||||||
|
font-family: 'Roboto';
|
||||||
|
font-style: normal;
|
||||||
|
font-weight: 700;
|
||||||
|
src: url(https://fonts.gstatic.com/s/roboto/v20/KFOlCnqEu92Fr1MmWUlfABc4EsA.woff2) format('woff2');
|
||||||
|
unicode-range: U+0400-045F, U+0490-0491, U+04B0-04B1, U+2116;
|
||||||
|
}
|
||||||
|
/* greek-ext */
|
||||||
|
@font-face {
|
||||||
|
font-family: 'Roboto';
|
||||||
|
font-style: normal;
|
||||||
|
font-weight: 700;
|
||||||
|
src: url(https://fonts.gstatic.com/s/roboto/v20/KFOlCnqEu92Fr1MmWUlfCBc4EsA.woff2) format('woff2');
|
||||||
|
unicode-range: U+1F00-1FFF;
|
||||||
|
}
|
||||||
|
/* greek */
|
||||||
|
@font-face {
|
||||||
|
font-family: 'Roboto';
|
||||||
|
font-style: normal;
|
||||||
|
font-weight: 700;
|
||||||
|
src: url(https://fonts.gstatic.com/s/roboto/v20/KFOlCnqEu92Fr1MmWUlfBxc4EsA.woff2) format('woff2');
|
||||||
|
unicode-range: U+0370-03FF;
|
||||||
|
}
|
||||||
|
/* vietnamese */
|
||||||
|
@font-face {
|
||||||
|
font-family: 'Roboto';
|
||||||
|
font-style: normal;
|
||||||
|
font-weight: 700;
|
||||||
|
src: url(https://fonts.gstatic.com/s/roboto/v20/KFOlCnqEu92Fr1MmWUlfCxc4EsA.woff2) format('woff2');
|
||||||
|
unicode-range: U+0102-0103, U+0110-0111, U+0128-0129, U+0168-0169, U+01A0-01A1, U+01AF-01B0, U+1EA0-1EF9, U+20AB;
|
||||||
|
}
|
||||||
|
/* latin-ext */
|
||||||
|
@font-face {
|
||||||
|
font-family: 'Roboto';
|
||||||
|
font-style: normal;
|
||||||
|
font-weight: 700;
|
||||||
|
src: url(https://fonts.gstatic.com/s/roboto/v20/KFOlCnqEu92Fr1MmWUlfChc4EsA.woff2) format('woff2');
|
||||||
|
unicode-range: U+0100-024F, U+0259, U+1E00-1EFF, U+2020, U+20A0-20AB, U+20AD-20CF, U+2113, U+2C60-2C7F, U+A720-A7FF;
|
||||||
|
}
|
||||||
|
/* latin */
|
||||||
|
@font-face {
|
||||||
|
font-family: 'Roboto';
|
||||||
|
font-style: normal;
|
||||||
|
font-weight: 700;
|
||||||
|
src: url(https://fonts.gstatic.com/s/roboto/v20/KFOlCnqEu92Fr1MmWUlfBBc4.woff2) format('woff2');
|
||||||
|
unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+2000-206F, U+2074, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
|
||||||
|
}
|
||||||
BIN
web_tools/static/web_tools/style/css/mirri_logo-1.png
Normal file
|
After Width: | Height: | Size: 34 KiB |
26
web_tools/static/web_tools/style_custom.css
Normal file
@ -0,0 +1,26 @@
|
|||||||
|
.error_table {
|
||||||
|
font-family: Arial, Helvetica, sans-serif;
|
||||||
|
width: 100%;
|
||||||
|
}
|
||||||
|
|
||||||
|
.error_table tr th{
|
||||||
|
font-weight: bold;
|
||||||
|
border: 5px solid black;
|
||||||
|
padding-top: 12px;
|
||||||
|
padding-bottom: 12px;
|
||||||
|
text-align: left;
|
||||||
|
background-color: #838383;
|
||||||
|
}
|
||||||
|
|
||||||
|
.error_table tr td {
|
||||||
|
border: 1px solid #ddd;
|
||||||
|
padding: 8px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.error_table tr:nth-child(even){background-color: #525252;}
|
||||||
|
|
||||||
|
.error_table tr:hover {background-color: #ddd;}
|
||||||
|
|
||||||
|
.strong {
|
||||||
|
font-weight: bold;
|
||||||
|
}
|
||||||
BIN
web_tools/static/web_tools/validator.png
Normal file
|
After Width: | Height: | Size: 82 KiB |
797
web_tools/templates/base.bak.html
Normal file
@ -0,0 +1,797 @@
|
|||||||
|
{% load static %}
|
||||||
|
<!DOCTYPE html>
|
||||||
|
|
||||||
|
<head>
|
||||||
|
<title>{% block title %}{% endblock %}</title>
|
||||||
|
<link media="all" href="{% static 'web_tools/style/css/autoptimize_a5a452a287dfdad5a08bd44d3a6e3d3e.css' %}" rel="stylesheet">
|
||||||
|
<title>Tools – MIRRI</title>
|
||||||
|
<link href="https://dev.mirri.org/wp-content/plugins/elementor/assets/lib/font-awesome/webfonts/fa-solid-900.woff2"
|
||||||
|
rel="preload" as="font" type="font/woff" >
|
||||||
|
<link href="https://dev.mirri.org/wp-content/plugins/elementor/assets/lib/eicons/fonts/eicons.woff2?5.9.1"
|
||||||
|
rel="preload" as="font" type="font/woff" >
|
||||||
|
<link href="https://dev.mirri.org/wp-content/plugins/elementor/assets/lib/font-awesome/webfonts/fa-brands-400.woff2"
|
||||||
|
rel="preload" as="font" type="font/woff" >
|
||||||
|
<link href="https://fonts.googleapis.com/" rel="preconnect" >
|
||||||
|
<link href="https://platform.twitter.com/" rel="preconnect">
|
||||||
|
<link href="https://fonts.gstatic.com/" rel="preconnect" >
|
||||||
|
<link href="https://cdn.syndication.twimg.com/" rel="preconnect">
|
||||||
|
<link href="https://ton.twimg.com/" rel="preconnect">
|
||||||
|
|
||||||
|
<link rel="stylesheet" id="mec-google-fonts-css" href="{% static 'web_tools/style/css/mec-google-fonts.css' %}" type="text/css" media="all">
|
||||||
|
<link rel="stylesheet" id="ed6ad5db9-css" href="{% static 'web_tools/style/css/734e5f942.min.css' %}" type="text/css" media="all">
|
||||||
|
<link rel="stylesheet" id="jupiterx-css" href="{% static 'web_tools/style/css/autoptimize_single_b9367e9f84eff03e58726166b24efc47.css' %}"
|
||||||
|
type="text/css" media="all">
|
||||||
|
<link rel="stylesheet" id="elementor-post-9-css"
|
||||||
|
href="{% static 'web_tools/style/css/autoptimize_single_ea224e3b8c1f3012917acba775bec7fa.css' %}" type="text/css" media="all">
|
||||||
|
<link rel="stylesheet" id="elementor-global-css"
|
||||||
|
href="{% static 'web_tools/style/css/autoptimize_single_d18cd62a07caca04e97f6984ad6fee0b.css' %}" type="text/css" media="all">
|
||||||
|
<link rel="stylesheet" id="elementor-post-1094-css"
|
||||||
|
href="{% static 'web_tools/style/css/autoptimize_single_fdebd036a6c313b7d17a4571c3a641ff.css' %}" type="text/css" media="all">
|
||||||
|
<link rel="stylesheet" id="elementor-post-2253-css"
|
||||||
|
href="{% static 'web_tools/style/css/autoptimize_single_79ccae64b30dcad1e8ae5d5d0add8420.css' %}" type="text/css" media="all">
|
||||||
|
<link rel="stylesheet" id="elementor-post-495-css"
|
||||||
|
href="{% static 'web_tools/style/css/autoptimize_single_6bf9e265fba73a1fdb8ab28503184d4b.css' %}" type="text/css" media="all">
|
||||||
|
<link rel="stylesheet" id="elementor-post-13-css"
|
||||||
|
href="{% static 'web_tools/style/css/autoptimize_single_3fdc936d7e88fb9e46a15ddaefdd061a.css' %}" type="text/css" media="all">
|
||||||
|
<link rel="stylesheet" id="google-fonts-1-css" href="{% static 'web_tools/style/css/google-fonts-1.css' %}" type="text/css" media="all">
|
||||||
|
|
||||||
|
|
||||||
|
<link rel="stylesheet" id="elementor-post-879-css" href="{% static 'web_tools/style/css/autoptimize_single_0bdcd8bf82c379b3ec901a408c1117eb.css' %}" type="text/css" media="all">
|
||||||
|
|
||||||
|
<script src="{% static 'web_tools/style/css/wp-emoji-release.min.js.transferir' %}" type="text/javascript"></script>
|
||||||
|
<script src="{% static 'web_tools/style/css/jquery.min.js.transferir' %}" type="text/javascript"></script>
|
||||||
|
|
||||||
|
<script data-noptimize="1">window.lazySizesConfig = window.lazySizesConfig || {}; window.lazySizesConfig.loadMode = 1;</script>
|
||||||
|
<script async="" data-noptimize="1" src="{% static 'web_tools/style/css/lazysizes.min.js.transferir' %}"></script>
|
||||||
|
<script type="text/javascript" id="jquery-ui-datepicker-js-after">jQuery(document).ready(function (jQuery) { jQuery.datepicker.setDefaults({ "closeText": "Close", "currentText": "Today", "monthNames": ["January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December"], "monthNamesShort": ["Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"], "nextText": "Next", "prevText": "Previous", "dayNames": ["Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"], "dayNamesShort": ["Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat"], "dayNamesMin": ["S", "M", "T", "W", "T", "F", "S"], "dateFormat": "d \\dd\\e MM \\dd\\e yy", "firstDay": 1, "isRTL": false }); });</script>
|
||||||
|
<script type="text/javascript" id="ed6ad5db9-js-extra">var localize = { "ajaxurl": "https:\/\/dev.mirri.org\/wp-admin\/admin-ajax.php", "nonce": "077dae69bc", "i18n": { "added": "Added ", "compare": "Compare", "loading": "Loading..." } };</script>
|
||||||
|
<script type="text/javascript" id="ivory-search-scripts-js-extra">var IvorySearchVars = { "is_analytics_enabled": "1" };</script>
|
||||||
|
<script type="text/javascript" id="elementor-frontend-js-before">var elementorFrontendConfig = { "environmentMode": { "edit": false, "wpPreview": false }, "i18n": { "shareOnFacebook": "Share on Facebook", "shareOnTwitter": "Share on Twitter", "pinIt": "Pin it", "download": "Download", "downloadImage": "Download image", "fullscreen": "Fullscreen", "zoom": "Zoom", "share": "Share", "playVideo": "Play Video", "previous": "Previous", "next": "Next", "close": "Close" }, "is_rtl": false, "breakpoints": { "xs": 0, "sm": 480, "md": 768, "lg": 1025, "xl": 1440, "xxl": 1600 }, "version": "3.0.14", "is_static": false, "legacyMode": { "elementWrappers": true }, "urls": { "assets": "https:\/\/dev.mirri.org\/wp-content\/plugins\/elementor\/assets\/" }, "settings": { "page": [], "editorPreferences": [] }, "kit": { "global_image_lightbox": "yes", "lightbox_enable_counter": "yes", "lightbox_enable_fullscreen": "yes", "lightbox_enable_zoom": "yes", "lightbox_enable_share": "yes", "lightbox_title_src": "title", "lightbox_description_src": "description" }, "post": { "id": 1094, "title": "Expert%20Clusters%20%E2%80%93%20MIRRI", "excerpt": "", "featuredImage": false } };</script>
|
||||||
|
<script type="text/javascript" id="jet-elements-js-extra">var jetElements = { "ajaxUrl": "https:\/\/dev.mirri.org\/wp-admin\/admin-ajax.php", "isMobile": "false", "templateApiUrl": "https:\/\/dev.mirri.org\/index.php?rest_route=\/jet-elements-api\/v1\/elementor-template", "devMode": "false", "messages": { "invalidMail": "Please specify a valid e-mail" } };</script>
|
||||||
|
<script type="text/javascript" id="jet-tabs-frontend-js-extra">var JetTabsSettings = { "ajaxurl": "https:\/\/dev.mirri.org\/wp-admin\/admin-ajax.php", "isMobile": "false", "templateApiUrl": "https:\/\/dev.mirri.org\/index.php?rest_route=\/jet-tabs-api\/v1\/elementor-template", "devMode": "false" };</script>
|
||||||
|
<script type="text/javascript" id="wp-util-js-extra">var _wpUtilSettings = { "ajax": { "url": "\/wp-admin\/admin-ajax.php" } };</script>
|
||||||
|
<script type="text/javascript" id="jupiterx-core-raven-frontend-js-extra">var ravenFormsTranslations = { "validation": { "required": "Please fill in this field", "invalidEmail": "The value is not a valid email address", "invalidPhone": "The value should only consist numbers and phone characters (-, +, (), etc)", "invalidNumber": "The value is not a valid number", "invalidMaxValue": "Value must be less than or equal to MAX_VALUE", "invalidMinValue": "Value must be greater than or equal to MIN_VALUE" } };</script>
|
||||||
|
<script type="text/javascript" id="jet-blog-js-extra">var JetBlogSettings = { "ajaxurl": "https:\/\/dev.mirri.org\/wp-admin\/admin-ajax.php" };</script>
|
||||||
|
<script type="text/javascript" id="jet-engine-frontend-js-extra">var JetEngineSettings = { "ajaxurl": "https:\/\/dev.mirri.org\/wp-admin\/admin-ajax.php", "mapPopupTimeout": "400" };</script>
|
||||||
|
<script type="text/javascript">(function () { document.body.className = document.body.className.replace('no-js', 'js'); }());</script>
|
||||||
|
<script defer="" src="{% static 'web_tools/style/css/autoptimize_b879e7e20b057357a98e10b516b0270a.js.transferir' %}"></script>
|
||||||
|
<script defer="" src="{% static 'web_tools/style_custom.css' %}"></script>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
</head>
|
||||||
|
|
||||||
|
<body
|
||||||
|
class="page-template page-template-elementor_header_footer page page-id-1094 js jupiterx elementor-default elementor-kit-9 elementor-page elementor-page-1094 jupiterx-header-sticky">
|
||||||
|
<div class="jupiterx-site">
|
||||||
|
<header class="jupiterx-header jupiterx-header-custom jupiterx-header-sticky-custom"
|
||||||
|
data-jupiterx-settings="{"breakpoint":"767.98","template":"2253","stickyTemplate":"495","behavior":"sticky","offset":"250"}"
|
||||||
|
role="banner" itemscope="itemscope" itemtype="http://schema.org/WPHeader">
|
||||||
|
|
||||||
|
<!--Normal Menu Start-->
|
||||||
|
<div data-elementor-type="header" data-elementor-id="2253" class="elementor elementor-2253"
|
||||||
|
data-elementor-settings="[]">
|
||||||
|
<div class="elementor-inner">
|
||||||
|
<div class="elementor-section-wrap">
|
||||||
|
<section
|
||||||
|
class="elementor-section elementor-top-section elementor-element elementor-element-70b213e8 elementor-section-full_width elementor-section-height-default elementor-section-height-default"
|
||||||
|
data-id="70b213e8" data-element_type="section"
|
||||||
|
data-settings="{"background_background":"classic","animation":"none"}">
|
||||||
|
<div class="elementor-background-overlay"></div>
|
||||||
|
<div class="elementor-container elementor-column-gap-default">
|
||||||
|
<div class="elementor-row">
|
||||||
|
<div class="elementor-column elementor-col-100 elementor-top-column elementor-element elementor-element-75058f60"
|
||||||
|
data-id="75058f60" data-element_type="column">
|
||||||
|
<div class="elementor-column-wrap elementor-element-populated">
|
||||||
|
<div class="elementor-widget-wrap">
|
||||||
|
<div class="elementor-element elementor-element-6bd950f6 elementor-widget elementor-widget-raven-site-logo"
|
||||||
|
data-id="6bd950f6" data-element_type="widget"
|
||||||
|
data-widget_type="raven-site-logo.default">
|
||||||
|
<div class="elementor-widget-container">
|
||||||
|
<div class="raven-widget-wrapper">
|
||||||
|
<div class="raven-site-logo">
|
||||||
|
<a class="raven-site-logo-link"
|
||||||
|
href="https://dev.mirri.org/"> <img
|
||||||
|
src="{% static 'web_tools/style/css/mirri_logo-1.png' %}" alt="MIRRI"
|
||||||
|
class="raven-site-logo-desktop raven-site-logo-mobile"
|
||||||
|
data-no-lazy="1"> <img
|
||||||
|
src="{% static 'web_tools/style/css/MIRRIOrangeNOERIC.png' %}" alt="MIRRI"
|
||||||
|
class="raven-site-logo-tablet" data-no-lazy="1">
|
||||||
|
</a></div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="elementor-element elementor-element-37ff9932 elementor-widget elementor-widget-spacer"
|
||||||
|
data-id="37ff9932" data-element_type="widget"
|
||||||
|
data-widget_type="spacer.default">
|
||||||
|
<div class="elementor-widget-container">
|
||||||
|
<div class="elementor-spacer">
|
||||||
|
<div class="elementor-spacer-inner"></div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="elementor-element elementor-element-6a8a5e2f raven-breakpoint-tablet raven-nav-menu-align-center raven-nav-menu-stretch elementor-widget elementor-widget-raven-nav-menu"
|
||||||
|
data-id="6a8a5e2f" data-element_type="widget"
|
||||||
|
data-settings="{"submenu_space_between":{"unit":"px","size":15,"sizes":[]},"full_width":"stretch","mobile_layout":"dropdown","submenu_opening_position":"bottom"}"
|
||||||
|
data-widget_type="raven-nav-menu.default">
|
||||||
|
<div class="elementor-widget-container">
|
||||||
|
|
||||||
|
<!-- Browser Menu Init-->
|
||||||
|
<nav
|
||||||
|
class="raven-nav-menu-main raven-nav-menu-horizontal raven-nav-menu-tablet-horizontal raven-nav-menu-mobile-horizontal raven-nav-icons-hidden-tablet raven-nav-icons-hidden-mobile">
|
||||||
|
<ul id="menu-6a8a5e2f" class="raven-nav-menu"
|
||||||
|
data-smartmenus-id="16143429460421392">
|
||||||
|
<li
|
||||||
|
class="menu-item menu-item-type-post_type menu-item-object-page menu-item-home menu-item-72">
|
||||||
|
<a href="/" class="raven-menu-item raven-link-item raven-menu-item-active">
|
||||||
|
Home
|
||||||
|
</a>
|
||||||
|
</li>
|
||||||
|
<li
|
||||||
|
class="menu-item menu-item-type-post_type menu-item-object-page menu-item-has-children menu-item-675">
|
||||||
|
<a href="/tools/" class="raven-menu-item raven-link-item has-submenu"
|
||||||
|
id="sm-16143429460421392-1" aria-haspopup="true" aria-controls="sm-16143429460421392-2" aria-expanded="false">
|
||||||
|
Tools
|
||||||
|
<span class="sub-arrow"></span>
|
||||||
|
</a>
|
||||||
|
<ul class="0 sub-menu raven-submenu" id="sm-16143429460421392-2" role="group"
|
||||||
|
aria-hidden="true" aria-labelledby="sm-16143429460421392-1" aria-expanded="false">
|
||||||
|
<li
|
||||||
|
class="menu-item menu-item-type-post_type menu-item-object-page menu-item-3931">
|
||||||
|
<a href="/tools/validator/" class="raven-submenu-item raven-link-item ">
|
||||||
|
Excel Validator
|
||||||
|
</a>
|
||||||
|
</li>
|
||||||
|
<li
|
||||||
|
class="menu-item menu-item-type-post_type menu-item-object-page menu-item-has-children menu-item-1238">
|
||||||
|
<a href="https://tools.mirri.org" class="raven-submenu-item raven-link-item has-submenu"
|
||||||
|
id="sm-16143429460421392-3" aria-haspopup="true" aria-controls="sm-16143429460421392-4" aria-expanded="false">
|
||||||
|
Level 1
|
||||||
|
<span class="sub-arrow"></span>
|
||||||
|
</a>
|
||||||
|
<ul class="1 sub-menu raven-submenu" id="sm-16143429460421392-4" role="group"
|
||||||
|
aria-hidden="true" aria-labelledby="sm-16143429460421392-3" aria-expanded="false">
|
||||||
|
<li
|
||||||
|
class="menu-item menu-item-type-post_type menu-item-object-page menu-item-1267">
|
||||||
|
<a href="https://tools.mirri.org" class="raven-submenu-item raven-link-item ">
|
||||||
|
Level 2
|
||||||
|
</a>
|
||||||
|
</li>
|
||||||
|
<li
|
||||||
|
class="menu-item menu-item-type-post_type menu-item-object-page menu-item-1266">
|
||||||
|
<a href="https://tools.mirri.org" class="raven-submenu-item raven-link-item ">
|
||||||
|
Level 2
|
||||||
|
</a>
|
||||||
|
</li>
|
||||||
|
</ul>
|
||||||
|
</li>
|
||||||
|
</ul>
|
||||||
|
</li>
|
||||||
|
</ul>
|
||||||
|
</nav>
|
||||||
|
<!-- Browser Menu End-->
|
||||||
|
|
||||||
|
<div class="raven-nav-menu-toggle">
|
||||||
|
<div class="raven-nav-menu-toggle-button ">
|
||||||
|
<span class="fa fa-bars"></span>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<!-- Tablet Menu Init-->
|
||||||
|
<nav class="raven-nav-icons-hidden-tablet raven-nav-icons-hidden-mobile raven-nav-menu-mobile raven-nav-menu-dropdown" style="max-height: 912px; width: 1903px; left: 0px; top: 159.688px;">
|
||||||
|
<div class="raven-container" style="max-width: 1903px;">
|
||||||
|
<ul id="menu-mobile-6a8a5e2f" class="raven-nav-menu" data-smartmenus-id="16143429460474102">
|
||||||
|
<li class="menu-item menu-item-type-post_type menu-item-object-page menu-item-home menu-item-72">
|
||||||
|
<a href="/" class="raven-menu-item raven-link-item raven-menu-item-active">
|
||||||
|
Home
|
||||||
|
</a>
|
||||||
|
</li>
|
||||||
|
<li class="menu-item menu-item-type-post_type menu-item-object-page menu-item-has-children menu-item-675">
|
||||||
|
<a href="/tools/" class="raven-menu-item raven-link-item has-submenu" id="sm-16143429460474102-1" aria-haspopup="true" aria-controls="sm-16143429460474102-2" aria-expanded="false">
|
||||||
|
Tools
|
||||||
|
<span class="sub-arrow"></span>
|
||||||
|
</a>
|
||||||
|
<ul class="0 sub-menu raven-submenu" id="sm-16143429460474102-2" role="group" aria-hidden="true" aria-labelledby="sm-16143429460474102-1" aria-expanded="false">
|
||||||
|
<li class="menu-item menu-item-type-post_type menu-item-object-page menu-item-3931">
|
||||||
|
<a href="/tools/validator/" class="raven-submenu-item raven-link-item ">
|
||||||
|
Excel Validator
|
||||||
|
</a>
|
||||||
|
</li>
|
||||||
|
<li class="menu-item menu-item-type-post_type menu-item-object-page menu-item-has-children menu-item-1238">
|
||||||
|
<a href="https://tools.mirri.org" class="raven-submenu-item raven-link-item has-submenu"
|
||||||
|
id="sm-16143429460474102-3" aria-haspopup="true" aria-controls="sm-16143429460474102-4" aria-expanded="false">
|
||||||
|
Level 1
|
||||||
|
<span class="sub-arrow"></span>
|
||||||
|
</a>
|
||||||
|
<ul class="1 sub-menu raven-submenu" id="sm-16143429460474102-4" role="group" aria-hidden="true" aria-labelledby="sm-16143429460474102-3" aria-expanded="false">
|
||||||
|
<li class="menu-item menu-item-type-post_type menu-item-object-page menu-item-1267">
|
||||||
|
<a href="https://tools.mirri.org" class="raven-submenu-item raven-link-item ">
|
||||||
|
Level 2
|
||||||
|
</a>
|
||||||
|
</li>
|
||||||
|
<li class="menu-item menu-item-type-post_type menu-item-object-page menu-item-1266">
|
||||||
|
<a href="https://tools.mirri.org" class="raven-submenu-item raven-link-item ">
|
||||||
|
Level 2
|
||||||
|
</a>
|
||||||
|
</li>
|
||||||
|
</ul>
|
||||||
|
</li>
|
||||||
|
|
||||||
|
</ul>
|
||||||
|
</li>
|
||||||
|
|
||||||
|
</ul>
|
||||||
|
</div>
|
||||||
|
</nav>
|
||||||
|
<!-- Tablet Menu End-->
|
||||||
|
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</section>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<!--Normal Menu End-->
|
||||||
|
|
||||||
|
<!--Hover Menu Start-->
|
||||||
|
<div data-elementor-type="header" data-elementor-id="495" class="elementor elementor-495"
|
||||||
|
data-elementor-settings="[]">
|
||||||
|
<div class="elementor-inner">
|
||||||
|
<div class="elementor-section-wrap">
|
||||||
|
<section class="elementor-section elementor-top-section elementor-element elementor-element-7bc7b39 elementor-section-content-middle elementor-section-boxed elementor-section-height-default elementor-section-height-default" data-id="7bc7b39" data-element_type="section" data-settings="{"background_background":"classic"}">
|
||||||
|
<div class="elementor-container elementor-column-gap-no">
|
||||||
|
<div class="elementor-row">
|
||||||
|
<div class="elementor-column elementor-col-33 elementor-top-column elementor-element elementor-element-b48e6a" data-id="b48e6a" data-element_type="column">
|
||||||
|
<div class="elementor-column-wrap elementor-element-populated">
|
||||||
|
<div class="elementor-widget-wrap">
|
||||||
|
<div class="elementor-element elementor-element-7130d07 elementor-widget elementor-widget-spacer" data-id="7130d07" data-element_type="widget" data-widget_type="spacer.default">
|
||||||
|
<div class="elementor-widget-container">
|
||||||
|
<div class="elementor-spacer">
|
||||||
|
<div class="elementor-spacer-inner"></div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="elementor-element elementor-element-36cb1d41 elementor-widget elementor-widget-raven-site-logo" data-id="36cb1d41" data-element_type="widget"data-widget_type="raven-site-logo.default">
|
||||||
|
<div class="elementor-widget-container">
|
||||||
|
<div class="raven-widget-wrapper">
|
||||||
|
<div class="raven-site-logo">
|
||||||
|
<a class="raven-site-logo-link" href="https://dev.mirri.org/">
|
||||||
|
<img src="{% static 'web_tools/style/css/MIRRIOrangeNOERIC.png' %}" alt="MIRRI" class="raven-site-logo-desktop" data-no-lazy="1">
|
||||||
|
<img src="{% static 'web_tools/style/css/MIRRIOrangeNOERIC.png' %}" alt="MIRRI" class="raven-site-logo-tablet raven-site-logo-mobile" data-no-lazy="1">
|
||||||
|
</a>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
|
||||||
|
<div class="elementor-column elementor-col-66 elementor-top-column elementor-element elementor-element-f0fbe73" data-id="f0fbe73" data-element_type="column">
|
||||||
|
<div class="elementor-column-wrap elementor-element-populated">
|
||||||
|
<div class="elementor-widget-wrap">
|
||||||
|
<div class="elementor-element elementor-element-7de38754 elementor-widget elementor-widget-spacer" data-id="7de38754" data-element_type="widget" data-widget_type="spacer.default">
|
||||||
|
<div class="elementor-widget-container">
|
||||||
|
<div class="elementor-spacer">
|
||||||
|
<div class="elementor-spacer-inner"></div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<section class="elementor-section elementor-inner-section elementor-element elementor-element-5fdebe5 elementor-section-boxed elementor-section-height-default elementor-section-height-default" data-id="5fdebe5" data-element_type="section">
|
||||||
|
<div class="elementor-container elementor-column-gap-default">
|
||||||
|
<div class="elementor-row">
|
||||||
|
<div class="elementor-column elementor-col-100 elementor-inner-column elementor-element elementor-element-6ce30a2" data-id="6ce30a2" data-element_type="column">
|
||||||
|
<div class="elementor-column-wrap elementor-element-populated">
|
||||||
|
<div class="elementor-widget-wrap">
|
||||||
|
<div class="elementor-element elementor-element-56947eb1 raven-breakpoint-tablet raven-nav-menu-stretch raven-nav-menu-align-left elementor-widget elementor-widget-raven-nav-menu" data-id="56947eb1" data-element_type="widget" data-settings="{"submenu_space_between":{"unit":"px","size":15,"sizes":[]},"full_width":"stretch","mobile_layout":"dropdown","submenu_opening_position":"bottom"}" data-widget_type="raven-nav-menu.default">
|
||||||
|
<div class="elementor-widget-container">
|
||||||
|
|
||||||
|
<!-- Browser Menu Init-->
|
||||||
|
<nav
|
||||||
|
class="raven-nav-menu-main raven-nav-menu-horizontal raven-nav-menu-tablet-horizontal raven-nav-menu-mobile-horizontal raven-nav-icons-hidden-tablet raven-nav-icons-hidden-mobile">
|
||||||
|
<ul id="menu-56947eb1" class="raven-nav-menu" data-smartmenus-id="16143429460579077">
|
||||||
|
<li class="menu-item menu-item-type-post_type menu-item-object-page menu-item-home menu-item-72">
|
||||||
|
<a href="/" class="raven-menu-item raven-link-item raven-menu-item-active">
|
||||||
|
Home
|
||||||
|
</a>
|
||||||
|
</li>
|
||||||
|
<li class="menu-item menu-item-type-post_type menu-item-object-page menu-item-has-children menu-item-675">
|
||||||
|
<a href="/tools/" class="raven-menu-item raven-link-item has-submenu"
|
||||||
|
id="sm-16143429460579077-1" aria-haspopup="true" aria-controls="sm-16143429460579077-2" aria-expanded="false">
|
||||||
|
Tools
|
||||||
|
<span class="sub-arrow"></span></a>
|
||||||
|
|
||||||
|
<ul class="0 sub-menu raven-submenu" id="sm-16143429460579077-2" role="group"
|
||||||
|
aria-hidden="true" aria-labelledby="sm-16143429460579077-1" aria-expanded="false">
|
||||||
|
<li class="menu-item menu-item-type-post_type menu-item-object-page menu-item-3931">
|
||||||
|
<a href="/tools/validator/" class="raven-submenu-item raven-link-item ">
|
||||||
|
Excel Validator
|
||||||
|
</a>
|
||||||
|
</li>
|
||||||
|
<li class="menu-item menu-item-type-post_type menu-item-object-page menu-item-has-children menu-item-1238">
|
||||||
|
<a href="https://tools.mirri.org" class="raven-submenu-item raven-link-item has-submenu"
|
||||||
|
id="sm-16143429460579077-3" aria-haspopup="true" aria-controls="sm-16143429460579077-4" aria-expanded="false">
|
||||||
|
Level 1
|
||||||
|
<span class="sub-arrow"></span>
|
||||||
|
</a>
|
||||||
|
<ul class="1 sub-menu raven-submenu" id="sm-16143429460579077-4" role="group"
|
||||||
|
aria-hidden="true" aria-labelledby="sm-16143429460579077-3" aria-expanded="false">
|
||||||
|
<li class="menu-item menu-item-type-post_type menu-item-object-page menu-item-1267">
|
||||||
|
<a href="https://tools.mirri.org" class="raven-submenu-item raven-link-item ">
|
||||||
|
Level 2
|
||||||
|
</a>
|
||||||
|
</li>
|
||||||
|
<li class="menu-item menu-item-type-post_type menu-item-object-page menu-item-1266">
|
||||||
|
<a href="https://tools.mirri.org" class="raven-submenu-item raven-link-item ">
|
||||||
|
Level 2
|
||||||
|
</a>
|
||||||
|
</li>
|
||||||
|
</ul>
|
||||||
|
</li>
|
||||||
|
</ul>
|
||||||
|
</nav>
|
||||||
|
|
||||||
|
<!-- Browser Menu End-->
|
||||||
|
<div class="raven-nav-menu-toggle">
|
||||||
|
<div
|
||||||
|
class="raven-nav-menu-toggle-button ">
|
||||||
|
<span class="fa fa-bars"></span>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<!-- Tablet Menu Init-->
|
||||||
|
<nav class="raven-nav-icons-hidden-tablet raven-nav-icons-hidden-mobile raven-nav-menu-mobile raven-nav-menu-dropdown" style="max-height: 912px; width: 1903px; left: 0px; top: -1681.17px;">
|
||||||
|
<div class="raven-container" style="max-width: 1600px;">
|
||||||
|
<ul id="menu-mobile-56947eb1" class="raven-nav-menu" data-smartmenus-id="16143429460590867">
|
||||||
|
<li class="menu-item menu-item-type-post_type menu-item-object-page menu-item-home menu-item-72">
|
||||||
|
<a href="/" class="raven-menu-item raven-link-item raven-menu-item-active">Home</a>
|
||||||
|
</li>
|
||||||
|
<li class="menu-item menu-item-type-post_type menu-item-object-page menu-item-has-children menu-item-675">
|
||||||
|
<a href="/tools/" class="raven-menu-item raven-link-item has-submenu"
|
||||||
|
id="sm-16143429460590867-1" aria-haspopup="true" aria-controls="sm-16143429460590867-2" aria-expanded="false">
|
||||||
|
Tools
|
||||||
|
<span class="sub-arrow"></span>
|
||||||
|
</a>
|
||||||
|
<ul class="0 sub-menu raven-submenu" id="sm-16143429460590867-2" role="group" aria-hidden="true" aria-labelledby="sm-16143429460590867-1" aria-expanded="false">
|
||||||
|
<li class="menu-item menu-item-type-post_type menu-item-object-page menu-item-3931">
|
||||||
|
<a href="/tools/validator/" class="raven-submenu-item raven-link-item ">
|
||||||
|
Excel Validator
|
||||||
|
</a>
|
||||||
|
</li>
|
||||||
|
<li class="menu-item menu-item-type-post_type menu-item-object-page menu-item-has-children menu-item-1238">
|
||||||
|
<a href="https://dev.mirri.org/" class="raven-submenu-item raven-link-item has-submenu" id="sm-16143429460590867-3" aria-haspopup="true" aria-controls="sm-16143429460590867-4" aria-expanded="false">
|
||||||
|
Level 1
|
||||||
|
<span class="sub-arrow"></span>
|
||||||
|
</a>
|
||||||
|
<ul class="1 sub-menu raven-submenu" id="sm-16143429460590867-4" role="group" aria-hidden="true" aria-labelledby="sm-16143429460590867-3" aria-expanded="false">
|
||||||
|
<li class="menu-item menu-item-type-post_type menu-item-object-page menu-item-1267">
|
||||||
|
<a href="https://dev.mirri.org/" class="raven-submenu-item raven-link-item ">
|
||||||
|
Level 2
|
||||||
|
</a>
|
||||||
|
</li>
|
||||||
|
<li class="menu-item menu-item-type-post_type menu-item-object-page menu-item-1266">
|
||||||
|
<a href="https://dev.mirri.org/"class="raven-submenu-item raven-link-item ">
|
||||||
|
Level 2
|
||||||
|
</a>
|
||||||
|
</li>
|
||||||
|
</ul>
|
||||||
|
</li>
|
||||||
|
</ul>
|
||||||
|
</li>
|
||||||
|
</ul>
|
||||||
|
</div>
|
||||||
|
</nav>
|
||||||
|
|
||||||
|
<!-- Tablet Menu End-->
|
||||||
|
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</section>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</section>
|
||||||
|
<section class="elementor-section elementor-top-section elementor-element elementor-element-49d35a44 elementor-section-boxed elementor-section-height-default elementor-section-height-default" data-id="49d35a44" data-element_type="section">
|
||||||
|
<div class="elementor-container elementor-column-gap-default">
|
||||||
|
<div class="elementor-row">
|
||||||
|
<div class="elementor-column elementor-col-100 elementor-top-column elementor-element elementor-element-2b4466a3" data-id="2b4466a3" data-element_type="column">
|
||||||
|
<div class="elementor-column-wrap">
|
||||||
|
<div class="elementor-widget-wrap"></div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</section>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<!--Hover Menu End-->
|
||||||
|
</header>
|
||||||
|
|
||||||
|
<!--Main Content Init-->
|
||||||
|
<main class="jupiterx-main">
|
||||||
|
<div data-elementor-type="single" data-elementor-id="879" class="elementor elementor-879"
|
||||||
|
data-elementor-settings="[]">
|
||||||
|
<div class="elementor-inner">
|
||||||
|
<div class="elementor-section-wrap">
|
||||||
|
<!--Main Content Bar Section Title Init-->
|
||||||
|
<section
|
||||||
|
class="elementor-section elementor-top-section elementor-element elementor-element-7f2cc9e9 elementor-section-full_width elementor-section-height-default elementor-section-height-default"
|
||||||
|
data-id="7f2cc9e9" data-element_type="section"
|
||||||
|
data-settings="{"background_background":"classic"}">
|
||||||
|
<div class="elementor-container elementor-column-gap-no">
|
||||||
|
<div class="elementor-row">
|
||||||
|
<div class="elementor-column elementor-col-33 elementor-top-column elementor-element elementor-element-7af24d56 elementor-hidden-phone"
|
||||||
|
data-id="7af24d56" data-element_type="column"
|
||||||
|
data-settings="{"background_background":"classic"}">
|
||||||
|
<div class="elementor-column-wrap">
|
||||||
|
<div class="elementor-widget-wrap"></div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="elementor-column elementor-col-33 elementor-top-column elementor-element elementor-element-17c67231"
|
||||||
|
data-id="17c67231" data-element_type="column">
|
||||||
|
<div class="elementor-column-wrap elementor-element-populated">
|
||||||
|
<div class="elementor-widget-wrap">
|
||||||
|
<div class="elementor-element elementor-element-8c30537 elementor-align-center elementor-widget elementor-widget-raven-post-meta"
|
||||||
|
data-id="8c30537" data-element_type="widget"
|
||||||
|
data-widget_type="raven-post-meta.default">
|
||||||
|
<div class="elementor-widget-container">
|
||||||
|
<ul class="raven-icon-list-items raven-post-meta">
|
||||||
|
<li
|
||||||
|
class="raven-icon-list-item elementor-repeater-item-fc48d0b">
|
||||||
|
<span
|
||||||
|
class="raven-icon-list-text raven-post-meta-item raven-post-meta-item-type-custom">
|
||||||
|
{% block navigator %}{% endblock %} </span></li>
|
||||||
|
</ul>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="elementor-element elementor-element-54237fa1 elementor-widget-divider--separator-type-pattern elementor-widget-divider--no-spacing elementor-widget-divider--view-line elementor-widget elementor-widget-divider"
|
||||||
|
data-id="54237fa1" data-element_type="widget"
|
||||||
|
data-widget_type="divider.default">
|
||||||
|
<div class="elementor-widget-container">
|
||||||
|
<div class="elementor-divider"
|
||||||
|
style="--divider-pattern-url: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' preserveAspectRatio='xMidYMid meet' overflow='visible' height='100%' viewBox='0 0 126 26' fill='black' stroke='none'%3E%3Cpath d='M3,10.2c2.6,0,2.6,2,2.6,3.2S4.4,16.5,3,16.5s-3-1.4-3-3.2S0.4,10.2,3,10.2z M18.8,10.2c1.7,0,3.2,1.4,3.2,3.2s-1.4,3.2-3.2,3.2c-1.7,0-3.2-1.4-3.2-3.2S17,10.2,18.8,10.2z M34.6,10.2c1.5,0,2.6,1.4,2.6,3.2s-0.5,3.2-1.9,3.2c-1.5,0-3.4-1.4-3.4-3.2S33.1,10.2,34.6,10.2z M50.5,10.2c1.7,0,3.2,1.4,3.2,3.2s-1.4,3.2-3.2,3.2c-1.7,0-3.3-0.9-3.3-2.6S48.7,10.2,50.5,10.2z M66.2,10.2c1.5,0,3.4,1.4,3.4,3.2s-1.9,3.2-3.4,3.2c-1.5,0-2.6-0.4-2.6-2.1S64.8,10.2,66.2,10.2z M82.2,10.2c1.7,0.8,2.6,1.4,2.6,3.2s-0.1,3.2-1.6,3.2c-1.5,0-3.7-1.4-3.7-3.2S80.5,9.4,82.2,10.2zM98.6,10.2c1.5,0,2.6,0.4,2.6,2.1s-1.2,4.2-2.6,4.2c-1.5,0-3.7-0.4-3.7-2.1S97.1,10.2,98.6,10.2z M113.4,10.2c1.2,0,2.2,0.9,2.2,3.2s-0.1,3.2-1.3,3.2s-3.1-1.4-3.1-3.2S112.2,10.2,113.4,10.2z'/%3E%3C/svg%3E");">
|
||||||
|
<span class="elementor-divider-separator"> </span>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="elementor-column elementor-col-33 elementor-top-column elementor-element elementor-element-12514f33 elementor-hidden-phone"
|
||||||
|
data-id="12514f33" data-element_type="column"
|
||||||
|
data-settings="{"background_background":"classic"}">
|
||||||
|
<div class="elementor-column-wrap">
|
||||||
|
<div class="elementor-widget-wrap"></div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</section>
|
||||||
|
<!--Main Content Section Title End-->
|
||||||
|
<!--Main Content Section Data Init-->
|
||||||
|
<section
|
||||||
|
class="elementor-section elementor-top-section elementor-element elementor-element-14718c83 elementor-section-full_width elementor-section-height-default elementor-section-height-default"
|
||||||
|
data-id="14718c83" data-element_type="section">
|
||||||
|
<div class="elementor-container elementor-column-gap-no">
|
||||||
|
<div class="elementor-row">
|
||||||
|
<div class="elementor-column elementor-col-100 elementor-top-column elementor-element elementor-element-3d6ff095"
|
||||||
|
data-id="3d6ff095" data-element_type="column">
|
||||||
|
<div class="elementor-column-wrap elementor-element-populated">
|
||||||
|
<div class="elementor-widget-wrap">
|
||||||
|
<div class="elementor-element elementor-element-23e5c116 elementor-widget elementor-widget-raven-post-content"
|
||||||
|
data-id="23e5c116" data-element_type="widget"
|
||||||
|
data-widget_type="raven-post-content.default">
|
||||||
|
<div class="elementor-widget-container">
|
||||||
|
<div data-elementor-type="wp-page" data-elementor-id="1094"
|
||||||
|
class="elementor elementor-1094"
|
||||||
|
data-elementor-settings="[]">
|
||||||
|
<div class="elementor-inner">
|
||||||
|
<div class="elementor-section-wrap">
|
||||||
|
<section
|
||||||
|
class="elementor-section elementor-top-section elementor-element elementor-element-a1fedef elementor-section-boxed elementor-section-height-default elementor-section-height-default"
|
||||||
|
data-id="a1fedef" data-element_type="section">
|
||||||
|
<div
|
||||||
|
class="elementor-container elementor-column-gap-default">
|
||||||
|
<div class="elementor-row">
|
||||||
|
<div class="elementor-column elementor-col-100 elementor-top-column elementor-element elementor-element-d62edfe"
|
||||||
|
data-id="d62edfe"
|
||||||
|
data-element_type="column">
|
||||||
|
<div
|
||||||
|
class="elementor-column-wrap elementor-element-populated">
|
||||||
|
<div
|
||||||
|
class="elementor-widget-wrap">
|
||||||
|
<div class="elementor-element elementor-element-adab34d elementor-widget elementor-widget-spacer"
|
||||||
|
data-id="adab34d"
|
||||||
|
data-element_type="widget"
|
||||||
|
data-widget_type="spacer.default">
|
||||||
|
<div
|
||||||
|
class="elementor-widget-container">
|
||||||
|
<div
|
||||||
|
class="elementor-spacer">
|
||||||
|
<div
|
||||||
|
class="elementor-spacer-inner">
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</section>
|
||||||
|
<section
|
||||||
|
class="elementor-section elementor-top-section elementor-element elementor-element-9462c4a elementor-section-boxed elementor-section-height-default elementor-section-height-default">
|
||||||
|
<div
|
||||||
|
class="elementor-container elementor-column-gap-default">
|
||||||
|
<div class="elementor-row">
|
||||||
|
<h2
|
||||||
|
class="elementor-heading-title elementor-size-default">
|
||||||
|
{% block page_title %} {% endblock page_title %}
|
||||||
|
</h2>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div
|
||||||
|
class="elementor-container elementor-column-gap-default">
|
||||||
|
<div class="elementor-row">
|
||||||
|
<p
|
||||||
|
class="elementor-text-editor elementor-clearfix">
|
||||||
|
|
||||||
|
</p>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div
|
||||||
|
class="elementor-container elementor-column-gap-default">
|
||||||
|
<div class="elementor-row">
|
||||||
|
{% block content %}
|
||||||
|
{% endblock content %}
|
||||||
|
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div
|
||||||
|
class="elementor-container elementor-column-gap-default">
|
||||||
|
<div class="elementor-row">
|
||||||
|
<p
|
||||||
|
class="elementor-text-editor elementor-clearfix">
|
||||||
|
</p>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</section>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</section>
|
||||||
|
<!--Main Content Section Data End-->
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</main>
|
||||||
|
<!--Main Content End-->
|
||||||
|
<!--Footer Content Init-->
|
||||||
|
<footer class="jupiterx-footer" role="contentinfo" itemscope="itemscope" itemtype="http://schema.org/WPFooter">
|
||||||
|
<div data-elementor-type="footer" data-elementor-id="13" class="elementor elementor-13"
|
||||||
|
data-elementor-settings="[]">
|
||||||
|
<div class="elementor-inner">
|
||||||
|
<div class="elementor-section-wrap">
|
||||||
|
<section
|
||||||
|
class="elementor-section elementor-top-section elementor-element elementor-element-518e4702 elementor-section-boxed elementor-section-height-default elementor-section-height-default"
|
||||||
|
data-id="518e4702" data-element_type="section"
|
||||||
|
data-settings="{"background_background":"classic"}">
|
||||||
|
<div class="elementor-background-overlay"></div>
|
||||||
|
<div class="elementor-container elementor-column-gap-no">
|
||||||
|
<div class="elementor-row">
|
||||||
|
<div class="elementor-column elementor-col-33 elementor-top-column elementor-element elementor-element-40c2714"
|
||||||
|
data-id="40c2714" data-element_type="column">
|
||||||
|
<div class="elementor-column-wrap elementor-element-populated">
|
||||||
|
<div class="elementor-widget-wrap">
|
||||||
|
<div class="elementor-element elementor-element-620e8301 elementor-widget elementor-widget-raven-site-logo"
|
||||||
|
data-id="620e8301" data-element_type="widget"
|
||||||
|
data-widget_type="raven-site-logo.default">
|
||||||
|
<div class="elementor-widget-container">
|
||||||
|
<div class="raven-widget-wrapper">
|
||||||
|
<div class="raven-site-logo"> <a
|
||||||
|
class="raven-site-logo-link"
|
||||||
|
href="https://dev.mirri.org/"> <img
|
||||||
|
src="{% static 'web_tools/style/css/mirri_logo-1.png' %}" alt="MIRRI"
|
||||||
|
class="raven-site-logo-desktop raven-site-logo-tablet raven-site-logo-mobile"
|
||||||
|
data-no-lazy="1"> </a></div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="elementor-element elementor-element-695412ea elementor-widget elementor-widget-text-editor"
|
||||||
|
data-id="695412ea" data-element_type="widget"
|
||||||
|
data-widget_type="text-editor.default">
|
||||||
|
<div class="elementor-widget-container">
|
||||||
|
<div class="elementor-text-editor elementor-clearfix"></div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="elementor-element elementor-element-25a6a4d0 elementor-grid-3 elementor-shape-rounded elementor-widget elementor-widget-social-icons"
|
||||||
|
data-id="25a6a4d0" data-element_type="widget"
|
||||||
|
data-widget_type="social-icons.default">
|
||||||
|
<div class="elementor-widget-container">
|
||||||
|
<div class="elementor-social-icons-wrapper elementor-grid">
|
||||||
|
<div class="elementor-grid-item"> <a
|
||||||
|
class="elementor-icon elementor-social-icon elementor-social-icon-twitter elementor-animation-grow elementor-repeater-item-b4d5ec5"
|
||||||
|
href="https://twitter.com/MIRRI_live"
|
||||||
|
target="_blank"> <span
|
||||||
|
class="elementor-screen-only">Twitter</span> <i
|
||||||
|
class="fab fa-twitter"></i> </a></div>
|
||||||
|
<div class="elementor-grid-item"> <a
|
||||||
|
class="elementor-icon elementor-social-icon elementor-social-icon-facebook elementor-animation-grow elementor-repeater-item-9f6f9a1"
|
||||||
|
href="http://www.facebook.com/pages/MIRRI-Microbial-Resource-Research-Infrastructure/616409145042593"
|
||||||
|
target="_blank"> <span
|
||||||
|
class="elementor-screen-only">Facebook</span> <i
|
||||||
|
class="fab fa-facebook"></i> </a></div>
|
||||||
|
<div class="elementor-grid-item"> <a
|
||||||
|
class="elementor-icon elementor-social-icon elementor-social-icon-linkedin elementor-animation-grow elementor-repeater-item-e396101"
|
||||||
|
href="https://www.linkedin.com/company/microbial-resource-research-infrastructure/?viewAsMember=true"
|
||||||
|
target="_blank"> <span
|
||||||
|
class="elementor-screen-only">Linkedin</span> <i
|
||||||
|
class="fab fa-linkedin"></i> </a></div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="elementor-column elementor-col-33 elementor-top-column elementor-element elementor-element-66b4451"
|
||||||
|
data-id="66b4451" data-element_type="column">
|
||||||
|
<div class="elementor-column-wrap elementor-element-populated">
|
||||||
|
<div class="elementor-widget-wrap">
|
||||||
|
<section
|
||||||
|
class="elementor-section elementor-inner-section elementor-element elementor-element-b3afed7 elementor-section-boxed elementor-section-height-default elementor-section-height-default"
|
||||||
|
data-id="b3afed7" data-element_type="section">
|
||||||
|
<div class="elementor-container elementor-column-gap-default">
|
||||||
|
<div class="elementor-row">
|
||||||
|
<div class="elementor-column elementor-col-33 elementor-inner-column elementor-element elementor-element-7bda5d8"
|
||||||
|
data-id="7bda5d8" data-element_type="column">
|
||||||
|
<div
|
||||||
|
class="elementor-column-wrap elementor-element-populated">
|
||||||
|
<div class="elementor-widget-wrap">
|
||||||
|
<div class="elementor-element elementor-element-267f0f6 elementor-view-default elementor-widget elementor-widget-icon"
|
||||||
|
data-id="267f0f6" data-element_type="widget"
|
||||||
|
data-widget_type="icon.default">
|
||||||
|
<div class="elementor-widget-container">
|
||||||
|
<div class="elementor-icon-wrapper">
|
||||||
|
<div class="elementor-icon"> <i
|
||||||
|
aria-hidden="true"
|
||||||
|
class="fas fa-map-pin"></i>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="elementor-column elementor-col-66 elementor-inner-column elementor-element elementor-element-eebb821"
|
||||||
|
data-id="eebb821" data-element_type="column">
|
||||||
|
<div
|
||||||
|
class="elementor-column-wrap elementor-element-populated">
|
||||||
|
<div class="elementor-widget-wrap">
|
||||||
|
<div class="elementor-element elementor-element-8e7ee7d elementor-widget elementor-widget-text-editor"
|
||||||
|
data-id="8e7ee7d" data-element_type="widget"
|
||||||
|
data-widget_type="text-editor.default">
|
||||||
|
<div class="elementor-widget-container">
|
||||||
|
<div
|
||||||
|
class="elementor-text-editor elementor-clearfix">
|
||||||
|
<h5
|
||||||
|
class="elementor-icon-box-title">
|
||||||
|
MIRRI European Headquarters</h5>
|
||||||
|
<p
|
||||||
|
class="elementor-icon-box-description">
|
||||||
|
University of Minho Campus of
|
||||||
|
Gualtar Pedagogic Complex
|
||||||
|
3, <span
|
||||||
|
style="font-size: 1rem;">Floor
|
||||||
|
0 </span></p>
|
||||||
|
<p
|
||||||
|
class="elementor-icon-box-description">
|
||||||
|
<span
|
||||||
|
style="font-size: 1rem;">4710-057
|
||||||
|
Braga Portugal</span></p>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</section>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="elementor-column elementor-col-33 elementor-top-column elementor-element elementor-element-4a8e712"
|
||||||
|
data-id="4a8e712" data-element_type="column">
|
||||||
|
<div class="elementor-column-wrap elementor-element-populated">
|
||||||
|
<div class="elementor-widget-wrap">
|
||||||
|
<section
|
||||||
|
class="elementor-section elementor-inner-section elementor-element elementor-element-2476247 elementor-section-boxed elementor-section-height-default elementor-section-height-default"
|
||||||
|
data-id="2476247" data-element_type="section">
|
||||||
|
<div class="elementor-container elementor-column-gap-default">
|
||||||
|
<div class="elementor-row">
|
||||||
|
<div class="elementor-column elementor-col-33 elementor-inner-column elementor-element elementor-element-f17a0f3"
|
||||||
|
data-id="f17a0f3" data-element_type="column">
|
||||||
|
<div
|
||||||
|
class="elementor-column-wrap elementor-element-populated">
|
||||||
|
<div class="elementor-widget-wrap">
|
||||||
|
<div class="elementor-element elementor-element-afb3c4f elementor-view-default elementor-widget elementor-widget-icon"
|
||||||
|
data-id="afb3c4f" data-element_type="widget"
|
||||||
|
data-widget_type="icon.default">
|
||||||
|
<div class="elementor-widget-container">
|
||||||
|
<div class="elementor-icon-wrapper">
|
||||||
|
<div class="elementor-icon"> <i
|
||||||
|
aria-hidden="true"
|
||||||
|
class="far fa-envelope"></i>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="elementor-column elementor-col-66 elementor-inner-column elementor-element elementor-element-f158555"
|
||||||
|
data-id="f158555" data-element_type="column">
|
||||||
|
<div
|
||||||
|
class="elementor-column-wrap elementor-element-populated">
|
||||||
|
<div class="elementor-widget-wrap">
|
||||||
|
<div class="elementor-element elementor-element-6cb5b86 elementor-widget elementor-widget-text-editor"
|
||||||
|
data-id="6cb5b86" data-element_type="widget"
|
||||||
|
data-widget_type="text-editor.default">
|
||||||
|
<div class="elementor-widget-container">
|
||||||
|
<div
|
||||||
|
class="elementor-text-editor elementor-clearfix">
|
||||||
|
<h5
|
||||||
|
class="elementor-icon-box-title">
|
||||||
|
Email</h5>
|
||||||
|
<p
|
||||||
|
class="elementor-icon-box-description">
|
||||||
|
info@mirri.org</p>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</section>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</section>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</footer>
|
||||||
|
<!--Footer Content End-->
|
||||||
|
</div>
|
||||||
|
</body>
|
||||||
|
</html>
|
||||||
633
web_tools/templates/base.html
Normal file
@ -0,0 +1,633 @@
|
|||||||
|
{% load static %}
|
||||||
|
<!DOCTYPE html>
|
||||||
|
|
||||||
|
<head>
|
||||||
|
<title>{% block title %}{% endblock %}</title>
|
||||||
|
<link media="all" href="{% static 'web_tools/style/css/autoptimize_a5a452a287dfdad5a08bd44d3a6e3d3e.css' %}" rel="stylesheet">
|
||||||
|
<title>Tools – MIRRI</title>
|
||||||
|
<link href="https://www.mirri.org/wp-content/plugins/elementor/assets/lib/font-awesome/webfonts/fa-solid-900.woff2"
|
||||||
|
rel="preload" as="font" type="font/woff" >
|
||||||
|
<link href="https://www.mirri.org/wp-content/plugins/elementor/assets/lib/eicons/fonts/eicons.woff2?5.9.1"
|
||||||
|
rel="preload" as="font" type="font/woff" >
|
||||||
|
<link href="https://www.mirri.org/wp-content/plugins/elementor/assets/lib/font-awesome/webfonts/fa-brands-400.woff2"
|
||||||
|
rel="preload" as="font" type="font/woff" >
|
||||||
|
<link href="https://fonts.googleapis.com/" rel="preconnect" >
|
||||||
|
<link href="https://platform.twitter.com/" rel="preconnect">
|
||||||
|
<link href="https://fonts.gstatic.com/" rel="preconnect" >
|
||||||
|
<link href="https://cdn.syndication.twimg.com/" rel="preconnect">
|
||||||
|
<link href="https://ton.twimg.com/" rel="preconnect">
|
||||||
|
|
||||||
|
<link rel="stylesheet" id="mec-google-fonts-css" href="{% static 'web_tools/style/css/mec-google-fonts.css' %}" type="text/css" media="all">
|
||||||
|
<link rel="stylesheet" id="ed6ad5db9-css" href="{% static 'web_tools/style/css/734e5f942.min.css' %}" type="text/css" media="all">
|
||||||
|
<link rel="stylesheet" id="jupiterx-css" href="{% static 'web_tools/style/css/autoptimize_single_b9367e9f84eff03e58726166b24efc47.css' %}"
|
||||||
|
type="text/css" media="all">
|
||||||
|
<link rel="stylesheet" id="elementor-post-9-css"
|
||||||
|
href="{% static 'web_tools/style/css/autoptimize_single_ea224e3b8c1f3012917acba775bec7fa.css' %}" type="text/css" media="all">
|
||||||
|
<link rel="stylesheet" id="elementor-global-css"
|
||||||
|
href="{% static 'web_tools/style/css/autoptimize_single_d18cd62a07caca04e97f6984ad6fee0b.css' %}" type="text/css" media="all">
|
||||||
|
<link rel="stylesheet" id="elementor-post-1094-css"
|
||||||
|
href="{% static 'web_tools/style/css/autoptimize_single_fdebd036a6c313b7d17a4571c3a641ff.css' %}" type="text/css" media="all">
|
||||||
|
<link rel="stylesheet" id="elementor-post-2253-css"
|
||||||
|
href="{% static 'web_tools/style/css/autoptimize_single_79ccae64b30dcad1e8ae5d5d0add8420.css' %}" type="text/css" media="all">
|
||||||
|
<link rel="stylesheet" id="elementor-post-495-css"
|
||||||
|
href="{% static 'web_tools/style/css/autoptimize_single_6bf9e265fba73a1fdb8ab28503184d4b.css' %}" type="text/css" media="all">
|
||||||
|
<link rel="stylesheet" id="elementor-post-13-css"
|
||||||
|
href="{% static 'web_tools/style/css/autoptimize_single_3fdc936d7e88fb9e46a15ddaefdd061a.css' %}" type="text/css" media="all">
|
||||||
|
<link rel="stylesheet" id="google-fonts-1-css" href="{% static 'web_tools/style/css/google-fonts-1.css' %}" type="text/css" media="all">
|
||||||
|
|
||||||
|
|
||||||
|
<link rel="stylesheet" id="elementor-post-879-css" href="{% static 'web_tools/style/css/autoptimize_single_0bdcd8bf82c379b3ec901a408c1117eb.css' %}" type="text/css" media="all">
|
||||||
|
|
||||||
|
<script src="{% static 'web_tools/style/css/wp-emoji-release.min.js.transferir' %}" type="text/javascript"></script>
|
||||||
|
<script src="{% static 'web_tools/style/css/jquery.min.js.transferir' %}" type="text/javascript"></script>
|
||||||
|
|
||||||
|
<script data-noptimize="1">window.lazySizesConfig = window.lazySizesConfig || {}; window.lazySizesConfig.loadMode = 1;</script>
|
||||||
|
<script async="" data-noptimize="1" src="{% static 'web_tools/style/css/lazysizes.min.js.transferir' %}"></script>
|
||||||
|
<script type="text/javascript" id="jquery-ui-datepicker-js-after">jQuery(document).ready(function (jQuery) { jQuery.datepicker.setDefaults({ "closeText": "Close", "currentText": "Today", "monthNames": ["January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December"], "monthNamesShort": ["Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"], "nextText": "Next", "prevText": "Previous", "dayNames": ["Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"], "dayNamesShort": ["Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat"], "dayNamesMin": ["S", "M", "T", "W", "T", "F", "S"], "dateFormat": "d \\dd\\e MM \\dd\\e yy", "firstDay": 1, "isRTL": false }); });</script>
|
||||||
|
<script type="text/javascript" id="ed6ad5db9-js-extra">var localize = { "ajaxurl": "https:\/\/www.mirri.org\/wp-admin\/admin-ajax.php", "nonce": "077dae69bc", "i18n": { "added": "Added ", "compare": "Compare", "loading": "Loading..." } };</script>
|
||||||
|
<script type="text/javascript" id="ivory-search-scripts-js-extra">var IvorySearchVars = { "is_analytics_enabled": "1" };</script>
|
||||||
|
<script type="text/javascript" id="elementor-frontend-js-before">var elementorFrontendConfig = { "environmentMode": { "edit": false, "wpPreview": false }, "i18n": { "shareOnFacebook": "Share on Facebook", "shareOnTwitter": "Share on Twitter", "pinIt": "Pin it", "download": "Download", "downloadImage": "Download image", "fullscreen": "Fullscreen", "zoom": "Zoom", "share": "Share", "playVideo": "Play Video", "previous": "Previous", "next": "Next", "close": "Close" }, "is_rtl": false, "breakpoints": { "xs": 0, "sm": 480, "md": 768, "lg": 1025, "xl": 1440, "xxl": 1600 }, "version": "3.0.14", "is_static": false, "legacyMode": { "elementWrappers": true }, "urls": { "assets": "https:\/\/www.mirri.org\/wp-content\/plugins\/elementor\/assets\/" }, "settings": { "page": [], "editorPreferences": [] }, "kit": { "global_image_lightbox": "yes", "lightbox_enable_counter": "yes", "lightbox_enable_fullscreen": "yes", "lightbox_enable_zoom": "yes", "lightbox_enable_share": "yes", "lightbox_title_src": "title", "lightbox_description_src": "description" }, "post": { "id": 1094, "title": "Expert%20Clusters%20%E2%80%93%20MIRRI", "excerpt": "", "featuredImage": false } };</script>
|
||||||
|
<script type="text/javascript" id="jet-elements-js-extra">var jetElements = { "ajaxUrl": "https:\/\/www.mirri.org\/wp-admin\/admin-ajax.php", "isMobile": "false", "templateApiUrl": "https:\/\/www.mirri.org\/index.php?rest_route=\/jet-elements-api\/v1\/elementor-template", "wwwMode": "false", "messages": { "invalidMail": "Please specify a valid e-mail" } };</script>
|
||||||
|
<script type="text/javascript" id="jet-tabs-frontend-js-extra">var JetTabsSettings = { "ajaxurl": "https:\/\/www.mirri.org\/wp-admin\/admin-ajax.php", "isMobile": "false", "templateApiUrl": "https:\/\/www.mirri.org\/index.php?rest_route=\/jet-tabs-api\/v1\/elementor-template", "devMode": "false" };</script>
|
||||||
|
<script type="text/javascript" id="wp-util-js-extra">var _wpUtilSettings = { "ajax": { "url": "\/wp-admin\/admin-ajax.php" } };</script>
|
||||||
|
<script type="text/javascript" id="jupiterx-core-raven-frontend-js-extra">var ravenFormsTranslations = { "validation": { "required": "Please fill in this field", "invalidEmail": "The value is not a valid email address", "invalidPhone": "The value should only consist numbers and phone characters (-, +, (), etc)", "invalidNumber": "The value is not a valid number", "invalidMaxValue": "Value must be less than or equal to MAX_VALUE", "invalidMinValue": "Value must be greater than or equal to MIN_VALUE" } };</script>
|
||||||
|
<script type="text/javascript" id="jet-blog-js-extra">var JetBlogSettings = { "ajaxurl": "https:\/\/www.mirri.org\/wp-admin\/admin-ajax.php" };</script>
|
||||||
|
<script type="text/javascript" id="jet-engine-frontend-js-extra">var JetEngineSettings = { "ajaxurl": "https:\/\/www.mirri.org\/wp-admin\/admin-ajax.php", "mapPopupTimeout": "400" };</script>
|
||||||
|
<script type="text/javascript">(function () { document.body.className = document.body.className.replace('no-js', 'js'); }());</script>
|
||||||
|
<script defer="" src="{% static 'web_tools/style/css/autoptimize_b879e7e20b057357a98e10b516b0270a.js.transferir' %}"></script>
|
||||||
|
<script defer="" src="{% static 'web_tools/style_custom.css' %}"></script>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
</head>
|
||||||
|
|
||||||
|
<body
|
||||||
|
class="page-template page-template-elementor_header_footer page page-id-1094 js jupiterx elementor-default elementor-kit-9 elementor-page elementor-page-1094 jupiterx-header-sticky">
|
||||||
|
<div class="jupiterx-site">
|
||||||
|
<header class="jupiterx-header jupiterx-header-custom jupiterx-header-sticky-custom"
|
||||||
|
data-jupiterx-settings="{"breakpoint":"767.98","template":"2253","stickyTemplate":"495","behavior":"sticky","offset":"250"}"
|
||||||
|
role="banner" itemscope="itemscope" itemtype="http://schema.org/WPHeader">
|
||||||
|
|
||||||
|
<!--Hover Menu Start-->
|
||||||
|
<div data-elementor-type="header" data-elementor-id="495" class="elementor elementor-495"
|
||||||
|
data-elementor-settings="[]">
|
||||||
|
<div class="elementor-inner">
|
||||||
|
<div class="elementor-section-wrap">
|
||||||
|
<section class="elementor-section elementor-top-section elementor-element elementor-element-7bc7b39 elementor-section-content-middle elementor-section-boxed elementor-section-height-default elementor-section-height-default" data-id="7bc7b39" data-element_type="section" data-settings="{"background_background":"classic"}">
|
||||||
|
<div class="elementor-container elementor-column-gap-no">
|
||||||
|
<div class="elementor-row">
|
||||||
|
<div class="elementor-column elementor-col-33 elementor-top-column elementor-element elementor-element-b48e6a" data-id="b48e6a" data-element_type="column">
|
||||||
|
<div class="elementor-column-wrap elementor-element-populated">
|
||||||
|
<div class="elementor-widget-wrap">
|
||||||
|
<div class="elementor-element elementor-element-7130d07 elementor-widget elementor-widget-spacer" data-id="7130d07" data-element_type="widget" data-widget_type="spacer.default">
|
||||||
|
<div class="elementor-widget-container">
|
||||||
|
<div class="elementor-spacer">
|
||||||
|
<div class="elementor-spacer-inner"></div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="elementor-element elementor-element-36cb1d41 elementor-widget elementor-widget-raven-site-logo" data-id="36cb1d41" data-element_type="widget"data-widget_type="raven-site-logo.default">
|
||||||
|
<div class="elementor-widget-container">
|
||||||
|
<div class="raven-widget-wrapper">
|
||||||
|
<div class="raven-site-logo">
|
||||||
|
<a class="raven-site-logo-link" href="https://www.mirri.org/">
|
||||||
|
<img src="{% static 'web_tools/style/css/MIRRIOrangeNOERIC.png' %}" alt="MIRRI" class="raven-site-logo-desktop" data-no-lazy="1">
|
||||||
|
<img src="{% static 'web_tools/style/css/MIRRIOrangeNOERIC.png' %}" alt="MIRRI" class="raven-site-logo-tablet raven-site-logo-mobile" data-no-lazy="1">
|
||||||
|
</a>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
|
||||||
|
<div class="elementor-column elementor-col-66 elementor-top-column elementor-element elementor-element-f0fbe73" data-id="f0fbe73" data-element_type="column">
|
||||||
|
<div class="elementor-column-wrap elementor-element-populated">
|
||||||
|
<div class="elementor-widget-wrap">
|
||||||
|
<div class="elementor-element elementor-element-7de38754 elementor-widget elementor-widget-spacer" data-id="7de38754" data-element_type="widget" data-widget_type="spacer.default">
|
||||||
|
<div class="elementor-widget-container">
|
||||||
|
<div class="elementor-spacer">
|
||||||
|
<div class="elementor-spacer-inner"></div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<section class="elementor-section elementor-inner-section elementor-element elementor-element-5fdebe5 elementor-section-boxed elementor-section-height-default elementor-section-height-default" data-id="5fdebe5" data-element_type="section">
|
||||||
|
<div class="elementor-container elementor-column-gap-default">
|
||||||
|
<div class="elementor-row">
|
||||||
|
<div class="elementor-column elementor-col-100 elementor-inner-column elementor-element elementor-element-6ce30a2" data-id="6ce30a2" data-element_type="column">
|
||||||
|
<div class="elementor-column-wrap elementor-element-populated">
|
||||||
|
<div class="elementor-widget-wrap">
|
||||||
|
<div class="elementor-element elementor-element-56947eb1 raven-breakpoint-tablet raven-nav-menu-stretch raven-nav-menu-align-left elementor-widget elementor-widget-raven-nav-menu" data-id="56947eb1" data-element_type="widget" data-settings="{"submenu_space_between":{"unit":"px","size":15,"sizes":[]},"full_width":"stretch","mobile_layout":"dropdown","submenu_opening_position":"bottom"}" data-widget_type="raven-nav-menu.default">
|
||||||
|
<div class="elementor-widget-container">
|
||||||
|
|
||||||
|
<!-- Browser Menu Init-->
|
||||||
|
<nav
|
||||||
|
class="raven-nav-menu-main raven-nav-menu-horizontal raven-nav-menu-tablet-horizontal raven-nav-menu-mobile-horizontal raven-nav-icons-hidden-tablet raven-nav-icons-hidden-mobile">
|
||||||
|
<ul id="menu-56947eb1" class="raven-nav-menu" data-smartmenus-id="16143429460579077">
|
||||||
|
<li class="menu-item menu-item-type-post_type menu-item-object-page menu-item-home menu-item-72">
|
||||||
|
<a href="/" class="raven-menu-item raven-link-item raven-menu-item-active">
|
||||||
|
Home
|
||||||
|
</a>
|
||||||
|
</li>
|
||||||
|
<li class="menu-item menu-item-type-post_type menu-item-object-page menu-item-has-children menu-item-675">
|
||||||
|
<a href="/tools/" class="raven-menu-item raven-link-item has-submenu"
|
||||||
|
id="sm-16143429460579077-1" aria-haspopup="true" aria-controls="sm-16143429460579077-2" aria-expanded="false">
|
||||||
|
Tools
|
||||||
|
<span class="sub-arrow"></span></a>
|
||||||
|
|
||||||
|
<ul class="0 sub-menu raven-submenu" id="sm-16143429460579077-2" role="group"
|
||||||
|
aria-hidden="true" aria-labelledby="sm-16143429460579077-1" aria-expanded="false">
|
||||||
|
<li class="menu-item menu-item-type-post_type menu-item-object-page menu-item-3931">
|
||||||
|
<a href="/tools" class="raven-submenu-item raven-link-item has-submenu"
|
||||||
|
id="sm-16143429460579077-3" aria-haspopup="true" aria-controls="sm-16143429460579077-4" aria-expanded="false">
|
||||||
|
Validators
|
||||||
|
<span class="sub-arrow"></span>
|
||||||
|
</a>
|
||||||
|
<ul class="1 sub-menu raven-submenu" id="sm-16143429460579077-4" role="group"
|
||||||
|
aria-hidden="true" aria-labelledby="sm-16143429460579077-3" aria-expanded="false">
|
||||||
|
<li class="menu-item menu-item-type-post_type menu-item-object-page menu-item-1267">
|
||||||
|
<a href="/tools/validator/" class="raven-submenu-item raven-link-item ">
|
||||||
|
Strain v20200601
|
||||||
|
</a>
|
||||||
|
</li>
|
||||||
|
</ul >
|
||||||
|
</li>
|
||||||
|
</ul>
|
||||||
|
</nav>
|
||||||
|
|
||||||
|
<!-- Browser Menu End-->
|
||||||
|
<div class="raven-nav-menu-toggle">
|
||||||
|
<div
|
||||||
|
class="raven-nav-menu-toggle-button ">
|
||||||
|
<span class="fa fa-bars"></span>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<!-- Tablet Menu Init-->
|
||||||
|
<nav class="raven-nav-icons-hidden-tablet raven-nav-icons-hidden-mobile raven-nav-menu-mobile raven-nav-menu-dropdown" style="max-height: 912px; width: 1903px; left: 0px; top: -1681.17px;">
|
||||||
|
<div class="raven-container" style="max-width: 1600px;">
|
||||||
|
<ul id="menu-mobile-56947eb1" class="raven-nav-menu" data-smartmenus-id="16143429460590867">
|
||||||
|
<li class="menu-item menu-item-type-post_type menu-item-object-page menu-item-home menu-item-72">
|
||||||
|
<a href="/" class="raven-menu-item raven-link-item raven-menu-item-active">Home</a>
|
||||||
|
</li>
|
||||||
|
<li class="menu-item menu-item-type-post_type menu-item-object-page menu-item-has-children menu-item-675">
|
||||||
|
<a href="/tools/" class="raven-menu-item raven-link-item has-submenu"
|
||||||
|
id="sm-16143429460590867-1" aria-haspopup="true" aria-controls="sm-16143429460590867-2" aria-expanded="false">
|
||||||
|
Tools
|
||||||
|
<span class="sub-arrow"></span>
|
||||||
|
</a>
|
||||||
|
<ul class="0 sub-menu raven-submenu" id="sm-16143429460590867-2" role="group" aria-hidden="true" aria-labelledby="sm-16143429460590867-1" aria-expanded="false">
|
||||||
|
<li class="menu-item menu-item-type-post_type menu-item-object-page menu-item-3931">
|
||||||
|
<a href="/tools/validator/" class="raven-submenu-item raven-link-item ">
|
||||||
|
Excel Validator
|
||||||
|
</a>
|
||||||
|
</li>
|
||||||
|
<li class="menu-item menu-item-type-post_type menu-item-object-page menu-item-has-children menu-item-1238">
|
||||||
|
<a href="https://www.mirri.org/" class="raven-submenu-item raven-link-item has-submenu" id="sm-16143429460590867-3" aria-haspopup="true" aria-controls="sm-16143429460590867-4" aria-expanded="false">
|
||||||
|
Level 1
|
||||||
|
<span class="sub-arrow"></span>
|
||||||
|
</a>
|
||||||
|
<ul class="1 sub-menu raven-submenu" id="sm-16143429460590867-4" role="group" aria-hidden="true" aria-labelledby="sm-16143429460590867-3" aria-expanded="false">
|
||||||
|
<li class="menu-item menu-item-type-post_type menu-item-object-page menu-item-1267">
|
||||||
|
<a href="https://www.mirri.org/" class="raven-submenu-item raven-link-item ">
|
||||||
|
Level 2
|
||||||
|
</a>
|
||||||
|
</li>
|
||||||
|
<li class="menu-item menu-item-type-post_type menu-item-object-page menu-item-1266">
|
||||||
|
<a href="https://www.mirri.org/"class="raven-submenu-item raven-link-item ">
|
||||||
|
Level 2
|
||||||
|
</a>
|
||||||
|
</li>
|
||||||
|
</ul>
|
||||||
|
</li>
|
||||||
|
</ul>
|
||||||
|
</li>
|
||||||
|
</ul>
|
||||||
|
</div>
|
||||||
|
</nav>
|
||||||
|
|
||||||
|
<!-- Tablet Menu End-->
|
||||||
|
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</section>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</section>
|
||||||
|
<section class="elementor-section elementor-top-section elementor-element elementor-element-49d35a44 elementor-section-boxed elementor-section-height-default elementor-section-height-default" data-id="49d35a44" data-element_type="section">
|
||||||
|
<div class="elementor-container elementor-column-gap-default">
|
||||||
|
<div class="elementor-row">
|
||||||
|
<div class="elementor-column elementor-col-100 elementor-top-column elementor-element elementor-element-2b4466a3" data-id="2b4466a3" data-element_type="column">
|
||||||
|
<div class="elementor-column-wrap">
|
||||||
|
<div class="elementor-widget-wrap"></div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</section>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<!--Hover Menu End-->
|
||||||
|
</header>
|
||||||
|
|
||||||
|
<!--Main Content Init-->
|
||||||
|
<main class="jupiterx-main">
|
||||||
|
<div data-elementor-type="single" data-elementor-id="879" class="elementor elementor-879"
|
||||||
|
data-elementor-settings="[]">
|
||||||
|
<div class="elementor-inner">
|
||||||
|
<div class="elementor-section-wrap">
|
||||||
|
<!--Main Content Bar Section Title Init-->
|
||||||
|
<section
|
||||||
|
class="elementor-section elementor-top-section elementor-element elementor-element-7f2cc9e9 elementor-section-full_width elementor-section-height-default elementor-section-height-default"
|
||||||
|
data-id="7f2cc9e9" data-element_type="section"
|
||||||
|
data-settings="{"background_background":"classic"}">
|
||||||
|
<div class="elementor-container elementor-column-gap-no">
|
||||||
|
<div class="elementor-row">
|
||||||
|
<div class="elementor-column elementor-col-33 elementor-top-column elementor-element elementor-element-7af24d56 elementor-hidden-phone"
|
||||||
|
data-id="7af24d56" data-element_type="column"
|
||||||
|
data-settings="{"background_background":"classic"}">
|
||||||
|
<div class="elementor-column-wrap">
|
||||||
|
<div class="elementor-widget-wrap"></div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="elementor-column elementor-col-33 elementor-top-column elementor-element elementor-element-17c67231"
|
||||||
|
data-id="17c67231" data-element_type="column">
|
||||||
|
<div class="elementor-column-wrap elementor-element-populated">
|
||||||
|
<div class="elementor-widget-wrap">
|
||||||
|
<div class="elementor-element elementor-element-8c30537 elementor-align-center elementor-widget elementor-widget-raven-post-meta"
|
||||||
|
data-id="8c30537" data-element_type="widget"
|
||||||
|
data-widget_type="raven-post-meta.default">
|
||||||
|
<div class="elementor-widget-container">
|
||||||
|
<ul class="raven-icon-list-items raven-post-meta">
|
||||||
|
<li
|
||||||
|
class="raven-icon-list-item elementor-repeater-item-fc48d0b">
|
||||||
|
<span
|
||||||
|
class="raven-icon-list-text raven-post-meta-item raven-post-meta-item-type-custom">
|
||||||
|
{% block navigator %}{% endblock %} </span></li>
|
||||||
|
</ul>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="elementor-element elementor-element-54237fa1 elementor-widget-divider--separator-type-pattern elementor-widget-divider--no-spacing elementor-widget-divider--view-line elementor-widget elementor-widget-divider"
|
||||||
|
data-id="54237fa1" data-element_type="widget"
|
||||||
|
data-widget_type="divider.default">
|
||||||
|
<div class="elementor-widget-container">
|
||||||
|
<div class="elementor-divider"
|
||||||
|
style="--divider-pattern-url: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' preserveAspectRatio='xMidYMid meet' overflow='visible' height='100%' viewBox='0 0 126 26' fill='black' stroke='none'%3E%3Cpath d='M3,10.2c2.6,0,2.6,2,2.6,3.2S4.4,16.5,3,16.5s-3-1.4-3-3.2S0.4,10.2,3,10.2z M18.8,10.2c1.7,0,3.2,1.4,3.2,3.2s-1.4,3.2-3.2,3.2c-1.7,0-3.2-1.4-3.2-3.2S17,10.2,18.8,10.2z M34.6,10.2c1.5,0,2.6,1.4,2.6,3.2s-0.5,3.2-1.9,3.2c-1.5,0-3.4-1.4-3.4-3.2S33.1,10.2,34.6,10.2z M50.5,10.2c1.7,0,3.2,1.4,3.2,3.2s-1.4,3.2-3.2,3.2c-1.7,0-3.3-0.9-3.3-2.6S48.7,10.2,50.5,10.2z M66.2,10.2c1.5,0,3.4,1.4,3.4,3.2s-1.9,3.2-3.4,3.2c-1.5,0-2.6-0.4-2.6-2.1S64.8,10.2,66.2,10.2z M82.2,10.2c1.7,0.8,2.6,1.4,2.6,3.2s-0.1,3.2-1.6,3.2c-1.5,0-3.7-1.4-3.7-3.2S80.5,9.4,82.2,10.2zM98.6,10.2c1.5,0,2.6,0.4,2.6,2.1s-1.2,4.2-2.6,4.2c-1.5,0-3.7-0.4-3.7-2.1S97.1,10.2,98.6,10.2z M113.4,10.2c1.2,0,2.2,0.9,2.2,3.2s-0.1,3.2-1.3,3.2s-3.1-1.4-3.1-3.2S112.2,10.2,113.4,10.2z'/%3E%3C/svg%3E");">
|
||||||
|
<span class="elementor-divider-separator"> </span>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="elementor-column elementor-col-33 elementor-top-column elementor-element elementor-element-12514f33 elementor-hidden-phone"
|
||||||
|
data-id="12514f33" data-element_type="column"
|
||||||
|
data-settings="{"background_background":"classic"}">
|
||||||
|
<div class="elementor-column-wrap">
|
||||||
|
<div class="elementor-widget-wrap"></div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</section>
|
||||||
|
<!--Main Content Section Title End-->
|
||||||
|
<!--Main Content Section Data Init-->
|
||||||
|
<section
|
||||||
|
class="elementor-section elementor-top-section elementor-element elementor-element-14718c83 elementor-section-full_width elementor-section-height-default elementor-section-height-default"
|
||||||
|
data-id="14718c83" data-element_type="section">
|
||||||
|
<div class="elementor-container elementor-column-gap-no">
|
||||||
|
<div class="elementor-row">
|
||||||
|
<div class="elementor-column elementor-col-100 elementor-top-column elementor-element elementor-element-3d6ff095"
|
||||||
|
data-id="3d6ff095" data-element_type="column">
|
||||||
|
<div class="elementor-column-wrap elementor-element-populated">
|
||||||
|
<div class="elementor-widget-wrap">
|
||||||
|
<div class="elementor-element elementor-element-23e5c116 elementor-widget elementor-widget-raven-post-content"
|
||||||
|
data-id="23e5c116" data-element_type="widget"
|
||||||
|
data-widget_type="raven-post-content.default">
|
||||||
|
<div class="elementor-widget-container">
|
||||||
|
<div data-elementor-type="wp-page" data-elementor-id="1094"
|
||||||
|
class="elementor elementor-1094"
|
||||||
|
data-elementor-settings="[]">
|
||||||
|
<div class="elementor-inner">
|
||||||
|
<div class="elementor-section-wrap">
|
||||||
|
<section
|
||||||
|
class="elementor-section elementor-top-section elementor-element elementor-element-a1fedef elementor-section-boxed elementor-section-height-default elementor-section-height-default"
|
||||||
|
data-id="a1fedef" data-element_type="section">
|
||||||
|
<div
|
||||||
|
class="elementor-container elementor-column-gap-default">
|
||||||
|
<div class="elementor-row">
|
||||||
|
<div class="elementor-column elementor-col-100 elementor-top-column elementor-element elementor-element-d62edfe"
|
||||||
|
data-id="d62edfe"
|
||||||
|
data-element_type="column">
|
||||||
|
<div
|
||||||
|
class="elementor-column-wrap elementor-element-populated">
|
||||||
|
<div
|
||||||
|
class="elementor-widget-wrap">
|
||||||
|
<div class="elementor-element elementor-element-adab34d elementor-widget elementor-widget-spacer"
|
||||||
|
data-id="adab34d"
|
||||||
|
data-element_type="widget"
|
||||||
|
data-widget_type="spacer.default">
|
||||||
|
<div
|
||||||
|
class="elementor-widget-container">
|
||||||
|
<div
|
||||||
|
class="elementor-spacer">
|
||||||
|
<div
|
||||||
|
class="elementor-spacer-inner">
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</section>
|
||||||
|
<section
|
||||||
|
class="elementor-section elementor-top-section elementor-element elementor-element-9462c4a elementor-section-boxed elementor-section-height-default elementor-section-height-default">
|
||||||
|
<div
|
||||||
|
class="elementor-container elementor-column-gap-default">
|
||||||
|
<div class="elementor-row">
|
||||||
|
<h2
|
||||||
|
class="elementor-heading-title elementor-size-default">
|
||||||
|
{% block page_title %} {% endblock page_title %}
|
||||||
|
</h2>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div
|
||||||
|
class="elementor-container elementor-column-gap-default">
|
||||||
|
<div class="elementor-row">
|
||||||
|
<p
|
||||||
|
class="elementor-text-editor elementor-clearfix">
|
||||||
|
|
||||||
|
</p>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div
|
||||||
|
class="elementor-container elementor-column-gap-default">
|
||||||
|
<div class="elementor-row">
|
||||||
|
{% block content %}
|
||||||
|
{% endblock content %}
|
||||||
|
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div
|
||||||
|
class="elementor-container elementor-column-gap-default">
|
||||||
|
<div class="elementor-row">
|
||||||
|
<p
|
||||||
|
class="elementor-text-editor elementor-clearfix">
|
||||||
|
<br>
|
||||||
|
<br>
|
||||||
|
<br>
|
||||||
|
<br>
|
||||||
|
<br>
|
||||||
|
<br>
|
||||||
|
<br>
|
||||||
|
<br>
|
||||||
|
<br>
|
||||||
|
<br>
|
||||||
|
<br>
|
||||||
|
<br>
|
||||||
|
<br>
|
||||||
|
<br>
|
||||||
|
<br>
|
||||||
|
<br>
|
||||||
|
<br>
|
||||||
|
</p>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</section>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</section>
|
||||||
|
<!--Main Content Section Data End-->
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</main>
|
||||||
|
<!--Main Content End-->
|
||||||
|
<!--Footer Content Init-->
|
||||||
|
<footer class="jupiterx-footer" role="contentinfo" itemscope="itemscope" itemtype="http://schema.org/WPFooter">
|
||||||
|
<div data-elementor-type="footer" data-elementor-id="13" class="elementor elementor-13"
|
||||||
|
data-elementor-settings="[]">
|
||||||
|
<div class="elementor-inner">
|
||||||
|
<div class="elementor-section-wrap">
|
||||||
|
<section
|
||||||
|
class="elementor-section elementor-top-section elementor-element elementor-element-518e4702 elementor-section-boxed elementor-section-height-default elementor-section-height-default"
|
||||||
|
data-id="518e4702" data-element_type="section"
|
||||||
|
data-settings="{"background_background":"classic"}">
|
||||||
|
<div class="elementor-background-overlay"></div>
|
||||||
|
<div class="elementor-container elementor-column-gap-no">
|
||||||
|
<div class="elementor-row">
|
||||||
|
<div class="elementor-column elementor-col-33 elementor-top-column elementor-element elementor-element-40c2714"
|
||||||
|
data-id="40c2714" data-element_type="column">
|
||||||
|
<div class="elementor-column-wrap elementor-element-populated">
|
||||||
|
<div class="elementor-widget-wrap">
|
||||||
|
<div class="elementor-element elementor-element-620e8301 elementor-widget elementor-widget-raven-site-logo"
|
||||||
|
data-id="620e8301" data-element_type="widget"
|
||||||
|
data-widget_type="raven-site-logo.default">
|
||||||
|
<div class="elementor-widget-container">
|
||||||
|
<div class="raven-widget-wrapper">
|
||||||
|
<div class="raven-site-logo"> <a
|
||||||
|
class="raven-site-logo-link"
|
||||||
|
href="https://www.mirri.org/"> <img
|
||||||
|
src="{% static 'web_tools/style/css/mirri_logo-1.png' %}" alt="MIRRI"
|
||||||
|
class="raven-site-logo-desktop raven-site-logo-tablet raven-site-logo-mobile"
|
||||||
|
data-no-lazy="1"> </a></div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="elementor-element elementor-element-695412ea elementor-widget elementor-widget-text-editor"
|
||||||
|
data-id="695412ea" data-element_type="widget"
|
||||||
|
data-widget_type="text-editor.default">
|
||||||
|
<div class="elementor-widget-container">
|
||||||
|
<div class="elementor-text-editor elementor-clearfix"></div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="elementor-element elementor-element-25a6a4d0 elementor-grid-3 elementor-shape-rounded elementor-widget elementor-widget-social-icons"
|
||||||
|
data-id="25a6a4d0" data-element_type="widget"
|
||||||
|
data-widget_type="social-icons.default">
|
||||||
|
<div class="elementor-widget-container">
|
||||||
|
<div class="elementor-social-icons-wrapper elementor-grid">
|
||||||
|
<div class="elementor-grid-item"> <a
|
||||||
|
class="elementor-icon elementor-social-icon elementor-social-icon-twitter elementor-animation-grow elementor-repeater-item-b4d5ec5"
|
||||||
|
href="https://twitter.com/MIRRI_live"
|
||||||
|
target="_blank"> <span
|
||||||
|
class="elementor-screen-only">Twitter</span> <i
|
||||||
|
class="fab fa-twitter"></i> </a></div>
|
||||||
|
<div class="elementor-grid-item"> <a
|
||||||
|
class="elementor-icon elementor-social-icon elementor-social-icon-facebook elementor-animation-grow elementor-repeater-item-9f6f9a1"
|
||||||
|
href="http://www.facebook.com/pages/MIRRI-Microbial-Resource-Research-Infrastructure/616409145042593"
|
||||||
|
target="_blank"> <span
|
||||||
|
class="elementor-screen-only">Facebook</span> <i
|
||||||
|
class="fab fa-facebook"></i> </a></div>
|
||||||
|
<div class="elementor-grid-item"> <a
|
||||||
|
class="elementor-icon elementor-social-icon elementor-social-icon-linkedin elementor-animation-grow elementor-repeater-item-e396101"
|
||||||
|
href="https://www.linkedin.com/company/microbial-resource-research-infrastructure/?viewAsMember=true"
|
||||||
|
target="_blank"> <span
|
||||||
|
class="elementor-screen-only">Linkedin</span> <i
|
||||||
|
class="fab fa-linkedin"></i> </a></div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="elementor-column elementor-col-33 elementor-top-column elementor-element elementor-element-66b4451"
|
||||||
|
data-id="66b4451" data-element_type="column">
|
||||||
|
<div class="elementor-column-wrap elementor-element-populated">
|
||||||
|
<div class="elementor-widget-wrap">
|
||||||
|
<section
|
||||||
|
class="elementor-section elementor-inner-section elementor-element elementor-element-b3afed7 elementor-section-boxed elementor-section-height-default elementor-section-height-default"
|
||||||
|
data-id="b3afed7" data-element_type="section">
|
||||||
|
<div class="elementor-container elementor-column-gap-default">
|
||||||
|
<div class="elementor-row">
|
||||||
|
<div class="elementor-column elementor-col-33 elementor-inner-column elementor-element elementor-element-7bda5d8"
|
||||||
|
data-id="7bda5d8" data-element_type="column">
|
||||||
|
<div
|
||||||
|
class="elementor-column-wrap elementor-element-populated">
|
||||||
|
<div class="elementor-widget-wrap">
|
||||||
|
<div class="elementor-element elementor-element-267f0f6 elementor-view-default elementor-widget elementor-widget-icon"
|
||||||
|
data-id="267f0f6" data-element_type="widget"
|
||||||
|
data-widget_type="icon.default">
|
||||||
|
<div class="elementor-widget-container">
|
||||||
|
<div class="elementor-icon-wrapper">
|
||||||
|
<div class="elementor-icon"> <i
|
||||||
|
aria-hidden="true"
|
||||||
|
class="fas fa-map-pin"></i>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="elementor-column elementor-col-66 elementor-inner-column elementor-element elementor-element-eebb821"
|
||||||
|
data-id="eebb821" data-element_type="column">
|
||||||
|
<div
|
||||||
|
class="elementor-column-wrap elementor-element-populated">
|
||||||
|
<div class="elementor-widget-wrap">
|
||||||
|
<div class="elementor-element elementor-element-8e7ee7d elementor-widget elementor-widget-text-editor"
|
||||||
|
data-id="8e7ee7d" data-element_type="widget"
|
||||||
|
data-widget_type="text-editor.default">
|
||||||
|
<div class="elementor-widget-container">
|
||||||
|
<div
|
||||||
|
class="elementor-text-editor elementor-clearfix">
|
||||||
|
<h5
|
||||||
|
class="elementor-icon-box-title">
|
||||||
|
MIRRI European Headquarters</h5>
|
||||||
|
<p
|
||||||
|
class="elementor-icon-box-description">
|
||||||
|
University of Minho Campus of
|
||||||
|
Gualtar Pedagogic Complex
|
||||||
|
3, <span
|
||||||
|
style="font-size: 1rem;">Floor
|
||||||
|
0 </span></p>
|
||||||
|
<p
|
||||||
|
class="elementor-icon-box-description">
|
||||||
|
<span
|
||||||
|
style="font-size: 1rem;">4710-057
|
||||||
|
Braga Portugal</span></p>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</section>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="elementor-column elementor-col-33 elementor-top-column elementor-element elementor-element-4a8e712"
|
||||||
|
data-id="4a8e712" data-element_type="column">
|
||||||
|
<div class="elementor-column-wrap elementor-element-populated">
|
||||||
|
<div class="elementor-widget-wrap">
|
||||||
|
<section
|
||||||
|
class="elementor-section elementor-inner-section elementor-element elementor-element-2476247 elementor-section-boxed elementor-section-height-default elementor-section-height-default"
|
||||||
|
data-id="2476247" data-element_type="section">
|
||||||
|
<div class="elementor-container elementor-column-gap-default">
|
||||||
|
<div class="elementor-row">
|
||||||
|
<div class="elementor-column elementor-col-33 elementor-inner-column elementor-element elementor-element-f17a0f3"
|
||||||
|
data-id="f17a0f3" data-element_type="column">
|
||||||
|
<div
|
||||||
|
class="elementor-column-wrap elementor-element-populated">
|
||||||
|
<div class="elementor-widget-wrap">
|
||||||
|
<div class="elementor-element elementor-element-afb3c4f elementor-view-default elementor-widget elementor-widget-icon"
|
||||||
|
data-id="afb3c4f" data-element_type="widget"
|
||||||
|
data-widget_type="icon.default">
|
||||||
|
<div class="elementor-widget-container">
|
||||||
|
<div class="elementor-icon-wrapper">
|
||||||
|
<div class="elementor-icon"> <i
|
||||||
|
aria-hidden="true"
|
||||||
|
class="far fa-envelope"></i>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="elementor-column elementor-col-66 elementor-inner-column elementor-element elementor-element-f158555"
|
||||||
|
data-id="f158555" data-element_type="column">
|
||||||
|
<div
|
||||||
|
class="elementor-column-wrap elementor-element-populated">
|
||||||
|
<div class="elementor-widget-wrap">
|
||||||
|
<div class="elementor-element elementor-element-6cb5b86 elementor-widget elementor-widget-text-editor"
|
||||||
|
data-id="6cb5b86" data-element_type="widget"
|
||||||
|
data-widget_type="text-editor.default">
|
||||||
|
<div class="elementor-widget-container">
|
||||||
|
<div
|
||||||
|
class="elementor-text-editor elementor-clearfix">
|
||||||
|
<h5
|
||||||
|
class="elementor-icon-box-title">
|
||||||
|
Email</h5>
|
||||||
|
<p
|
||||||
|
class="elementor-icon-box-description">
|
||||||
|
info@mirri.org</p>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</section>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</section>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</footer>
|
||||||
|
<!--Footer Content End-->
|
||||||
|
</div>
|
||||||
|
</body>
|
||||||
|
</html>
|
||||||
12
web_tools/templates/index.html
Normal file
@ -0,0 +1,12 @@
|
|||||||
|
{% extends "base.html" %}
|
||||||
|
{% load static %}
|
||||||
|
{% block title %} Mirri tools {% endblock title %}
|
||||||
|
{% block navigator %} Mirri tools {% endblock navigator %}
|
||||||
|
{% block page_title %} {% endblock page_title %}
|
||||||
|
{% block content %}
|
||||||
|
<h2>Here you can find useful tools to deal with MIRRI data</h2>
|
||||||
|
<!-- <ul>
|
||||||
|
<li><a href='/validator'>Validator</a></li>
|
||||||
|
</ul> -->
|
||||||
|
|
||||||
|
{% endblock content %}
|
||||||
47
web_tools/templates/tools_index.html
Normal file
@ -0,0 +1,47 @@
|
|||||||
|
{% extends "base.html" %}
|
||||||
|
{% load static %}
|
||||||
|
{% block title %} MIRRI tools index{% endblock title %}
|
||||||
|
{% block navigator %} Tool Index {% endblock navigator %}
|
||||||
|
{% block page_title %} {% endblock page_title %}
|
||||||
|
{% block content %}
|
||||||
|
<div class="elementor-column-wrap elementor-element-populated">
|
||||||
|
<div class="elementor-widget-wrap">
|
||||||
|
<div class="elementor-element elementor-element-b5feb0c elementor-widget elementor-widget-jet-portfolio"
|
||||||
|
data-id="b5feb0c" data-element_type="widget" data-widget_type="jet-portfolio.default">
|
||||||
|
<div class="elementor-widget-container">
|
||||||
|
<div class="elementor-jet-portfolio jet-elements">
|
||||||
|
<div class="jet-portfolio layout-type-grid preset-type-1 layout-desktop-column-3 layout-tablet-column-2 layout-mobile-column-1"
|
||||||
|
data-settings="{"layoutType":"grid","columns":"3","columnsTablet":"2","columnsMobile":"1","perPage":6}">
|
||||||
|
<div class="jet-portfolio__list">
|
||||||
|
<article class="jet-portfolio__item visible-status item-loaded"
|
||||||
|
data-slug="{"0":"all"}">
|
||||||
|
<div class="jet-portfolio__inner" style="opacity: 1; transform: scale(1);"> <a
|
||||||
|
class="jet-portfolio__link " href="/tools/validator/">
|
||||||
|
<div class="jet-portfolio__image"> <noscript><img
|
||||||
|
class="jet-portfolio__image-instance"
|
||||||
|
src="{% static 'web_tools/validator.png' %}" width="300"
|
||||||
|
height="300" alt="R1ZN0XF9"></noscript><img
|
||||||
|
class="jet-portfolio__image-instance lazyloaded"
|
||||||
|
src="{% static 'web_tools/validator.png' %}"
|
||||||
|
data-src="{% static 'web_tools/validator.png' %}" alt="R1ZN0XF9"
|
||||||
|
width="300" height="300"></div>
|
||||||
|
</a>
|
||||||
|
<div class="jet-portfolio__content">
|
||||||
|
<div class="jet-portfolio__content-inner">
|
||||||
|
<h4 class="jet-portfolio__title">Validator</h4>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</article>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<!-- <ul>
|
||||||
|
<li><a href='/validator'>Validator</a></li>
|
||||||
|
</ul> -->
|
||||||
|
|
||||||
|
{% endblock content %}
|
||||||
86
web_tools/templates/validation_html_output.html
Normal file
@ -0,0 +1,86 @@
|
|||||||
|
{% extends "base.html" %}
|
||||||
|
{% load web_tool_utils %}
|
||||||
|
{% block title %} MIRRI Validation tool {% endblock title %}
|
||||||
|
{% block navigator%} MIRRI Validation tool{% endblock navigator%}
|
||||||
|
{% block page_title %} MIRRI v20200601 specifications validator {% endblock page_title %}
|
||||||
|
{% block content %}
|
||||||
|
<div>
|
||||||
|
{% if not validation_done%}
|
||||||
|
<div class="info">
|
||||||
|
|
||||||
|
<p>Please refer to this instructions to compile your excel file:</p>
|
||||||
|
<ul>
|
||||||
|
<li>
|
||||||
|
<a href="https://synology.mirri.org:5019/d/f/585510897426937562" target="_blank" >HowToCompileTheSheets_v20200601.pdf</a>
|
||||||
|
</li>
|
||||||
|
<li>
|
||||||
|
<a href="https://synology.mirri.org:5019/d/f/585510897965905633" target="_blank">RecommendationsToCollections_v20200601.pdf</a>
|
||||||
|
</li>
|
||||||
|
</ul>
|
||||||
|
<p>You can also contact the MIRRI ICT by email using <a href="mailto:ict-support@mirri.org">ICT Support</a></p>
|
||||||
|
<br />
|
||||||
|
|
||||||
|
</div>
|
||||||
|
{% endif%}
|
||||||
|
|
||||||
|
{% if not validation_done %}
|
||||||
|
<div>
|
||||||
|
<form action="" enctype="multipart/form-data" method="post">
|
||||||
|
{% csrf_token %}
|
||||||
|
<ul>
|
||||||
|
<li>{{ form.file.errors }}<label for="name"></label>{{ form.file }}</li>
|
||||||
|
<li>
|
||||||
|
{{ form.file.errors }}{{ form.do_upload }}
|
||||||
|
<label for="name">Check it if you want to upload the file if it complies with the specifications</label>
|
||||||
|
</li>
|
||||||
|
</ul>
|
||||||
|
<input type="submit" value="Validate" />
|
||||||
|
</form>
|
||||||
|
</div>
|
||||||
|
{% endif%}
|
||||||
|
{% if validation_done %}
|
||||||
|
{% if valid %}
|
||||||
|
<h3> Congratulations, Your file <span style='font-weigth: bold'>{{fname}}</span> <span class="strong">complies</span> the mirri specs </h3>
|
||||||
|
{% if uploaded %}
|
||||||
|
<p>Your file has been uploaded to MIRRI Storage Correctly. Once an Admin notices it, data will be uploaded into MIRRI-IS</p>
|
||||||
|
{% endif %}
|
||||||
|
{% else %}
|
||||||
|
<p>Dear Curator of Culture Collection {{culture_collection}}:</p>
|
||||||
|
<p>The ExcelFile <span class="strong">{{fname}}</span> you’ve provided on {{file_date}} with your collection Strains Data contains errors/inconsistencies/missing data.</p>
|
||||||
|
<p>Please, see below the list of detected errors/missing data, for you to proceed with the appropriated correction/completion.</p>
|
||||||
|
<p>If you need help, please refer to the instructions contained in <a href="https://synology.mirri.org:5019/d/f/585510897426937562" target="_blank" >HowToCompileTheSheets_v20200601.pdf</a> and <a href="https://synology.mirri.org:5019/d/f/585510897965905633" target="_blank">RecommendationsToCollections_v20200601.pdf</a>.
|
||||||
|
|
||||||
|
<p>You can also contact the MIRRI ICT by email using: <a href="mailto:ict-support@mirri.org">ICT Support</a></p>
|
||||||
|
<p>You can download the report <a href='{{error_pdf_url}}' target='_blank'>Here</a></p>
|
||||||
|
|
||||||
|
<br />
|
||||||
|
|
||||||
|
<h4>Check the error and fix them before submitting them again:</h4>
|
||||||
|
{% for entity, errors in all_errors.items %}
|
||||||
|
|
||||||
|
<div style='margin-top:40px;'>
|
||||||
|
<h3>{{entity}}</h3>
|
||||||
|
<table class='error_table' style='width:100%;margin-bottom:20px;'>
|
||||||
|
<tr style='border-bottom: 1px solid black;'>
|
||||||
|
<th>Identifier</th>
|
||||||
|
<th>Error Message</th>
|
||||||
|
<th>Error Code</th>
|
||||||
|
</tr>
|
||||||
|
{% for error in errors%}
|
||||||
|
<tr style='border-bottom: 1px dotted grey;'>
|
||||||
|
<td style='width:6em'>{% if error.pk is None %} - {% else %} {{error.pk}} {% endif%} </td>
|
||||||
|
<td>{{error.message|add_span_tag}}</td>
|
||||||
|
<td style='width:6em'>{{error.code}}</td>
|
||||||
|
</tr>
|
||||||
|
{% endfor %}
|
||||||
|
</table>
|
||||||
|
</div>
|
||||||
|
{% endfor %}
|
||||||
|
{% if total_errors > error_limited_to %}
|
||||||
|
<h4 style='margin-top: 40px'>You have more than {{error_limited_to}} errors. They have been hidden.</h4>
|
||||||
|
{% endif %}
|
||||||
|
<button onclick="javascript:window.history.back();">Try again</button>
|
||||||
|
{% endif %}
|
||||||
|
{% endif %}
|
||||||
|
</div>
|
||||||
|
{% endblock content %}
|
||||||
111
web_tools/templates/validation_pdf_output.html
Normal file
@ -0,0 +1,111 @@
|
|||||||
|
{% load web_tool_utils %}
|
||||||
|
<!DOCTYPE html>
|
||||||
|
<html>
|
||||||
|
<head>
|
||||||
|
<style type='text/css'>
|
||||||
|
.error_table {
|
||||||
|
width: 100%;
|
||||||
|
}
|
||||||
|
|
||||||
|
.error_table td, .error_table th {
|
||||||
|
border: 1px solid #ddd;
|
||||||
|
padding: 8px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.error_table tr:nth-child{background-color: #f2f2f2;}
|
||||||
|
|
||||||
|
.error_table tr:hover {background-color: #ddd;}
|
||||||
|
|
||||||
|
.error_table th {
|
||||||
|
background-color: #ddd;
|
||||||
|
}
|
||||||
|
.header_row {
|
||||||
|
border-bottom: 1px solid black;
|
||||||
|
}
|
||||||
|
.id_column {
|
||||||
|
width: 120px;
|
||||||
|
}
|
||||||
|
.error_code_column {
|
||||||
|
width: 80px;
|
||||||
|
}
|
||||||
|
body {
|
||||||
|
font-size: 1.2em;
|
||||||
|
}
|
||||||
|
</style>
|
||||||
|
</head>
|
||||||
|
<body>
|
||||||
|
|
||||||
|
<div style='width: 100%;padding:10px'>
|
||||||
|
<p>Dear Curator of Culture Collection {{culture_collection}}:</p>
|
||||||
|
<p>The ExcelFile <span class="strong">{{fname}}</span> you’ve provided on {{file_date}} with your collection Strains Data contains errors/ inconsistencies/ missing data.<br>
|
||||||
|
Please, see below the list of detected errors/missing data, for you to proceed with the appropriated correction/completion.<br>
|
||||||
|
If you need help, please refer to the instructions contained in <a href="https://synology.mirri.org:5019/d/f/585510897426937562" target="_blank" >HowToCompileTheSheets_v20200601.pdf</a> and <a href="https://synology.mirri.org:5019/d/f/585510897965905633" target="_blank">RecommendationsToCollections_v20200601.pdf</a>.</p>
|
||||||
|
|
||||||
|
<p>You can also contact the MIRRI ICT by email using: <a href="mailto:ict-support@mirri.org">ICT Support</a></p>
|
||||||
|
|
||||||
|
<h2>Check the error and fix them before submitting them again:</h2>
|
||||||
|
{% for entity, errors in all_errors.items %}
|
||||||
|
<h3>{{entity}}</h3>
|
||||||
|
<table class='error_table'>
|
||||||
|
<thead>
|
||||||
|
<tr class='header_row'>
|
||||||
|
<th class='id_column'>Identifier</th>
|
||||||
|
<th>Error Message</th>
|
||||||
|
<th class='error_code_column'>Error Code</th>
|
||||||
|
</tr>
|
||||||
|
</thead>
|
||||||
|
<tbody>
|
||||||
|
{% for error in errors%}
|
||||||
|
<tr style='border-bottom: 1px dotted grey;'>
|
||||||
|
<td class='id_column'>{% if error.pk is None %} - {% else %} {{error.pk}} {% endif%} </td>
|
||||||
|
<td>{{error.message|add_span_tag}}</td>
|
||||||
|
<td class='error_code_column'>{{error.code}}</td>
|
||||||
|
</tr>
|
||||||
|
{% endfor %}
|
||||||
|
</tbody>
|
||||||
|
</table>
|
||||||
|
{% endfor %}
|
||||||
|
</div>
|
||||||
|
|
||||||
|
{% comment %}
|
||||||
|
|
||||||
|
<h2 style='text-align:center'> MIRRI validator Report for {{ fname }}</h2>
|
||||||
|
<p>Please refer to this instructions to compile your excel file:</p>
|
||||||
|
<ul>
|
||||||
|
<li>
|
||||||
|
<a href="https://synology.mirri.org:5019/d/f/585510897426937562" target="_blank" >HowToCompileTheSheets_v20200601.pdf</a>
|
||||||
|
</li>
|
||||||
|
<li>
|
||||||
|
<a href="https://synology.mirri.org:5019/d/f/585510897965905633" target="_blank">RecommendationsToCollections_v20200601.pdf</a>
|
||||||
|
</li>
|
||||||
|
</ul>
|
||||||
|
<p>You can also contact the MIRRI ICT by email using <a href="mailto:ict-support@mirri.org">ICT Support</a></p>
|
||||||
|
<br />
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<h3 style='text-align:center'>The Excel File has errors</h3>
|
||||||
|
<h4 style='text-align:center'>Check the error and fix them before submitting them again:</h4>
|
||||||
|
|
||||||
|
{% for entity, errors in all_errors.items%}
|
||||||
|
<table id='error_table'>
|
||||||
|
{{entity}}
|
||||||
|
<tr style='border-bottom: 1px solid black;'>
|
||||||
|
<th>Identifier</th>
|
||||||
|
<th>Error Message</th>
|
||||||
|
<th>Error Code</th>
|
||||||
|
</tr>
|
||||||
|
{% for error in errors%}
|
||||||
|
<tr>
|
||||||
|
<td style='width:6em'>{% if error.pk is None %} - {% else %} {{error.pk}} {% endif %} </td>
|
||||||
|
<td>{{error.message}}</td>
|
||||||
|
<td style='width:6em'>{{error.code}}</td>
|
||||||
|
</tr>
|
||||||
|
{% endfor %}
|
||||||
|
</table>
|
||||||
|
{% endfor %}
|
||||||
|
{% if more_errors != 0%}
|
||||||
|
<h4>You have more errors that we have hidden</h4>
|
||||||
|
{% endif %} {% endcomment %}
|
||||||
|
|
||||||
|
</body>
|
||||||
|
</html>
|
||||||
0
web_tools/templatetags/__init__.py
Normal file
9
web_tools/templatetags/web_tool_utils.py
Normal file
@ -0,0 +1,9 @@
|
|||||||
|
from django import template
|
||||||
|
from django.utils.safestring import mark_safe
|
||||||
|
|
||||||
|
register = template.Library()
|
||||||
|
|
||||||
|
@register.filter()
|
||||||
|
def add_span_tag(value):
|
||||||
|
value = value.replace(" '", " <span style='font-weight: bold;'>'")
|
||||||
|
return mark_safe(value.replace("' ", "'</span> "))
|
||||||
3
web_tools/tests.py
Normal file
@ -0,0 +1,3 @@
|
|||||||
|
from django.test import TestCase
|
||||||
|
|
||||||
|
# Create your tests here.
|
||||||
8
web_tools/urls.py
Normal file
@ -0,0 +1,8 @@
|
|||||||
|
from django.urls import path
|
||||||
|
|
||||||
|
from . import views
|
||||||
|
|
||||||
|
|
||||||
|
urlpatterns = [path("tools/validator/", views.validation_view),
|
||||||
|
path('tools/', views.tool_list_view),
|
||||||
|
path("", views.index)]
|
||||||
128
web_tools/views.py
Normal file
@ -0,0 +1,128 @@
|
|||||||
|
import string
|
||||||
|
import random
|
||||||
|
import os.path
|
||||||
|
from typing import OrderedDict
|
||||||
|
import uuid
|
||||||
|
from datetime import datetime
|
||||||
|
|
||||||
|
from django.template.loader import get_template
|
||||||
|
from django.shortcuts import render
|
||||||
|
from django.template.context_processors import csrf
|
||||||
|
from django.conf import settings as global_settings
|
||||||
|
|
||||||
|
from xhtml2pdf import pisa
|
||||||
|
|
||||||
|
from mirri.validation.excel_validator import validate_mirri_excel
|
||||||
|
from mirri.validation.error_logging.error import Entity
|
||||||
|
|
||||||
|
from web_tools import settings
|
||||||
|
from web_tools.forms import ValidationUploadForm
|
||||||
|
from web_tools.send_mail import send_mail
|
||||||
|
|
||||||
|
|
||||||
|
def random_choice():
|
||||||
|
alphabet = string.ascii_lowercase + string.digits
|
||||||
|
return ''.join(random.choices(alphabet, k=8))
|
||||||
|
|
||||||
|
|
||||||
|
def render_to_pdf(template_name, context, out_fhand):
|
||||||
|
template = get_template(template_name)
|
||||||
|
html = template.render(context)
|
||||||
|
# print(html)
|
||||||
|
return pisa.CreatePDF(html.strip(), dest=out_fhand)
|
||||||
|
|
||||||
|
|
||||||
|
def validation_view(request):
|
||||||
|
context = {}
|
||||||
|
context.update(csrf(request))
|
||||||
|
if request.method == "GET":
|
||||||
|
request_data = request.GET
|
||||||
|
elif request.method == "POST":
|
||||||
|
request_data = request.POST
|
||||||
|
else:
|
||||||
|
request_data = None
|
||||||
|
form = None
|
||||||
|
|
||||||
|
if request_data:
|
||||||
|
form = ValidationUploadForm(request_data, request.FILES)
|
||||||
|
if form.is_valid():
|
||||||
|
fhand = form.cleaned_data["file"]
|
||||||
|
fname = fhand.name
|
||||||
|
do_upload = form.cleaned_data['do_upload']
|
||||||
|
version = '20200601'
|
||||||
|
|
||||||
|
error_log = validate_mirri_excel(fhand, version=version)
|
||||||
|
all_errors = error_log.get_errors()
|
||||||
|
total_num_errors = sum(len(errors) for errors in all_errors.values())
|
||||||
|
errors_filtered_by_size = prepare_dict_to_show(all_errors,
|
||||||
|
limit=settings.NUM_ERROR_LIMIT)
|
||||||
|
|
||||||
|
uploaded = False
|
||||||
|
valid = not total_num_errors
|
||||||
|
|
||||||
|
if valid and do_upload:
|
||||||
|
out_dir = settings.VALID_EXCEL_UPLOAD_DIR
|
||||||
|
date_uuid = datetime.now().strftime('%Y%m%d-%H:%M:%S')
|
||||||
|
path = out_dir / f'{date_uuid}_{fname}'
|
||||||
|
|
||||||
|
with path.open('wb') as out_fhand:
|
||||||
|
fhand.seek(0)
|
||||||
|
out_fhand.write(fhand.read())
|
||||||
|
uploaded = True
|
||||||
|
|
||||||
|
if settings.NOTIFICATION_RECEIVERS:
|
||||||
|
send_mail(settings.NOTIFICATION_RECEIVERS, path.name)
|
||||||
|
|
||||||
|
context['uploaded'] = uploaded
|
||||||
|
context['fname'] = fname
|
||||||
|
context["valid"] = valid
|
||||||
|
context["all_errors"] = errors_filtered_by_size
|
||||||
|
context['total_errors'] = total_num_errors
|
||||||
|
context['error_limited_to'] = settings.NUM_ERROR_LIMIT
|
||||||
|
|
||||||
|
if not valid:
|
||||||
|
_uuid = str(uuid.uuid4())
|
||||||
|
error_fname = f'out_pdf/{_uuid}mirri_validator_output.pdf'
|
||||||
|
|
||||||
|
error_pdf_fpath = os.path.join(global_settings.MEDIA_ROOT,
|
||||||
|
error_fname)
|
||||||
|
|
||||||
|
error_pdf_url = global_settings.MEDIA_URL + error_fname
|
||||||
|
|
||||||
|
with open(error_pdf_fpath, 'wb') as out_fhand:
|
||||||
|
result = render_to_pdf("validation_pdf_output.html", context,
|
||||||
|
out_fhand)
|
||||||
|
if result.err == 0:
|
||||||
|
pdf_creation_error = True
|
||||||
|
context['error_pdf_url'] = error_pdf_url
|
||||||
|
|
||||||
|
context["validation_done"] = True
|
||||||
|
|
||||||
|
else:
|
||||||
|
form = ValidationUploadForm()
|
||||||
|
context["validation_done"] = False
|
||||||
|
context["form"] = form
|
||||||
|
|
||||||
|
template = "validation_html_output.html"
|
||||||
|
content_type = None
|
||||||
|
return render(request, template, context=context, content_type=content_type)
|
||||||
|
|
||||||
|
def prepare_dict_to_show(dictionary, limit):
|
||||||
|
new_dict = OrderedDict()
|
||||||
|
remaining = limit
|
||||||
|
for key, values in dictionary.items():
|
||||||
|
new_values = values[:remaining] if len(values) >= remaining else values
|
||||||
|
remaining -= len(new_values)
|
||||||
|
key = Entity(key).name
|
||||||
|
new_dict[key] = new_values
|
||||||
|
if remaining <= 0:
|
||||||
|
break
|
||||||
|
return new_dict
|
||||||
|
|
||||||
|
|
||||||
|
def index(request):
|
||||||
|
return render(request, "index.html")
|
||||||
|
|
||||||
|
|
||||||
|
def tool_list_view(request):
|
||||||
|
return render(request, "tools_index.html")
|
||||||