Better Tagggin integration

This commit is contained in:
reverend 2020-09-01 18:20:02 +02:00
parent 328e6899a6
commit 6ed6c2c990
6 changed files with 140 additions and 51 deletions

View File

@ -51,4 +51,4 @@ class PlaceImageCreateForm(forms.ModelForm):
class TagSubmitForm(forms.Form):
tag_list = forms.CharField(max_length=500)
tag_list = forms.CharField(max_length=500, required=False)

View File

@ -574,7 +574,8 @@ body {
padding: 8px 14px;
border-radius: 2px;
font-weight: bold;
cursor: pointer; }
cursor: pointer;
white-space: nowrap; }
.LP-Button:active {
background-color: #76323F;
color: #f9f9f9; }
@ -600,19 +601,28 @@ body {
flex-direction: column;
margin-bottom: -30px;
padding: 10px 0; }
.LP-Input .LP-Input__Field {
.LP-Input--tagging .LP-Button {
height: 53px; }
.LP-Input--tagging .LP-Input__Field, .LP-Input--tagging .tagify {
min-height: 35px;
height: max-content;
font-family: Montserrat, Helvetica, sans-serif;
font-size: 1em;
padding: 0;
padding-left: 8px; }
.LP-Input .LP-Input__Field, .LP-Input .tagify {
border: none;
border-bottom: 1px solid #565656;
padding: 8px 0;
margin-bottom: 30px;
width: 100%; }
.LP-Input .LP-Input__Field:focus, .LP-Input .LP-Input__Field:active, .LP-Input .LP-Input__Field:invalid {
.LP-Input .LP-Input__Field:focus, .LP-Input .tagify:focus, .LP-Input .LP-Input__Field:active, .LP-Input .tagify:active, .LP-Input .LP-Input__Field:invalid, .LP-Input .tagify:invalid, .LP-Input .LP-Input__Field--active, .LP-Input .tagify--focus {
margin-bottom: 29px;
border-bottom: 2px solid #76323F;
background-color: #f9f9f9;
border-radius: 3px 3px 0 0;
box-shadow: none; }
.LP-Input .LP-Input__Field[type=submit] {
.LP-Input .LP-Input__Field[type=submit], .LP-Input .tagify[type=submit] {
background-color: #C09F80;
color: #565656;
border: none;
@ -620,7 +630,7 @@ body {
border-radius: 2px;
font-weight: bold;
cursor: pointer; }
.LP-Input .LP-Input__Field[type=submit]:active {
.LP-Input .LP-Input__Field[type=submit]:active, .LP-Input .tagify[type=submit]:active {
background-color: #76323F;
color: #f9f9f9; }
.LP-Input .LP-Input__Label {
@ -636,22 +646,30 @@ body {
position: relative;
top: -30px;
overflow: hidden; }
.LP-Input--error .LP-Input__Field {
.LP-Input--error .LP-Input__Field, .LP-Input--error .tagify {
margin-bottom: 25px;
border-bottom: 2px solid #76323F;
margin-bottom: 29px; }
.LP-Input--error .LP-Input__Message {
color: #76323F; }
.LP-Input--disabled .LP-Input__Field, .LP-Input--disabled .LP-Input__Field:disabled {
.LP-Input--disabled .LP-Input__Field, .LP-Input--disabled .tagify,
.LP-Input--disabled .LP-Input__Field:disabled,
.LP-Input--disabled .tagify:disabled {
background-color: transparent;
border-bottom: 1px dashed #565656;
cursor: not-allowed; }
label + .LP-Input--disabled .LP-Input__Field, label + .LP-Input--disabled .LP-Input__Field:disabled {
label + .LP-Input--disabled .LP-Input__Field, label + .LP-Input--disabled .tagify, label + .LP-Input--disabled .LP-Input__Field:disabled, label + .LP-Input--disabled .tagify:disabled {
color: red; }
.LP-Input--disabled .LP-Input__Field:focus, .LP-Input--disabled .LP-Input__Field:active, .LP-Input--disabled .LP-Input__Field:disabled:focus, .LP-Input--disabled .LP-Input__Field:disabled:active {
.LP-Input--disabled .LP-Input__Field:focus, .LP-Input--disabled .tagify:focus, .LP-Input--disabled .LP-Input__Field:active, .LP-Input--disabled .tagify:active,
.LP-Input--disabled .LP-Input__Field:disabled:focus,
.LP-Input--disabled .tagify:disabled:focus,
.LP-Input--disabled .LP-Input__Field:disabled:active,
.LP-Input--disabled .tagify:disabled:active {
margin-bottom: 30px;
border-radius: 0; }
.LP-Input--disabled .LP-Input__Field ~ .LP-Input__Message, .LP-Input--disabled .LP-Input__Field:disabled ~ .LP-Input__Message {
.LP-Input--disabled .LP-Input__Field ~ .LP-Input__Message, .LP-Input--disabled .tagify ~ .LP-Input__Message,
.LP-Input--disabled .LP-Input__Field:disabled ~ .LP-Input__Message,
.LP-Input--disabled .tagify:disabled ~ .LP-Input__Message {
visibility: hidden; }
.LP-Input--disabled .LP-Input__Label {
color: #565656; }
@ -670,12 +688,14 @@ body {
width: auto;
object-fit: contain; }
.LP-Tag {
.LP-Tag, .tagify__tag {
padding: 8px 14px;
background-color: #D7CEC7;
border-radius: 2px;
width: max-content; }
.LP-Tag .LP-Paragraph {
.LP-Tag:hover, .tagify__tag:hover {
background-color: #bdbdbd; }
.LP-Tag .LP-Paragraph, .tagify__tag .LP-Paragraph {
padding: 0;
margin: 0;
font-family: Montserrat, Helvetica, sans-serif;
@ -861,8 +881,8 @@ body {
flex-wrap: wrap;
padding: 0;
margin: 0; }
.LP-TagList .LP-TagList__List .LP-TagList__Item {
margin: 6px; }
.LP-TagList .LP-TagList__List .LP-TagList__Item, .LP-TagList .LP-TagList__List .tagify__tag {
margin: 3px; }
.LP-Menu {
border-left: 1px solid #C09F80; }
@ -1189,7 +1209,13 @@ body {
.LP-Footer .LP-LinkList__List .LP-LinkList__Item .LP-Link:hover {
background-color: inherit; }
.LP-Form--inline .LP-Form__Legend, .LP-Form--inline .LP-Input__Label {
.LP-Form--tagging {
margin-top: 25px; }
.LP-Form--tagging div.LP-Form__Composition {
gap: 25px; }
.LP-Form--inline .LP-Form__Legend,
.LP-Form--inline .LP-Input__Label {
display: none; }
.LP-Form--inline .LP-Form__Button {
@ -1198,6 +1224,12 @@ body {
width: min-content;
flex-basis: max-content; }
.LP-Form--inline fieldset.LP-Form__Fieldset {
max-width: unset; }
.LP-Form--inline div.LP-Form__Composition {
padding: 0; }
@media (max-width: 450px) {
.LP-Form:not(.LP-Form--inline) .LP-Form__Composition {
flex-wrap: wrap; } }
@ -1359,25 +1391,23 @@ body {
border: none; }
.LP-ImageGrid__Container {
gap: 10px; }
.LP-ImageGrid .LP-ImageGrid__Item {
box-shadow: 0 0 10px #565656; }
.LP-ImageGrid .LP-ImageGrid__Item, .LP-ImageGrid .LP-ImageGrid__Item * {
overflow: hidden;
word-break: break-all; }
.LP-ImageGrid .LP-ImageGrid__Item img {
width: 100%;
height: 100%;
object-fit: cover; }
.LP-ImageGrid .LP-ImageGrid__Item--left img {
object-position: left; }
.LP-ImageGrid .LP-ImageGrid__Item--center img {
object-position: center; }
.LP-ImageGrid .LP-ImageGrid__Item--top img {
object-position: top; }
.LP-ImageGrid .LP-ImageGrid__Item--bottom img {
object-position: botom; }
.LP-ImageGrid .LP-ImageGrid__Item--center img {
object-position: center; }
.LP-ImageGrid .LP-ImageGrid__Item, .LP-ImageGrid .LP-ImageGrid__Item * {
overflow: hidden;
word-break: break-all; }
.LP-ImageGrid .LP-ImageGrid__Item img {
width: 100%;
height: 100%;
object-fit: cover; }
.LP-ImageGrid .LP-ImageGrid__Item--left img {
object-position: left; }
.LP-ImageGrid .LP-ImageGrid__Item--center img {
object-position: center; }
.LP-ImageGrid .LP-ImageGrid__Item--top img {
object-position: top; }
.LP-ImageGrid .LP-ImageGrid__Item--bottom img {
object-position: botom; }
.LP-ImageGrid .LP-ImageGrid__Item--center img {
object-position: center; }
.LP-MainContainer {
margin: 0 auto;
@ -1413,3 +1443,60 @@ body {
margin: 0;
padding: 0;
margin-bottom: 25px; } }
.tagify {
display: flex;
align-items: center;
gap: 6px;
flex-wrap: wrap; }
.tagify + input,
.tagify + textarea {
display: none; }
.tagify__tag {
background-color: #bdbdbd;
display: inline-flex;
cursor: default;
transition: .13s ease-out;
height: max-content;
align-items: center;
gap: 3px; }
.tagify__tag:hover {
background-color: #e9e9e9; }
.tagify__input {
flex-grow: 1;
display: inline-block;
min-width: 110px;
margin: 5px;
line-height: inherit;
position: relative;
white-space: pre-wrap;
margin-left: 15px; }
.tagify__tag__removeBtn {
order: 5;
cursor: pointer;
font: 1em/1 Arial;
transition: .2s ease-out;
color: #76323F; }
.tagify__tag__removeBtn::after {
content: "\00D7"; }
.tagify__tag__removeBtn:hover {
color: #565656; }
.tagify__tag__removeBtn:hover + div > span {
opacity: .5; }
.tagify__tag__removeBtn:hover + div::before {
box-shadow: 0 0 0 1.1em rgba(211, 148, 148, 0.3) inset !important;
box-shadow: 0 0 0 var(--tag-inset-shadow-size) var(--tag-remove-bg) inset !important;
transition: .2s; }
.tagify__tag--loading .tagify__tag__removeBtn {
display: none; }
.tagify[readonly]:not(.tagify--mix) .tagify__tag__removeBtn {
display: none; }

View File

@ -4,6 +4,9 @@
<html lang="en">
<head>
{% block additional_head %}
{% endblock additional_head %}
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<link rel="stylesheet" href="{% static 'main.css' %}">
@ -12,9 +15,6 @@
{% block title %}Urban Exploration{% endblock %}
</title>
{% block additional_head %}
{% endblock additional_head %}
</head>
<body>

View File

@ -1,16 +1,18 @@
{% load widget_tweaks %}
<div class="LP-Input {% if field.errors %} LP-Input--error {% endif %}">
<div class="LP-Input {% if classes%}{{classes}}{% endif %} {% if field.errors %} LP-Input--error {% endif %}">
<label for="{{field.id_for_label}}" class="LP-Input__Label">{{field.label}}</label>
{% render_field field class="LP-Input__Field"%}
{% with class="LP-Input__Field "%}
{% render_field field class=class%}
{% endwith %}
<span class="LP-Input__Message">
{% if field.errors %}
{% for error in field.errors%}
{{error}}
{% endfor %}
{% for error in field.errors%}
{{error}}
{% endfor %}
{% elif field.help_text%}
{{ field.help_text }}
{{ field.help_text }}
{% endif %}
</span>
</div>

View File

@ -10,16 +10,16 @@
</ul>
</div>
<form id="id_tag_submit_form" class="LP-Form LP-Form--inline" method="POST" action="{{url}}">
<form id="id_tag_submit_form" class="LP-Form LP-Form--inline LP-Form--tagging" method="POST" action="{{url}}">
<fieldset class="LP-Form__Fieldset">
<legend class="LP-Form__Legend">Tags hinzufügen</legend>
{% csrf_token %}
<div class="LP-Form__Composition LP-Form__Composition--breakable">
<div class="LP-Form__Field">
{% include 'partials/form/inputField.html' with field=input_field %}
<div class="LP-Form__Field LP-Form__Button LP-Input LP-Input--tagging">
<button id="id_tag_submit_button" class="LP-Button"> Tags hinzufügen</button>
</div>
<div class="LP-Form__Field LP-Form__Button LP-Input">
<button id="id_tag_submit_button" class="LP-Button">hinzufügen</button>
<div class="LP-Form__Field">
{% include 'partials/form/inputField.html' with field=input_field classes="LP-Input--tagging" %}
</div>
</div>
</fieldset>

View File

@ -6,7 +6,7 @@
{% block additional_head %}
<link rel="stylesheet" href="{% static 'maps/ol.css' %}" type="text/css">
<link rel="stylesheet" href="{% static 'tagify.css' %}">
<script src="{% static 'maps/ol.js' %}"></script>