Compare commits

..

4 Commits

Author SHA1 Message Date
e00c9318fa Tagify dropdown styling 2020-09-01 18:31:46 +02:00
6ed6c2c990 Better Tagggin integration 2020-09-01 18:20:02 +02:00
328e6899a6 Merge branch 'master' into feature/tags 2020-08-31 18:28:21 +02:00
843832d978 Viewport fix 2020-08-31 18:28:12 +02:00
6 changed files with 270 additions and 123 deletions

View File

@ -51,4 +51,4 @@ class PlaceImageCreateForm(forms.ModelForm):
class TagSubmitForm(forms.Form): 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; padding: 8px 14px;
border-radius: 2px; border-radius: 2px;
font-weight: bold; font-weight: bold;
cursor: pointer; } cursor: pointer;
white-space: nowrap; }
.LP-Button:active { .LP-Button:active {
background-color: #76323F; background-color: #76323F;
color: #f9f9f9; } color: #f9f9f9; }
@ -600,19 +601,28 @@ body {
flex-direction: column; flex-direction: column;
margin-bottom: -30px; margin-bottom: -30px;
padding: 10px 0; } 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: 36px;
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: none;
border-bottom: 1px solid #565656; border-bottom: 1px solid #565656;
padding: 8px 0; padding: 8px 0;
margin-bottom: 30px; margin-bottom: 30px;
width: 100%; } 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; margin-bottom: 29px;
border-bottom: 2px solid #76323F; border-bottom: 2px solid #76323F;
background-color: #f9f9f9; background-color: #f9f9f9;
border-radius: 3px 3px 0 0; border-radius: 3px 3px 0 0;
box-shadow: none; } 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; background-color: #C09F80;
color: #565656; color: #565656;
border: none; border: none;
@ -620,7 +630,7 @@ body {
border-radius: 2px; border-radius: 2px;
font-weight: bold; font-weight: bold;
cursor: pointer; } 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; background-color: #76323F;
color: #f9f9f9; } color: #f9f9f9; }
.LP-Input .LP-Input__Label { .LP-Input .LP-Input__Label {
@ -636,22 +646,30 @@ body {
position: relative; position: relative;
top: -30px; top: -30px;
overflow: hidden; } overflow: hidden; }
.LP-Input--error .LP-Input__Field { .LP-Input--error .LP-Input__Field, .LP-Input--error .tagify {
margin-bottom: 25px; margin-bottom: 25px;
border-bottom: 2px solid #76323F; border-bottom: 2px solid #76323F;
margin-bottom: 29px; } margin-bottom: 29px; }
.LP-Input--error .LP-Input__Message { .LP-Input--error .LP-Input__Message {
color: #76323F; } 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; background-color: transparent;
border-bottom: 1px dashed #565656; border-bottom: 1px dashed #565656;
cursor: not-allowed; } 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; } 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; margin-bottom: 30px;
border-radius: 0; } 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; } visibility: hidden; }
.LP-Input--disabled .LP-Input__Label { .LP-Input--disabled .LP-Input__Label {
color: #565656; } color: #565656; }
@ -670,12 +688,14 @@ body {
width: auto; width: auto;
object-fit: contain; } object-fit: contain; }
.LP-Tag { .LP-Tag, .tagify__tag {
padding: 8px 14px; padding: 8px 14px;
background-color: #D7CEC7; background-color: #D7CEC7;
border-radius: 2px; border-radius: 2px;
width: max-content; } 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; padding: 0;
margin: 0; margin: 0;
font-family: Montserrat, Helvetica, sans-serif; font-family: Montserrat, Helvetica, sans-serif;
@ -861,8 +881,8 @@ body {
flex-wrap: wrap; flex-wrap: wrap;
padding: 0; padding: 0;
margin: 0; } margin: 0; }
.LP-TagList .LP-TagList__List .LP-TagList__Item { .LP-TagList .LP-TagList__List .LP-TagList__Item, .LP-TagList .LP-TagList__List .tagify__tag {
margin: 6px; } margin: 3px; }
.LP-Menu { .LP-Menu {
border-left: 1px solid #C09F80; } border-left: 1px solid #C09F80; }
@ -1189,7 +1209,13 @@ body {
.LP-Footer .LP-LinkList__List .LP-LinkList__Item .LP-Link:hover { .LP-Footer .LP-LinkList__List .LP-LinkList__Item .LP-Link:hover {
background-color: inherit; } 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; } display: none; }
.LP-Form--inline .LP-Form__Button { .LP-Form--inline .LP-Form__Button {
@ -1198,6 +1224,12 @@ body {
width: min-content; width: min-content;
flex-basis: max-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) { @media (max-width: 450px) {
.LP-Form:not(.LP-Form--inline) .LP-Form__Composition { .LP-Form:not(.LP-Form--inline) .LP-Form__Composition {
flex-wrap: wrap; } } flex-wrap: wrap; } }
@ -1359,25 +1391,23 @@ body {
border: none; } border: none; }
.LP-ImageGrid__Container { .LP-ImageGrid__Container {
gap: 10px; } gap: 10px; }
.LP-ImageGrid .LP-ImageGrid__Item { .LP-ImageGrid .LP-ImageGrid__Item, .LP-ImageGrid .LP-ImageGrid__Item * {
box-shadow: 0 0 10px #565656; } overflow: hidden;
.LP-ImageGrid .LP-ImageGrid__Item, .LP-ImageGrid .LP-ImageGrid__Item * { word-break: break-all; }
overflow: hidden; .LP-ImageGrid .LP-ImageGrid__Item img {
word-break: break-all; } width: 100%;
.LP-ImageGrid .LP-ImageGrid__Item img { height: 100%;
width: 100%; object-fit: cover; }
height: 100%; .LP-ImageGrid .LP-ImageGrid__Item--left img {
object-fit: cover; } object-position: left; }
.LP-ImageGrid .LP-ImageGrid__Item--left img { .LP-ImageGrid .LP-ImageGrid__Item--center img {
object-position: left; } object-position: center; }
.LP-ImageGrid .LP-ImageGrid__Item--center img { .LP-ImageGrid .LP-ImageGrid__Item--top img {
object-position: center; } object-position: top; }
.LP-ImageGrid .LP-ImageGrid__Item--top img { .LP-ImageGrid .LP-ImageGrid__Item--bottom img {
object-position: top; } object-position: botom; }
.LP-ImageGrid .LP-ImageGrid__Item--bottom img { .LP-ImageGrid .LP-ImageGrid__Item--center img {
object-position: botom; } object-position: center; }
.LP-ImageGrid .LP-ImageGrid__Item--center img {
object-position: center; }
.LP-MainContainer { .LP-MainContainer {
margin: 0 auto; margin: 0 auto;
@ -1413,3 +1443,115 @@ body {
margin: 0; margin: 0;
padding: 0; padding: 0;
margin-bottom: 25px; } } 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; }
.tagify__dropdown {
position: absolute;
z-index: 9999;
transform: translateY(1px);
overflow: hidden; }
.tagify__dropdown[placement=top] {
margin-top: 0;
transform: translateY(-100%); }
.tagify__dropdown[placement=top] .tagify__dropdown__wrapper {
border-top-width: 1px;
border-bottom-width: 0; }
.tagify__dropdown[position=text] {
box-shadow: 0 0 0 3px rgba(var(--tagify-dd-color-primary), 0.1);
font-size: .9em; }
.tagify__dropdown[position=text] .tagify__dropdown__wrapper {
border-width: 1px; }
.tagify__dropdown__wrapper {
max-height: 300px;
overflow: hidden;
background-color: #f9f9f9;
box-shadow: 0 2px 4px -2px rgba(0, 0, 0, 0.2);
transition: 0.25s cubic-bezier(0, 1, 0.5, 1); }
.tagify__dropdown__wrapper:hover {
overflow: auto; }
.tagify__dropdown--initial .tagify__dropdown__wrapper {
max-height: 20px;
transform: translateY(-1em); }
.tagify__dropdown--initial[placement=top] .tagify__dropdown__wrapper {
transform: translateY(2em); }
.tagify__dropdown__item {
box-sizing: inherit;
padding: .3em .5em;
margin: 1px;
cursor: pointer;
border-radius: 2px;
position: relative;
outline: 0;
font-family: Montserrat, Helvetica, sans-serif; }
.tagify__dropdown__item--active {
color: #f9f9f9;
background-color: gray; }
.tagify__dropdown__item:active {
filter: brightness(105%); }

View File

@ -2,82 +2,85 @@
<!DOCTYPE html> <!DOCTYPE html>
<html lang="en"> <html lang="en">
<head>
<meta charset="UTF-8">
<link rel="stylesheet" href="{% static 'main.css' %}">
<link rel="icon" type="image/png" href="{% static 'favicon.ico' %}">
<title>
{% block title %}Urban Exploration{% endblock %}
</title>
{% block additional_head %}
{% endblock additional_head %}
</head>
<body> <head>
<div class="LP-Wrapper__Site"> {% block additional_head %}
<header class="LP-Header"> {% endblock additional_head %}
<div class="LP-Header__Logo">
<a class="LP-Link" href="/"> <meta charset="UTF-8">
<img src="{% static 'logo.png' %}" class="LP-Image" /> <meta name="viewport" content="width=device-width, initial-scale=1.0">
</a> <link rel="stylesheet" href="{% static 'main.css' %}">
</div> <link rel="icon" type="image/png" href="{% static 'favicon.ico' %}">
<div class="LP-Header__UserInformation"> <title>
<span class="LP-Paragraph"> {% block title %}Urban Exploration{% endblock %}
{% if user.is_authenticated %} </title>
Hi {{ user.username }}!
<a class="LP-Link" href="{% url 'logout' %}"><span class="LP-Link__Text">logout</span></a> </head>
{% if user.is_superuser %}
| <a class="LP-Link" href="{% url 'admin:index' %}" target="_blank"><span class="LP-Link__Text">admin</span></a> <body>
{% endif %} <div class="LP-Wrapper__Site">
<header class="LP-Header">
{% else %} <div class="LP-Header__Logo">
You are not logged in. <a class="LP-Link" href="/">
<a class="LP-Link" href="{% url 'login' %}"><span class="LP-Link__Text">login</span></a> | <img src="{% static 'logo.png' %}" class="LP-Image" />
<a class="LP-Link" href="{% url 'signup' %}"><span class="LP-Link__Text">signup</span></a> </a>
{% endif %} </div>
</span> <div class="LP-Header__UserInformation">
</div> <span class="LP-Paragraph">
</header> {% if user.is_authenticated %}
<input id="toggle_sidebar" class="LP-Menu__Trigger" type="checkbox"/> Hi {{ user.username }}!
<label id="toggle_sidebar_label" for="toggle_sidebar" class="LP-Menu__TriggerLabel"></label> <a class="LP-Link" href="{% url 'logout' %}"><span class="LP-Link__Text">logout</span></a>
<aside class="LP-Main__Sidebar"> {% if user.is_superuser %}
<nav class="LP-Menu LP-Menu--sidebar"> | <a class="LP-Link" href="{% url 'admin:index' %}" target="_blank"><span class="LP-Link__Text">admin</span></a>
<ul class="LP-Menu__List"> {% endif %}
<li class="LP-Menu__Item"><a href="/" class="LP-Link"><span class="LP-Link__Text">Home</span></a></li>
<li class="LP-Menu__Item"><a href="" class="LP-Link"><span class="LP-Link__Text">About</span></a></li> {% else %}
<li class="LP-Menu__Item"><a href="" class="LP-Link"><span class="LP-Link__Text">Contact</span></a></li> You are not logged in.
{% block additional_menu_items %} <a class="LP-Link" href="{% url 'login' %}"><span class="LP-Link__Text">login</span></a> |
{% endblock additional_menu_items %} <a class="LP-Link" href="{% url 'signup' %}"><span class="LP-Link__Text">signup</span></a>
<li class="LP-Menu__Item LP-Menu__Item--additional"><a href="{% url 'place_create'%}" class="LP-Link"><span class="LP-Link__Text">Create place</span></a></li> {% endif %}
<li class="LP-Menu__Item LP-Menu__Item--additional"><a href="{% url 'place_list'%}" class="LP-Link"><span class="LP-Link__Text">See all places</span></a></li> </span>
</ul> </div>
</nav> </header>
</aside> <input id="toggle_sidebar" class="LP-Menu__Trigger" type="checkbox" />
<main class="LP-Main__Content"> <label id="toggle_sidebar_label" for="toggle_sidebar" class="LP-Menu__TriggerLabel"></label>
{% if messages %} <aside class="LP-Main__Sidebar">
<div class="LP-MessageList"> <nav class="LP-Menu LP-Menu--sidebar">
<ul class="LP-MessageList__List"> <ul class="LP-Menu__List">
{% for message in messages %} <li class="LP-Menu__Item"><a href="/" class="LP-Link"><span class="LP-Link__Text">Home</span></a></li>
<li class="LP-MessageList__Item"> <li class="LP-Menu__Item"><a href="" class="LP-Link"><span class="LP-Link__Text">About</span></a></li>
<div class="LP-Message {% if message.tags %}LP-Message--{{ message.tags }}{% endif %}"> <li class="LP-Menu__Item"><a href="" class="LP-Link"><span class="LP-Link__Text">Contact</span></a></li>
<div> {% block additional_menu_items %}
<div class="LP-Message__Icon"> {% endblock additional_menu_items %}
</div> <li class="LP-Menu__Item LP-Menu__Item--additional"><a href="{% url 'place_create'%}" class="LP-Link"><span class="LP-Link__Text">Create place</span></a></li>
</div> <li class="LP-Menu__Item LP-Menu__Item--additional"><a href="{% url 'place_list'%}" class="LP-Link"><span class="LP-Link__Text">See all places</span></a></li>
<div class="LP-Message__Text"> </ul>
{{ message }} </nav>
</aside>
<main class="LP-Main__Content">
{% if messages %}
<div class="LP-MessageList">
<ul class="LP-MessageList__List">
{% for message in messages %}
<li class="LP-MessageList__Item">
<div class="LP-Message {% if message.tags %}LP-Message--{{ message.tags }}{% endif %}">
<div>
<div class="LP-Message__Icon">
</div> </div>
</div> </div>
</li> <div class="LP-Message__Text">
{% endfor %} {{ message }}
</ul> </div>
</div> </div>
{% endif %} </li>
{% block maincontent %} {% endfor %}
{% endblock maincontent %} </ul>
</main> </div>
</div> {% endif %}
</body> {% block maincontent %}
{% endblock maincontent %}
</main>
</div>
</body>
</html> </html>

View File

@ -1,16 +1,18 @@
{% load widget_tweaks %} {% 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> <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"> <span class="LP-Input__Message">
{% if field.errors %} {% if field.errors %}
{% for error in field.errors%} {% for error in field.errors%}
{{error}} {{error}}
{% endfor %} {% endfor %}
{% elif field.help_text%} {% elif field.help_text%}
{{ field.help_text }} {{ field.help_text }}
{% endif %} {% endif %}
</span> </span>
</div> </div>

View File

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

View File

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