Release 3.1.0 Closes #23, #20, #21, #12, #3, #10, #25, #2, #16, #15, #14, #9, and #8 See merge request coope/coopeV3!1pull/4/head
@ -1,3 +1,21 @@ |
|||
## v3.1.0 |
|||
* Tronque la quantité d'alcool ingéré sur le profil (fix #8) |
|||
* La modification des produits retourne sur la pge de profil du produit (fix #9) |
|||
* Les rechargements affichés sur le profil s'arrête bien à 5 (fix #14) |
|||
* Seuls les bons moyens de paiement sont proposés dans les cotisations (fix #15) |
|||
* Seuls les bons produits sont proposés dans le formulaire de création de fût (fix #16) |
|||
* Ajout d'un formulaire pour exporter les utilisateurs au format csv (new feature #2) |
|||
* Ajout d'un système de suivi de pintes (new feature #25) |
|||
* Désactiver les utilisateurs depuis l'interface (new feature #10) |
|||
* Ajout d'une barre de recherche dans l'admin des profils (new feature #3) |
|||
* Corrections de mots dans les templates (fix #12) |
|||
* Fix de certaines permissions dans les templates de gestion de produits et d'utilisateurs (fix #21) |
|||
* Ajout d'un champ d'autocomplétion pour les produits dans les transactions (new feature #20) |
|||
* Annulation de rechargement (new feature #23) |
|||
|
|||
## v3.0.2 |
|||
* Fix des annulations de consommations |
|||
|
|||
## v3.0.1 |
|||
* Fix page inactive |
|||
* Fix prix dans les historiques de consommations |
|||
@ -0,0 +1,25 @@ |
|||
# Generated by Django 2.1 on 2018-12-21 20:34 |
|||
|
|||
from django.conf import settings |
|||
from django.db import migrations, models |
|||
import django.db.models.deletion |
|||
|
|||
|
|||
class Migration(migrations.Migration): |
|||
|
|||
dependencies = [ |
|||
migrations.swappable_dependency(settings.AUTH_USER_MODEL), |
|||
('gestion', '0001_initial'), |
|||
] |
|||
|
|||
operations = [ |
|||
migrations.CreateModel( |
|||
name='Pinte', |
|||
fields=[ |
|||
('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), |
|||
('last_update_date', models.DateTimeField(auto_now=True)), |
|||
('current_owner', models.ForeignKey(default=None, null=True, on_delete=django.db.models.deletion.PROTECT, related_name='pinte_owned_currently', to=settings.AUTH_USER_MODEL)), |
|||
('previous_owner', models.ForeignKey(default=None, null=True, on_delete=django.db.models.deletion.PROTECT, related_name='pinte_owned_previously', to=settings.AUTH_USER_MODEL)), |
|||
], |
|||
), |
|||
] |
|||
@ -0,0 +1,37 @@ |
|||
# Generated by Django 2.1 on 2018-12-21 20:51 |
|||
|
|||
from django.conf import settings |
|||
from django.db import migrations, models |
|||
import django.db.models.deletion |
|||
import simple_history.models |
|||
|
|||
|
|||
class Migration(migrations.Migration): |
|||
|
|||
dependencies = [ |
|||
migrations.swappable_dependency(settings.AUTH_USER_MODEL), |
|||
('gestion', '0002_pinte'), |
|||
] |
|||
|
|||
operations = [ |
|||
migrations.CreateModel( |
|||
name='HistoricalPinte', |
|||
fields=[ |
|||
('id', models.IntegerField(auto_created=True, blank=True, db_index=True, verbose_name='ID')), |
|||
('last_update_date', models.DateTimeField(blank=True, editable=False)), |
|||
('history_id', models.AutoField(primary_key=True, serialize=False)), |
|||
('history_change_reason', models.CharField(max_length=100, null=True)), |
|||
('history_date', models.DateTimeField()), |
|||
('history_type', models.CharField(choices=[('+', 'Created'), ('~', 'Changed'), ('-', 'Deleted')], max_length=1)), |
|||
('current_owner', models.ForeignKey(blank=True, db_constraint=False, null=True, on_delete=django.db.models.deletion.DO_NOTHING, related_name='+', to=settings.AUTH_USER_MODEL)), |
|||
('history_user', models.ForeignKey(null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='+', to=settings.AUTH_USER_MODEL)), |
|||
('previous_owner', models.ForeignKey(blank=True, db_constraint=False, null=True, on_delete=django.db.models.deletion.DO_NOTHING, related_name='+', to=settings.AUTH_USER_MODEL)), |
|||
], |
|||
options={ |
|||
'verbose_name': 'historical pinte', |
|||
'ordering': ('-history_date', '-history_id'), |
|||
'get_latest_by': 'history_date', |
|||
}, |
|||
bases=(simple_history.models.HistoricalChanges, models.Model), |
|||
), |
|||
] |
|||
@ -0,0 +1,25 @@ |
|||
# Generated by Django 2.1 on 2018-12-23 17:30 |
|||
|
|||
from django.conf import settings |
|||
from django.db import migrations, models |
|||
import django.db.models.deletion |
|||
|
|||
|
|||
class Migration(migrations.Migration): |
|||
|
|||
dependencies = [ |
|||
('gestion', '0003_historicalpinte'), |
|||
] |
|||
|
|||
operations = [ |
|||
migrations.AlterField( |
|||
model_name='pinte', |
|||
name='current_owner', |
|||
field=models.ForeignKey(default=None, null=True, on_delete=django.db.models.deletion.PROTECT, related_name='pintes_owned_currently', to=settings.AUTH_USER_MODEL), |
|||
), |
|||
migrations.AlterField( |
|||
model_name='pinte', |
|||
name='previous_owner', |
|||
field=models.ForeignKey(default=None, null=True, on_delete=django.db.models.deletion.PROTECT, related_name='pintes_owned_previously', to=settings.AUTH_USER_MODEL), |
|||
), |
|||
] |
|||
@ -0,0 +1,75 @@ |
|||
{% extends 'base.html' %} |
|||
{% block entete %}Gestion des produits{% endblock %} |
|||
{% block navbar%} |
|||
<ul> |
|||
<li><a href="#first">Général</a></li> |
|||
<li><a href="#second">Liste des pintes non rendues</a></li> |
|||
<li><a href="#third">Liste des pintes rendues</a></li> |
|||
|
|||
</ul> |
|||
{% endblock %} |
|||
{% block content %} |
|||
<section id="first" class="main"> |
|||
<header class="major"> |
|||
<h2>Général</h2> |
|||
</header> |
|||
{% if perms.gestion.add_pinte %} |
|||
<a class="button" href="{% url 'gestion:addPintes' %}">Créer une ou plusieurs pintes</a><br><br> |
|||
{% endif %} |
|||
Il a y actuellement {{ taken_pintes.count|add:free_pintes.count }} pintes, parmis lesquelles <strong>{{ free_pintes.count }} sont rendues</strong> et <strong>{{ taken_pintes.count }} ne sont pas rendues</strong>. |
|||
</section> |
|||
<section id="second" class="main"> |
|||
<header class="major"> |
|||
<h2>Liste des pintes non rendues</h2> |
|||
</header> |
|||
<div class="table-wrapper"> |
|||
<table> |
|||
<thead> |
|||
<tr> |
|||
<th>Numéro</th> |
|||
<th>Possesseur actuel</th> |
|||
<th>Possesseur précédent</th> |
|||
<th>Date du dernier changement</th> |
|||
<th>Administrer</th> |
|||
</tr> |
|||
</thead> |
|||
<tbody> |
|||
{% for pinte in taken_pintes %} |
|||
<tr> |
|||
<td>{{ pinte.pk }}</td> |
|||
<td>{{ pinte.current_owner }}</td> |
|||
<td>{{ pinte.previous_owner }}</td> |
|||
<td>{{ pinte.last_update_date }}</td> |
|||
<td>{% if perms.gestion.change_pinte %} <a href="{% url 'gestion:release' pinte.pk %}" class="button small">Libérer</a>{% endif %}</td> |
|||
</tr> |
|||
{% endfor %} |
|||
</tbody> |
|||
</table> |
|||
</div> |
|||
</section> |
|||
<section id="third" class="main"> |
|||
<header class="major"> |
|||
<h2>Liste des pintes rendues</h2> |
|||
</header> |
|||
<div class="table-wrapper"> |
|||
<table> |
|||
<thead> |
|||
<tr> |
|||
<th>Numéro</th> |
|||
<th>Possesseur précédent</th> |
|||
<th>Date du dernier changement</th> |
|||
</tr> |
|||
</thead> |
|||
<tbody> |
|||
{% for pinte in free_pintes %} |
|||
<tr> |
|||
<td>{{ pinte.pk }}</td> |
|||
<td>{{ pinte.previous_owner }}</td> |
|||
<td>{{ pinte.last_update_date }}</td> |
|||
</tr> |
|||
{% endfor %} |
|||
</tbody> |
|||
</table> |
|||
</div> |
|||
</section> |
|||
{% endblock %} |
|||
@ -0,0 +1,34 @@ |
|||
{% extends 'base.html' %} |
|||
{% block entete %}Gestion des produits{% endblock %} |
|||
{% block navbar%} |
|||
<ul> |
|||
<li><a href="#first">Liste des utilisateurs n'ayant pas rendu leur pinte</a></li> |
|||
</ul> |
|||
{% endblock %} |
|||
{% block content %} |
|||
<section id="first" class="main"> |
|||
<header class="major"> |
|||
<h2>Liste des utilisateurs n'ayant pas rendu leur pinte</h2> |
|||
</header> |
|||
<div class="table-wrapper"> |
|||
<table> |
|||
<thead> |
|||
<tr> |
|||
<th>Utilisateur</th> |
|||
<th>Profil</th> |
|||
<th>Nombre de pintes non rendues</th> |
|||
</tr> |
|||
</thead> |
|||
<tbody> |
|||
{% for user in users %} |
|||
<tr> |
|||
<td>{{ user }}</td> |
|||
<td><a href="{% url 'users:profile' user.pk %}" class="button small">Profil</a></td> |
|||
<td>{{ user.pintes_owned_currently.count }}</td> |
|||
</tr> |
|||
{% endfor %} |
|||
</tbody> |
|||
</table> |
|||
</div> |
|||
</section> |
|||
{% endblock %} |
|||
@ -0,0 +1,23 @@ |
|||
# Generated by Django 2.1 on 2018-12-21 20:51 |
|||
|
|||
from django.db import migrations, models |
|||
|
|||
|
|||
class Migration(migrations.Migration): |
|||
|
|||
dependencies = [ |
|||
('preferences', '0001_initial'), |
|||
] |
|||
|
|||
operations = [ |
|||
migrations.AddField( |
|||
model_name='generalpreferences', |
|||
name='use_pinte_monitoring', |
|||
field=models.BooleanField(default=False), |
|||
), |
|||
migrations.AddField( |
|||
model_name='historicalgeneralpreferences', |
|||
name='use_pinte_monitoring', |
|||
field=models.BooleanField(default=False), |
|||
), |
|||
] |
|||
@ -0,0 +1,23 @@ |
|||
# Generated by Django 2.1 on 2018-12-23 13:40 |
|||
|
|||
from django.db import migrations, models |
|||
|
|||
|
|||
class Migration(migrations.Migration): |
|||
|
|||
dependencies = [ |
|||
('preferences', '0002_auto_20181221_2151'), |
|||
] |
|||
|
|||
operations = [ |
|||
migrations.AddField( |
|||
model_name='generalpreferences', |
|||
name='lost_pintes_allowed', |
|||
field=models.PositiveIntegerField(default=0), |
|||
), |
|||
migrations.AddField( |
|||
model_name='historicalgeneralpreferences', |
|||
name='lost_pintes_allowed', |
|||
field=models.PositiveIntegerField(default=0), |
|||
), |
|||
] |
|||
|
Before Width: | Height: | Size: 5.0 KiB |
|
Before Width: | Height: | Size: 1.3 KiB |
|
Before Width: | Height: | Size: 18 KiB |
|
Before Width: | Height: | Size: 17 KiB |
|
Before Width: | Height: | Size: 18 KiB |
|
Before Width: | Height: | Size: 62 KiB |
|
Before Width: | Height: | Size: 9.1 KiB |
|
Before Width: | Height: | Size: 9.3 KiB |
@ -1,260 +0,0 @@ |
|||
select.admin-autocomplete { |
|||
width: 20em; |
|||
} |
|||
|
|||
.select2-container--admin-autocomplete.select2-container { |
|||
min-height: 30px; |
|||
} |
|||
|
|||
.select2-container--admin-autocomplete .select2-selection--single, |
|||
.select2-container--admin-autocomplete .select2-selection--multiple { |
|||
min-height: 30px; |
|||
padding: 0; |
|||
} |
|||
|
|||
.select2-container--admin-autocomplete.select2-container--focus .select2-selection, |
|||
.select2-container--admin-autocomplete.select2-container--open .select2-selection { |
|||
border-color: #999; |
|||
min-height: 30px; |
|||
} |
|||
|
|||
.select2-container--admin-autocomplete.select2-container--focus .select2-selection.select2-selection--single, |
|||
.select2-container--admin-autocomplete.select2-container--open .select2-selection.select2-selection--single { |
|||
padding: 0; |
|||
} |
|||
|
|||
.select2-container--admin-autocomplete.select2-container--focus .select2-selection.select2-selection--multiple, |
|||
.select2-container--admin-autocomplete.select2-container--open .select2-selection.select2-selection--multiple { |
|||
padding: 0; |
|||
} |
|||
|
|||
.select2-container--admin-autocomplete .select2-selection--single { |
|||
background-color: #fff; |
|||
border: 1px solid #ccc; |
|||
border-radius: 4px; |
|||
} |
|||
|
|||
.select2-container--admin-autocomplete .select2-selection--single .select2-selection__rendered { |
|||
color: #444; |
|||
line-height: 30px; |
|||
} |
|||
|
|||
.select2-container--admin-autocomplete .select2-selection--single .select2-selection__clear { |
|||
cursor: pointer; |
|||
float: right; |
|||
font-weight: bold; |
|||
} |
|||
|
|||
.select2-container--admin-autocomplete .select2-selection--single .select2-selection__placeholder { |
|||
color: #999; |
|||
} |
|||
|
|||
.select2-container--admin-autocomplete .select2-selection--single .select2-selection__arrow { |
|||
height: 26px; |
|||
position: absolute; |
|||
top: 1px; |
|||
right: 1px; |
|||
width: 20px; |
|||
} |
|||
|
|||
.select2-container--admin-autocomplete .select2-selection--single .select2-selection__arrow b { |
|||
border-color: #888 transparent transparent transparent; |
|||
border-style: solid; |
|||
border-width: 5px 4px 0 4px; |
|||
height: 0; |
|||
left: 50%; |
|||
margin-left: -4px; |
|||
margin-top: -2px; |
|||
position: absolute; |
|||
top: 50%; |
|||
width: 0; |
|||
} |
|||
|
|||
.select2-container--admin-autocomplete[dir="rtl"] .select2-selection--single .select2-selection__clear { |
|||
float: left; |
|||
} |
|||
|
|||
.select2-container--admin-autocomplete[dir="rtl"] .select2-selection--single .select2-selection__arrow { |
|||
left: 1px; |
|||
right: auto; |
|||
} |
|||
|
|||
.select2-container--admin-autocomplete.select2-container--disabled .select2-selection--single { |
|||
background-color: #eee; |
|||
cursor: default; |
|||
} |
|||
|
|||
.select2-container--admin-autocomplete.select2-container--disabled .select2-selection--single .select2-selection__clear { |
|||
display: none; |
|||
} |
|||
|
|||
.select2-container--admin-autocomplete.select2-container--open .select2-selection--single .select2-selection__arrow b { |
|||
border-color: transparent transparent #888 transparent; |
|||
border-width: 0 4px 5px 4px; |
|||
} |
|||
|
|||
.select2-container--admin-autocomplete .select2-selection--multiple { |
|||
background-color: white; |
|||
border: 1px solid #ccc; |
|||
border-radius: 4px; |
|||
cursor: text; |
|||
} |
|||
|
|||
.select2-container--admin-autocomplete .select2-selection--multiple .select2-selection__rendered { |
|||
box-sizing: border-box; |
|||
list-style: none; |
|||
margin: 0; |
|||
padding: 0 5px; |
|||
width: 100%; |
|||
} |
|||
|
|||
.select2-container--admin-autocomplete .select2-selection--multiple .select2-selection__rendered li { |
|||
list-style: none; |
|||
} |
|||
|
|||
.select2-container--admin-autocomplete .select2-selection--multiple .select2-selection__placeholder { |
|||
color: #999; |
|||
margin-top: 5px; |
|||
float: left; |
|||
} |
|||
|
|||
.select2-container--admin-autocomplete .select2-selection--multiple .select2-selection__clear { |
|||
cursor: pointer; |
|||
float: right; |
|||
font-weight: bold; |
|||
margin: 5px; |
|||
} |
|||
|
|||
.select2-container--admin-autocomplete .select2-selection--multiple .select2-selection__choice { |
|||
background-color: #e4e4e4; |
|||
border: 1px solid #ccc; |
|||
border-radius: 4px; |
|||
cursor: default; |
|||
float: left; |
|||
margin-right: 5px; |
|||
margin-top: 5px; |
|||
padding: 0 5px; |
|||
} |
|||
|
|||
.select2-container--admin-autocomplete .select2-selection--multiple .select2-selection__choice__remove { |
|||
color: #999; |
|||
cursor: pointer; |
|||
display: inline-block; |
|||
font-weight: bold; |
|||
margin-right: 2px; |
|||
} |
|||
|
|||
.select2-container--admin-autocomplete .select2-selection--multiple .select2-selection__choice__remove:hover { |
|||
color: #333; |
|||
} |
|||
|
|||
.select2-container--admin-autocomplete[dir="rtl"] .select2-selection--multiple .select2-selection__choice, .select2-container--admin-autocomplete[dir="rtl"] .select2-selection--multiple .select2-selection__placeholder, .select2-container--admin-autocomplete[dir="rtl"] .select2-selection--multiple .select2-search--inline { |
|||
float: right; |
|||
} |
|||
|
|||
.select2-container--admin-autocomplete[dir="rtl"] .select2-selection--multiple .select2-selection__choice { |
|||
margin-left: 5px; |
|||
margin-right: auto; |
|||
} |
|||
|
|||
.select2-container--admin-autocomplete[dir="rtl"] .select2-selection--multiple .select2-selection__choice__remove { |
|||
margin-left: 2px; |
|||
margin-right: auto; |
|||
} |
|||
|
|||
.select2-container--admin-autocomplete.select2-container--focus .select2-selection--multiple { |
|||
border: solid #999 1px; |
|||
outline: 0; |
|||
} |
|||
|
|||
.select2-container--admin-autocomplete.select2-container--disabled .select2-selection--multiple { |
|||
background-color: #eee; |
|||
cursor: default; |
|||
} |
|||
|
|||
.select2-container--admin-autocomplete.select2-container--disabled .select2-selection__choice__remove { |
|||
display: none; |
|||
} |
|||
|
|||
.select2-container--admin-autocomplete.select2-container--open.select2-container--above .select2-selection--single, .select2-container--admin-autocomplete.select2-container--open.select2-container--above .select2-selection--multiple { |
|||
border-top-left-radius: 0; |
|||
border-top-right-radius: 0; |
|||
} |
|||
|
|||
.select2-container--admin-autocomplete.select2-container--open.select2-container--below .select2-selection--single, .select2-container--admin-autocomplete.select2-container--open.select2-container--below .select2-selection--multiple { |
|||
border-bottom-left-radius: 0; |
|||
border-bottom-right-radius: 0; |
|||
} |
|||
|
|||
.select2-container--admin-autocomplete .select2-search--dropdown .select2-search__field { |
|||
border: 1px solid #ccc; |
|||
} |
|||
|
|||
.select2-container--admin-autocomplete .select2-search--inline .select2-search__field { |
|||
background: transparent; |
|||
border: none; |
|||
outline: 0; |
|||
box-shadow: none; |
|||
-webkit-appearance: textfield; |
|||
} |
|||
|
|||
.select2-container--admin-autocomplete .select2-results > .select2-results__options { |
|||
max-height: 200px; |
|||
overflow-y: auto; |
|||
} |
|||
|
|||
.select2-container--admin-autocomplete .select2-results__option[role=group] { |
|||
padding: 0; |
|||
} |
|||
|
|||
.select2-container--admin-autocomplete .select2-results__option[aria-disabled=true] { |
|||
color: #999; |
|||
} |
|||
|
|||
.select2-container--admin-autocomplete .select2-results__option[aria-selected=true] { |
|||
background-color: #ddd; |
|||
} |
|||
|
|||
.select2-container--admin-autocomplete .select2-results__option .select2-results__option { |
|||
padding-left: 1em; |
|||
} |
|||
|
|||
.select2-container--admin-autocomplete .select2-results__option .select2-results__option .select2-results__group { |
|||
padding-left: 0; |
|||
} |
|||
|
|||
.select2-container--admin-autocomplete .select2-results__option .select2-results__option .select2-results__option { |
|||
margin-left: -1em; |
|||
padding-left: 2em; |
|||
} |
|||
|
|||
.select2-container--admin-autocomplete .select2-results__option .select2-results__option .select2-results__option .select2-results__option { |
|||
margin-left: -2em; |
|||
padding-left: 3em; |
|||
} |
|||
|
|||
.select2-container--admin-autocomplete .select2-results__option .select2-results__option .select2-results__option .select2-results__option .select2-results__option { |
|||
margin-left: -3em; |
|||
padding-left: 4em; |
|||
} |
|||
|
|||
.select2-container--admin-autocomplete .select2-results__option .select2-results__option .select2-results__option .select2-results__option .select2-results__option .select2-results__option { |
|||
margin-left: -4em; |
|||
padding-left: 5em; |
|||
} |
|||
|
|||
.select2-container--admin-autocomplete .select2-results__option .select2-results__option .select2-results__option .select2-results__option .select2-results__option .select2-results__option .select2-results__option { |
|||
margin-left: -5em; |
|||
padding-left: 6em; |
|||
} |
|||
|
|||
.select2-container--admin-autocomplete .select2-results__option--highlighted[aria-selected] { |
|||
background-color: #79aec8; |
|||
color: white; |
|||
} |
|||
|
|||
.select2-container--admin-autocomplete .select2-results__group { |
|||
cursor: default; |
|||
display: block; |
|||
padding: 6px; |
|||
} |
|||
@ -1,983 +0,0 @@ |
|||
/* |
|||
DJANGO Admin styles |
|||
*/ |
|||
|
|||
@import url(fonts.css); |
|||
|
|||
body { |
|||
margin: 0; |
|||
padding: 0; |
|||
font-size: 14px; |
|||
font-family: "Roboto","Lucida Grande","DejaVu Sans","Bitstream Vera Sans",Verdana,Arial,sans-serif; |
|||
color: #333; |
|||
background: #fff; |
|||
} |
|||
|
|||
/* LINKS */ |
|||
|
|||
a:link, a:visited { |
|||
color: #447e9b; |
|||
text-decoration: none; |
|||
} |
|||
|
|||
a:focus, a:hover { |
|||
color: #036; |
|||
} |
|||
|
|||
a:focus { |
|||
text-decoration: underline; |
|||
} |
|||
|
|||
a img { |
|||
border: none; |
|||
} |
|||
|
|||
a.section:link, a.section:visited { |
|||
color: #fff; |
|||
text-decoration: none; |
|||
} |
|||
|
|||
a.section:focus, a.section:hover { |
|||
text-decoration: underline; |
|||
} |
|||
|
|||
/* GLOBAL DEFAULTS */ |
|||
|
|||
p, ol, ul, dl { |
|||
margin: .2em 0 .8em 0; |
|||
} |
|||
|
|||
p { |
|||
padding: 0; |
|||
line-height: 140%; |
|||
} |
|||
|
|||
h1,h2,h3,h4,h5 { |
|||
font-weight: bold; |
|||
} |
|||
|
|||
h1 { |
|||
margin: 0 0 20px; |
|||
font-weight: 300; |
|||
font-size: 20px; |
|||
color: #666; |
|||
} |
|||
|
|||
h2 { |
|||
font-size: 16px; |
|||
margin: 1em 0 .5em 0; |
|||
} |
|||
|
|||
h2.subhead { |
|||
font-weight: normal; |
|||
margin-top: 0; |
|||
} |
|||
|
|||
h3 { |
|||
font-size: 14px; |
|||
margin: .8em 0 .3em 0; |
|||
color: #666; |
|||
font-weight: bold; |
|||
} |
|||
|
|||
h4 { |
|||
font-size: 12px; |
|||
margin: 1em 0 .8em 0; |
|||
padding-bottom: 3px; |
|||
} |
|||
|
|||
h5 { |
|||
font-size: 10px; |
|||
margin: 1.5em 0 .5em 0; |
|||
color: #666; |
|||
text-transform: uppercase; |
|||
letter-spacing: 1px; |
|||
} |
|||
|
|||
ul li { |
|||
list-style-type: square; |
|||
padding: 1px 0; |
|||
} |
|||
|
|||
li ul { |
|||
margin-bottom: 0; |
|||
} |
|||
|
|||
li, dt, dd { |
|||
font-size: 13px; |
|||
line-height: 20px; |
|||
} |
|||
|
|||
dt { |
|||
font-weight: bold; |
|||
margin-top: 4px; |
|||
} |
|||
|
|||
dd { |
|||
margin-left: 0; |
|||
} |
|||
|
|||
form { |
|||
margin: 0; |
|||
padding: 0; |
|||
} |
|||
|
|||
fieldset { |
|||
margin: 0; |
|||
padding: 0; |
|||
border: none; |
|||
border-top: 1px solid #eee; |
|||
} |
|||
|
|||
blockquote { |
|||
font-size: 11px; |
|||
color: #777; |
|||
margin-left: 2px; |
|||
padding-left: 10px; |
|||
border-left: 5px solid #ddd; |
|||
} |
|||
|
|||
code, pre { |
|||
font-family: "Bitstream Vera Sans Mono", Monaco, "Courier New", Courier, monospace; |
|||
color: #666; |
|||
font-size: 12px; |
|||
} |
|||
|
|||
pre.literal-block { |
|||
margin: 10px; |
|||
background: #eee; |
|||
padding: 6px 8px; |
|||
} |
|||
|
|||
code strong { |
|||
color: #930; |
|||
} |
|||
|
|||
hr { |
|||
clear: both; |
|||
color: #eee; |
|||
background-color: #eee; |
|||
height: 1px; |
|||
border: none; |
|||
margin: 0; |
|||
padding: 0; |
|||
font-size: 1px; |
|||
line-height: 1px; |
|||
} |
|||
|
|||
/* TEXT STYLES & MODIFIERS */ |
|||
|
|||
.small { |
|||
font-size: 11px; |
|||
} |
|||
|
|||
.tiny { |
|||
font-size: 10px; |
|||
} |
|||
|
|||
p.tiny { |
|||
margin-top: -2px; |
|||
} |
|||
|
|||
.mini { |
|||
font-size: 10px; |
|||
} |
|||
|
|||
p.mini { |
|||
margin-top: -3px; |
|||
} |
|||
|
|||
.help, p.help, form p.help, div.help, form div.help, div.help li { |
|||
font-size: 11px; |
|||
color: #999; |
|||
} |
|||
|
|||
div.help ul { |
|||
margin-bottom: 0; |
|||
} |
|||
|
|||
.help-tooltip { |
|||
cursor: help; |
|||
} |
|||
|
|||
p img, h1 img, h2 img, h3 img, h4 img, td img { |
|||
vertical-align: middle; |
|||
} |
|||
|
|||
.quiet, a.quiet:link, a.quiet:visited { |
|||
color: #999; |
|||
font-weight: normal; |
|||
} |
|||
|
|||
.float-right { |
|||
float: right; |
|||
} |
|||
|
|||
.float-left { |
|||
float: left; |
|||
} |
|||
|
|||
.clear { |
|||
clear: both; |
|||
} |
|||
|
|||
.align-left { |
|||
text-align: left; |
|||
} |
|||
|
|||
.align-right { |
|||
text-align: right; |
|||
} |
|||
|
|||
.example { |
|||
margin: 10px 0; |
|||
padding: 5px 10px; |
|||
background: #efefef; |
|||
} |
|||
|
|||
.nowrap { |
|||
white-space: nowrap; |
|||
} |
|||
|
|||
/* TABLES */ |
|||
|
|||
table { |
|||
border-collapse: collapse; |
|||
border-color: #ccc; |
|||
} |
|||
|
|||
td, th { |
|||
font-size: 13px; |
|||
line-height: 16px; |
|||
border-bottom: 1px solid #eee; |
|||
vertical-align: top; |
|||
padding: 8px; |
|||
font-family: "Roboto", "Lucida Grande", Verdana, Arial, sans-serif; |
|||
} |
|||
|
|||
th { |
|||
font-weight: 600; |
|||
text-align: left; |
|||
} |
|||
|
|||
thead th, |
|||
tfoot td { |
|||
color: #666; |
|||
padding: 5px 10px; |
|||
font-size: 11px; |
|||
background: #fff; |
|||
border: none; |
|||
border-top: 1px solid #eee; |
|||
border-bottom: 1px solid #eee; |
|||
} |
|||
|
|||
tfoot td { |
|||
border-bottom: none; |
|||
border-top: 1px solid #eee; |
|||
} |
|||
|
|||
thead th.required { |
|||
color: #000; |
|||
} |
|||
|
|||
tr.alt { |
|||
background: #f6f6f6; |
|||
} |
|||
|
|||
.row1 { |
|||
background: #fff; |
|||
} |
|||
|
|||
.row2 { |
|||
background: #f9f9f9; |
|||
} |
|||
|
|||
/* SORTABLE TABLES */ |
|||
|
|||
thead th { |
|||
padding: 5px 10px; |
|||
line-height: normal; |
|||
text-transform: uppercase; |
|||
background: #f6f6f6; |
|||
} |
|||
|
|||
thead th a:link, thead th a:visited { |
|||
color: #666; |
|||
} |
|||
|
|||
thead th.sorted { |
|||
background: #eee; |
|||
} |
|||
|
|||
thead th.sorted .text { |
|||
padding-right: 42px; |
|||
} |
|||
|
|||
table thead th .text span { |
|||
padding: 8px 10px; |
|||
display: block; |
|||
} |
|||
|
|||
table thead th .text a { |
|||
display: block; |
|||
cursor: pointer; |
|||
padding: 8px 10px; |
|||
} |
|||
|
|||
table thead th .text a:focus, table thead th .text a:hover { |
|||
background: #eee; |
|||
} |
|||
|
|||
thead th.sorted a.sortremove { |
|||
visibility: hidden; |
|||
} |
|||
|
|||
table thead th.sorted:hover a.sortremove { |
|||
visibility: visible; |
|||
} |
|||
|
|||
table thead th.sorted .sortoptions { |
|||
display: block; |
|||
padding: 9px 5px 0 5px; |
|||
float: right; |
|||
text-align: right; |
|||
} |
|||
|
|||
table thead th.sorted .sortpriority { |
|||
font-size: .8em; |
|||
min-width: 12px; |
|||
text-align: center; |
|||
vertical-align: 3px; |
|||
margin-left: 2px; |
|||
margin-right: 2px; |
|||
} |
|||
|
|||
table thead th.sorted .sortoptions a { |
|||
position: relative; |
|||
width: 14px; |
|||
height: 14px; |
|||
display: inline-block; |
|||
background: url(../img/sorting-icons.svg) 0 0 no-repeat; |
|||
background-size: 14px auto; |
|||
} |
|||
|
|||
table thead th.sorted .sortoptions a.sortremove { |
|||
background-position: 0 0; |
|||
} |
|||
|
|||
table thead th.sorted .sortoptions a.sortremove:after { |
|||
content: '\\'; |
|||
position: absolute; |
|||
top: -6px; |
|||
left: 3px; |
|||
font-weight: 200; |
|||
font-size: 18px; |
|||
color: #999; |
|||
} |
|||
|
|||
table thead th.sorted .sortoptions a.sortremove:focus:after, |
|||
table thead th.sorted .sortoptions a.sortremove:hover:after { |
|||
color: #447e9b; |
|||
} |
|||
|
|||
table thead th.sorted .sortoptions a.sortremove:focus, |
|||
table thead th.sorted .sortoptions a.sortremove:hover { |
|||
background-position: 0 -14px; |
|||
} |
|||
|
|||
table thead th.sorted .sortoptions a.ascending { |
|||
background-position: 0 -28px; |
|||
} |
|||
|
|||
table thead th.sorted .sortoptions a.ascending:focus, |
|||
table thead th.sorted .sortoptions a.ascending:hover { |
|||
background-position: 0 -42px; |
|||
} |
|||
|
|||
table thead th.sorted .sortoptions a.descending { |
|||
top: 1px; |
|||
background-position: 0 -56px; |
|||
} |
|||
|
|||
table thead th.sorted .sortoptions a.descending:focus, |
|||
table thead th.sorted .sortoptions a.descending:hover { |
|||
background-position: 0 -70px; |
|||
} |
|||
|
|||
/* FORM DEFAULTS */ |
|||
|
|||
input, textarea, select, .form-row p, form .button { |
|||
margin: 2px 0; |
|||
padding: 2px 3px; |
|||
vertical-align: middle; |
|||
font-family: "Roboto", "Lucida Grande", Verdana, Arial, sans-serif; |
|||
font-weight: normal; |
|||
font-size: 13px; |
|||
} |
|||
.form-row div.help { |
|||
padding: 2px 3px; |
|||
} |
|||
|
|||
textarea { |
|||
vertical-align: top; |
|||
} |
|||
|
|||
input[type=text], input[type=password], input[type=email], input[type=url], |
|||
input[type=number], input[type=tel], textarea, select, .vTextField { |
|||
border: 1px solid #ccc; |
|||
border-radius: 4px; |
|||
padding: 5px 6px; |
|||
margin-top: 0; |
|||
} |
|||
|
|||
input[type=text]:focus, input[type=password]:focus, input[type=email]:focus, |
|||
input[type=url]:focus, input[type=number]:focus, input[type=tel]:focus, |
|||
textarea:focus, select:focus, .vTextField:focus { |
|||
border-color: #999; |
|||
} |
|||
|
|||
select { |
|||
height: 30px; |
|||
} |
|||
|
|||
select[multiple] { |
|||
min-height: 150px; |
|||
} |
|||
|
|||
/* FORM BUTTONS */ |
|||
|
|||
.button, input[type=submit], input[type=button], .submit-row input, a.button { |
|||
background: #79aec8; |
|||
padding: 10px 15px; |
|||
border: none; |
|||
border-radius: 4px; |
|||
color: #fff; |
|||
cursor: pointer; |
|||
} |
|||
|
|||
a.button { |
|||
padding: 4px 5px; |
|||
} |
|||
|
|||
.button:active, input[type=submit]:active, input[type=button]:active, |
|||
.button:focus, input[type=submit]:focus, input[type=button]:focus, |
|||
.button:hover, input[type=submit]:hover, input[type=button]:hover { |
|||
background: #609ab6; |
|||
} |
|||
|
|||
.button[disabled], input[type=submit][disabled], input[type=button][disabled] { |
|||
opacity: 0.4; |
|||
} |
|||
|
|||
.button.default, input[type=submit].default, .submit-row input.default { |
|||
float: right; |
|||
border: none; |
|||
font-weight: 400; |
|||
background: #417690; |
|||
} |
|||
|
|||
.button.default:active, input[type=submit].default:active, |
|||
.button.default:focus, input[type=submit].default:focus, |
|||
.button.default:hover, input[type=submit].default:hover { |
|||
background: #205067; |
|||
} |
|||
|
|||
.button[disabled].default, |
|||
input[type=submit][disabled].default, |
|||
input[type=button][disabled].default { |
|||
opacity: 0.4; |
|||
} |
|||
|
|||
|
|||
/* MODULES */ |
|||
|
|||
.module { |
|||
border: none; |
|||
margin-bottom: 30px; |
|||
background: #fff; |
|||
} |
|||
|
|||
.module p, .module ul, .module h3, .module h4, .module dl, .module pre { |
|||
padding-left: 10px; |
|||
padding-right: 10px; |
|||
} |
|||
|
|||
.module blockquote { |
|||
margin-left: 12px; |
|||
} |
|||
|
|||
.module ul, .module ol { |
|||
margin-left: 1.5em; |
|||
} |
|||
|
|||
.module h3 { |
|||
margin-top: .6em; |
|||
} |
|||
|
|||
.module h2, .module caption, .inline-group h2 { |
|||
margin: 0; |
|||
padding: 8px; |
|||
font-weight: 400; |
|||
font-size: 13px; |
|||
text-align: left; |
|||
background: #79aec8; |
|||
color: #fff; |
|||
} |
|||
|
|||
.module caption, |
|||
.inline-group h2 { |
|||
font-size: 12px; |
|||
letter-spacing: 0.5px; |
|||
text-transform: uppercase; |
|||
} |
|||
|
|||
.module table { |
|||
border-collapse: collapse; |
|||
} |
|||
|
|||
/* MESSAGES & ERRORS */ |
|||
|
|||
ul.messagelist { |
|||
padding: 0; |
|||
margin: 0; |
|||
} |
|||
|
|||
ul.messagelist li { |
|||
display: block; |
|||
font-weight: 400; |
|||
font-size: 13px; |
|||
padding: 10px 10px 10px 65px; |
|||
margin: 0 0 10px 0; |
|||
background: #dfd url(../img/icon-yes.svg) 40px 12px no-repeat; |
|||
background-size: 16px auto; |
|||
color: #333; |
|||
} |
|||
|
|||
ul.messagelist li.warning { |
|||
background: #ffc url(../img/icon-alert.svg) 40px 14px no-repeat; |
|||
background-size: 14px auto; |
|||
} |
|||
|
|||
ul.messagelist li.error { |
|||
background: #ffefef url(../img/icon-no.svg) 40px 12px no-repeat; |
|||
background-size: 16px auto; |
|||
} |
|||
|
|||
.errornote { |
|||
font-size: 14px; |
|||
font-weight: 700; |
|||
display: block; |
|||
padding: 10px 12px; |
|||
margin: 0 0 10px 0; |
|||
color: #ba2121; |
|||
border: 1px solid #ba2121; |
|||
border-radius: 4px; |
|||
background-color: #fff; |
|||
background-position: 5px 12px; |
|||
} |
|||
|
|||
ul.errorlist { |
|||
margin: 0 0 4px; |
|||
padding: 0; |
|||
color: #ba2121; |
|||
background: #fff; |
|||
} |
|||
|
|||
ul.errorlist li { |
|||
font-size: 13px; |
|||
display: block; |
|||
margin-bottom: 4px; |
|||
} |
|||
|
|||
ul.errorlist li:first-child { |
|||
margin-top: 0; |
|||
} |
|||
|
|||
ul.errorlist li a { |
|||
color: inherit; |
|||
text-decoration: underline; |
|||
} |
|||
|
|||
td ul.errorlist { |
|||
margin: 0; |
|||
padding: 0; |
|||
} |
|||
|
|||
td ul.errorlist li { |
|||
margin: 0; |
|||
} |
|||
|
|||
.form-row.errors { |
|||
margin: 0; |
|||
border: none; |
|||
border-bottom: 1px solid #eee; |
|||
background: none; |
|||
} |
|||
|
|||
.form-row.errors ul.errorlist li { |
|||
padding-left: 0; |
|||
} |
|||
|
|||
.errors input, .errors select, .errors textarea { |
|||
border: 1px solid #ba2121; |
|||
} |
|||
|
|||
div.system-message { |
|||
background: #ffc; |
|||
margin: 10px; |
|||
padding: 6px 8px; |
|||
font-size: .8em; |
|||
} |
|||
|
|||
div.system-message p.system-message-title { |
|||
padding: 4px 5px 4px 25px; |
|||
margin: 0; |
|||
color: #c11; |
|||
background: #ffefef url(../img/icon-no.svg) 5px 5px no-repeat; |
|||
} |
|||
|
|||
.description { |
|||
font-size: 12px; |
|||
padding: 5px 0 0 12px; |
|||
} |
|||
|
|||
/* BREADCRUMBS */ |
|||
|
|||
div.breadcrumbs { |
|||
background: #79aec8; |
|||
padding: 10px 40px; |
|||
border: none; |
|||
font-size: 14px; |
|||
color: #c4dce8; |
|||
text-align: left; |
|||
} |
|||
|
|||
div.breadcrumbs a { |
|||
color: #fff; |
|||
} |
|||
|
|||
div.breadcrumbs a:focus, div.breadcrumbs a:hover { |
|||
color: #c4dce8; |
|||
} |
|||
|
|||
/* ACTION ICONS */ |
|||
|
|||
.viewlink, .inlineviewlink { |
|||
padding-left: 16px; |
|||
background: url(../img/icon-viewlink.svg) 0 1px no-repeat; |
|||
} |
|||
|
|||
.addlink { |
|||
padding-left: 16px; |
|||
background: url(../img/icon-addlink.svg) 0 1px no-repeat; |
|||
} |
|||
|
|||
.changelink, .inlinechangelink { |
|||
padding-left: 16px; |
|||
background: url(../img/icon-changelink.svg) 0 1px no-repeat; |
|||
} |
|||
|
|||
.deletelink { |
|||
padding-left: 16px; |
|||
background: url(../img/icon-deletelink.svg) 0 1px no-repeat; |
|||
} |
|||
|
|||
a.deletelink:link, a.deletelink:visited { |
|||
color: #CC3434; |
|||
} |
|||
|
|||
a.deletelink:focus, a.deletelink:hover { |
|||
color: #993333; |
|||
text-decoration: none; |
|||
} |
|||
|
|||
/* OBJECT TOOLS */ |
|||
|
|||
.object-tools { |
|||
font-size: 10px; |
|||
font-weight: bold; |
|||
padding-left: 0; |
|||
float: right; |
|||
position: relative; |
|||
margin-top: -48px; |
|||
} |
|||
|
|||
.form-row .object-tools { |
|||
margin-top: 5px; |
|||
margin-bottom: 5px; |
|||
float: none; |
|||
height: 2em; |
|||
padding-left: 3.5em; |
|||
} |
|||
|
|||
.object-tools li { |
|||
display: block; |
|||
float: left; |
|||
margin-left: 5px; |
|||
height: 16px; |
|||
} |
|||
|
|||
.object-tools a { |
|||
border-radius: 15px; |
|||
} |
|||
|
|||
.object-tools a:link, .object-tools a:visited { |
|||
display: block; |
|||
float: left; |
|||
padding: 3px 12px; |
|||
background: #999; |
|||
font-weight: 400; |
|||
font-size: 11px; |
|||
text-transform: uppercase; |
|||
letter-spacing: 0.5px; |
|||
color: #fff; |
|||
} |
|||
|
|||
.object-tools a:focus, .object-tools a:hover { |
|||
background-color: #417690; |
|||
} |
|||
|
|||
.object-tools a:focus{ |
|||
text-decoration: none; |
|||
} |
|||
|
|||
.object-tools a.viewsitelink, .object-tools a.golink,.object-tools a.addlink { |
|||
background-repeat: no-repeat; |
|||
background-position: right 7px center; |
|||
padding-right: 26px; |
|||
} |
|||
|
|||
.object-tools a.viewsitelink, .object-tools a.golink { |
|||
background-image: url(../img/tooltag-arrowright.svg); |
|||
} |
|||
|
|||
.object-tools a.addlink { |
|||
background-image: url(../img/tooltag-add.svg); |
|||
} |
|||
|
|||
/* OBJECT HISTORY */ |
|||
|
|||
table#change-history { |
|||
width: 100%; |
|||
} |
|||
|
|||
table#change-history tbody th { |
|||
width: 16em; |
|||
} |
|||
|
|||
/* PAGE STRUCTURE */ |
|||
|
|||
#container { |
|||
position: relative; |
|||
width: 100%; |
|||
min-width: 980px; |
|||
padding: 0; |
|||
} |
|||
|
|||
#content { |
|||
padding: 20px 40px; |
|||
} |
|||
|
|||
.dashboard #content { |
|||
width: 600px; |
|||
} |
|||
|
|||
#content-main { |
|||
float: left; |
|||
width: 100%; |
|||
} |
|||
|
|||
#content-related { |
|||
float: right; |
|||
width: 260px; |
|||
position: relative; |
|||
margin-right: -300px; |
|||
} |
|||
|
|||
#footer { |
|||
clear: both; |
|||
padding: 10px; |
|||
} |
|||
|
|||
/* COLUMN TYPES */ |
|||
|
|||
.colMS { |
|||
margin-right: 300px; |
|||
} |
|||
|
|||
.colSM { |
|||
margin-left: 300px; |
|||
} |
|||
|
|||
.colSM #content-related { |
|||
float: left; |
|||
margin-right: 0; |
|||
margin-left: -300px; |
|||
} |
|||
|
|||
.colSM #content-main { |
|||
float: right; |
|||
} |
|||
|
|||
.popup .colM { |
|||
width: auto; |
|||
} |
|||
|
|||
/* HEADER */ |
|||
|
|||
#header { |
|||
width: auto; |
|||
height: 40px; |
|||
padding: 10px 40px; |
|||
background: #417690; |
|||
line-height: 40px; |
|||
color: #ffc; |
|||
overflow: hidden; |
|||
} |
|||
|
|||
#header a:link, #header a:visited { |
|||
color: #fff; |
|||
} |
|||
|
|||
#header a:focus , #header a:hover { |
|||
text-decoration: underline; |
|||
} |
|||
|
|||
#branding { |
|||
float: left; |
|||
} |
|||
|
|||
#branding h1 { |
|||
padding: 0; |
|||
margin: 0 20px 0 0; |
|||
font-weight: 300; |
|||
font-size: 24px; |
|||
color: #f5dd5d; |
|||
} |
|||
|
|||
#branding h1, #branding h1 a:link, #branding h1 a:visited { |
|||
color: #f5dd5d; |
|||
} |
|||
|
|||
#branding h2 { |
|||
padding: 0 10px; |
|||
font-size: 14px; |
|||
margin: -8px 0 8px 0; |
|||
font-weight: normal; |
|||
color: #ffc; |
|||
} |
|||
|
|||
#branding a:hover { |
|||
text-decoration: none; |
|||
} |
|||
|
|||
#user-tools { |
|||
float: right; |
|||
padding: 0; |
|||
margin: 0 0 0 20px; |
|||
font-weight: 300; |
|||
font-size: 11px; |
|||
letter-spacing: 0.5px; |
|||
text-transform: uppercase; |
|||
text-align: right; |
|||
} |
|||
|
|||
#user-tools a { |
|||
border-bottom: 1px solid rgba(255, 255, 255, 0.25); |
|||
} |
|||
|
|||
#user-tools a:focus, #user-tools a:hover { |
|||
text-decoration: none; |
|||
border-bottom-color: #79aec8; |
|||
color: #79aec8; |
|||
} |
|||
|
|||
/* SIDEBAR */ |
|||
|
|||
#content-related { |
|||
background: #f8f8f8; |
|||
} |
|||
|
|||
#content-related .module { |
|||
background: none; |
|||
} |
|||
|
|||
#content-related h3 { |
|||
font-size: 14px; |
|||
color: #666; |
|||
padding: 0 16px; |
|||
margin: 0 0 16px; |
|||
} |
|||
|
|||
#content-related h4 { |
|||
font-size: 13px; |
|||
} |
|||
|
|||
#content-related p { |
|||
padding-left: 16px; |
|||
padding-right: 16px; |
|||
} |
|||
|
|||
#content-related .actionlist { |
|||
padding: 0; |
|||
margin: 16px; |
|||
} |
|||
|
|||
#content-related .actionlist li { |
|||
line-height: 1.2; |
|||
margin-bottom: 10px; |
|||
padding-left: 18px; |
|||
} |
|||
|
|||
#content-related .module h2 { |
|||
background: none; |
|||
padding: 16px; |
|||
margin-bottom: 16px; |
|||
border-bottom: 1px solid #eaeaea; |
|||
font-size: 18px; |
|||
color: #333; |
|||
} |
|||
|
|||
.delete-confirmation form input[type="submit"] { |
|||
background: #ba2121; |
|||
border-radius: 4px; |
|||
padding: 10px 15px; |
|||
color: #fff; |
|||
} |
|||
|
|||
.delete-confirmation form input[type="submit"]:active, |
|||
.delete-confirmation form input[type="submit"]:focus, |
|||
.delete-confirmation form input[type="submit"]:hover { |
|||
background: #a41515; |
|||
} |
|||
|
|||
.delete-confirmation form .cancel-link { |
|||
display: inline-block; |
|||
vertical-align: middle; |
|||
height: 15px; |
|||
line-height: 15px; |
|||
background: #ddd; |
|||
border-radius: 4px; |
|||
padding: 10px 15px; |
|||
color: #333; |
|||
margin: 0 0 0 10px; |
|||
} |
|||
|
|||
.delete-confirmation form .cancel-link:active, |
|||
.delete-confirmation form .cancel-link:focus, |
|||
.delete-confirmation form .cancel-link:hover { |
|||
background: #ccc; |
|||
} |
|||
|
|||
/* POPUP */ |
|||
.popup #content { |
|||
padding: 20px; |
|||
} |
|||
|
|||
.popup #container { |
|||
min-width: 0; |
|||
} |
|||
|
|||
.popup #header { |
|||
padding: 10px 20px; |
|||
} |
|||
@ -1,344 +0,0 @@ |
|||
/* CHANGELISTS */ |
|||
|
|||
#changelist { |
|||
position: relative; |
|||
width: 100%; |
|||
} |
|||
|
|||
#changelist table { |
|||
width: 100%; |
|||
} |
|||
|
|||
.change-list .hiddenfields { display:none; } |
|||
|
|||
.change-list .filtered table { |
|||
border-right: none; |
|||
} |
|||
|
|||
.change-list .filtered { |
|||
min-height: 400px; |
|||
} |
|||
|
|||
.change-list .filtered .results, .change-list .filtered .paginator, |
|||
.filtered #toolbar, .filtered div.xfull { |
|||
margin-right: 280px; |
|||
width: auto; |
|||
} |
|||
|
|||
.change-list .filtered table tbody th { |
|||
padding-right: 1em; |
|||
} |
|||
|
|||
#changelist-form .results { |
|||
overflow-x: auto; |
|||
} |
|||
|
|||
#changelist .toplinks { |
|||
border-bottom: 1px solid #ddd; |
|||
} |
|||
|
|||
#changelist .paginator { |
|||
color: #666; |
|||
border-bottom: 1px solid #eee; |
|||
background: #fff; |
|||
overflow: hidden; |
|||
} |
|||
|
|||
/* CHANGELIST TABLES */ |
|||
|
|||
#changelist table thead th { |
|||
padding: 0; |
|||
white-space: nowrap; |
|||
vertical-align: middle; |
|||
} |
|||
|
|||
#changelist table thead th.action-checkbox-column { |
|||
width: 1.5em; |
|||
text-align: center; |
|||
} |
|||
|
|||
#changelist table tbody td.action-checkbox { |
|||
text-align: center; |
|||
} |
|||
|
|||
#changelist table tfoot { |
|||
color: #666; |
|||
} |
|||
|
|||
/* TOOLBAR */ |
|||
|
|||
#changelist #toolbar { |
|||
padding: 8px 10px; |
|||
margin-bottom: 15px; |
|||
border-top: 1px solid #eee; |
|||
border-bottom: 1px solid #eee; |
|||
background: #f8f8f8; |
|||
color: #666; |
|||
} |
|||
|
|||
#changelist #toolbar form input { |
|||
border-radius: 4px; |
|||
font-size: 14px; |
|||
padding: 5px; |
|||
color: #333; |
|||
} |
|||
|
|||
#changelist #toolbar form #searchbar { |
|||
height: 19px; |
|||
border: 1px solid #ccc; |
|||
padding: 2px 5px; |
|||
margin: 0; |
|||
vertical-align: top; |
|||
font-size: 13px; |
|||
} |
|||
|
|||
#changelist #toolbar form #searchbar:focus { |
|||
border-color: #999; |
|||
} |
|||
|
|||
#changelist #toolbar form input[type="submit"] { |
|||
border: 1px solid #ccc; |
|||
padding: 2px 10px; |
|||
margin: 0; |
|||
vertical-align: middle; |
|||
background: #fff; |
|||
box-shadow: 0 -15px 20px -10px rgba(0, 0, 0, 0.15) inset; |
|||
cursor: pointer; |
|||
color: #333; |
|||
} |
|||
|
|||
#changelist #toolbar form input[type="submit"]:focus, |
|||
#changelist #toolbar form input[type="submit"]:hover { |
|||
border-color: #999; |
|||
} |
|||
|
|||
#changelist #changelist-search img { |
|||
vertical-align: middle; |
|||
margin-right: 4px; |
|||
} |
|||
|
|||
/* FILTER COLUMN */ |
|||
|
|||
#changelist-filter { |
|||
position: absolute; |
|||
top: 0; |
|||
right: 0; |
|||
z-index: 1000; |
|||
width: 240px; |
|||
background: #f8f8f8; |
|||
border-left: none; |
|||
margin: 0; |
|||
} |
|||
|
|||
#changelist-filter h2 { |
|||
font-size: 14px; |
|||
text-transform: uppercase; |
|||
letter-spacing: 0.5px; |
|||
padding: 5px 15px; |
|||
margin-bottom: 12px; |
|||
border-bottom: none; |
|||
} |
|||
|
|||
#changelist-filter h3 { |
|||
font-weight: 400; |
|||
font-size: 14px; |
|||
padding: 0 15px; |
|||
margin-bottom: 10px; |
|||
} |
|||
|
|||
#changelist-filter ul { |
|||
margin: 5px 0; |
|||
padding: 0 15px 15px; |
|||
border-bottom: 1px solid #eaeaea; |
|||
} |
|||
|
|||
#changelist-filter ul:last-child { |
|||
border-bottom: none; |
|||
padding-bottom: none; |
|||
} |
|||
|
|||
#changelist-filter li { |
|||
list-style-type: none; |
|||
margin-left: 0; |
|||
padding-left: 0; |
|||
} |
|||
|
|||
#changelist-filter a { |
|||
display: block; |
|||
color: #999; |
|||
text-overflow: ellipsis; |
|||
overflow-x: hidden; |
|||
} |
|||
|
|||
#changelist-filter li.selected { |
|||
border-left: 5px solid #eaeaea; |
|||
padding-left: 10px; |
|||
margin-left: -15px; |
|||
} |
|||
|
|||
#changelist-filter li.selected a { |
|||
color: #5b80b2; |
|||
} |
|||
|
|||
#changelist-filter a:focus, #changelist-filter a:hover, |
|||
#changelist-filter li.selected a:focus, |
|||
#changelist-filter li.selected a:hover { |
|||
color: #036; |
|||
} |
|||
|
|||
/* DATE DRILLDOWN */ |
|||
|
|||
.change-list ul.toplinks { |
|||
display: block; |
|||
float: left; |
|||
padding: 0; |
|||
margin: 0; |
|||
width: 100%; |
|||
} |
|||
|
|||
.change-list ul.toplinks li { |
|||
padding: 3px 6px; |
|||
font-weight: bold; |
|||
list-style-type: none; |
|||
display: inline-block; |
|||
} |
|||
|
|||
.change-list ul.toplinks .date-back a { |
|||
color: #999; |
|||
} |
|||
|
|||
.change-list ul.toplinks .date-back a:focus, |
|||
.change-list ul.toplinks .date-back a:hover { |
|||
color: #036; |
|||
} |
|||
|
|||
/* PAGINATOR */ |
|||
|
|||
.paginator { |
|||
font-size: 13px; |
|||
padding-top: 10px; |
|||
padding-bottom: 10px; |
|||
line-height: 22px; |
|||
margin: 0; |
|||
border-top: 1px solid #ddd; |
|||
} |
|||
|
|||
.paginator a:link, .paginator a:visited { |
|||
padding: 2px 6px; |
|||
background: #79aec8; |
|||
text-decoration: none; |
|||
color: #fff; |
|||
} |
|||
|
|||
.paginator a.showall { |
|||
padding: 0; |
|||
border: none; |
|||
background: none; |
|||
color: #5b80b2; |
|||
} |
|||
|
|||
.paginator a.showall:focus, .paginator a.showall:hover { |
|||
background: none; |
|||
color: #036; |
|||
} |
|||
|
|||
.paginator .end { |
|||
margin-right: 6px; |
|||
} |
|||
|
|||
.paginator .this-page { |
|||
padding: 2px 6px; |
|||
font-weight: bold; |
|||
font-size: 13px; |
|||
vertical-align: top; |
|||
} |
|||
|
|||
.paginator a:focus, .paginator a:hover { |
|||
color: white; |
|||
background: #036; |
|||
} |
|||
|
|||
/* ACTIONS */ |
|||
|
|||
.filtered .actions { |
|||
margin-right: 280px; |
|||
border-right: none; |
|||
} |
|||
|
|||
#changelist table input { |
|||
margin: 0; |
|||
vertical-align: baseline; |
|||
} |
|||
|
|||
#changelist table tbody tr.selected { |
|||
background-color: #FFFFCC; |
|||
} |
|||
|
|||
#changelist .actions { |
|||
padding: 10px; |
|||
background: #fff; |
|||
border-top: none; |
|||
border-bottom: none; |
|||
line-height: 24px; |
|||
color: #999; |
|||
} |
|||
|
|||
#changelist .actions.selected { |
|||
background: #fffccf; |
|||
border-top: 1px solid #fffee8; |
|||
border-bottom: 1px solid #edecd6; |
|||
} |
|||
|
|||
#changelist .actions span.all, |
|||
#changelist .actions span.action-counter, |
|||
#changelist .actions span.clear, |
|||
#changelist .actions span.question { |
|||
font-size: 13px; |
|||
margin: 0 0.5em; |
|||
display: none; |
|||
} |
|||
|
|||
#changelist .actions:last-child { |
|||
border-bottom: none; |
|||
} |
|||
|
|||
#changelist .actions select { |
|||
vertical-align: top; |
|||
height: 24px; |
|||
background: none; |
|||
color: #000; |
|||
border: 1px solid #ccc; |
|||
border-radius: 4px; |
|||
font-size: 14px; |
|||
padding: 0 0 0 4px; |
|||
margin: 0; |
|||
margin-left: 10px; |
|||
} |
|||
|
|||
#changelist .actions select:focus { |
|||
border-color: #999; |
|||
} |
|||
|
|||
#changelist .actions label { |
|||
display: inline-block; |
|||
vertical-align: middle; |
|||
font-size: 13px; |
|||
} |
|||
|
|||
#changelist .actions .button { |
|||
font-size: 13px; |
|||
border: 1px solid #ccc; |
|||
border-radius: 4px; |
|||
background: #fff; |
|||
box-shadow: 0 -15px 20px -10px rgba(0, 0, 0, 0.15) inset; |
|||
cursor: pointer; |
|||
height: 24px; |
|||
line-height: 1; |
|||
padding: 4px 8px; |
|||
margin: 0; |
|||
color: #333; |
|||
} |
|||
|
|||
#changelist .actions .button:focus, #changelist .actions .button:hover { |
|||
border-color: #999; |
|||
} |
|||
@ -1,27 +0,0 @@ |
|||
/* DASHBOARD */ |
|||
|
|||
.dashboard .module table th { |
|||
width: 100%; |
|||
} |
|||
|
|||
.dashboard .module table td { |
|||
white-space: nowrap; |
|||
} |
|||
|
|||
.dashboard .module table td a { |
|||
display: block; |
|||
padding-right: .6em; |
|||
} |
|||
|
|||
/* RECENT ACTIONS MODULE */ |
|||
|
|||
.module ul.actionlist { |
|||
margin-left: 0; |
|||
} |
|||
|
|||
ul.actionlist li { |
|||
list-style-type: none; |
|||
overflow: hidden; |
|||
text-overflow: ellipsis; |
|||
-o-text-overflow: ellipsis; |
|||
} |
|||
@ -1,20 +0,0 @@ |
|||
@font-face { |
|||
font-family: 'Roboto'; |
|||
src: url('../fonts/Roboto-Bold-webfont.woff'); |
|||
font-weight: 700; |
|||
font-style: normal; |
|||
} |
|||
|
|||
@font-face { |
|||
font-family: 'Roboto'; |
|||
src: url('../fonts/Roboto-Regular-webfont.woff'); |
|||
font-weight: 400; |
|||
font-style: normal; |
|||
} |
|||
|
|||
@font-face { |
|||
font-family: 'Roboto'; |
|||
src: url('../fonts/Roboto-Light-webfont.woff'); |
|||
font-weight: 300; |
|||
font-style: normal; |
|||
} |
|||
@ -1,532 +0,0 @@ |
|||
@import url('widgets.css'); |
|||
|
|||
/* FORM ROWS */ |
|||
|
|||
.form-row { |
|||
overflow: hidden; |
|||
padding: 10px; |
|||
font-size: 13px; |
|||
border-bottom: 1px solid #eee; |
|||
} |
|||
|
|||
.form-row img, .form-row input { |
|||
vertical-align: middle; |
|||
} |
|||
|
|||
.form-row label input[type="checkbox"] { |
|||
margin-top: 0; |
|||
vertical-align: 0; |
|||
} |
|||
|
|||
form .form-row p { |
|||
padding-left: 0; |
|||
} |
|||
|
|||
.hidden { |
|||
display: none; |
|||
} |
|||
|
|||
/* FORM LABELS */ |
|||
|
|||
label { |
|||
font-weight: normal; |
|||
color: #666; |
|||
font-size: 13px; |
|||
} |
|||
|
|||
.required label, label.required { |
|||
font-weight: bold; |
|||
color: #333; |
|||
} |
|||
|
|||
/* RADIO BUTTONS */ |
|||
|
|||
form ul.radiolist li { |
|||
list-style-type: none; |
|||
} |
|||
|
|||
form ul.radiolist label { |
|||
float: none; |
|||
display: inline; |
|||
} |
|||
|
|||
form ul.radiolist input[type="radio"] { |
|||
margin: -2px 4px 0 0; |
|||
padding: 0; |
|||
} |
|||
|
|||
form ul.inline { |
|||
margin-left: 0; |
|||
padding: 0; |
|||
} |
|||
|
|||
form ul.inline li { |
|||
float: left; |
|||
padding-right: 7px; |
|||
} |
|||
|
|||
/* ALIGNED FIELDSETS */ |
|||
|
|||
.aligned label { |
|||
display: block; |
|||
padding: 4px 10px 0 0; |
|||
float: left; |
|||
width: 160px; |
|||
word-wrap: break-word; |
|||
line-height: 1; |
|||
} |
|||
|
|||
.aligned label:not(.vCheckboxLabel):after { |
|||
content: ''; |
|||
display: inline-block; |
|||
vertical-align: middle; |
|||
height: 26px; |
|||
} |
|||
|
|||
.aligned label + p, .aligned label + div.help, .aligned label + div.readonly { |
|||
padding: 6px 0; |
|||
margin-top: 0; |
|||
margin-bottom: 0; |
|||
margin-left: 170px; |
|||
} |
|||
|
|||
.aligned ul label { |
|||
display: inline; |
|||
float: none; |
|||
width: auto; |
|||
} |
|||
|
|||
.aligned .form-row input { |
|||
margin-bottom: 0; |
|||
} |
|||
|
|||
.colMS .aligned .vLargeTextField, .colMS .aligned .vXMLLargeTextField { |
|||
width: 350px; |
|||
} |
|||
|
|||
form .aligned ul { |
|||
margin-left: 160px; |
|||
padding-left: 10px; |
|||
} |
|||
|
|||
form .aligned ul.radiolist { |
|||
display: inline-block; |
|||
margin: 0; |
|||
padding: 0; |
|||
} |
|||
|
|||
form .aligned p.help, |
|||
form .aligned div.help { |
|||
clear: left; |
|||
margin-top: 0; |
|||
margin-left: 160px; |
|||
padding-left: 10px; |
|||
} |
|||
|
|||
form .aligned label + p.help, |
|||
form .aligned label + div.help { |
|||
margin-left: 0; |
|||
padding-left: 0; |
|||
} |
|||
|
|||
form .aligned p.help:last-child, |
|||
form .aligned div.help:last-child { |
|||
margin-bottom: 0; |
|||
padding-bottom: 0; |
|||
} |
|||
|
|||
form .aligned input + p.help, |
|||
form .aligned textarea + p.help, |
|||
form .aligned select + p.help, |
|||
form .aligned input + div.help, |
|||
form .aligned textarea + div.help, |
|||
form .aligned select + div.help { |
|||
margin-left: 160px; |
|||
padding-left: 10px; |
|||
} |
|||
|
|||
form .aligned ul li { |
|||
list-style: none; |
|||
} |
|||
|
|||
form .aligned table p { |
|||
margin-left: 0; |
|||
padding-left: 0; |
|||
} |
|||
|
|||
.aligned .vCheckboxLabel { |
|||
float: none; |
|||
width: auto; |
|||
display: inline-block; |
|||
vertical-align: -3px; |
|||
padding: 0 0 5px 5px; |
|||
} |
|||
|
|||
.aligned .vCheckboxLabel + p.help, |
|||
.aligned .vCheckboxLabel + div.help { |
|||
margin-top: -4px; |
|||
} |
|||
|
|||
.colM .aligned .vLargeTextField, .colM .aligned .vXMLLargeTextField { |
|||
width: 610px; |
|||
} |
|||
|
|||
.checkbox-row p.help, |
|||
.checkbox-row div.help { |
|||
margin-left: 0; |
|||
padding-left: 0; |
|||
} |
|||
|
|||
fieldset .fieldBox { |
|||
float: left; |
|||
margin-right: 20px; |
|||
} |
|||
|
|||
/* WIDE FIELDSETS */ |
|||
|
|||
.wide label { |
|||
width: 200px; |
|||
} |
|||
|
|||
form .wide p, |
|||
form .wide input + p.help, |
|||
form .wide input + div.help { |
|||
margin-left: 200px; |
|||
} |
|||
|
|||
form .wide p.help, |
|||
form .wide div.help { |
|||
padding-left: 38px; |
|||
} |
|||
|
|||
form div.help ul { |
|||
padding-left: 0; |
|||
margin-left: 0; |
|||
} |
|||
|
|||
.colM fieldset.wide .vLargeTextField, .colM fieldset.wide .vXMLLargeTextField { |
|||
width: 450px; |
|||
} |
|||
|
|||
/* COLLAPSED FIELDSETS */ |
|||
|
|||
fieldset.collapsed * { |
|||
display: none; |
|||
} |
|||
|
|||
fieldset.collapsed h2, fieldset.collapsed { |
|||
display: block; |
|||
} |
|||
|
|||
fieldset.collapsed { |
|||
border: 1px solid #eee; |
|||
border-radius: 4px; |
|||
overflow: hidden; |
|||
} |
|||
|
|||
fieldset.collapsed h2 { |
|||
background: #f8f8f8; |
|||
color: #666; |
|||
} |
|||
|
|||
fieldset .collapse-toggle { |
|||
color: #fff; |
|||
} |
|||
|
|||
fieldset.collapsed .collapse-toggle { |
|||
background: transparent; |
|||
display: inline; |
|||
color: #447e9b; |
|||
} |
|||
|
|||
/* MONOSPACE TEXTAREAS */ |
|||
|
|||
fieldset.monospace textarea { |
|||
font-family: "Bitstream Vera Sans Mono", Monaco, "Courier New", Courier, monospace; |
|||
} |
|||
|
|||
/* SUBMIT ROW */ |
|||
|
|||
.submit-row { |
|||
padding: 12px 14px; |
|||
margin: 0 0 20px; |
|||
background: #f8f8f8; |
|||
border: 1px solid #eee; |
|||
border-radius: 4px; |
|||
text-align: right; |
|||
overflow: hidden; |
|||
} |
|||
|
|||
body.popup .submit-row { |
|||
overflow: auto; |
|||
} |
|||
|
|||
.submit-row input { |
|||
height: 35px; |
|||
line-height: 15px; |
|||
margin: 0 0 0 5px; |
|||
} |
|||
|
|||
.submit-row input.default { |
|||
margin: 0 0 0 8px; |
|||
text-transform: uppercase; |
|||
} |
|||
|
|||
.submit-row p { |
|||
margin: 0.3em; |
|||
} |
|||
|
|||
.submit-row p.deletelink-box { |
|||
float: left; |
|||
margin: 0; |
|||
} |
|||
|
|||
.submit-row a.deletelink { |
|||
display: block; |
|||
background: #ba2121; |
|||
border-radius: 4px; |
|||
padding: 10px 15px; |
|||
height: 15px; |
|||
line-height: 15px; |
|||
color: #fff; |
|||
} |
|||
|
|||
.submit-row a.closelink { |
|||
display: inline-block; |
|||
background: #bbbbbb; |
|||
border-radius: 4px; |
|||
padding: 10px 15px; |
|||
height: 15px; |
|||
line-height: 15px; |
|||
margin: 0 0 0 5px; |
|||
color: #fff; |
|||
} |
|||
|
|||
.submit-row a.deletelink:focus, |
|||
.submit-row a.deletelink:hover, |
|||
.submit-row a.deletelink:active { |
|||
background: #a41515; |
|||
} |
|||
|
|||
.submit-row a.closelink:focus, |
|||
.submit-row a.closelink:hover, |
|||
.submit-row a.closelink:active { |
|||
background: #aaaaaa; |
|||
} |
|||
|
|||
/* CUSTOM FORM FIELDS */ |
|||
|
|||
.vSelectMultipleField { |
|||
vertical-align: top; |
|||
} |
|||
|
|||
.vCheckboxField { |
|||
border: none; |
|||
} |
|||
|
|||
.vDateField, .vTimeField { |
|||
margin-right: 2px; |
|||
margin-bottom: 4px; |
|||
} |
|||
|
|||
.vDateField { |
|||
min-width: 6.85em; |
|||
} |
|||
|
|||
.vTimeField { |
|||
min-width: 4.7em; |
|||
} |
|||
|
|||
.vURLField { |
|||
width: 30em; |
|||
} |
|||
|
|||
.vLargeTextField, .vXMLLargeTextField { |
|||
width: 48em; |
|||
} |
|||
|
|||
.flatpages-flatpage #id_content { |
|||
height: 40.2em; |
|||
} |
|||
|
|||
.module table .vPositiveSmallIntegerField { |
|||
width: 2.2em; |
|||
} |
|||
|
|||
.vTextField { |
|||
width: 20em; |
|||
} |
|||
|
|||
.vIntegerField { |
|||
width: 5em; |
|||
} |
|||
|
|||
.vBigIntegerField { |
|||
width: 10em; |
|||
} |
|||
|
|||
.vForeignKeyRawIdAdminField { |
|||
width: 5em; |
|||
} |
|||
|
|||
/* INLINES */ |
|||
|
|||
.inline-group { |
|||
padding: 0; |
|||
margin: 0 0 30px; |
|||
} |
|||
|
|||
.inline-group thead th { |
|||
padding: 8px 10px; |
|||
} |
|||
|
|||
.inline-group .aligned label { |
|||
width: 160px; |
|||
} |
|||
|
|||
.inline-related { |
|||
position: relative; |
|||
} |
|||
|
|||
.inline-related h3 { |
|||
margin: 0; |
|||
color: #666; |
|||
padding: 5px; |
|||
font-size: 13px; |
|||
background: #f8f8f8; |
|||
border-top: 1px solid #eee; |
|||
border-bottom: 1px solid #eee; |
|||
} |
|||
|
|||
.inline-related h3 span.delete { |
|||
float: right; |
|||
} |
|||
|
|||
.inline-related h3 span.delete label { |
|||
margin-left: 2px; |
|||
font-size: 11px; |
|||
} |
|||
|
|||
.inline-related fieldset { |
|||
margin: 0; |
|||
background: #fff; |
|||
border: none; |
|||
width: 100%; |
|||
} |
|||
|
|||
.inline-related fieldset.module h3 { |
|||
margin: 0; |
|||
padding: 2px 5px 3px 5px; |
|||
font-size: 11px; |
|||
text-align: left; |
|||
font-weight: bold; |
|||
background: #bcd; |
|||
color: #fff; |
|||
} |
|||
|
|||
.inline-group .tabular fieldset.module { |
|||
border: none; |
|||
} |
|||
|
|||
.inline-related.tabular fieldset.module table { |
|||
width: 100%; |
|||
} |
|||
|
|||
.last-related fieldset { |
|||
border: none; |
|||
} |
|||
|
|||
.inline-group .tabular tr.has_original td { |
|||
padding-top: 2em; |
|||
} |
|||
|
|||
.inline-group .tabular tr td.original { |
|||
padding: 2px 0 0 0; |
|||
width: 0; |
|||
_position: relative; |
|||
} |
|||
|
|||
.inline-group .tabular th.original { |
|||
width: 0px; |
|||
padding: 0; |
|||
} |
|||
|
|||
.inline-group .tabular td.original p { |
|||
position: absolute; |
|||
left: 0; |
|||
height: 1.1em; |
|||
padding: 2px 9px; |
|||
overflow: hidden; |
|||
font-size: 9px; |
|||
font-weight: bold; |
|||
color: #666; |
|||
_width: 700px; |
|||
} |
|||
|
|||
.inline-group ul.tools { |
|||
padding: 0; |
|||
margin: 0; |
|||
list-style: none; |
|||
} |
|||
|
|||
.inline-group ul.tools li { |
|||
display: inline; |
|||
padding: 0 5px; |
|||
} |
|||
|
|||
.inline-group div.add-row, |
|||
.inline-group .tabular tr.add-row td { |
|||
color: #666; |
|||
background: #f8f8f8; |
|||
padding: 8px 10px; |
|||
border-bottom: 1px solid #eee; |
|||
} |
|||
|
|||
.inline-group .tabular tr.add-row td { |
|||
padding: 8px 10px; |
|||
border-bottom: 1px solid #eee; |
|||
} |
|||
|
|||
.inline-group ul.tools a.add, |
|||
.inline-group div.add-row a, |
|||
.inline-group .tabular tr.add-row td a { |
|||
background: url(../img/icon-addlink.svg) 0 1px no-repeat; |
|||
padding-left: 16px; |
|||
font-size: 12px; |
|||
} |
|||
|
|||
.empty-form { |
|||
display: none; |
|||
} |
|||
|
|||
/* RELATED FIELD ADD ONE / LOOKUP */ |
|||
|
|||
.add-another, .related-lookup { |
|||
margin-left: 5px; |
|||
display: inline-block; |
|||
vertical-align: middle; |
|||
background-repeat: no-repeat; |
|||
background-size: 14px; |
|||
} |
|||
|
|||
.add-another { |
|||
width: 16px; |
|||
height: 16px; |
|||
background-image: url(../img/icon-addlink.svg); |
|||
} |
|||
|
|||
.related-lookup { |
|||
width: 16px; |
|||
height: 16px; |
|||
background-image: url(../img/search.svg); |
|||
} |
|||
|
|||
form .related-widget-wrapper ul { |
|||
display: inline-block; |
|||
margin-left: 0; |
|||
padding-left: 0; |
|||
} |
|||
|
|||
.clearable-file-input input { |
|||
margin-top: 0; |
|||
} |
|||
@ -1,78 +0,0 @@ |
|||
/* LOGIN FORM */ |
|||
|
|||
body.login { |
|||
background: #f8f8f8; |
|||
} |
|||
|
|||
.login #header { |
|||
height: auto; |
|||
padding: 5px 16px; |
|||
} |
|||
|
|||
.login #header h1 { |
|||
font-size: 18px; |
|||
} |
|||
|
|||
.login #header h1 a { |
|||
color: #fff; |
|||
} |
|||
|
|||
.login #content { |
|||
padding: 20px 20px 0; |
|||
} |
|||
|
|||
.login #container { |
|||
background: #fff; |
|||
border: 1px solid #eaeaea; |
|||
border-radius: 4px; |
|||
overflow: hidden; |
|||
width: 28em; |
|||
min-width: 300px; |
|||
margin: 100px auto; |
|||
} |
|||
|
|||
.login #content-main { |
|||
width: 100%; |
|||
} |
|||
|
|||
.login .form-row { |
|||
padding: 4px 0; |
|||
float: left; |
|||
width: 100%; |
|||
border-bottom: none; |
|||
} |
|||
|
|||
.login .form-row label { |
|||
padding-right: 0.5em; |
|||
line-height: 2em; |
|||
font-size: 1em; |
|||
clear: both; |
|||
color: #333; |
|||
} |
|||
|
|||
.login .form-row #id_username, .login .form-row #id_password { |
|||
clear: both; |
|||
padding: 8px; |
|||
width: 100%; |
|||
-webkit-box-sizing: border-box; |
|||
-moz-box-sizing: border-box; |
|||
box-sizing: border-box; |
|||
} |
|||
|
|||
.login span.help { |
|||
font-size: 10px; |
|||
display: block; |
|||
} |
|||
|
|||
.login .submit-row { |
|||
clear: both; |
|||
padding: 1em 0 0 9.4em; |
|||
margin: 0; |
|||
border: none; |
|||
background: none; |
|||
text-align: left; |
|||
} |
|||
|
|||
.login .password-reset-link { |
|||
text-align: center; |
|||
} |
|||
@ -1,994 +0,0 @@ |
|||
/* Tablets */ |
|||
|
|||
input[type="submit"], button { |
|||
-webkit-appearance: none; |
|||
appearance: none; |
|||
} |
|||
|
|||
@media (max-width: 1024px) { |
|||
/* Basic */ |
|||
|
|||
html { |
|||
-webkit-text-size-adjust: 100%; |
|||
} |
|||
|
|||
td, th { |
|||
padding: 10px; |
|||
font-size: 14px; |
|||
} |
|||
|
|||
.small { |
|||
font-size: 12px; |
|||
} |
|||
|
|||
/* Layout */ |
|||
|
|||
#container { |
|||
min-width: 0; |
|||
} |
|||
|
|||
#content { |
|||
padding: 20px 30px 30px; |
|||
} |
|||
|
|||
div.breadcrumbs { |
|||
padding: 10px 30px; |
|||
} |
|||
|
|||
/* Header */ |
|||
|
|||
#header { |
|||
display: flex; |
|||
flex-direction: column; |
|||
padding: 15px 30px; |
|||
height: auto; |
|||
line-height: 1; |
|||
} |
|||
|
|||
#branding h1 { |
|||
margin: 0 0 8px; |
|||
font-size: 20px; |
|||
line-height: 1.2; |
|||
} |
|||
|
|||
#user-tools { |
|||
margin: 0; |
|||
font-weight: 400; |
|||
line-height: 1.85; |
|||
text-align: left; |
|||
} |
|||
|
|||
#user-tools a { |
|||
display: inline-block; |
|||
line-height: 1.4; |
|||
} |
|||
|
|||
/* Dashboard */ |
|||
|
|||
.dashboard #content { |
|||
width: auto; |
|||
} |
|||
|
|||
#content-related { |
|||
margin-right: -290px; |
|||
} |
|||
|
|||
.colSM #content-related { |
|||
margin-left: -290px; |
|||
} |
|||
|
|||
.colMS { |
|||
margin-right: 290px; |
|||
} |
|||
|
|||
.colSM { |
|||
margin-left: 290px; |
|||
} |
|||
|
|||
.dashboard .module table td a { |
|||
padding-right: 0; |
|||
} |
|||
|
|||
td .changelink, td .addlink { |
|||
font-size: 13px; |
|||
} |
|||
|
|||
/* Changelist */ |
|||
|
|||
#changelist #toolbar { |
|||
border: none; |
|||
padding: 15px; |
|||
} |
|||
|
|||
#changelist-search > div { |
|||
display: -webkit-flex; |
|||
display: flex; |
|||
-webkit-flex-wrap: wrap; |
|||
flex-wrap: wrap; |
|||
max-width: 480px; |
|||
} |
|||
|
|||
#changelist-search label { |
|||
line-height: 22px; |
|||
} |
|||
|
|||
#changelist #toolbar form #searchbar { |
|||
-webkit-flex: 1 0 auto; |
|||
flex: 1 0 auto; |
|||
width: 0; |
|||
height: 22px; |
|||
margin: 0 10px 0 6px; |
|||
} |
|||
|
|||
#changelist-search .quiet { |
|||
width: 100%; |
|||
margin: 5px 0 0 25px; |
|||
} |
|||
|
|||
#changelist .actions { |
|||
display: flex; |
|||
flex-wrap: wrap; |
|||
padding: 15px 0; |
|||
} |
|||
|
|||
#changelist .actions.selected { |
|||
border: none; |
|||
} |
|||
|
|||
#changelist .actions label { |
|||
display: flex; |
|||
} |
|||
|
|||
#changelist .actions select { |
|||
background: #fff; |
|||
} |
|||
|
|||
#changelist .actions .button { |
|||
min-width: 48px; |
|||
margin: 0 10px; |
|||
} |
|||
|
|||
#changelist .actions span.all, |
|||
#changelist .actions span.clear, |
|||
#changelist .actions span.question, |
|||
#changelist .actions span.action-counter { |
|||
font-size: 11px; |
|||
margin: 0 10px 0 0; |
|||
} |
|||
|
|||
#changelist-filter { |
|||
width: 200px; |
|||
} |
|||
|
|||
.change-list .filtered .results, |
|||
.change-list .filtered .paginator, |
|||
.filtered #toolbar, |
|||
.filtered .actions, |
|||
.filtered div.xfull { |
|||
margin-right: 230px; |
|||
} |
|||
|
|||
#changelist .paginator { |
|||
border-top-color: #eee; |
|||
} |
|||
|
|||
#changelist .results + .paginator { |
|||
border-top: none; |
|||
} |
|||
|
|||
/* Forms */ |
|||
|
|||
label { |
|||
font-size: 14px; |
|||
} |
|||
|
|||
.form-row input[type=text], |
|||
.form-row input[type=password], |
|||
.form-row input[type=email], |
|||
.form-row input[type=url], |
|||
.form-row input[type=tel], |
|||
.form-row input[type=number], |
|||
.form-row textarea, |
|||
.form-row select, |
|||
.form-row .vTextField { |
|||
box-sizing: border-box; |
|||
margin: 0; |
|||
padding: 6px 8px; |
|||
min-height: 36px; |
|||
font-size: 14px; |
|||
} |
|||
|
|||
.form-row select { |
|||
height: 36px; |
|||
} |
|||
|
|||
.form-row select[multiple] { |
|||
height: auto; |
|||
min-height: 0; |
|||
} |
|||
|
|||
fieldset .fieldBox { |
|||
float: none; |
|||
margin: 0 -10px; |
|||
padding: 0 10px; |
|||
} |
|||
|
|||
fieldset .fieldBox + .fieldBox { |
|||
margin-top: 10px; |
|||
padding-top: 10px; |
|||
border-top: 1px solid #eee; |
|||
} |
|||
|
|||
textarea { |
|||
max-width: 518px; |
|||
max-height: 120px; |
|||
} |
|||
|
|||
.aligned label { |
|||
padding-top: 6px; |
|||
} |
|||
|
|||
.aligned .add-another, |
|||
.aligned .related-lookup, |
|||
.aligned .datetimeshortcuts, |
|||
.aligned .related-lookup + strong { |
|||
align-self: center; |
|||
margin-left: 15px; |
|||
} |
|||
|
|||
form .aligned ul.radiolist { |
|||
margin-left: 2px; |
|||
} |
|||
|
|||
/* Related widget */ |
|||
|
|||
.related-widget-wrapper { |
|||
float: none; |
|||
} |
|||
|
|||
.related-widget-wrapper-link + .selector { |
|||
max-width: calc(100% - 30px); |
|||
margin-right: 15px; |
|||
} |
|||
|
|||
select + .related-widget-wrapper-link, |
|||
.related-widget-wrapper-link + .related-widget-wrapper-link { |
|||
margin-left: 10px; |
|||
} |
|||
|
|||
/* Selector */ |
|||
|
|||
.selector { |
|||
display: flex; |
|||
width: 100%; |
|||
} |
|||
|
|||
.selector .selector-filter { |
|||
display: flex; |
|||
align-items: center; |
|||
} |
|||
|
|||
.selector .selector-filter label { |
|||
margin: 0 8px 0 0; |
|||
} |
|||
|
|||
.selector .selector-filter input { |
|||
width: auto; |
|||
min-height: 0; |
|||
flex: 1 1; |
|||
} |
|||
|
|||
.selector-available, .selector-chosen { |
|||
width: auto; |
|||
flex: 1 1; |
|||
display: flex; |
|||
flex-direction: column; |
|||
} |
|||
|
|||
.selector select { |
|||
width: 100%; |
|||
flex: 1 0 auto; |
|||
margin-bottom: 5px; |
|||
} |
|||
|
|||
.selector ul.selector-chooser { |
|||
width: 26px; |
|||
height: 52px; |
|||
padding: 2px 0; |
|||
margin: auto 15px; |
|||
border-radius: 20px; |
|||
transform: translateY(-10px); |
|||
} |
|||
|
|||
.selector-add, .selector-remove { |
|||
width: 20px; |
|||
height: 20px; |
|||
background-size: 20px auto; |
|||
} |
|||
|
|||
.selector-add { |
|||
background-position: 0 -120px; |
|||
} |
|||
|
|||
.selector-remove { |
|||
background-position: 0 -80px; |
|||
} |
|||
|
|||
a.selector-chooseall, a.selector-clearall { |
|||
align-self: center; |
|||
} |
|||
|
|||
.stacked { |
|||
flex-direction: column; |
|||
max-width: 480px; |
|||
} |
|||
|
|||
.stacked > * { |
|||
flex: 0 1 auto; |
|||
} |
|||
|
|||
.stacked select { |
|||
margin-bottom: 0; |
|||
} |
|||
|
|||
.stacked .selector-available, .stacked .selector-chosen { |
|||
width: auto; |
|||
} |
|||
|
|||
.stacked ul.selector-chooser { |
|||
width: 52px; |
|||
height: 26px; |
|||
padding: 0 2px; |
|||
margin: 15px auto; |
|||
transform: none; |
|||
} |
|||
|
|||
.stacked .selector-chooser li { |
|||
padding: 3px; |
|||
} |
|||
|
|||
.stacked .selector-add, .stacked .selector-remove { |
|||
background-size: 20px auto; |
|||
} |
|||
|
|||
.stacked .selector-add { |
|||
background-position: 0 -40px; |
|||
} |
|||
|
|||
.stacked .active.selector-add { |
|||
background-position: 0 -60px; |
|||
} |
|||
|
|||
.stacked .selector-remove { |
|||
background-position: 0 0; |
|||
} |
|||
|
|||
.stacked .active.selector-remove { |
|||
background-position: 0 -20px; |
|||
} |
|||
|
|||
.help-tooltip, .selector .help-icon { |
|||
display: none; |
|||
} |
|||
|
|||
form .form-row p.datetime { |
|||
width: 100%; |
|||
} |
|||
|
|||
.datetime input { |
|||
width: 50%; |
|||
max-width: 120px; |
|||
} |
|||
|
|||
.datetime span { |
|||
font-size: 13px; |
|||
} |
|||
|
|||
.datetime .timezonewarning { |
|||
display: block; |
|||
font-size: 11px; |
|||
color: #999; |
|||
} |
|||
|
|||
.datetimeshortcuts { |
|||
color: #ccc; |
|||
} |
|||
|
|||
.inline-group { |
|||
overflow: auto; |
|||
} |
|||
|
|||
/* Messages */ |
|||
|
|||
ul.messagelist li { |
|||
padding-left: 55px; |
|||
background-position: 30px 12px; |
|||
} |
|||
|
|||
ul.messagelist li.error { |
|||
background-position: 30px 12px; |
|||
} |
|||
|
|||
ul.messagelist li.warning { |
|||
background-position: 30px 14px; |
|||
} |
|||
|
|||
/* Login */ |
|||
|
|||
.login #header { |
|||
padding: 15px 20px; |
|||
} |
|||
|
|||
.login #branding h1 { |
|||
margin: 0; |
|||
} |
|||
|
|||
/* GIS */ |
|||
|
|||
div.olMap { |
|||
max-width: calc(100vw - 30px); |
|||
max-height: 300px; |
|||
} |
|||
|
|||
.olMap + .clear_features { |
|||
display: block; |
|||
margin-top: 10px; |
|||
} |
|||
|
|||
/* Docs */ |
|||
|
|||
.module table.xfull { |
|||
width: 100%; |
|||
} |
|||
|
|||
pre.literal-block { |
|||
overflow: auto; |
|||
} |
|||
} |
|||
|
|||
/* Mobile */ |
|||
|
|||
@media (max-width: 767px) { |
|||
/* Layout */ |
|||
|
|||
#header, #content, #footer { |
|||
padding: 15px; |
|||
} |
|||
|
|||
#footer:empty { |
|||
padding: 0; |
|||
} |
|||
|
|||
div.breadcrumbs { |
|||
padding: 10px 15px; |
|||
} |
|||
|
|||
/* Dashboard */ |
|||
|
|||
.colMS, .colSM { |
|||
margin: 0; |
|||
} |
|||
|
|||
#content-related, .colSM #content-related { |
|||
width: 100%; |
|||
margin: 0; |
|||
} |
|||
|
|||
#content-related .module { |
|||
margin-bottom: 0; |
|||
} |
|||
|
|||
#content-related .module h2 { |
|||
padding: 10px 15px; |
|||
font-size: 16px; |
|||
} |
|||
|
|||
/* Changelist */ |
|||
|
|||
#changelist { |
|||
display: flex; |
|||
flex-direction: column; |
|||
} |
|||
|
|||
#changelist #toolbar { |
|||
order: 1; |
|||
padding: 10px; |
|||
} |
|||
|
|||
#changelist .xfull { |
|||
order: 2; |
|||
} |
|||
|
|||
#changelist-form { |
|||
order: 3; |
|||
} |
|||
|
|||
#changelist-filter { |
|||
order: 4; |
|||
} |
|||
|
|||
#changelist .actions label { |
|||
flex: 1 1; |
|||
} |
|||
|
|||
#changelist .actions select { |
|||
flex: 1 0; |
|||
width: 100%; |
|||
} |
|||
|
|||
#changelist .actions span { |
|||
flex: 1 0 100%; |
|||
} |
|||
|
|||
.change-list .filtered .results, .change-list .filtered .paginator, |
|||
.filtered #toolbar, .filtered .actions, .filtered div.xfull { |
|||
margin-right: 0; |
|||
} |
|||
|
|||
#changelist-filter { |
|||
position: static; |
|||
width: auto; |
|||
margin-top: 30px; |
|||
} |
|||
|
|||
.object-tools { |
|||
float: none; |
|||
margin: 0 0 15px; |
|||
padding: 0; |
|||
overflow: hidden; |
|||
} |
|||
|
|||
.object-tools li { |
|||
height: auto; |
|||
margin-left: 0; |
|||
} |
|||
|
|||
.object-tools li + li { |
|||
margin-left: 15px; |
|||
} |
|||
|
|||
/* Forms */ |
|||
|
|||
.form-row { |
|||
padding: 15px 0; |
|||
} |
|||
|
|||
.aligned .form-row, |
|||
.aligned .form-row > div { |
|||
display: flex; |
|||
flex-wrap: wrap; |
|||
max-width: 100vw; |
|||
} |
|||
|
|||
.aligned .form-row > div { |
|||
width: calc(100vw - 30px); |
|||
} |
|||
|
|||
textarea { |
|||
max-width: none; |
|||
} |
|||
|
|||
.vURLField { |
|||
width: auto; |
|||
} |
|||
|
|||
fieldset .fieldBox + .fieldBox { |
|||
margin-top: 15px; |
|||
padding-top: 15px; |
|||
} |
|||
|
|||
fieldset.collapsed .form-row { |
|||
display: none; |
|||
} |
|||
|
|||
.aligned label { |
|||
width: 100%; |
|||
padding: 0 0 10px; |
|||
} |
|||
|
|||
.aligned label:after { |
|||
max-height: 0; |
|||
} |
|||
|
|||
.aligned .form-row input, |
|||
.aligned .form-row select, |
|||
.aligned .form-row textarea { |
|||
flex: 1 1 auto; |
|||
max-width: 100%; |
|||
} |
|||
|
|||
.aligned .checkbox-row { |
|||
align-items: center; |
|||
} |
|||
|
|||
.aligned .checkbox-row input { |
|||
flex: 0 1 auto; |
|||
margin: 0; |
|||
} |
|||
|
|||
.aligned .vCheckboxLabel { |
|||
flex: 1 0; |
|||
padding: 1px 0 0 5px; |
|||
} |
|||
|
|||
.aligned label + p, |
|||
.aligned label + div.help, |
|||
.aligned label + div.readonly { |
|||
padding: 0; |
|||
margin-left: 0; |
|||
} |
|||
|
|||
.aligned p.file-upload { |
|||
margin-left: 0; |
|||
font-size: 13px; |
|||
} |
|||
|
|||
span.clearable-file-input { |
|||
margin-left: 15px; |
|||
} |
|||
|
|||
span.clearable-file-input label { |
|||
font-size: 13px; |
|||
padding-bottom: 0; |
|||
} |
|||
|
|||
.aligned .timezonewarning { |
|||
flex: 1 0 100%; |
|||
margin-top: 5px; |
|||
} |
|||
|
|||
form .aligned .form-row div.help { |
|||
width: 100%; |
|||
margin: 5px 0 0; |
|||
padding: 0; |
|||
} |
|||
|
|||
form .aligned ul { |
|||
margin-left: 0; |
|||
padding-left: 0; |
|||
} |
|||
|
|||
form .aligned ul.radiolist { |
|||
margin-right: 15px; |
|||
margin-bottom: -3px; |
|||
} |
|||
|
|||
form .aligned ul.radiolist li + li { |
|||
margin-top: 5px; |
|||
} |
|||
|
|||
/* Related widget */ |
|||
|
|||
.related-widget-wrapper { |
|||
width: 100%; |
|||
display: flex; |
|||
align-items: flex-start; |
|||
} |
|||
|
|||
.related-widget-wrapper .selector { |
|||
order: 1; |
|||
} |
|||
|
|||
.related-widget-wrapper > a { |
|||
order: 2; |
|||
} |
|||
|
|||
.related-widget-wrapper .radiolist ~ a { |
|||
align-self: flex-end; |
|||
} |
|||
|
|||
.related-widget-wrapper > select ~ a { |
|||
align-self: center; |
|||
} |
|||
|
|||
select + .related-widget-wrapper-link, |
|||
.related-widget-wrapper-link + .related-widget-wrapper-link { |
|||
margin-left: 15px; |
|||
} |
|||
|
|||
/* Selector */ |
|||
|
|||
.selector { |
|||
flex-direction: column; |
|||
} |
|||
|
|||
.selector > * { |
|||
float: none; |
|||
} |
|||
|
|||
.selector-available, .selector-chosen { |
|||
margin-bottom: 0; |
|||
flex: 1 1 auto; |
|||
} |
|||
|
|||
.selector select { |
|||
max-height: 96px; |
|||
} |
|||
|
|||
.selector ul.selector-chooser { |
|||
display: block; |
|||
float: none; |
|||
width: 52px; |
|||
height: 26px; |
|||
padding: 0 2px; |
|||
margin: 15px auto 20px; |
|||
transform: none; |
|||
} |
|||
|
|||
.selector ul.selector-chooser li { |
|||
float: left; |
|||
} |
|||
|
|||
.selector-remove { |
|||
background-position: 0 0; |
|||
} |
|||
|
|||
.selector-add { |
|||
background-position: 0 -40px; |
|||
} |
|||
|
|||
/* Inlines */ |
|||
|
|||
.inline-group[data-inline-type="stacked"] .inline-related { |
|||
border: 2px solid #eee; |
|||
border-radius: 4px; |
|||
margin-top: 15px; |
|||
overflow: auto; |
|||
} |
|||
|
|||
.inline-group[data-inline-type="stacked"] .inline-related > * { |
|||
box-sizing: border-box; |
|||
} |
|||
|
|||
.inline-group[data-inline-type="stacked"] .inline-related + .inline-related { |
|||
margin-top: 30px; |
|||
} |
|||
|
|||
.inline-group[data-inline-type="stacked"] .inline-related .module { |
|||
padding: 0 10px; |
|||
} |
|||
|
|||
.inline-group[data-inline-type="stacked"] .inline-related .module .form-row:last-child { |
|||
border-bottom: none; |
|||
} |
|||
|
|||
.inline-group[data-inline-type="stacked"] .inline-related h3 { |
|||
padding: 10px; |
|||
border-top-width: 0; |
|||
border-bottom-width: 2px; |
|||
display: flex; |
|||
flex-wrap: wrap; |
|||
align-items: center; |
|||
} |
|||
|
|||
.inline-group[data-inline-type="stacked"] .inline-related h3 .inline_label { |
|||
margin-right: auto; |
|||
} |
|||
|
|||
.inline-group[data-inline-type="stacked"] .inline-related h3 span.delete { |
|||
float: none; |
|||
flex: 1 1 100%; |
|||
margin-top: 5px; |
|||
} |
|||
|
|||
.inline-group[data-inline-type="stacked"] .aligned .form-row > div:not([class]) { |
|||
width: 100%; |
|||
} |
|||
|
|||
.inline-group[data-inline-type="stacked"] .aligned label { |
|||
width: 100%; |
|||
} |
|||
|
|||
.inline-group[data-inline-type="stacked"] div.add-row { |
|||
margin-top: 15px; |
|||
border: 1px solid #eee; |
|||
border-radius: 4px; |
|||
} |
|||
|
|||
.inline-group div.add-row, |
|||
.inline-group .tabular tr.add-row td { |
|||
padding: 0; |
|||
} |
|||
|
|||
.inline-group div.add-row a, |
|||
.inline-group .tabular tr.add-row td a { |
|||
display: block; |
|||
padding: 8px 10px 8px 26px; |
|||
background-position: 8px 9px; |
|||
} |
|||
|
|||
/* Submit row */ |
|||
|
|||
.submit-row { |
|||
padding: 10px 10px 0; |
|||
margin: 0 0 15px; |
|||
display: flex; |
|||
flex-direction: column; |
|||
} |
|||
|
|||
.submit-row > * { |
|||
width: 100%; |
|||
} |
|||
|
|||
.submit-row input, .submit-row input.default, .submit-row a, .submit-row a.closelink { |
|||
float: none; |
|||
margin: 0 0 10px; |
|||
text-align: center; |
|||
} |
|||
|
|||
.submit-row a.closelink { |
|||
padding: 10px 0; |
|||
} |
|||
|
|||
.submit-row p.deletelink-box { |
|||
order: 4; |
|||
} |
|||
|
|||
/* Messages */ |
|||
|
|||
ul.messagelist li { |
|||
padding-left: 40px; |
|||
background-position: 15px 12px; |
|||
} |
|||
|
|||
ul.messagelist li.error { |
|||
background-position: 15px 12px; |
|||
} |
|||
|
|||
ul.messagelist li.warning { |
|||
background-position: 15px 14px; |
|||
} |
|||
|
|||
/* Paginator */ |
|||
|
|||
.paginator .this-page, .paginator a:link, .paginator a:visited { |
|||
padding: 4px 10px; |
|||
} |
|||
|
|||
/* Login */ |
|||
|
|||
body.login { |
|||
padding: 0 15px; |
|||
} |
|||
|
|||
.login #container { |
|||
width: auto; |
|||
max-width: 480px; |
|||
margin: 50px auto; |
|||
} |
|||
|
|||
.login #header, |
|||
.login #content { |
|||
padding: 15px; |
|||
} |
|||
|
|||
.login #content-main { |
|||
float: none; |
|||
} |
|||
|
|||
.login .form-row { |
|||
padding: 0; |
|||
} |
|||
|
|||
.login .form-row + .form-row { |
|||
margin-top: 15px; |
|||
} |
|||
|
|||
.login .form-row label { |
|||
display: block; |
|||
margin: 0 0 5px; |
|||
padding: 0; |
|||
line-height: 1.2; |
|||
} |
|||
|
|||
.login .submit-row { |
|||
padding: 15px 0 0; |
|||
} |
|||
|
|||
.login br, .login .submit-row label { |
|||
display: none; |
|||
} |
|||
|
|||
.login .submit-row input { |
|||
margin: 0; |
|||
text-transform: uppercase; |
|||
} |
|||
|
|||
.errornote { |
|||
margin: 0 0 20px; |
|||
padding: 8px 12px; |
|||
font-size: 13px; |
|||
} |
|||
|
|||
/* Calendar and clock */ |
|||
|
|||
.calendarbox, .clockbox { |
|||
position: fixed !important; |
|||
top: 50% !important; |
|||
left: 50% !important; |
|||
transform: translate(-50%, -50%); |
|||
margin: 0; |
|||
border: none; |
|||
overflow: visible; |
|||
} |
|||
|
|||
.calendarbox:before, .clockbox:before { |
|||
content: ''; |
|||
position: fixed; |
|||
top: 50%; |
|||
left: 50%; |
|||
width: 100vw; |
|||
height: 100vh; |
|||
background: rgba(0, 0, 0, 0.75); |
|||
transform: translate(-50%, -50%); |
|||
} |
|||
|
|||
.calendarbox > *, .clockbox > * { |
|||
position: relative; |
|||
z-index: 1; |
|||
} |
|||
|
|||
.calendarbox > div:first-child { |
|||
z-index: 2; |
|||
} |
|||
|
|||
.calendarbox .calendar, .clockbox h2 { |
|||
border-radius: 4px 4px 0 0; |
|||
overflow: hidden; |
|||
} |
|||
|
|||
.calendarbox .calendar-cancel, .clockbox .calendar-cancel { |
|||
border-radius: 0 0 4px 4px; |
|||
overflow: hidden; |
|||
} |
|||
|
|||
.calendar-shortcuts { |
|||
padding: 10px 0; |
|||
font-size: 12px; |
|||
line-height: 12px; |
|||
} |
|||
|
|||
.calendar-shortcuts a { |
|||
margin: 0 4px; |
|||
} |
|||
|
|||
.timelist a { |
|||
background: #fff; |
|||
padding: 4px; |
|||
} |
|||
|
|||
.calendar-cancel { |
|||
padding: 8px 10px; |
|||
} |
|||
|
|||
.clockbox h2 { |
|||
padding: 8px 15px; |
|||
} |
|||
|
|||
.calendar caption { |
|||
padding: 10px; |
|||
} |
|||
|
|||
.calendarbox .calendarnav-previous, .calendarbox .calendarnav-next { |
|||
z-index: 1; |
|||
top: 10px; |
|||
} |
|||
|
|||
/* History */ |
|||
|
|||
table#change-history tbody th, table#change-history tbody td { |
|||
font-size: 13px; |
|||
word-break: break-word; |
|||
} |
|||
|
|||
table#change-history tbody th { |
|||
width: auto; |
|||
} |
|||
|
|||
/* Docs */ |
|||
|
|||
table.model tbody th, table.model tbody td { |
|||
font-size: 13px; |
|||
word-break: break-word; |
|||
} |
|||
} |
|||
@ -1,80 +0,0 @@ |
|||
/* TABLETS */ |
|||
|
|||
@media (max-width: 1024px) { |
|||
[dir="rtl"] .colMS { |
|||
margin-right: 0; |
|||
} |
|||
|
|||
[dir="rtl"] #user-tools { |
|||
text-align: right; |
|||
} |
|||
|
|||
[dir="rtl"] #changelist .actions label { |
|||
padding-left: 10px; |
|||
padding-right: 0; |
|||
} |
|||
|
|||
[dir="rtl"] #changelist .actions select { |
|||
margin-left: 0; |
|||
margin-right: 15px; |
|||
} |
|||
|
|||
[dir="rtl"] .change-list .filtered .results, |
|||
[dir="rtl"] .change-list .filtered .paginator, |
|||
[dir="rtl"] .filtered #toolbar, |
|||
[dir="rtl"] .filtered div.xfull, |
|||
[dir="rtl"] .filtered .actions { |
|||
margin-right: 0; |
|||
margin-left: 230px; |
|||
} |
|||
|
|||
[dir="rtl"] .inline-group ul.tools a.add, |
|||
[dir="rtl"] .inline-group div.add-row a, |
|||
[dir="rtl"] .inline-group .tabular tr.add-row td a { |
|||
padding: 8px 26px 8px 10px; |
|||
background-position: calc(100% - 8px) 9px; |
|||
} |
|||
|
|||
[dir="rtl"] .related-widget-wrapper-link + .selector { |
|||
margin-right: 0; |
|||
margin-left: 15px; |
|||
} |
|||
|
|||
[dir="rtl"] .selector .selector-filter label { |
|||
margin-right: 0; |
|||
margin-left: 8px; |
|||
} |
|||
|
|||
[dir="rtl"] .object-tools li { |
|||
float: right; |
|||
} |
|||
|
|||
[dir="rtl"] .object-tools li + li { |
|||
margin-left: 0; |
|||
margin-right: 15px; |
|||
} |
|||
|
|||
[dir="rtl"] .dashboard .module table td a { |
|||
padding-left: 0; |
|||
padding-right: 16px; |
|||
} |
|||
} |
|||
|
|||
/* MOBILE */ |
|||
|
|||
@media (max-width: 767px) { |
|||
[dir="rtl"] .change-list .filtered .results, |
|||
[dir="rtl"] .change-list .filtered .paginator, |
|||
[dir="rtl"] .filtered #toolbar, |
|||
[dir="rtl"] .filtered div.xfull, |
|||
[dir="rtl"] .filtered .actions { |
|||
margin-left: 0; |
|||
} |
|||
|
|||
[dir="rtl"] .aligned .add-another, |
|||
[dir="rtl"] .aligned .related-lookup, |
|||
[dir="rtl"] .aligned .datetimeshortcuts { |
|||
margin-left: 0; |
|||
margin-right: 15px; |
|||
} |
|||
} |
|||
@ -1,264 +0,0 @@ |
|||
body { |
|||
direction: rtl; |
|||
} |
|||
|
|||
/* LOGIN */ |
|||
|
|||
.login .form-row { |
|||
float: right; |
|||
} |
|||
|
|||
.login .form-row label { |
|||
float: right; |
|||
padding-left: 0.5em; |
|||
padding-right: 0; |
|||
text-align: left; |
|||
} |
|||
|
|||
.login .submit-row { |
|||
clear: both; |
|||
padding: 1em 9.4em 0 0; |
|||
} |
|||
|
|||
/* GLOBAL */ |
|||
|
|||
th { |
|||
text-align: right; |
|||
} |
|||
|
|||
.module h2, .module caption { |
|||
text-align: right; |
|||
} |
|||
|
|||
.module ul, .module ol { |
|||
margin-left: 0; |
|||
margin-right: 1.5em; |
|||
} |
|||
|
|||
.viewlink, .addlink, .changelink { |
|||
padding-left: 0; |
|||
padding-right: 16px; |
|||
background-position: 100% 1px; |
|||
} |
|||
|
|||
.deletelink { |
|||
padding-left: 0; |
|||
padding-right: 16px; |
|||
background-position: 100% 1px; |
|||
} |
|||
|
|||
.object-tools { |
|||
float: left; |
|||
} |
|||
|
|||
thead th:first-child, |
|||
tfoot td:first-child { |
|||
border-left: none; |
|||
} |
|||
|
|||
/* LAYOUT */ |
|||
|
|||
#user-tools { |
|||
right: auto; |
|||
left: 0; |
|||
text-align: left; |
|||
} |
|||
|
|||
div.breadcrumbs { |
|||
text-align: right; |
|||
} |
|||
|
|||
#content-main { |
|||
float: right; |
|||
} |
|||
|
|||
#content-related { |
|||
float: left; |
|||
margin-left: -300px; |
|||
margin-right: auto; |
|||
} |
|||
|
|||
.colMS { |
|||
margin-left: 300px; |
|||
margin-right: 0; |
|||
} |
|||
|
|||
/* SORTABLE TABLES */ |
|||
|
|||
table thead th.sorted .sortoptions { |
|||
float: left; |
|||
} |
|||
|
|||
thead th.sorted .text { |
|||
padding-right: 0; |
|||
padding-left: 42px; |
|||
} |
|||
|
|||
/* dashboard styles */ |
|||
|
|||
.dashboard .module table td a { |
|||
padding-left: .6em; |
|||
padding-right: 16px; |
|||
} |
|||
|
|||
/* changelists styles */ |
|||
|
|||
.change-list .filtered table { |
|||
border-left: none; |
|||
border-right: 0px none; |
|||
} |
|||
|
|||
#changelist-filter { |
|||
right: auto; |
|||
left: 0; |
|||
border-left: none; |
|||
border-right: none; |
|||
} |
|||
|
|||
.change-list .filtered .results, .change-list .filtered .paginator, .filtered #toolbar, .filtered div.xfull { |
|||
margin-right: 0; |
|||
margin-left: 280px; |
|||
} |
|||
|
|||
#changelist-filter li.selected { |
|||
border-left: none; |
|||
padding-left: 10px; |
|||
margin-left: 0; |
|||
border-right: 5px solid #eaeaea; |
|||
padding-right: 10px; |
|||
margin-right: -15px; |
|||
} |
|||
|
|||
.filtered .actions { |
|||
margin-left: 280px; |
|||
margin-right: 0; |
|||
} |
|||
|
|||
#changelist table tbody td:first-child, #changelist table tbody th:first-child { |
|||
border-right: none; |
|||
border-left: none; |
|||
} |
|||
|
|||
/* FORMS */ |
|||
|
|||
.aligned label { |
|||
padding: 0 0 3px 1em; |
|||
float: right; |
|||
} |
|||
|
|||
.submit-row { |
|||
text-align: left |
|||
} |
|||
|
|||
.submit-row p.deletelink-box { |
|||
float: right; |
|||
} |
|||
|
|||
.submit-row input.default { |
|||
margin-left: 0; |
|||
} |
|||
|
|||
.vDateField, .vTimeField { |
|||
margin-left: 2px; |
|||
} |
|||
|
|||
.aligned .form-row input { |
|||
margin-left: 5px; |
|||
} |
|||
|
|||
form .aligned p.help, form .aligned div.help { |
|||
clear: right; |
|||
} |
|||
|
|||
form ul.inline li { |
|||
float: right; |
|||
padding-right: 0; |
|||
padding-left: 7px; |
|||
} |
|||
|
|||
input[type=submit].default, .submit-row input.default { |
|||
float: left; |
|||
} |
|||
|
|||
fieldset .fieldBox { |
|||
float: right; |
|||
margin-left: 20px; |
|||
margin-right: 0; |
|||
} |
|||
|
|||
.errorlist li { |
|||
background-position: 100% 12px; |
|||
padding: 0; |
|||
} |
|||
|
|||
.errornote { |
|||
background-position: 100% 12px; |
|||
padding: 10px 12px; |
|||
} |
|||
|
|||
/* WIDGETS */ |
|||
|
|||
.calendarnav-previous { |
|||
top: 0; |
|||
left: auto; |
|||
right: 10px; |
|||
} |
|||
|
|||
.calendarnav-next { |
|||
top: 0; |
|||
right: auto; |
|||
left: 10px; |
|||
} |
|||
|
|||
.calendar caption, .calendarbox h2 { |
|||
text-align: center; |
|||
} |
|||
|
|||
.selector { |
|||
float: right; |
|||
} |
|||
|
|||
.selector .selector-filter { |
|||
text-align: right; |
|||
} |
|||
|
|||
.inline-deletelink { |
|||
float: left; |
|||
} |
|||
|
|||
form .form-row p.datetime { |
|||
overflow: hidden; |
|||
} |
|||
|
|||
.related-widget-wrapper { |
|||
float: right; |
|||
} |
|||
|
|||
/* MISC */ |
|||
|
|||
.inline-related h2, .inline-group h2 { |
|||
text-align: right |
|||
} |
|||
|
|||
.inline-related h3 span.delete { |
|||
padding-right: 20px; |
|||
padding-left: inherit; |
|||
left: 10px; |
|||
right: inherit; |
|||
float:left; |
|||
} |
|||
|
|||
.inline-related h3 span.delete label { |
|||
margin-left: inherit; |
|||
margin-right: 2px; |
|||
} |
|||
|
|||
/* IE7 specific bug fixes */ |
|||
|
|||
div.colM { |
|||
position: relative; |
|||
} |
|||
|
|||
.submit-row input { |
|||
float: left; |
|||
} |
|||
@ -1,21 +0,0 @@ |
|||
The MIT License (MIT) |
|||
|
|||
Copyright (c) 2012-2015 Kevin Brown, Igor Vaynberg, and Select2 contributors |
|||
|
|||
Permission is hereby granted, free of charge, to any person obtaining a copy |
|||
of this software and associated documentation files (the "Software"), to deal |
|||
in the Software without restriction, including without limitation the rights |
|||
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell |
|||
copies of the Software, and to permit persons to whom the Software is |
|||
furnished to do so, subject to the following conditions: |
|||
|
|||
The above copyright notice and this permission notice shall be included in |
|||
all copies or substantial portions of the Software. |
|||
|
|||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR |
|||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, |
|||
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE |
|||
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER |
|||
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, |
|||
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN |
|||
THE SOFTWARE. |
|||
@ -1,484 +0,0 @@ |
|||
.select2-container { |
|||
box-sizing: border-box; |
|||
display: inline-block; |
|||
margin: 0; |
|||
position: relative; |
|||
vertical-align: middle; } |
|||
.select2-container .select2-selection--single { |
|||
box-sizing: border-box; |
|||
cursor: pointer; |
|||
display: block; |
|||
height: 28px; |
|||
user-select: none; |
|||
-webkit-user-select: none; } |
|||
.select2-container .select2-selection--single .select2-selection__rendered { |
|||
display: block; |
|||
padding-left: 8px; |
|||
padding-right: 20px; |
|||
overflow: hidden; |
|||
text-overflow: ellipsis; |
|||
white-space: nowrap; } |
|||
.select2-container .select2-selection--single .select2-selection__clear { |
|||
position: relative; } |
|||
.select2-container[dir="rtl"] .select2-selection--single .select2-selection__rendered { |
|||
padding-right: 8px; |
|||
padding-left: 20px; } |
|||
.select2-container .select2-selection--multiple { |
|||
box-sizing: border-box; |
|||
cursor: pointer; |
|||
display: block; |
|||
min-height: 32px; |
|||
user-select: none; |
|||
-webkit-user-select: none; } |
|||
.select2-container .select2-selection--multiple .select2-selection__rendered { |
|||
display: inline-block; |
|||
overflow: hidden; |
|||
padding-left: 8px; |
|||
text-overflow: ellipsis; |
|||
white-space: nowrap; } |
|||
.select2-container .select2-search--inline { |
|||
float: left; } |
|||
.select2-container .select2-search--inline .select2-search__field { |
|||
box-sizing: border-box; |
|||
border: none; |
|||
font-size: 100%; |
|||
margin-top: 5px; |
|||
padding: 0; } |
|||
.select2-container .select2-search--inline .select2-search__field::-webkit-search-cancel-button { |
|||
-webkit-appearance: none; } |
|||
|
|||
.select2-dropdown { |
|||
background-color: white; |
|||
border: 1px solid #aaa; |
|||
border-radius: 4px; |
|||
box-sizing: border-box; |
|||
display: block; |
|||
position: absolute; |
|||
left: -100000px; |
|||
width: 100%; |
|||
z-index: 1051; } |
|||
|
|||
.select2-results { |
|||
display: block; } |
|||
|
|||
.select2-results__options { |
|||
list-style: none; |
|||
margin: 0; |
|||
padding: 0; } |
|||
|
|||
.select2-results__option { |
|||
padding: 6px; |
|||
user-select: none; |
|||
-webkit-user-select: none; } |
|||
.select2-results__option[aria-selected] { |
|||
cursor: pointer; } |
|||
|
|||
.select2-container--open .select2-dropdown { |
|||
left: 0; } |
|||
|
|||
.select2-container--open .select2-dropdown--above { |
|||
border-bottom: none; |
|||
border-bottom-left-radius: 0; |
|||
border-bottom-right-radius: 0; } |
|||
|
|||
.select2-container--open .select2-dropdown--below { |
|||
border-top: none; |
|||
border-top-left-radius: 0; |
|||
border-top-right-radius: 0; } |
|||
|
|||
.select2-search--dropdown { |
|||
display: block; |
|||
padding: 4px; } |
|||
.select2-search--dropdown .select2-search__field { |
|||
padding: 4px; |
|||
width: 100%; |
|||
box-sizing: border-box; } |
|||
.select2-search--dropdown .select2-search__field::-webkit-search-cancel-button { |
|||
-webkit-appearance: none; } |
|||
.select2-search--dropdown.select2-search--hide { |
|||
display: none; } |
|||
|
|||
.select2-close-mask { |
|||
border: 0; |
|||
margin: 0; |
|||
padding: 0; |
|||
display: block; |
|||
position: fixed; |
|||
left: 0; |
|||
top: 0; |
|||
min-height: 100%; |
|||
min-width: 100%; |
|||
height: auto; |
|||
width: auto; |
|||
opacity: 0; |
|||
z-index: 99; |
|||
background-color: #fff; |
|||
filter: alpha(opacity=0); } |
|||
|
|||
.select2-hidden-accessible { |
|||
border: 0 !important; |
|||
clip: rect(0 0 0 0) !important; |
|||
height: 1px !important; |
|||
margin: -1px !important; |
|||
overflow: hidden !important; |
|||
padding: 0 !important; |
|||
position: absolute !important; |
|||
width: 1px !important; } |
|||
|
|||
.select2-container--default .select2-selection--single { |
|||
background-color: #fff; |
|||
border: 1px solid #aaa; |
|||
border-radius: 4px; } |
|||
.select2-container--default .select2-selection--single .select2-selection__rendered { |
|||
color: #444; |
|||
line-height: 28px; } |
|||
.select2-container--default .select2-selection--single .select2-selection__clear { |
|||
cursor: pointer; |
|||
float: right; |
|||
font-weight: bold; } |
|||
.select2-container--default .select2-selection--single .select2-selection__placeholder { |
|||
color: #999; } |
|||
.select2-container--default .select2-selection--single .select2-selection__arrow { |
|||
height: 26px; |
|||
position: absolute; |
|||
top: 1px; |
|||
right: 1px; |
|||
width: 20px; } |
|||
.select2-container--default .select2-selection--single .select2-selection__arrow b { |
|||
border-color: #888 transparent transparent transparent; |
|||
border-style: solid; |
|||
border-width: 5px 4px 0 4px; |
|||
height: 0; |
|||
left: 50%; |
|||
margin-left: -4px; |
|||
margin-top: -2px; |
|||
position: absolute; |
|||
top: 50%; |
|||
width: 0; } |
|||
|
|||
.select2-container--default[dir="rtl"] .select2-selection--single .select2-selection__clear { |
|||
float: left; } |
|||
|
|||
.select2-container--default[dir="rtl"] .select2-selection--single .select2-selection__arrow { |
|||
left: 1px; |
|||
right: auto; } |
|||
|
|||
.select2-container--default.select2-container--disabled .select2-selection--single { |
|||
background-color: #eee; |
|||
cursor: default; } |
|||
.select2-container--default.select2-container--disabled .select2-selection--single .select2-selection__clear { |
|||
display: none; } |
|||
|
|||
.select2-container--default.select2-container--open .select2-selection--single .select2-selection__arrow b { |
|||
border-color: transparent transparent #888 transparent; |
|||
border-width: 0 4px 5px 4px; } |
|||
|
|||
.select2-container--default .select2-selection--multiple { |
|||
background-color: white; |
|||
border: 1px solid #aaa; |
|||
border-radius: 4px; |
|||
cursor: text; } |
|||
.select2-container--default .select2-selection--multiple .select2-selection__rendered { |
|||
box-sizing: border-box; |
|||
list-style: none; |
|||
margin: 0; |
|||
padding: 0 5px; |
|||
width: 100%; } |
|||
.select2-container--default .select2-selection--multiple .select2-selection__rendered li { |
|||
list-style: none; } |
|||
.select2-container--default .select2-selection--multiple .select2-selection__placeholder { |
|||
color: #999; |
|||
margin-top: 5px; |
|||
float: left; } |
|||
.select2-container--default .select2-selection--multiple .select2-selection__clear { |
|||
cursor: pointer; |
|||
float: right; |
|||
font-weight: bold; |
|||
margin-top: 5px; |
|||
margin-right: 10px; } |
|||
.select2-container--default .select2-selection--multiple .select2-selection__choice { |
|||
background-color: #e4e4e4; |
|||
border: 1px solid #aaa; |
|||
border-radius: 4px; |
|||
cursor: default; |
|||
float: left; |
|||
margin-right: 5px; |
|||
margin-top: 5px; |
|||
padding: 0 5px; } |
|||
.select2-container--default .select2-selection--multiple .select2-selection__choice__remove { |
|||
color: #999; |
|||
cursor: pointer; |
|||
display: inline-block; |
|||
font-weight: bold; |
|||
margin-right: 2px; } |
|||
.select2-container--default .select2-selection--multiple .select2-selection__choice__remove:hover { |
|||
color: #333; } |
|||
|
|||
.select2-container--default[dir="rtl"] .select2-selection--multiple .select2-selection__choice, .select2-container--default[dir="rtl"] .select2-selection--multiple .select2-selection__placeholder, .select2-container--default[dir="rtl"] .select2-selection--multiple .select2-search--inline { |
|||
float: right; } |
|||
|
|||
.select2-container--default[dir="rtl"] .select2-selection--multiple .select2-selection__choice { |
|||
margin-left: 5px; |
|||
margin-right: auto; } |
|||
|
|||
.select2-container--default[dir="rtl"] .select2-selection--multiple .select2-selection__choice__remove { |
|||
margin-left: 2px; |
|||
margin-right: auto; } |
|||
|
|||
.select2-container--default.select2-container--focus .select2-selection--multiple { |
|||
border: solid black 1px; |
|||
outline: 0; } |
|||
|
|||
.select2-container--default.select2-container--disabled .select2-selection--multiple { |
|||
background-color: #eee; |
|||
cursor: default; } |
|||
|
|||
.select2-container--default.select2-container--disabled .select2-selection__choice__remove { |
|||
display: none; } |
|||
|
|||
.select2-container--default.select2-container--open.select2-container--above .select2-selection--single, .select2-container--default.select2-container--open.select2-container--above .select2-selection--multiple { |
|||
border-top-left-radius: 0; |
|||
border-top-right-radius: 0; } |
|||
|
|||
.select2-container--default.select2-container--open.select2-container--below .select2-selection--single, .select2-container--default.select2-container--open.select2-container--below .select2-selection--multiple { |
|||
border-bottom-left-radius: 0; |
|||
border-bottom-right-radius: 0; } |
|||
|
|||
.select2-container--default .select2-search--dropdown .select2-search__field { |
|||
border: 1px solid #aaa; } |
|||
|
|||
.select2-container--default .select2-search--inline .select2-search__field { |
|||
background: transparent; |
|||
border: none; |
|||
outline: 0; |
|||
box-shadow: none; |
|||
-webkit-appearance: textfield; } |
|||
|
|||
.select2-container--default .select2-results > .select2-results__options { |
|||
max-height: 200px; |
|||
overflow-y: auto; } |
|||
|
|||
.select2-container--default .select2-results__option[role=group] { |
|||
padding: 0; } |
|||
|
|||
.select2-container--default .select2-results__option[aria-disabled=true] { |
|||
color: #999; } |
|||
|
|||
.select2-container--default .select2-results__option[aria-selected=true] { |
|||
background-color: #ddd; } |
|||
|
|||
.select2-container--default .select2-results__option .select2-results__option { |
|||
padding-left: 1em; } |
|||
.select2-container--default .select2-results__option .select2-results__option .select2-results__group { |
|||
padding-left: 0; } |
|||
.select2-container--default .select2-results__option .select2-results__option .select2-results__option { |
|||
margin-left: -1em; |
|||
padding-left: 2em; } |
|||
.select2-container--default .select2-results__option .select2-results__option .select2-results__option .select2-results__option { |
|||
margin-left: -2em; |
|||
padding-left: 3em; } |
|||
.select2-container--default .select2-results__option .select2-results__option .select2-results__option .select2-results__option .select2-results__option { |
|||
margin-left: -3em; |
|||
padding-left: 4em; } |
|||
.select2-container--default .select2-results__option .select2-results__option .select2-results__option .select2-results__option .select2-results__option .select2-results__option { |
|||
margin-left: -4em; |
|||
padding-left: 5em; } |
|||
.select2-container--default .select2-results__option .select2-results__option .select2-results__option .select2-results__option .select2-results__option .select2-results__option .select2-results__option { |
|||
margin-left: -5em; |
|||
padding-left: 6em; } |
|||
|
|||
.select2-container--default .select2-results__option--highlighted[aria-selected] { |
|||
background-color: #5897fb; |
|||
color: white; } |
|||
|
|||
.select2-container--default .select2-results__group { |
|||
cursor: default; |
|||
display: block; |
|||
padding: 6px; } |
|||
|
|||
.select2-container--classic .select2-selection--single { |
|||
background-color: #f7f7f7; |
|||
border: 1px solid #aaa; |
|||
border-radius: 4px; |
|||
outline: 0; |
|||
background-image: -webkit-linear-gradient(top, white 50%, #eeeeee 100%); |
|||
background-image: -o-linear-gradient(top, white 50%, #eeeeee 100%); |
|||
background-image: linear-gradient(to bottom, white 50%, #eeeeee 100%); |
|||
background-repeat: repeat-x; |
|||
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#FFFFFFFF', endColorstr='#FFEEEEEE', GradientType=0); } |
|||
.select2-container--classic .select2-selection--single:focus { |
|||
border: 1px solid #5897fb; } |
|||
.select2-container--classic .select2-selection--single .select2-selection__rendered { |
|||
color: #444; |
|||
line-height: 28px; } |
|||
.select2-container--classic .select2-selection--single .select2-selection__clear { |
|||
cursor: pointer; |
|||
float: right; |
|||
font-weight: bold; |
|||
margin-right: 10px; } |
|||
.select2-container--classic .select2-selection--single .select2-selection__placeholder { |
|||
color: #999; } |
|||
.select2-container--classic .select2-selection--single .select2-selection__arrow { |
|||
background-color: #ddd; |
|||
border: none; |
|||
border-left: 1px solid #aaa; |
|||
border-top-right-radius: 4px; |
|||
border-bottom-right-radius: 4px; |
|||
height: 26px; |
|||
position: absolute; |
|||
top: 1px; |
|||
right: 1px; |
|||
width: 20px; |
|||
background-image: -webkit-linear-gradient(top, #eeeeee 50%, #cccccc 100%); |
|||
background-image: -o-linear-gradient(top, #eeeeee 50%, #cccccc 100%); |
|||
background-image: linear-gradient(to bottom, #eeeeee 50%, #cccccc 100%); |
|||
background-repeat: repeat-x; |
|||
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#FFEEEEEE', endColorstr='#FFCCCCCC', GradientType=0); } |
|||
.select2-container--classic .select2-selection--single .select2-selection__arrow b { |
|||
border-color: #888 transparent transparent transparent; |
|||
border-style: solid; |
|||
border-width: 5px 4px 0 4px; |
|||
height: 0; |
|||
left: 50%; |
|||
margin-left: -4px; |
|||
margin-top: -2px; |
|||
position: absolute; |
|||
top: 50%; |
|||
width: 0; } |
|||
|
|||
.select2-container--classic[dir="rtl"] .select2-selection--single .select2-selection__clear { |
|||
float: left; } |
|||
|
|||
.select2-container--classic[dir="rtl"] .select2-selection--single .select2-selection__arrow { |
|||
border: none; |
|||
border-right: 1px solid #aaa; |
|||
border-radius: 0; |
|||
border-top-left-radius: 4px; |
|||
border-bottom-left-radius: 4px; |
|||
left: 1px; |
|||
right: auto; } |
|||
|
|||
.select2-container--classic.select2-container--open .select2-selection--single { |
|||
border: 1px solid #5897fb; } |
|||
.select2-container--classic.select2-container--open .select2-selection--single .select2-selection__arrow { |
|||
background: transparent; |
|||
border: none; } |
|||
.select2-container--classic.select2-container--open .select2-selection--single .select2-selection__arrow b { |
|||
border-color: transparent transparent #888 transparent; |
|||
border-width: 0 4px 5px 4px; } |
|||
|
|||
.select2-container--classic.select2-container--open.select2-container--above .select2-selection--single { |
|||
border-top: none; |
|||
border-top-left-radius: 0; |
|||
border-top-right-radius: 0; |
|||
background-image: -webkit-linear-gradient(top, white 0%, #eeeeee 50%); |
|||
background-image: -o-linear-gradient(top, white 0%, #eeeeee 50%); |
|||
background-image: linear-gradient(to bottom, white 0%, #eeeeee 50%); |
|||
background-repeat: repeat-x; |
|||
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#FFFFFFFF', endColorstr='#FFEEEEEE', GradientType=0); } |
|||
|
|||
.select2-container--classic.select2-container--open.select2-container--below .select2-selection--single { |
|||
border-bottom: none; |
|||
border-bottom-left-radius: 0; |
|||
border-bottom-right-radius: 0; |
|||
background-image: -webkit-linear-gradient(top, #eeeeee 50%, white 100%); |
|||
background-image: -o-linear-gradient(top, #eeeeee 50%, white 100%); |
|||
background-image: linear-gradient(to bottom, #eeeeee 50%, white 100%); |
|||
background-repeat: repeat-x; |
|||
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#FFEEEEEE', endColorstr='#FFFFFFFF', GradientType=0); } |
|||
|
|||
.select2-container--classic .select2-selection--multiple { |
|||
background-color: white; |
|||
border: 1px solid #aaa; |
|||
border-radius: 4px; |
|||
cursor: text; |
|||
outline: 0; } |
|||
.select2-container--classic .select2-selection--multiple:focus { |
|||
border: 1px solid #5897fb; } |
|||
.select2-container--classic .select2-selection--multiple .select2-selection__rendered { |
|||
list-style: none; |
|||
margin: 0; |
|||
padding: 0 5px; } |
|||
.select2-container--classic .select2-selection--multiple .select2-selection__clear { |
|||
display: none; } |
|||
.select2-container--classic .select2-selection--multiple .select2-selection__choice { |
|||
background-color: #e4e4e4; |
|||
border: 1px solid #aaa; |
|||
border-radius: 4px; |
|||
cursor: default; |
|||
float: left; |
|||
margin-right: 5px; |
|||
margin-top: 5px; |
|||
padding: 0 5px; } |
|||
.select2-container--classic .select2-selection--multiple .select2-selection__choice__remove { |
|||
color: #888; |
|||
cursor: pointer; |
|||
display: inline-block; |
|||
font-weight: bold; |
|||
margin-right: 2px; } |
|||
.select2-container--classic .select2-selection--multiple .select2-selection__choice__remove:hover { |
|||
color: #555; } |
|||
|
|||
.select2-container--classic[dir="rtl"] .select2-selection--multiple .select2-selection__choice { |
|||
float: right; } |
|||
|
|||
.select2-container--classic[dir="rtl"] .select2-selection--multiple .select2-selection__choice { |
|||
margin-left: 5px; |
|||
margin-right: auto; } |
|||
|
|||
.select2-container--classic[dir="rtl"] .select2-selection--multiple .select2-selection__choice__remove { |
|||
margin-left: 2px; |
|||
margin-right: auto; } |
|||
|
|||
.select2-container--classic.select2-container--open .select2-selection--multiple { |
|||
border: 1px solid #5897fb; } |
|||
|
|||
.select2-container--classic.select2-container--open.select2-container--above .select2-selection--multiple { |
|||
border-top: none; |
|||
border-top-left-radius: 0; |
|||
border-top-right-radius: 0; } |
|||
|
|||
.select2-container--classic.select2-container--open.select2-container--below .select2-selection--multiple { |
|||
border-bottom: none; |
|||
border-bottom-left-radius: 0; |
|||
border-bottom-right-radius: 0; } |
|||
|
|||
.select2-container--classic .select2-search--dropdown .select2-search__field { |
|||
border: 1px solid #aaa; |
|||
outline: 0; } |
|||
|
|||
.select2-container--classic .select2-search--inline .select2-search__field { |
|||
outline: 0; |
|||
box-shadow: none; } |
|||
|
|||
.select2-container--classic .select2-dropdown { |
|||
background-color: white; |
|||
border: 1px solid transparent; } |
|||
|
|||
.select2-container--classic .select2-dropdown--above { |
|||
border-bottom: none; } |
|||
|
|||
.select2-container--classic .select2-dropdown--below { |
|||
border-top: none; } |
|||
|
|||
.select2-container--classic .select2-results > .select2-results__options { |
|||
max-height: 200px; |
|||
overflow-y: auto; } |
|||
|
|||
.select2-container--classic .select2-results__option[role=group] { |
|||
padding: 0; } |
|||
|
|||
.select2-container--classic .select2-results__option[aria-disabled=true] { |
|||
color: grey; } |
|||
|
|||
.select2-container--classic .select2-results__option--highlighted[aria-selected] { |
|||
background-color: #3875d7; |
|||
color: white; } |
|||
|
|||
.select2-container--classic .select2-results__group { |
|||
cursor: default; |
|||
display: block; |
|||
padding: 6px; } |
|||
|
|||
.select2-container--classic.select2-container--open .select2-dropdown { |
|||
border-color: #5897fb; } |
|||
@ -1,565 +0,0 @@ |
|||
/* SELECTOR (FILTER INTERFACE) */ |
|||
|
|||
.selector { |
|||
width: 800px; |
|||
float: left; |
|||
} |
|||
|
|||
.selector select { |
|||
width: 380px; |
|||
height: 17.2em; |
|||
} |
|||
|
|||
.selector-available, .selector-chosen { |
|||
float: left; |
|||
width: 380px; |
|||
text-align: center; |
|||
margin-bottom: 5px; |
|||
} |
|||
|
|||
.selector-chosen select { |
|||
border-top: none; |
|||
} |
|||
|
|||
.selector-available h2, .selector-chosen h2 { |
|||
border: 1px solid #ccc; |
|||
border-radius: 4px 4px 0 0; |
|||
} |
|||
|
|||
.selector-chosen h2 { |
|||
background: #79aec8; |
|||
color: #fff; |
|||
} |
|||
|
|||
.selector .selector-available h2 { |
|||
background: #f8f8f8; |
|||
color: #666; |
|||
} |
|||
|
|||
.selector .selector-filter { |
|||
background: white; |
|||
border: 1px solid #ccc; |
|||
border-width: 0 1px; |
|||
padding: 8px; |
|||
color: #999; |
|||
font-size: 10px; |
|||
margin: 0; |
|||
text-align: left; |
|||
} |
|||
|
|||
.selector .selector-filter label, |
|||
.inline-group .aligned .selector .selector-filter label { |
|||
float: left; |
|||
margin: 7px 0 0; |
|||
width: 18px; |
|||
height: 18px; |
|||
padding: 0; |
|||
overflow: hidden; |
|||
line-height: 1; |
|||
} |
|||
|
|||
.selector .selector-available input { |
|||
width: 320px; |
|||
margin-left: 8px; |
|||
} |
|||
|
|||
.selector ul.selector-chooser { |
|||
float: left; |
|||
width: 22px; |
|||
background-color: #eee; |
|||
border-radius: 10px; |
|||
margin: 10em 5px 0 5px; |
|||
padding: 0; |
|||
} |
|||
|
|||
.selector-chooser li { |
|||
margin: 0; |
|||
padding: 3px; |
|||
list-style-type: none; |
|||
} |
|||
|
|||
.selector select { |
|||
padding: 0 10px; |
|||
margin: 0 0 10px; |
|||
border-radius: 0 0 4px 4px; |
|||
} |
|||
|
|||
.selector-add, .selector-remove { |
|||
width: 16px; |
|||
height: 16px; |
|||
display: block; |
|||
text-indent: -3000px; |
|||
overflow: hidden; |
|||
cursor: default; |
|||
opacity: 0.3; |
|||
} |
|||
|
|||
.active.selector-add, .active.selector-remove { |
|||
opacity: 1; |
|||
} |
|||
|
|||
.active.selector-add:hover, .active.selector-remove:hover { |
|||
cursor: pointer; |
|||
} |
|||
|
|||
.selector-add { |
|||
background: url(../img/selector-icons.svg) 0 -96px no-repeat; |
|||
} |
|||
|
|||
.active.selector-add:focus, .active.selector-add:hover { |
|||
background-position: 0 -112px; |
|||
} |
|||
|
|||
.selector-remove { |
|||
background: url(../img/selector-icons.svg) 0 -64px no-repeat; |
|||
} |
|||
|
|||
.active.selector-remove:focus, .active.selector-remove:hover { |
|||
background-position: 0 -80px; |
|||
} |
|||
|
|||
a.selector-chooseall, a.selector-clearall { |
|||
display: inline-block; |
|||
height: 16px; |
|||
text-align: left; |
|||
margin: 1px auto 3px; |
|||
overflow: hidden; |
|||
font-weight: bold; |
|||
line-height: 16px; |
|||
color: #666; |
|||
text-decoration: none; |
|||
opacity: 0.3; |
|||
} |
|||
|
|||
a.active.selector-chooseall:focus, a.active.selector-clearall:focus, |
|||
a.active.selector-chooseall:hover, a.active.selector-clearall:hover { |
|||
color: #447e9b; |
|||
} |
|||
|
|||
a.active.selector-chooseall, a.active.selector-clearall { |
|||
opacity: 1; |
|||
} |
|||
|
|||
a.active.selector-chooseall:hover, a.active.selector-clearall:hover { |
|||
cursor: pointer; |
|||
} |
|||
|
|||
a.selector-chooseall { |
|||
padding: 0 18px 0 0; |
|||
background: url(../img/selector-icons.svg) right -160px no-repeat; |
|||
cursor: default; |
|||
} |
|||
|
|||
a.active.selector-chooseall:focus, a.active.selector-chooseall:hover { |
|||
background-position: 100% -176px; |
|||
} |
|||
|
|||
a.selector-clearall { |
|||
padding: 0 0 0 18px; |
|||
background: url(../img/selector-icons.svg) 0 -128px no-repeat; |
|||
cursor: default; |
|||
} |
|||
|
|||
a.active.selector-clearall:focus, a.active.selector-clearall:hover { |
|||
background-position: 0 -144px; |
|||
} |
|||
|
|||
/* STACKED SELECTORS */ |
|||
|
|||
.stacked { |
|||
float: left; |
|||
width: 490px; |
|||
} |
|||
|
|||
.stacked select { |
|||
width: 480px; |
|||
height: 10.1em; |
|||
} |
|||
|
|||
.stacked .selector-available, .stacked .selector-chosen { |
|||
width: 480px; |
|||
} |
|||
|
|||
.stacked .selector-available { |
|||
margin-bottom: 0; |
|||
} |
|||
|
|||
.stacked .selector-available input { |
|||
width: 422px; |
|||
} |
|||
|
|||
.stacked ul.selector-chooser { |
|||
height: 22px; |
|||
width: 50px; |
|||
margin: 0 0 10px 40%; |
|||
background-color: #eee; |
|||
border-radius: 10px; |
|||
} |
|||
|
|||
.stacked .selector-chooser li { |
|||
float: left; |
|||
padding: 3px 3px 3px 5px; |
|||
} |
|||
|
|||
.stacked .selector-chooseall, .stacked .selector-clearall { |
|||
display: none; |
|||
} |
|||
|
|||
.stacked .selector-add { |
|||
background: url(../img/selector-icons.svg) 0 -32px no-repeat; |
|||
cursor: default; |
|||
} |
|||
|
|||
.stacked .active.selector-add { |
|||
background-position: 0 -48px; |
|||
cursor: pointer; |
|||
} |
|||
|
|||
.stacked .selector-remove { |
|||
background: url(../img/selector-icons.svg) 0 0 no-repeat; |
|||
cursor: default; |
|||
} |
|||
|
|||
.stacked .active.selector-remove { |
|||
background-position: 0 -16px; |
|||
cursor: pointer; |
|||
} |
|||
|
|||
.selector .help-icon { |
|||
background: url(../img/icon-unknown.svg) 0 0 no-repeat; |
|||
display: inline-block; |
|||
vertical-align: middle; |
|||
margin: -2px 0 0 2px; |
|||
width: 13px; |
|||
height: 13px; |
|||
} |
|||
|
|||
.selector .selector-chosen .help-icon { |
|||
background: url(../img/icon-unknown-alt.svg) 0 0 no-repeat; |
|||
} |
|||
|
|||
.selector .search-label-icon { |
|||
background: url(../img/search.svg) 0 0 no-repeat; |
|||
display: inline-block; |
|||
height: 18px; |
|||
width: 18px; |
|||
} |
|||
|
|||
/* DATE AND TIME */ |
|||
|
|||
p.datetime { |
|||
line-height: 20px; |
|||
margin: 0; |
|||
padding: 0; |
|||
color: #666; |
|||
font-weight: bold; |
|||
} |
|||
|
|||
.datetime span { |
|||
white-space: nowrap; |
|||
font-weight: normal; |
|||
font-size: 11px; |
|||
color: #ccc; |
|||
} |
|||
|
|||
.datetime input, .form-row .datetime input.vDateField, .form-row .datetime input.vTimeField { |
|||
min-width: 0; |
|||
margin-left: 5px; |
|||
margin-bottom: 4px; |
|||
} |
|||
|
|||
table p.datetime { |
|||
font-size: 11px; |
|||
margin-left: 0; |
|||
padding-left: 0; |
|||
} |
|||
|
|||
.datetimeshortcuts .clock-icon, .datetimeshortcuts .date-icon { |
|||
position: relative; |
|||
display: inline-block; |
|||
vertical-align: middle; |
|||
height: 16px; |
|||
width: 16px; |
|||
overflow: hidden; |
|||
} |
|||
|
|||
.datetimeshortcuts .clock-icon { |
|||
background: url(../img/icon-clock.svg) 0 0 no-repeat; |
|||
} |
|||
|
|||
.datetimeshortcuts a:focus .clock-icon, |
|||
.datetimeshortcuts a:hover .clock-icon { |
|||
background-position: 0 -16px; |
|||
} |
|||
|
|||
.datetimeshortcuts .date-icon { |
|||
background: url(../img/icon-calendar.svg) 0 0 no-repeat; |
|||
top: -1px; |
|||
} |
|||
|
|||
.datetimeshortcuts a:focus .date-icon, |
|||
.datetimeshortcuts a:hover .date-icon { |
|||
background-position: 0 -16px; |
|||
} |
|||
|
|||
.timezonewarning { |
|||
font-size: 11px; |
|||
color: #999; |
|||
} |
|||
|
|||
/* URL */ |
|||
|
|||
p.url { |
|||
line-height: 20px; |
|||
margin: 0; |
|||
padding: 0; |
|||
color: #666; |
|||
font-size: 11px; |
|||
font-weight: bold; |
|||
} |
|||
|
|||
.url a { |
|||
font-weight: normal; |
|||
} |
|||
|
|||
/* FILE UPLOADS */ |
|||
|
|||
p.file-upload { |
|||
line-height: 20px; |
|||
margin: 0; |
|||
padding: 0; |
|||
color: #666; |
|||
font-size: 11px; |
|||
font-weight: bold; |
|||
} |
|||
|
|||
.aligned p.file-upload { |
|||
margin-left: 170px; |
|||
} |
|||
|
|||
.file-upload a { |
|||
font-weight: normal; |
|||
} |
|||
|
|||
.file-upload .deletelink { |
|||
margin-left: 5px; |
|||
} |
|||
|
|||
span.clearable-file-input label { |
|||
color: #333; |
|||
font-size: 11px; |
|||
display: inline; |
|||
float: none; |
|||
} |
|||
|
|||
/* CALENDARS & CLOCKS */ |
|||
|
|||
.calendarbox, .clockbox { |
|||
margin: 5px auto; |
|||
font-size: 12px; |
|||
width: 19em; |
|||
text-align: center; |
|||
background: white; |
|||
border: 1px solid #ddd; |
|||
border-radius: 4px; |
|||
box-shadow: 0 2px 4px rgba(0, 0, 0, 0.15); |
|||
overflow: hidden; |
|||
position: relative; |
|||
} |
|||
|
|||
.clockbox { |
|||
width: auto; |
|||
} |
|||
|
|||
.calendar { |
|||
margin: 0; |
|||
padding: 0; |
|||
} |
|||
|
|||
.calendar table { |
|||
margin: 0; |
|||
padding: 0; |
|||
border-collapse: collapse; |
|||
background: white; |
|||
width: 100%; |
|||
} |
|||
|
|||
.calendar caption, .calendarbox h2 { |
|||
margin: 0; |
|||
text-align: center; |
|||
border-top: none; |
|||
background: #f5dd5d; |
|||
font-weight: 700; |
|||
font-size: 12px; |
|||
color: #333; |
|||
} |
|||
|
|||
.calendar th { |
|||
padding: 8px 5px; |
|||
background: #f8f8f8; |
|||
border-bottom: 1px solid #ddd; |
|||
font-weight: 400; |
|||
font-size: 12px; |
|||
text-align: center; |
|||
color: #666; |
|||
} |
|||
|
|||
.calendar td { |
|||
font-weight: 400; |
|||
font-size: 12px; |
|||
text-align: center; |
|||
padding: 0; |
|||
border-top: 1px solid #eee; |
|||
border-bottom: none; |
|||
} |
|||
|
|||
.calendar td.selected a { |
|||
background: #79aec8; |
|||
color: #fff; |
|||
} |
|||
|
|||
.calendar td.nonday { |
|||
background: #f8f8f8; |
|||
} |
|||
|
|||
.calendar td.today a { |
|||
font-weight: 700; |
|||
} |
|||
|
|||
.calendar td a, .timelist a { |
|||
display: block; |
|||
font-weight: 400; |
|||
padding: 6px; |
|||
text-decoration: none; |
|||
color: #444; |
|||
} |
|||
|
|||
.calendar td a:focus, .timelist a:focus, |
|||
.calendar td a:hover, .timelist a:hover { |
|||
background: #79aec8; |
|||
color: white; |
|||
} |
|||
|
|||
.calendar td a:active, .timelist a:active { |
|||
background: #417690; |
|||
color: white; |
|||
} |
|||
|
|||
.calendarnav { |
|||
font-size: 10px; |
|||
text-align: center; |
|||
color: #ccc; |
|||
margin: 0; |
|||
padding: 1px 3px; |
|||
} |
|||
|
|||
.calendarnav a:link, #calendarnav a:visited, |
|||
#calendarnav a:focus, #calendarnav a:hover { |
|||
color: #999; |
|||
} |
|||
|
|||
.calendar-shortcuts { |
|||
background: white; |
|||
font-size: 11px; |
|||
line-height: 11px; |
|||
border-top: 1px solid #eee; |
|||
padding: 8px 0; |
|||
color: #ccc; |
|||
} |
|||
|
|||
.calendarbox .calendarnav-previous, .calendarbox .calendarnav-next { |
|||
display: block; |
|||
position: absolute; |
|||
top: 8px; |
|||
width: 15px; |
|||
height: 15px; |
|||
text-indent: -9999px; |
|||
padding: 0; |
|||
} |
|||
|
|||
.calendarnav-previous { |
|||
left: 10px; |
|||
background: url(../img/calendar-icons.svg) 0 0 no-repeat; |
|||
} |
|||
|
|||
.calendarbox .calendarnav-previous:focus, |
|||
.calendarbox .calendarnav-previous:hover { |
|||
background-position: 0 -15px; |
|||
} |
|||
|
|||
.calendarnav-next { |
|||
right: 10px; |
|||
background: url(../img/calendar-icons.svg) 0 -30px no-repeat; |
|||
} |
|||
|
|||
.calendarbox .calendarnav-next:focus, |
|||
.calendarbox .calendarnav-next:hover { |
|||
background-position: 0 -45px; |
|||
} |
|||
|
|||
.calendar-cancel { |
|||
margin: 0; |
|||
padding: 4px 0; |
|||
font-size: 12px; |
|||
background: #eee; |
|||
border-top: 1px solid #ddd; |
|||
color: #333; |
|||
} |
|||
|
|||
.calendar-cancel:focus, .calendar-cancel:hover { |
|||
background: #ddd; |
|||
} |
|||
|
|||
.calendar-cancel a { |
|||
color: black; |
|||
display: block; |
|||
} |
|||
|
|||
ul.timelist, .timelist li { |
|||
list-style-type: none; |
|||
margin: 0; |
|||
padding: 0; |
|||
} |
|||
|
|||
.timelist a { |
|||
padding: 2px; |
|||
} |
|||
|
|||
/* EDIT INLINE */ |
|||
|
|||
.inline-deletelink { |
|||
float: right; |
|||
text-indent: -9999px; |
|||
background: url(../img/inline-delete.svg) 0 0 no-repeat; |
|||
width: 16px; |
|||
height: 16px; |
|||
border: 0px none; |
|||
} |
|||
|
|||
.inline-deletelink:focus, .inline-deletelink:hover { |
|||
cursor: pointer; |
|||
} |
|||
|
|||
/* RELATED WIDGET WRAPPER */ |
|||
.related-widget-wrapper { |
|||
float: left; /* display properly in form rows with multiple fields */ |
|||
overflow: hidden; /* clear floated contents */ |
|||
} |
|||
|
|||
.related-widget-wrapper-link { |
|||
opacity: 0.3; |
|||
} |
|||
|
|||
.related-widget-wrapper-link:link { |
|||
opacity: .8; |
|||
} |
|||
|
|||
.related-widget-wrapper-link:link:focus, |
|||
.related-widget-wrapper-link:link:hover { |
|||
opacity: 1; |
|||
} |
|||
|
|||
select + .related-widget-wrapper-link, |
|||
.related-widget-wrapper-link + .related-widget-wrapper-link { |
|||
margin-left: 7px; |
|||
} |
|||
@ -1,202 +0,0 @@ |
|||
|
|||
Apache License |
|||
Version 2.0, January 2004 |
|||
http://www.apache.org/licenses/ |
|||
|
|||
TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION |
|||
|
|||
1. Definitions. |
|||
|
|||
"License" shall mean the terms and conditions for use, reproduction, |
|||
and distribution as defined by Sections 1 through 9 of this document. |
|||
|
|||
"Licensor" shall mean the copyright owner or entity authorized by |
|||
the copyright owner that is granting the License. |
|||
|
|||
"Legal Entity" shall mean the union of the acting entity and all |
|||
other entities that control, are controlled by, or are under common |
|||
control with that entity. For the purposes of this definition, |
|||
"control" means (i) the power, direct or indirect, to cause the |
|||
direction or management of such entity, whether by contract or |
|||
otherwise, or (ii) ownership of fifty percent (50%) or more of the |
|||
outstanding shares, or (iii) beneficial ownership of such entity. |
|||
|
|||
"You" (or "Your") shall mean an individual or Legal Entity |
|||
exercising permissions granted by this License. |
|||
|
|||
"Source" form shall mean the preferred form for making modifications, |
|||
including but not limited to software source code, documentation |
|||
source, and configuration files. |
|||
|
|||
"Object" form shall mean any form resulting from mechanical |
|||
transformation or translation of a Source form, including but |
|||
not limited to compiled object code, generated documentation, |
|||
and conversions to other media types. |
|||
|
|||
"Work" shall mean the work of authorship, whether in Source or |
|||
Object form, made available under the License, as indicated by a |
|||
copyright notice that is included in or attached to the work |
|||
(an example is provided in the Appendix below). |
|||
|
|||
"Derivative Works" shall mean any work, whether in Source or Object |
|||
form, that is based on (or derived from) the Work and for which the |
|||
editorial revisions, annotations, elaborations, or other modifications |
|||
represent, as a whole, an original work of authorship. For the purposes |
|||
of this License, Derivative Works shall not include works that remain |
|||
separable from, or merely link (or bind by name) to the interfaces of, |
|||
the Work and Derivative Works thereof. |
|||
|
|||
"Contribution" shall mean any work of authorship, including |
|||
the original version of the Work and any modifications or additions |
|||
to that Work or Derivative Works thereof, that is intentionally |
|||
submitted to Licensor for inclusion in the Work by the copyright owner |
|||
or by an individual or Legal Entity authorized to submit on behalf of |
|||
the copyright owner. For the purposes of this definition, "submitted" |
|||
means any form of electronic, verbal, or written communication sent |
|||
to the Licensor or its representatives, including but not limited to |
|||
communication on electronic mailing lists, source code control systems, |
|||
and issue tracking systems that are managed by, or on behalf of, the |
|||
Licensor for the purpose of discussing and improving the Work, but |
|||
excluding communication that is conspicuously marked or otherwise |
|||
designated in writing by the copyright owner as "Not a Contribution." |
|||
|
|||
"Contributor" shall mean Licensor and any individual or Legal Entity |
|||
on behalf of whom a Contribution has been received by Licensor and |
|||
subsequently incorporated within the Work. |
|||
|
|||
2. Grant of Copyright License. Subject to the terms and conditions of |
|||
this License, each Contributor hereby grants to You a perpetual, |
|||
worldwide, non-exclusive, no-charge, royalty-free, irrevocable |
|||
copyright license to reproduce, prepare Derivative Works of, |
|||
publicly display, publicly perform, sublicense, and distribute the |
|||
Work and such Derivative Works in Source or Object form. |
|||
|
|||
3. Grant of Patent License. Subject to the terms and conditions of |
|||
this License, each Contributor hereby grants to You a perpetual, |
|||
worldwide, non-exclusive, no-charge, royalty-free, irrevocable |
|||
(except as stated in this section) patent license to make, have made, |
|||
use, offer to sell, sell, import, and otherwise transfer the Work, |
|||
where such license applies only to those patent claims licensable |
|||
by such Contributor that are necessarily infringed by their |
|||
Contribution(s) alone or by combination of their Contribution(s) |
|||
with the Work to which such Contribution(s) was submitted. If You |
|||
institute patent litigation against any entity (including a |
|||
cross-claim or counterclaim in a lawsuit) alleging that the Work |
|||
or a Contribution incorporated within the Work constitutes direct |
|||
or contributory patent infringement, then any patent licenses |
|||
granted to You under this License for that Work shall terminate |
|||
as of the date such litigation is filed. |
|||
|
|||
4. Redistribution. You may reproduce and distribute copies of the |
|||
Work or Derivative Works thereof in any medium, with or without |
|||
modifications, and in Source or Object form, provided that You |
|||
meet the following conditions: |
|||
|
|||
(a) You must give any other recipients of the Work or |
|||
Derivative Works a copy of this License; and |
|||
|
|||
(b) You must cause any modified files to carry prominent notices |
|||
stating that You changed the files; and |
|||
|
|||
(c) You must retain, in the Source form of any Derivative Works |
|||
that You distribute, all copyright, patent, trademark, and |
|||
attribution notices from the Source form of the Work, |
|||
excluding those notices that do not pertain to any part of |
|||
the Derivative Works; and |
|||
|
|||
(d) If the Work includes a "NOTICE" text file as part of its |
|||
distribution, then any Derivative Works that You distribute must |
|||
include a readable copy of the attribution notices contained |
|||
within such NOTICE file, excluding those notices that do not |
|||
pertain to any part of the Derivative Works, in at least one |
|||
of the following places: within a NOTICE text file distributed |
|||
as part of the Derivative Works; within the Source form or |
|||
documentation, if provided along with the Derivative Works; or, |
|||
within a display generated by the Derivative Works, if and |
|||
wherever such third-party notices normally appear. The contents |
|||
of the NOTICE file are for informational purposes only and |
|||
do not modify the License. You may add Your own attribution |
|||
notices within Derivative Works that You distribute, alongside |
|||
or as an addendum to the NOTICE text from the Work, provided |
|||
that such additional attribution notices cannot be construed |
|||
as modifying the License. |
|||
|
|||
You may add Your own copyright statement to Your modifications and |
|||
may provide additional or different license terms and conditions |
|||
for use, reproduction, or distribution of Your modifications, or |
|||
for any such Derivative Works as a whole, provided Your use, |
|||
reproduction, and distribution of the Work otherwise complies with |
|||
the conditions stated in this License. |
|||
|
|||
5. Submission of Contributions. Unless You explicitly state otherwise, |
|||
any Contribution intentionally submitted for inclusion in the Work |
|||
by You to the Licensor shall be under the terms and conditions of |
|||
this License, without any additional terms or conditions. |
|||
Notwithstanding the above, nothing herein shall supersede or modify |
|||
the terms of any separate license agreement you may have executed |
|||
with Licensor regarding such Contributions. |
|||
|
|||
6. Trademarks. This License does not grant permission to use the trade |
|||
names, trademarks, service marks, or product names of the Licensor, |
|||
except as required for reasonable and customary use in describing the |
|||
origin of the Work and reproducing the content of the NOTICE file. |
|||
|
|||
7. Disclaimer of Warranty. Unless required by applicable law or |
|||
agreed to in writing, Licensor provides the Work (and each |
|||
Contributor provides its Contributions) on an "AS IS" BASIS, |
|||
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or |
|||
implied, including, without limitation, any warranties or conditions |
|||
of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A |
|||
PARTICULAR PURPOSE. You are solely responsible for determining the |
|||
appropriateness of using or redistributing the Work and assume any |
|||
risks associated with Your exercise of permissions under this License. |
|||
|
|||
8. Limitation of Liability. In no event and under no legal theory, |
|||
whether in tort (including negligence), contract, or otherwise, |
|||
unless required by applicable law (such as deliberate and grossly |
|||
negligent acts) or agreed to in writing, shall any Contributor be |
|||
liable to You for damages, including any direct, indirect, special, |
|||
incidental, or consequential damages of any character arising as a |
|||
result of this License or out of the use or inability to use the |
|||
Work (including but not limited to damages for loss of goodwill, |
|||
work stoppage, computer failure or malfunction, or any and all |
|||
other commercial damages or losses), even if such Contributor |
|||
has been advised of the possibility of such damages. |
|||
|
|||
9. Accepting Warranty or Additional Liability. While redistributing |
|||
the Work or Derivative Works thereof, You may choose to offer, |
|||
and charge a fee for, acceptance of support, warranty, indemnity, |
|||
or other liability obligations and/or rights consistent with this |
|||
License. However, in accepting such obligations, You may act only |
|||
on Your own behalf and on Your sole responsibility, not on behalf |
|||
of any other Contributor, and only if You agree to indemnify, |
|||
defend, and hold each Contributor harmless for any liability |
|||
incurred by, or claims asserted against, such Contributor by reason |
|||
of your accepting any such warranty or additional liability. |
|||
|
|||
END OF TERMS AND CONDITIONS |
|||
|
|||
APPENDIX: How to apply the Apache License to your work. |
|||
|
|||
To apply the Apache License to your work, attach the following |
|||
boilerplate notice, with the fields enclosed by brackets "[]" |
|||
replaced with your own identifying information. (Don't include |
|||
the brackets!) The text should be enclosed in the appropriate |
|||
comment syntax for the file format. We also recommend that a |
|||
file or class name and description of purpose be included on the |
|||
same "printed page" as the copyright notice for easier |
|||
identification within third-party archives. |
|||
|
|||
Copyright [yyyy] [name of copyright owner] |
|||
|
|||
Licensed under the Apache License, Version 2.0 (the "License"); |
|||
you may not use this file except in compliance with the License. |
|||
You may obtain a copy of the License at |
|||
|
|||
http://www.apache.org/licenses/LICENSE-2.0 |
|||
|
|||
Unless required by applicable law or agreed to in writing, software |
|||
distributed under the License is distributed on an "AS IS" BASIS, |
|||
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
|||
See the License for the specific language governing permissions and |
|||
limitations under the License. |
|||
@ -1,2 +0,0 @@ |
|||
Roboto webfont source: https://www.google.com/fonts/specimen/Roboto |
|||
Weights used in this project: Light (300), Regular (400), Bold (700) |
|||
@ -1,20 +0,0 @@ |
|||
The MIT License (MIT) |
|||
|
|||
Copyright (c) 2014 Code Charm Ltd |
|||
|
|||
Permission is hereby granted, free of charge, to any person obtaining a copy of |
|||
this software and associated documentation files (the "Software"), to deal in |
|||
the Software without restriction, including without limitation the rights to |
|||
use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of |
|||
the Software, and to permit persons to whom the Software is furnished to do so, |
|||
subject to the following conditions: |
|||
|
|||
The above copyright notice and this permission notice shall be included in all |
|||
copies or substantial portions of the Software. |
|||
|
|||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR |
|||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS |
|||
FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR |
|||
COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER |
|||
IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN |
|||
CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. |
|||
@ -1,7 +0,0 @@ |
|||
All icons are taken from Font Awesome (http://fontawesome.io/) project. |
|||
The Font Awesome font is licensed under the SIL OFL 1.1: |
|||
- http://scripts.sil.org/OFL |
|||
|
|||
SVG icons source: https://github.com/encharm/Font-Awesome-SVG-PNG |
|||
Font-Awesome-SVG-PNG is licensed under the MIT license (see file license |
|||
in current folder). |
|||
|
Before Width: | Height: | Size: 1.1 KiB |
|
Before Width: | Height: | Size: 1.1 KiB |
|
Before Width: | Height: | Size: 1.1 KiB |
|
Before Width: | Height: | Size: 331 B |
|
Before Width: | Height: | Size: 504 B |
|
Before Width: | Height: | Size: 1.1 KiB |
|
Before Width: | Height: | Size: 380 B |
|
Before Width: | Height: | Size: 677 B |
|
Before Width: | Height: | Size: 392 B |
|
Before Width: | Height: | Size: 560 B |
|
Before Width: | Height: | Size: 655 B |
|
Before Width: | Height: | Size: 655 B |
|
Before Width: | Height: | Size: 581 B |
|
Before Width: | Height: | Size: 436 B |
|
Before Width: | Height: | Size: 560 B |
|
Before Width: | Height: | Size: 458 B |
|
Before Width: | Height: | Size: 3.2 KiB |
|
Before Width: | Height: | Size: 1.1 KiB |
|
Before Width: | Height: | Size: 331 B |
|
Before Width: | Height: | Size: 280 B |
@ -1,144 +0,0 @@ |
|||
(function($) { |
|||
'use strict'; |
|||
var SelectBox = { |
|||
cache: {}, |
|||
init: function(id) { |
|||
var box = document.getElementById(id); |
|||
var node; |
|||
SelectBox.cache[id] = []; |
|||
var cache = SelectBox.cache[id]; |
|||
var boxOptions = box.options; |
|||
var boxOptionsLength = boxOptions.length; |
|||
for (var i = 0, j = boxOptionsLength; i < j; i++) { |
|||
node = boxOptions[i]; |
|||
cache.push({value: node.value, text: node.text, displayed: 1}); |
|||
} |
|||
}, |
|||
redisplay: function(id) { |
|||
// Repopulate HTML select box from cache
|
|||
var box = document.getElementById(id); |
|||
var node; |
|||
$(box).empty(); // clear all options
|
|||
var new_options = box.outerHTML.slice(0, -9); // grab just the opening tag
|
|||
var cache = SelectBox.cache[id]; |
|||
for (var i = 0, j = cache.length; i < j; i++) { |
|||
node = cache[i]; |
|||
if (node.displayed) { |
|||
var new_option = new Option(node.text, node.value, false, false); |
|||
// Shows a tooltip when hovering over the option
|
|||
new_option.setAttribute("title", node.text); |
|||
new_options += new_option.outerHTML; |
|||
} |
|||
} |
|||
new_options += '</select>'; |
|||
box.outerHTML = new_options; |
|||
}, |
|||
filter: function(id, text) { |
|||
// Redisplay the HTML select box, displaying only the choices containing ALL
|
|||
// the words in text. (It's an AND search.)
|
|||
var tokens = text.toLowerCase().split(/\s+/); |
|||
var node, token; |
|||
var cache = SelectBox.cache[id]; |
|||
for (var i = 0, j = cache.length; i < j; i++) { |
|||
node = cache[i]; |
|||
node.displayed = 1; |
|||
var node_text = node.text.toLowerCase(); |
|||
var numTokens = tokens.length; |
|||
for (var k = 0; k < numTokens; k++) { |
|||
token = tokens[k]; |
|||
if (node_text.indexOf(token) === -1) { |
|||
node.displayed = 0; |
|||
break; // Once the first token isn't found we're done
|
|||
} |
|||
} |
|||
} |
|||
SelectBox.redisplay(id); |
|||
}, |
|||
delete_from_cache: function(id, value) { |
|||
var node, delete_index = null; |
|||
var cache = SelectBox.cache[id]; |
|||
for (var i = 0, j = cache.length; i < j; i++) { |
|||
node = cache[i]; |
|||
if (node.value === value) { |
|||
delete_index = i; |
|||
break; |
|||
} |
|||
} |
|||
cache.splice(delete_index, 1); |
|||
}, |
|||
add_to_cache: function(id, option) { |
|||
SelectBox.cache[id].push({value: option.value, text: option.text, displayed: 1}); |
|||
}, |
|||
cache_contains: function(id, value) { |
|||
// Check if an item is contained in the cache
|
|||
var node; |
|||
var cache = SelectBox.cache[id]; |
|||
for (var i = 0, j = cache.length; i < j; i++) { |
|||
node = cache[i]; |
|||
if (node.value === value) { |
|||
return true; |
|||
} |
|||
} |
|||
return false; |
|||
}, |
|||
move: function(from, to) { |
|||
var from_box = document.getElementById(from); |
|||
var option; |
|||
var boxOptions = from_box.options; |
|||
var boxOptionsLength = boxOptions.length; |
|||
for (var i = 0, j = boxOptionsLength; i < j; i++) { |
|||
option = boxOptions[i]; |
|||
var option_value = option.value; |
|||
if (option.selected && SelectBox.cache_contains(from, option_value)) { |
|||
SelectBox.add_to_cache(to, {value: option_value, text: option.text, displayed: 1}); |
|||
SelectBox.delete_from_cache(from, option_value); |
|||
} |
|||
} |
|||
SelectBox.redisplay(from); |
|||
SelectBox.redisplay(to); |
|||
}, |
|||
move_all: function(from, to) { |
|||
var from_box = document.getElementById(from); |
|||
var option; |
|||
var boxOptions = from_box.options; |
|||
var boxOptionsLength = boxOptions.length; |
|||
for (var i = 0, j = boxOptionsLength; i < j; i++) { |
|||
option = boxOptions[i]; |
|||
var option_value = option.value; |
|||
if (SelectBox.cache_contains(from, option_value)) { |
|||
SelectBox.add_to_cache(to, {value: option_value, text: option.text, displayed: 1}); |
|||
SelectBox.delete_from_cache(from, option_value); |
|||
} |
|||
} |
|||
SelectBox.redisplay(from); |
|||
SelectBox.redisplay(to); |
|||
}, |
|||
sort: function(id) { |
|||
SelectBox.cache[id].sort(function(a, b) { |
|||
a = a.text.toLowerCase(); |
|||
b = b.text.toLowerCase(); |
|||
try { |
|||
if (a > b) { |
|||
return 1; |
|||
} |
|||
if (a < b) { |
|||
return -1; |
|||
} |
|||
} |
|||
catch (e) { |
|||
// silently fail on IE 'unknown' exception
|
|||
} |
|||
return 0; |
|||
} ); |
|||
}, |
|||
select_all: function(id) { |
|||
var box = document.getElementById(id); |
|||
var boxOptions = box.options; |
|||
var boxOptionsLength = boxOptions.length; |
|||
for (var i = 0; i < boxOptionsLength; i++) { |
|||
boxOptions[i].selected = 'selected'; |
|||
} |
|||
} |
|||
}; |
|||
window.SelectBox = SelectBox; |
|||
})(django.jQuery); |
|||
@ -1,252 +0,0 @@ |
|||
/*global SelectBox, gettext, interpolate, quickElement, SelectFilter*/ |
|||
/* |
|||
SelectFilter2 - Turns a multiple-select box into a filter interface. |
|||
|
|||
Requires jQuery, core.js, and SelectBox.js. |
|||
*/ |
|||
(function($) { |
|||
'use strict'; |
|||
function findForm(node) { |
|||
// returns the node of the form containing the given node
|
|||
if (node.tagName.toLowerCase() !== 'form') { |
|||
return findForm(node.parentNode); |
|||
} |
|||
return node; |
|||
} |
|||
|
|||
window.SelectFilter = { |
|||
init: function(field_id, field_name, is_stacked) { |
|||
if (field_id.match(/__prefix__/)) { |
|||
// Don't initialize on empty forms.
|
|||
return; |
|||
} |
|||
var from_box = document.getElementById(field_id); |
|||
from_box.id += '_from'; // change its ID
|
|||
from_box.className = 'filtered'; |
|||
|
|||
var ps = from_box.parentNode.getElementsByTagName('p'); |
|||
for (var i = 0; i < ps.length; i++) { |
|||
if (ps[i].className.indexOf("info") !== -1) { |
|||
// Remove <p class="info">, because it just gets in the way.
|
|||
from_box.parentNode.removeChild(ps[i]); |
|||
} else if (ps[i].className.indexOf("help") !== -1) { |
|||
// Move help text up to the top so it isn't below the select
|
|||
// boxes or wrapped off on the side to the right of the add
|
|||
// button:
|
|||
from_box.parentNode.insertBefore(ps[i], from_box.parentNode.firstChild); |
|||
} |
|||
} |
|||
|
|||
// <div class="selector"> or <div class="selector stacked">
|
|||
var selector_div = quickElement('div', from_box.parentNode); |
|||
selector_div.className = is_stacked ? 'selector stacked' : 'selector'; |
|||
|
|||
// <div class="selector-available">
|
|||
var selector_available = quickElement('div', selector_div); |
|||
selector_available.className = 'selector-available'; |
|||
var title_available = quickElement('h2', selector_available, interpolate(gettext('Available %s') + ' ', [field_name])); |
|||
quickElement( |
|||
'span', title_available, '', |
|||
'class', 'help help-tooltip help-icon', |
|||
'title', interpolate( |
|||
gettext( |
|||
'This is the list of available %s. You may choose some by ' + |
|||
'selecting them in the box below and then clicking the ' + |
|||
'"Choose" arrow between the two boxes.' |
|||
), |
|||
[field_name] |
|||
) |
|||
); |
|||
|
|||
var filter_p = quickElement('p', selector_available, '', 'id', field_id + '_filter'); |
|||
filter_p.className = 'selector-filter'; |
|||
|
|||
var search_filter_label = quickElement('label', filter_p, '', 'for', field_id + '_input'); |
|||
|
|||
quickElement( |
|||
'span', search_filter_label, '', |
|||
'class', 'help-tooltip search-label-icon', |
|||
'title', interpolate(gettext("Type into this box to filter down the list of available %s."), [field_name]) |
|||
); |
|||
|
|||
filter_p.appendChild(document.createTextNode(' ')); |
|||
|
|||
var filter_input = quickElement('input', filter_p, '', 'type', 'text', 'placeholder', gettext("Filter")); |
|||
filter_input.id = field_id + '_input'; |
|||
|
|||
selector_available.appendChild(from_box); |
|||
var choose_all = quickElement('a', selector_available, gettext('Choose all'), 'title', interpolate(gettext('Click to choose all %s at once.'), [field_name]), 'href', '#', 'id', field_id + '_add_all_link'); |
|||
choose_all.className = 'selector-chooseall'; |
|||
|
|||
// <ul class="selector-chooser">
|
|||
var selector_chooser = quickElement('ul', selector_div); |
|||
selector_chooser.className = 'selector-chooser'; |
|||
var add_link = quickElement('a', quickElement('li', selector_chooser), gettext('Choose'), 'title', gettext('Choose'), 'href', '#', 'id', field_id + '_add_link'); |
|||
add_link.className = 'selector-add'; |
|||
var remove_link = quickElement('a', quickElement('li', selector_chooser), gettext('Remove'), 'title', gettext('Remove'), 'href', '#', 'id', field_id + '_remove_link'); |
|||
remove_link.className = 'selector-remove'; |
|||
|
|||
// <div class="selector-chosen">
|
|||
var selector_chosen = quickElement('div', selector_div); |
|||
selector_chosen.className = 'selector-chosen'; |
|||
var title_chosen = quickElement('h2', selector_chosen, interpolate(gettext('Chosen %s') + ' ', [field_name])); |
|||
quickElement( |
|||
'span', title_chosen, '', |
|||
'class', 'help help-tooltip help-icon', |
|||
'title', interpolate( |
|||
gettext( |
|||
'This is the list of chosen %s. You may remove some by ' + |
|||
'selecting them in the box below and then clicking the ' + |
|||
'"Remove" arrow between the two boxes.' |
|||
), |
|||
[field_name] |
|||
) |
|||
); |
|||
|
|||
var to_box = quickElement('select', selector_chosen, '', 'id', field_id + '_to', 'multiple', 'multiple', 'size', from_box.size, 'name', from_box.getAttribute('name')); |
|||
to_box.className = 'filtered'; |
|||
var clear_all = quickElement('a', selector_chosen, gettext('Remove all'), 'title', interpolate(gettext('Click to remove all chosen %s at once.'), [field_name]), 'href', '#', 'id', field_id + '_remove_all_link'); |
|||
clear_all.className = 'selector-clearall'; |
|||
|
|||
from_box.setAttribute('name', from_box.getAttribute('name') + '_old'); |
|||
|
|||
// Set up the JavaScript event handlers for the select box filter interface
|
|||
var move_selection = function(e, elem, move_func, from, to) { |
|||
if (elem.className.indexOf('active') !== -1) { |
|||
move_func(from, to); |
|||
SelectFilter.refresh_icons(field_id); |
|||
} |
|||
e.preventDefault(); |
|||
}; |
|||
choose_all.addEventListener('click', function(e) { |
|||
move_selection(e, this, SelectBox.move_all, field_id + '_from', field_id + '_to'); |
|||
}); |
|||
add_link.addEventListener('click', function(e) { |
|||
move_selection(e, this, SelectBox.move, field_id + '_from', field_id + '_to'); |
|||
}); |
|||
remove_link.addEventListener('click', function(e) { |
|||
move_selection(e, this, SelectBox.move, field_id + '_to', field_id + '_from'); |
|||
}); |
|||
clear_all.addEventListener('click', function(e) { |
|||
move_selection(e, this, SelectBox.move_all, field_id + '_to', field_id + '_from'); |
|||
}); |
|||
filter_input.addEventListener('keypress', function(e) { |
|||
SelectFilter.filter_key_press(e, field_id); |
|||
}); |
|||
filter_input.addEventListener('keyup', function(e) { |
|||
SelectFilter.filter_key_up(e, field_id); |
|||
}); |
|||
filter_input.addEventListener('keydown', function(e) { |
|||
SelectFilter.filter_key_down(e, field_id); |
|||
}); |
|||
selector_div.addEventListener('change', function(e) { |
|||
if (e.target.tagName === 'SELECT') { |
|||
SelectFilter.refresh_icons(field_id); |
|||
} |
|||
}); |
|||
selector_div.addEventListener('dblclick', function(e) { |
|||
if (e.target.tagName === 'OPTION') { |
|||
if (e.target.closest('select').id === field_id + '_to') { |
|||
SelectBox.move(field_id + '_to', field_id + '_from'); |
|||
} else { |
|||
SelectBox.move(field_id + '_from', field_id + '_to'); |
|||
} |
|||
SelectFilter.refresh_icons(field_id); |
|||
} |
|||
}); |
|||
findForm(from_box).addEventListener('submit', function() { |
|||
SelectBox.select_all(field_id + '_to'); |
|||
}); |
|||
SelectBox.init(field_id + '_from'); |
|||
SelectBox.init(field_id + '_to'); |
|||
// Move selected from_box options to to_box
|
|||
SelectBox.move(field_id + '_from', field_id + '_to'); |
|||
|
|||
if (!is_stacked) { |
|||
// In horizontal mode, give the same height to the two boxes.
|
|||
var j_from_box = $('#' + field_id + '_from'); |
|||
var j_to_box = $('#' + field_id + '_to'); |
|||
var resize_filters = function() { j_to_box.height($(filter_p).outerHeight() + j_from_box.outerHeight()); }; |
|||
if (j_from_box.outerHeight() > 0) { |
|||
resize_filters(); // This fieldset is already open. Resize now.
|
|||
} else { |
|||
// This fieldset is probably collapsed. Wait for its 'show' event.
|
|||
j_to_box.closest('fieldset').one('show.fieldset', resize_filters); |
|||
} |
|||
} |
|||
|
|||
// Initial icon refresh
|
|||
SelectFilter.refresh_icons(field_id); |
|||
}, |
|||
any_selected: function(field) { |
|||
var any_selected = false; |
|||
try { |
|||
// Temporarily add the required attribute and check validity.
|
|||
// This is much faster in WebKit browsers than the fallback.
|
|||
field.attr('required', 'required'); |
|||
any_selected = field.is(':valid'); |
|||
field.removeAttr('required'); |
|||
} catch (e) { |
|||
// Browsers that don't support :valid (IE < 10)
|
|||
any_selected = field.find('option:selected').length > 0; |
|||
} |
|||
return any_selected; |
|||
}, |
|||
refresh_icons: function(field_id) { |
|||
var from = $('#' + field_id + '_from'); |
|||
var to = $('#' + field_id + '_to'); |
|||
// Active if at least one item is selected
|
|||
$('#' + field_id + '_add_link').toggleClass('active', SelectFilter.any_selected(from)); |
|||
$('#' + field_id + '_remove_link').toggleClass('active', SelectFilter.any_selected(to)); |
|||
// Active if the corresponding box isn't empty
|
|||
$('#' + field_id + '_add_all_link').toggleClass('active', from.find('option').length > 0); |
|||
$('#' + field_id + '_remove_all_link').toggleClass('active', to.find('option').length > 0); |
|||
}, |
|||
filter_key_press: function(event, field_id) { |
|||
var from = document.getElementById(field_id + '_from'); |
|||
// don't submit form if user pressed Enter
|
|||
if ((event.which && event.which === 13) || (event.keyCode && event.keyCode === 13)) { |
|||
from.selectedIndex = 0; |
|||
SelectBox.move(field_id + '_from', field_id + '_to'); |
|||
from.selectedIndex = 0; |
|||
event.preventDefault(); |
|||
return false; |
|||
} |
|||
}, |
|||
filter_key_up: function(event, field_id) { |
|||
var from = document.getElementById(field_id + '_from'); |
|||
var temp = from.selectedIndex; |
|||
SelectBox.filter(field_id + '_from', document.getElementById(field_id + '_input').value); |
|||
from.selectedIndex = temp; |
|||
return true; |
|||
}, |
|||
filter_key_down: function(event, field_id) { |
|||
var from = document.getElementById(field_id + '_from'); |
|||
// right arrow -- move across
|
|||
if ((event.which && event.which === 39) || (event.keyCode && event.keyCode === 39)) { |
|||
var old_index = from.selectedIndex; |
|||
SelectBox.move(field_id + '_from', field_id + '_to'); |
|||
from.selectedIndex = (old_index === from.length) ? from.length - 1 : old_index; |
|||
return false; |
|||
} |
|||
// down arrow -- wrap around
|
|||
if ((event.which && event.which === 40) || (event.keyCode && event.keyCode === 40)) { |
|||
from.selectedIndex = (from.length === from.selectedIndex + 1) ? 0 : from.selectedIndex + 1; |
|||
} |
|||
// up arrow -- wrap around
|
|||
if ((event.which && event.which === 38) || (event.keyCode && event.keyCode === 38)) { |
|||
from.selectedIndex = (from.selectedIndex === 0) ? from.length - 1 : from.selectedIndex - 1; |
|||
} |
|||
return true; |
|||
} |
|||
}; |
|||
|
|||
window.addEventListener('load', function(e) { |
|||
$('select.selectfilter, select.selectfilterstacked').each(function() { |
|||
var $el = $(this), |
|||
data = $el.data(); |
|||
SelectFilter.init($el.attr('id'), data.fieldName, parseInt(data.isStacked, 10)); |
|||
}); |
|||
}); |
|||
|
|||
})(django.jQuery); |
|||
@ -1,153 +0,0 @@ |
|||
/*global gettext, interpolate, ngettext*/ |
|||
(function($) { |
|||
'use strict'; |
|||
var lastChecked; |
|||
|
|||
$.fn.actions = function(opts) { |
|||
var options = $.extend({}, $.fn.actions.defaults, opts); |
|||
var actionCheckboxes = $(this); |
|||
var list_editable_changed = false; |
|||
var showQuestion = function() { |
|||
$(options.acrossClears).hide(); |
|||
$(options.acrossQuestions).show(); |
|||
$(options.allContainer).hide(); |
|||
}, |
|||
showClear = function() { |
|||
$(options.acrossClears).show(); |
|||
$(options.acrossQuestions).hide(); |
|||
$(options.actionContainer).toggleClass(options.selectedClass); |
|||
$(options.allContainer).show(); |
|||
$(options.counterContainer).hide(); |
|||
}, |
|||
reset = function() { |
|||
$(options.acrossClears).hide(); |
|||
$(options.acrossQuestions).hide(); |
|||
$(options.allContainer).hide(); |
|||
$(options.counterContainer).show(); |
|||
}, |
|||
clearAcross = function() { |
|||
reset(); |
|||
$(options.acrossInput).val(0); |
|||
$(options.actionContainer).removeClass(options.selectedClass); |
|||
}, |
|||
checker = function(checked) { |
|||
if (checked) { |
|||
showQuestion(); |
|||
} else { |
|||
reset(); |
|||
} |
|||
$(actionCheckboxes).prop("checked", checked) |
|||
.parent().parent().toggleClass(options.selectedClass, checked); |
|||
}, |
|||
updateCounter = function() { |
|||
var sel = $(actionCheckboxes).filter(":checked").length; |
|||
// data-actions-icnt is defined in the generated HTML
|
|||
// and contains the total amount of objects in the queryset
|
|||
var actions_icnt = $('.action-counter').data('actionsIcnt'); |
|||
$(options.counterContainer).html(interpolate( |
|||
ngettext('%(sel)s of %(cnt)s selected', '%(sel)s of %(cnt)s selected', sel), { |
|||
sel: sel, |
|||
cnt: actions_icnt |
|||
}, true)); |
|||
$(options.allToggle).prop("checked", function() { |
|||
var value; |
|||
if (sel === actionCheckboxes.length) { |
|||
value = true; |
|||
showQuestion(); |
|||
} else { |
|||
value = false; |
|||
clearAcross(); |
|||
} |
|||
return value; |
|||
}); |
|||
}; |
|||
// Show counter by default
|
|||
$(options.counterContainer).show(); |
|||
// Check state of checkboxes and reinit state if needed
|
|||
$(this).filter(":checked").each(function(i) { |
|||
$(this).parent().parent().toggleClass(options.selectedClass); |
|||
updateCounter(); |
|||
if ($(options.acrossInput).val() === 1) { |
|||
showClear(); |
|||
} |
|||
}); |
|||
$(options.allToggle).show().on('click', function() { |
|||
checker($(this).prop("checked")); |
|||
updateCounter(); |
|||
}); |
|||
$("a", options.acrossQuestions).on('click', function(event) { |
|||
event.preventDefault(); |
|||
$(options.acrossInput).val(1); |
|||
showClear(); |
|||
}); |
|||
$("a", options.acrossClears).on('click', function(event) { |
|||
event.preventDefault(); |
|||
$(options.allToggle).prop("checked", false); |
|||
clearAcross(); |
|||
checker(0); |
|||
updateCounter(); |
|||
}); |
|||
lastChecked = null; |
|||
$(actionCheckboxes).on('click', function(event) { |
|||
if (!event) { event = window.event; } |
|||
var target = event.target ? event.target : event.srcElement; |
|||
if (lastChecked && $.data(lastChecked) !== $.data(target) && event.shiftKey === true) { |
|||
var inrange = false; |
|||
$(lastChecked).prop("checked", target.checked) |
|||
.parent().parent().toggleClass(options.selectedClass, target.checked); |
|||
$(actionCheckboxes).each(function() { |
|||
if ($.data(this) === $.data(lastChecked) || $.data(this) === $.data(target)) { |
|||
inrange = (inrange) ? false : true; |
|||
} |
|||
if (inrange) { |
|||
$(this).prop("checked", target.checked) |
|||
.parent().parent().toggleClass(options.selectedClass, target.checked); |
|||
} |
|||
}); |
|||
} |
|||
$(target).parent().parent().toggleClass(options.selectedClass, target.checked); |
|||
lastChecked = target; |
|||
updateCounter(); |
|||
}); |
|||
$('form#changelist-form table#result_list tr').on('change', 'td:gt(0) :input', function() { |
|||
list_editable_changed = true; |
|||
}); |
|||
$('form#changelist-form button[name="index"]').on('click', function(event) { |
|||
if (list_editable_changed) { |
|||
return confirm(gettext("You have unsaved changes on individual editable fields. If you run an action, your unsaved changes will be lost.")); |
|||
} |
|||
}); |
|||
$('form#changelist-form input[name="_save"]').on('click', function(event) { |
|||
var action_changed = false; |
|||
$('select option:selected', options.actionContainer).each(function() { |
|||
if ($(this).val()) { |
|||
action_changed = true; |
|||
} |
|||
}); |
|||
if (action_changed) { |
|||
if (list_editable_changed) { |
|||
return confirm(gettext("You have selected an action, but you haven't saved your changes to individual fields yet. Please click OK to save. You'll need to re-run the action.")); |
|||
} else { |
|||
return confirm(gettext("You have selected an action, and you haven't made any changes on individual fields. You're probably looking for the Go button rather than the Save button.")); |
|||
} |
|||
} |
|||
}); |
|||
}; |
|||
/* Setup plugin defaults */ |
|||
$.fn.actions.defaults = { |
|||
actionContainer: "div.actions", |
|||
counterContainer: "span.action-counter", |
|||
allContainer: "div.actions span.all", |
|||
acrossInput: "div.actions input.select-across", |
|||
acrossQuestions: "div.actions span.question", |
|||
acrossClears: "div.actions span.clear", |
|||
allToggle: "#action-toggle", |
|||
selectedClass: "selected" |
|||
}; |
|||
$(document).ready(function() { |
|||
var $actionsEls = $('tr input.action-select'); |
|||
if ($actionsEls.length > 0) { |
|||
$actionsEls.actions(); |
|||
} |
|||
}); |
|||
})(django.jQuery); |
|||
@ -1,7 +0,0 @@ |
|||
(function(a){var f;a.fn.actions=function(e){var b=a.extend({},a.fn.actions.defaults,e),g=a(this),k=!1,l=function(){a(b.acrossClears).hide();a(b.acrossQuestions).show();a(b.allContainer).hide()},m=function(){a(b.acrossClears).show();a(b.acrossQuestions).hide();a(b.actionContainer).toggleClass(b.selectedClass);a(b.allContainer).show();a(b.counterContainer).hide()},n=function(){a(b.acrossClears).hide();a(b.acrossQuestions).hide();a(b.allContainer).hide();a(b.counterContainer).show()},p=function(){n(); |
|||
a(b.acrossInput).val(0);a(b.actionContainer).removeClass(b.selectedClass)},q=function(c){c?l():n();a(g).prop("checked",c).parent().parent().toggleClass(b.selectedClass,c)},h=function(){var c=a(g).filter(":checked").length,d=a(".action-counter").data("actionsIcnt");a(b.counterContainer).html(interpolate(ngettext("%(sel)s of %(cnt)s selected","%(sel)s of %(cnt)s selected",c),{sel:c,cnt:d},!0));a(b.allToggle).prop("checked",function(){if(c===g.length){var a=!0;l()}else a=!1,p();return a})};a(b.counterContainer).show(); |
|||
a(this).filter(":checked").each(function(c){a(this).parent().parent().toggleClass(b.selectedClass);h();1===a(b.acrossInput).val()&&m()});a(b.allToggle).show().on("click",function(){q(a(this).prop("checked"));h()});a("a",b.acrossQuestions).on("click",function(c){c.preventDefault();a(b.acrossInput).val(1);m()});a("a",b.acrossClears).on("click",function(c){c.preventDefault();a(b.allToggle).prop("checked",!1);p();q(0);h()});f=null;a(g).on("click",function(c){c||(c=window.event);var d=c.target?c.target: |
|||
c.srcElement;if(f&&a.data(f)!==a.data(d)&&!0===c.shiftKey){var e=!1;a(f).prop("checked",d.checked).parent().parent().toggleClass(b.selectedClass,d.checked);a(g).each(function(){if(a.data(this)===a.data(f)||a.data(this)===a.data(d))e=e?!1:!0;e&&a(this).prop("checked",d.checked).parent().parent().toggleClass(b.selectedClass,d.checked)})}a(d).parent().parent().toggleClass(b.selectedClass,d.checked);f=d;h()});a("form#changelist-form table#result_list tr").on("change","td:gt(0) :input",function(){k=!0}); |
|||
a('form#changelist-form button[name="index"]').on("click",function(a){if(k)return confirm(gettext("You have unsaved changes on individual editable fields. If you run an action, your unsaved changes will be lost."))});a('form#changelist-form input[name="_save"]').on("click",function(c){var d=!1;a("select option:selected",b.actionContainer).each(function(){a(this).val()&&(d=!0)});if(d)return k?confirm(gettext("You have selected an action, but you haven't saved your changes to individual fields yet. Please click OK to save. You'll need to re-run the action.")): |
|||
confirm(gettext("You have selected an action, and you haven't made any changes on individual fields. You're probably looking for the Go button rather than the Save button."))})};a.fn.actions.defaults={actionContainer:"div.actions",counterContainer:"span.action-counter",allContainer:"div.actions span.all",acrossInput:"div.actions input.select-across",acrossQuestions:"div.actions span.question",acrossClears:"div.actions span.clear",allToggle:"#action-toggle",selectedClass:"selected"};a(document).ready(function(){var e= |
|||
a("tr input.action-select");0<e.length&&e.actions()})})(django.jQuery); |
|||
@ -1,426 +0,0 @@ |
|||
/*global Calendar, findPosX, findPosY, getStyle, get_format, gettext, gettext_noop, interpolate, ngettext, quickElement*/ |
|||
// Inserts shortcut buttons after all of the following:
|
|||
// <input type="text" class="vDateField">
|
|||
// <input type="text" class="vTimeField">
|
|||
(function() { |
|||
'use strict'; |
|||
var DateTimeShortcuts = { |
|||
calendars: [], |
|||
calendarInputs: [], |
|||
clockInputs: [], |
|||
clockHours: { |
|||
default_: [ |
|||
[gettext_noop('Now'), -1], |
|||
[gettext_noop('Midnight'), 0], |
|||
[gettext_noop('6 a.m.'), 6], |
|||
[gettext_noop('Noon'), 12], |
|||
[gettext_noop('6 p.m.'), 18] |
|||
] |
|||
}, |
|||
dismissClockFunc: [], |
|||
dismissCalendarFunc: [], |
|||
calendarDivName1: 'calendarbox', // name of calendar <div> that gets toggled
|
|||
calendarDivName2: 'calendarin', // name of <div> that contains calendar
|
|||
calendarLinkName: 'calendarlink',// name of the link that is used to toggle
|
|||
clockDivName: 'clockbox', // name of clock <div> that gets toggled
|
|||
clockLinkName: 'clocklink', // name of the link that is used to toggle
|
|||
shortCutsClass: 'datetimeshortcuts', // class of the clock and cal shortcuts
|
|||
timezoneWarningClass: 'timezonewarning', // class of the warning for timezone mismatch
|
|||
timezoneOffset: 0, |
|||
init: function() { |
|||
var body = document.getElementsByTagName('body')[0]; |
|||
var serverOffset = body.getAttribute('data-admin-utc-offset'); |
|||
if (serverOffset) { |
|||
var localOffset = new Date().getTimezoneOffset() * -60; |
|||
DateTimeShortcuts.timezoneOffset = localOffset - serverOffset; |
|||
} |
|||
|
|||
var inputs = document.getElementsByTagName('input'); |
|||
for (var i = 0; i < inputs.length; i++) { |
|||
var inp = inputs[i]; |
|||
if (inp.getAttribute('type') === 'text' && inp.className.match(/vTimeField/)) { |
|||
DateTimeShortcuts.addClock(inp); |
|||
DateTimeShortcuts.addTimezoneWarning(inp); |
|||
} |
|||
else if (inp.getAttribute('type') === 'text' && inp.className.match(/vDateField/)) { |
|||
DateTimeShortcuts.addCalendar(inp); |
|||
DateTimeShortcuts.addTimezoneWarning(inp); |
|||
} |
|||
} |
|||
}, |
|||
// Return the current time while accounting for the server timezone.
|
|||
now: function() { |
|||
var body = document.getElementsByTagName('body')[0]; |
|||
var serverOffset = body.getAttribute('data-admin-utc-offset'); |
|||
if (serverOffset) { |
|||
var localNow = new Date(); |
|||
var localOffset = localNow.getTimezoneOffset() * -60; |
|||
localNow.setTime(localNow.getTime() + 1000 * (serverOffset - localOffset)); |
|||
return localNow; |
|||
} else { |
|||
return new Date(); |
|||
} |
|||
}, |
|||
// Add a warning when the time zone in the browser and backend do not match.
|
|||
addTimezoneWarning: function(inp) { |
|||
var $ = django.jQuery; |
|||
var warningClass = DateTimeShortcuts.timezoneWarningClass; |
|||
var timezoneOffset = DateTimeShortcuts.timezoneOffset / 3600; |
|||
|
|||
// Only warn if there is a time zone mismatch.
|
|||
if (!timezoneOffset) { |
|||
return; |
|||
} |
|||
|
|||
// Check if warning is already there.
|
|||
if ($(inp).siblings('.' + warningClass).length) { |
|||
return; |
|||
} |
|||
|
|||
var message; |
|||
if (timezoneOffset > 0) { |
|||
message = ngettext( |
|||
'Note: You are %s hour ahead of server time.', |
|||
'Note: You are %s hours ahead of server time.', |
|||
timezoneOffset |
|||
); |
|||
} |
|||
else { |
|||
timezoneOffset *= -1; |
|||
message = ngettext( |
|||
'Note: You are %s hour behind server time.', |
|||
'Note: You are %s hours behind server time.', |
|||
timezoneOffset |
|||
); |
|||
} |
|||
message = interpolate(message, [timezoneOffset]); |
|||
|
|||
var $warning = $('<span>'); |
|||
$warning.attr('class', warningClass); |
|||
$warning.text(message); |
|||
|
|||
$(inp).parent() |
|||
.append($('<br>')) |
|||
.append($warning); |
|||
}, |
|||
// Add clock widget to a given field
|
|||
addClock: function(inp) { |
|||
var num = DateTimeShortcuts.clockInputs.length; |
|||
DateTimeShortcuts.clockInputs[num] = inp; |
|||
DateTimeShortcuts.dismissClockFunc[num] = function() { DateTimeShortcuts.dismissClock(num); return true; }; |
|||
|
|||
// Shortcut links (clock icon and "Now" link)
|
|||
var shortcuts_span = document.createElement('span'); |
|||
shortcuts_span.className = DateTimeShortcuts.shortCutsClass; |
|||
inp.parentNode.insertBefore(shortcuts_span, inp.nextSibling); |
|||
var now_link = document.createElement('a'); |
|||
now_link.setAttribute('href', "#"); |
|||
now_link.appendChild(document.createTextNode(gettext('Now'))); |
|||
now_link.addEventListener('click', function(e) { |
|||
e.preventDefault(); |
|||
DateTimeShortcuts.handleClockQuicklink(num, -1); |
|||
}); |
|||
var clock_link = document.createElement('a'); |
|||
clock_link.setAttribute('href', '#'); |
|||
clock_link.id = DateTimeShortcuts.clockLinkName + num; |
|||
clock_link.addEventListener('click', function(e) { |
|||
e.preventDefault(); |
|||
// avoid triggering the document click handler to dismiss the clock
|
|||
e.stopPropagation(); |
|||
DateTimeShortcuts.openClock(num); |
|||
}); |
|||
|
|||
quickElement( |
|||
'span', clock_link, '', |
|||
'class', 'clock-icon', |
|||
'title', gettext('Choose a Time') |
|||
); |
|||
shortcuts_span.appendChild(document.createTextNode('\u00A0')); |
|||
shortcuts_span.appendChild(now_link); |
|||
shortcuts_span.appendChild(document.createTextNode('\u00A0|\u00A0')); |
|||
shortcuts_span.appendChild(clock_link); |
|||
|
|||
// Create clock link div
|
|||
//
|
|||
// Markup looks like:
|
|||
// <div id="clockbox1" class="clockbox module">
|
|||
// <h2>Choose a time</h2>
|
|||
// <ul class="timelist">
|
|||
// <li><a href="#">Now</a></li>
|
|||
// <li><a href="#">Midnight</a></li>
|
|||
// <li><a href="#">6 a.m.</a></li>
|
|||
// <li><a href="#">Noon</a></li>
|
|||
// <li><a href="#">6 p.m.</a></li>
|
|||
// </ul>
|
|||
// <p class="calendar-cancel"><a href="#">Cancel</a></p>
|
|||
// </div>
|
|||
|
|||
var clock_box = document.createElement('div'); |
|||
clock_box.style.display = 'none'; |
|||
clock_box.style.position = 'absolute'; |
|||
clock_box.className = 'clockbox module'; |
|||
clock_box.setAttribute('id', DateTimeShortcuts.clockDivName + num); |
|||
document.body.appendChild(clock_box); |
|||
clock_box.addEventListener('click', function(e) { e.stopPropagation(); }); |
|||
|
|||
quickElement('h2', clock_box, gettext('Choose a time')); |
|||
var time_list = quickElement('ul', clock_box); |
|||
time_list.className = 'timelist'; |
|||
// The list of choices can be overridden in JavaScript like this:
|
|||
// DateTimeShortcuts.clockHours.name = [['3 a.m.', 3]];
|
|||
// where name is the name attribute of the <input>.
|
|||
var name = typeof DateTimeShortcuts.clockHours[inp.name] === 'undefined' ? 'default_' : inp.name; |
|||
DateTimeShortcuts.clockHours[name].forEach(function(element) { |
|||
var time_link = quickElement('a', quickElement('li', time_list), gettext(element[0]), 'href', '#'); |
|||
time_link.addEventListener('click', function(e) { |
|||
e.preventDefault(); |
|||
DateTimeShortcuts.handleClockQuicklink(num, element[1]); |
|||
}); |
|||
}); |
|||
|
|||
var cancel_p = quickElement('p', clock_box); |
|||
cancel_p.className = 'calendar-cancel'; |
|||
var cancel_link = quickElement('a', cancel_p, gettext('Cancel'), 'href', '#'); |
|||
cancel_link.addEventListener('click', function(e) { |
|||
e.preventDefault(); |
|||
DateTimeShortcuts.dismissClock(num); |
|||
}); |
|||
|
|||
document.addEventListener('keyup', function(event) { |
|||
if (event.which === 27) { |
|||
// ESC key closes popup
|
|||
DateTimeShortcuts.dismissClock(num); |
|||
event.preventDefault(); |
|||
} |
|||
}); |
|||
}, |
|||
openClock: function(num) { |
|||
var clock_box = document.getElementById(DateTimeShortcuts.clockDivName + num); |
|||
var clock_link = document.getElementById(DateTimeShortcuts.clockLinkName + num); |
|||
|
|||
// Recalculate the clockbox position
|
|||
// is it left-to-right or right-to-left layout ?
|
|||
if (getStyle(document.body, 'direction') !== 'rtl') { |
|||
clock_box.style.left = findPosX(clock_link) + 17 + 'px'; |
|||
} |
|||
else { |
|||
// since style's width is in em, it'd be tough to calculate
|
|||
// px value of it. let's use an estimated px for now
|
|||
// TODO: IE returns wrong value for findPosX when in rtl mode
|
|||
// (it returns as it was left aligned), needs to be fixed.
|
|||
clock_box.style.left = findPosX(clock_link) - 110 + 'px'; |
|||
} |
|||
clock_box.style.top = Math.max(0, findPosY(clock_link) - 30) + 'px'; |
|||
|
|||
// Show the clock box
|
|||
clock_box.style.display = 'block'; |
|||
document.addEventListener('click', DateTimeShortcuts.dismissClockFunc[num]); |
|||
}, |
|||
dismissClock: function(num) { |
|||
document.getElementById(DateTimeShortcuts.clockDivName + num).style.display = 'none'; |
|||
document.removeEventListener('click', DateTimeShortcuts.dismissClockFunc[num]); |
|||
}, |
|||
handleClockQuicklink: function(num, val) { |
|||
var d; |
|||
if (val === -1) { |
|||
d = DateTimeShortcuts.now(); |
|||
} |
|||
else { |
|||
d = new Date(1970, 1, 1, val, 0, 0, 0); |
|||
} |
|||
DateTimeShortcuts.clockInputs[num].value = d.strftime(get_format('TIME_INPUT_FORMATS')[0]); |
|||
DateTimeShortcuts.clockInputs[num].focus(); |
|||
DateTimeShortcuts.dismissClock(num); |
|||
}, |
|||
// Add calendar widget to a given field.
|
|||
addCalendar: function(inp) { |
|||
var num = DateTimeShortcuts.calendars.length; |
|||
|
|||
DateTimeShortcuts.calendarInputs[num] = inp; |
|||
DateTimeShortcuts.dismissCalendarFunc[num] = function() { DateTimeShortcuts.dismissCalendar(num); return true; }; |
|||
|
|||
// Shortcut links (calendar icon and "Today" link)
|
|||
var shortcuts_span = document.createElement('span'); |
|||
shortcuts_span.className = DateTimeShortcuts.shortCutsClass; |
|||
inp.parentNode.insertBefore(shortcuts_span, inp.nextSibling); |
|||
var today_link = document.createElement('a'); |
|||
today_link.setAttribute('href', '#'); |
|||
today_link.appendChild(document.createTextNode(gettext('Today'))); |
|||
today_link.addEventListener('click', function(e) { |
|||
e.preventDefault(); |
|||
DateTimeShortcuts.handleCalendarQuickLink(num, 0); |
|||
}); |
|||
var cal_link = document.createElement('a'); |
|||
cal_link.setAttribute('href', '#'); |
|||
cal_link.id = DateTimeShortcuts.calendarLinkName + num; |
|||
cal_link.addEventListener('click', function(e) { |
|||
e.preventDefault(); |
|||
// avoid triggering the document click handler to dismiss the calendar
|
|||
e.stopPropagation(); |
|||
DateTimeShortcuts.openCalendar(num); |
|||
}); |
|||
quickElement( |
|||
'span', cal_link, '', |
|||
'class', 'date-icon', |
|||
'title', gettext('Choose a Date') |
|||
); |
|||
shortcuts_span.appendChild(document.createTextNode('\u00A0')); |
|||
shortcuts_span.appendChild(today_link); |
|||
shortcuts_span.appendChild(document.createTextNode('\u00A0|\u00A0')); |
|||
shortcuts_span.appendChild(cal_link); |
|||
|
|||
// Create calendarbox div.
|
|||
//
|
|||
// Markup looks like:
|
|||
//
|
|||
// <div id="calendarbox3" class="calendarbox module">
|
|||
// <h2>
|
|||
// <a href="#" class="link-previous">‹</a>
|
|||
// <a href="#" class="link-next">›</a> February 2003
|
|||
// </h2>
|
|||
// <div class="calendar" id="calendarin3">
|
|||
// <!-- (cal) -->
|
|||
// </div>
|
|||
// <div class="calendar-shortcuts">
|
|||
// <a href="#">Yesterday</a> | <a href="#">Today</a> | <a href="#">Tomorrow</a>
|
|||
// </div>
|
|||
// <p class="calendar-cancel"><a href="#">Cancel</a></p>
|
|||
// </div>
|
|||
var cal_box = document.createElement('div'); |
|||
cal_box.style.display = 'none'; |
|||
cal_box.style.position = 'absolute'; |
|||
cal_box.className = 'calendarbox module'; |
|||
cal_box.setAttribute('id', DateTimeShortcuts.calendarDivName1 + num); |
|||
document.body.appendChild(cal_box); |
|||
cal_box.addEventListener('click', function(e) { e.stopPropagation(); }); |
|||
|
|||
// next-prev links
|
|||
var cal_nav = quickElement('div', cal_box); |
|||
var cal_nav_prev = quickElement('a', cal_nav, '<', 'href', '#'); |
|||
cal_nav_prev.className = 'calendarnav-previous'; |
|||
cal_nav_prev.addEventListener('click', function(e) { |
|||
e.preventDefault(); |
|||
DateTimeShortcuts.drawPrev(num); |
|||
}); |
|||
|
|||
var cal_nav_next = quickElement('a', cal_nav, '>', 'href', '#'); |
|||
cal_nav_next.className = 'calendarnav-next'; |
|||
cal_nav_next.addEventListener('click', function(e) { |
|||
e.preventDefault(); |
|||
DateTimeShortcuts.drawNext(num); |
|||
}); |
|||
|
|||
// main box
|
|||
var cal_main = quickElement('div', cal_box, '', 'id', DateTimeShortcuts.calendarDivName2 + num); |
|||
cal_main.className = 'calendar'; |
|||
DateTimeShortcuts.calendars[num] = new Calendar(DateTimeShortcuts.calendarDivName2 + num, DateTimeShortcuts.handleCalendarCallback(num)); |
|||
DateTimeShortcuts.calendars[num].drawCurrent(); |
|||
|
|||
// calendar shortcuts
|
|||
var shortcuts = quickElement('div', cal_box); |
|||
shortcuts.className = 'calendar-shortcuts'; |
|||
var day_link = quickElement('a', shortcuts, gettext('Yesterday'), 'href', '#'); |
|||
day_link.addEventListener('click', function(e) { |
|||
e.preventDefault(); |
|||
DateTimeShortcuts.handleCalendarQuickLink(num, -1); |
|||
}); |
|||
shortcuts.appendChild(document.createTextNode('\u00A0|\u00A0')); |
|||
day_link = quickElement('a', shortcuts, gettext('Today'), 'href', '#'); |
|||
day_link.addEventListener('click', function(e) { |
|||
e.preventDefault(); |
|||
DateTimeShortcuts.handleCalendarQuickLink(num, 0); |
|||
}); |
|||
shortcuts.appendChild(document.createTextNode('\u00A0|\u00A0')); |
|||
day_link = quickElement('a', shortcuts, gettext('Tomorrow'), 'href', '#'); |
|||
day_link.addEventListener('click', function(e) { |
|||
e.preventDefault(); |
|||
DateTimeShortcuts.handleCalendarQuickLink(num, +1); |
|||
}); |
|||
|
|||
// cancel bar
|
|||
var cancel_p = quickElement('p', cal_box); |
|||
cancel_p.className = 'calendar-cancel'; |
|||
var cancel_link = quickElement('a', cancel_p, gettext('Cancel'), 'href', '#'); |
|||
cancel_link.addEventListener('click', function(e) { |
|||
e.preventDefault(); |
|||
DateTimeShortcuts.dismissCalendar(num); |
|||
}); |
|||
django.jQuery(document).on('keyup', function(event) { |
|||
if (event.which === 27) { |
|||
// ESC key closes popup
|
|||
DateTimeShortcuts.dismissCalendar(num); |
|||
event.preventDefault(); |
|||
} |
|||
}); |
|||
}, |
|||
openCalendar: function(num) { |
|||
var cal_box = document.getElementById(DateTimeShortcuts.calendarDivName1 + num); |
|||
var cal_link = document.getElementById(DateTimeShortcuts.calendarLinkName + num); |
|||
var inp = DateTimeShortcuts.calendarInputs[num]; |
|||
|
|||
// Determine if the current value in the input has a valid date.
|
|||
// If so, draw the calendar with that date's year and month.
|
|||
if (inp.value) { |
|||
var format = get_format('DATE_INPUT_FORMATS')[0]; |
|||
var selected = inp.value.strptime(format); |
|||
var year = selected.getUTCFullYear(); |
|||
var month = selected.getUTCMonth() + 1; |
|||
var re = /\d{4}/; |
|||
if (re.test(year.toString()) && month >= 1 && month <= 12) { |
|||
DateTimeShortcuts.calendars[num].drawDate(month, year, selected); |
|||
} |
|||
} |
|||
|
|||
// Recalculate the clockbox position
|
|||
// is it left-to-right or right-to-left layout ?
|
|||
if (getStyle(document.body, 'direction') !== 'rtl') { |
|||
cal_box.style.left = findPosX(cal_link) + 17 + 'px'; |
|||
} |
|||
else { |
|||
// since style's width is in em, it'd be tough to calculate
|
|||
// px value of it. let's use an estimated px for now
|
|||
// TODO: IE returns wrong value for findPosX when in rtl mode
|
|||
// (it returns as it was left aligned), needs to be fixed.
|
|||
cal_box.style.left = findPosX(cal_link) - 180 + 'px'; |
|||
} |
|||
cal_box.style.top = Math.max(0, findPosY(cal_link) - 75) + 'px'; |
|||
|
|||
cal_box.style.display = 'block'; |
|||
document.addEventListener('click', DateTimeShortcuts.dismissCalendarFunc[num]); |
|||
}, |
|||
dismissCalendar: function(num) { |
|||
document.getElementById(DateTimeShortcuts.calendarDivName1 + num).style.display = 'none'; |
|||
document.removeEventListener('click', DateTimeShortcuts.dismissCalendarFunc[num]); |
|||
}, |
|||
drawPrev: function(num) { |
|||
DateTimeShortcuts.calendars[num].drawPreviousMonth(); |
|||
}, |
|||
drawNext: function(num) { |
|||
DateTimeShortcuts.calendars[num].drawNextMonth(); |
|||
}, |
|||
handleCalendarCallback: function(num) { |
|||
var format = get_format('DATE_INPUT_FORMATS')[0]; |
|||
// the format needs to be escaped a little
|
|||
format = format.replace('\\', '\\\\'); |
|||
format = format.replace('\r', '\\r'); |
|||
format = format.replace('\n', '\\n'); |
|||
format = format.replace('\t', '\\t'); |
|||
format = format.replace("'", "\\'"); |
|||
return function(y, m, d) { |
|||
DateTimeShortcuts.calendarInputs[num].value = new Date(y, m - 1, d).strftime(format); |
|||
DateTimeShortcuts.calendarInputs[num].focus(); |
|||
document.getElementById(DateTimeShortcuts.calendarDivName1 + num).style.display = 'none'; |
|||
}; |
|||
}, |
|||
handleCalendarQuickLink: function(num, offset) { |
|||
var d = DateTimeShortcuts.now(); |
|||
d.setDate(d.getDate() + offset); |
|||
DateTimeShortcuts.calendarInputs[num].value = d.strftime(get_format('DATE_INPUT_FORMATS')[0]); |
|||
DateTimeShortcuts.calendarInputs[num].focus(); |
|||
DateTimeShortcuts.dismissCalendar(num); |
|||
} |
|||
}; |
|||
|
|||
window.addEventListener('load', DateTimeShortcuts.init); |
|||
window.DateTimeShortcuts = DateTimeShortcuts; |
|||
})(); |
|||
@ -1,181 +0,0 @@ |
|||
/*global SelectBox, interpolate*/ |
|||
// Handles related-objects functionality: lookup link for raw_id_fields
|
|||
// and Add Another links.
|
|||
|
|||
(function($) { |
|||
'use strict'; |
|||
|
|||
// IE doesn't accept periods or dashes in the window name, but the element IDs
|
|||
// we use to generate popup window names may contain them, therefore we map them
|
|||
// to allowed characters in a reversible way so that we can locate the correct
|
|||
// element when the popup window is dismissed.
|
|||
function id_to_windowname(text) { |
|||
text = text.replace(/\./g, '__dot__'); |
|||
text = text.replace(/\-/g, '__dash__'); |
|||
return text; |
|||
} |
|||
|
|||
function windowname_to_id(text) { |
|||
text = text.replace(/__dot__/g, '.'); |
|||
text = text.replace(/__dash__/g, '-'); |
|||
return text; |
|||
} |
|||
|
|||
function showAdminPopup(triggeringLink, name_regexp, add_popup) { |
|||
var name = triggeringLink.id.replace(name_regexp, ''); |
|||
name = id_to_windowname(name); |
|||
var href = triggeringLink.href; |
|||
if (add_popup) { |
|||
if (href.indexOf('?') === -1) { |
|||
href += '?_popup=1'; |
|||
} else { |
|||
href += '&_popup=1'; |
|||
} |
|||
} |
|||
var win = window.open(href, name, 'height=500,width=800,resizable=yes,scrollbars=yes'); |
|||
win.focus(); |
|||
return false; |
|||
} |
|||
|
|||
function showRelatedObjectLookupPopup(triggeringLink) { |
|||
return showAdminPopup(triggeringLink, /^lookup_/, true); |
|||
} |
|||
|
|||
function dismissRelatedLookupPopup(win, chosenId) { |
|||
var name = windowname_to_id(win.name); |
|||
var elem = document.getElementById(name); |
|||
if (elem.className.indexOf('vManyToManyRawIdAdminField') !== -1 && elem.value) { |
|||
elem.value += ',' + chosenId; |
|||
} else { |
|||
document.getElementById(name).value = chosenId; |
|||
} |
|||
win.close(); |
|||
} |
|||
|
|||
function showRelatedObjectPopup(triggeringLink) { |
|||
return showAdminPopup(triggeringLink, /^(change|add|delete)_/, false); |
|||
} |
|||
|
|||
function updateRelatedObjectLinks(triggeringLink) { |
|||
var $this = $(triggeringLink); |
|||
var siblings = $this.nextAll('.view-related, .change-related, .delete-related'); |
|||
if (!siblings.length) { |
|||
return; |
|||
} |
|||
var value = $this.val(); |
|||
if (value) { |
|||
siblings.each(function() { |
|||
var elm = $(this); |
|||
elm.attr('href', elm.attr('data-href-template').replace('__fk__', value)); |
|||
}); |
|||
} else { |
|||
siblings.removeAttr('href'); |
|||
} |
|||
} |
|||
|
|||
function dismissAddRelatedObjectPopup(win, newId, newRepr) { |
|||
var name = windowname_to_id(win.name); |
|||
var elem = document.getElementById(name); |
|||
if (elem) { |
|||
var elemName = elem.nodeName.toUpperCase(); |
|||
if (elemName === 'SELECT') { |
|||
elem.options[elem.options.length] = new Option(newRepr, newId, true, true); |
|||
} else if (elemName === 'INPUT') { |
|||
if (elem.className.indexOf('vManyToManyRawIdAdminField') !== -1 && elem.value) { |
|||
elem.value += ',' + newId; |
|||
} else { |
|||
elem.value = newId; |
|||
} |
|||
} |
|||
// Trigger a change event to update related links if required.
|
|||
$(elem).trigger('change'); |
|||
} else { |
|||
var toId = name + "_to"; |
|||
var o = new Option(newRepr, newId); |
|||
SelectBox.add_to_cache(toId, o); |
|||
SelectBox.redisplay(toId); |
|||
} |
|||
win.close(); |
|||
} |
|||
|
|||
function dismissChangeRelatedObjectPopup(win, objId, newRepr, newId) { |
|||
var id = windowname_to_id(win.name).replace(/^edit_/, ''); |
|||
var selectsSelector = interpolate('#%s, #%s_from, #%s_to', [id, id, id]); |
|||
var selects = $(selectsSelector); |
|||
selects.find('option').each(function() { |
|||
if (this.value === objId) { |
|||
this.textContent = newRepr; |
|||
this.value = newId; |
|||
} |
|||
}); |
|||
selects.next().find('.select2-selection__rendered').each(function() { |
|||
// The element can have a clear button as a child.
|
|||
// Use the lastChild to modify only the displayed value.
|
|||
this.lastChild.textContent = newRepr; |
|||
this.title = newRepr; |
|||
}); |
|||
win.close(); |
|||
} |
|||
|
|||
function dismissDeleteRelatedObjectPopup(win, objId) { |
|||
var id = windowname_to_id(win.name).replace(/^delete_/, ''); |
|||
var selectsSelector = interpolate('#%s, #%s_from, #%s_to', [id, id, id]); |
|||
var selects = $(selectsSelector); |
|||
selects.find('option').each(function() { |
|||
if (this.value === objId) { |
|||
$(this).remove(); |
|||
} |
|||
}).trigger('change'); |
|||
win.close(); |
|||
} |
|||
|
|||
// Global for testing purposes
|
|||
window.id_to_windowname = id_to_windowname; |
|||
window.windowname_to_id = windowname_to_id; |
|||
|
|||
window.showRelatedObjectLookupPopup = showRelatedObjectLookupPopup; |
|||
window.dismissRelatedLookupPopup = dismissRelatedLookupPopup; |
|||
window.showRelatedObjectPopup = showRelatedObjectPopup; |
|||
window.updateRelatedObjectLinks = updateRelatedObjectLinks; |
|||
window.dismissAddRelatedObjectPopup = dismissAddRelatedObjectPopup; |
|||
window.dismissChangeRelatedObjectPopup = dismissChangeRelatedObjectPopup; |
|||
window.dismissDeleteRelatedObjectPopup = dismissDeleteRelatedObjectPopup; |
|||
|
|||
// Kept for backward compatibility
|
|||
window.showAddAnotherPopup = showRelatedObjectPopup; |
|||
window.dismissAddAnotherPopup = dismissAddRelatedObjectPopup; |
|||
|
|||
$(document).ready(function() { |
|||
$("a[data-popup-opener]").on('click', function(event) { |
|||
event.preventDefault(); |
|||
opener.dismissRelatedLookupPopup(window, $(this).data("popup-opener")); |
|||
}); |
|||
$('body').on('click', '.related-widget-wrapper-link', function(e) { |
|||
e.preventDefault(); |
|||
if (this.href) { |
|||
var event = $.Event('django:show-related', {href: this.href}); |
|||
$(this).trigger(event); |
|||
if (!event.isDefaultPrevented()) { |
|||
showRelatedObjectPopup(this); |
|||
} |
|||
} |
|||
}); |
|||
$('body').on('change', '.related-widget-wrapper select', function(e) { |
|||
var event = $.Event('django:update-related'); |
|||
$(this).trigger(event); |
|||
if (!event.isDefaultPrevented()) { |
|||
updateRelatedObjectLinks(this); |
|||
} |
|||
}); |
|||
$('.related-widget-wrapper select').trigger('change'); |
|||
$('body').on('click', '.related-lookup', function(e) { |
|||
e.preventDefault(); |
|||
var event = $.Event('django:lookup-related'); |
|||
$(this).trigger(event); |
|||
if (!event.isDefaultPrevented()) { |
|||
showRelatedObjectLookupPopup(this); |
|||
} |
|||
}); |
|||
}); |
|||
|
|||
})(django.jQuery); |
|||
@ -1,37 +0,0 @@ |
|||
(function($) { |
|||
'use strict'; |
|||
var init = function($element, options) { |
|||
var settings = $.extend({ |
|||
ajax: { |
|||
data: function(params) { |
|||
return { |
|||
term: params.term, |
|||
page: params.page |
|||
}; |
|||
} |
|||
} |
|||
}, options); |
|||
$element.select2(settings); |
|||
}; |
|||
|
|||
$.fn.djangoAdminSelect2 = function(options) { |
|||
var settings = $.extend({}, options); |
|||
$.each(this, function(i, element) { |
|||
var $element = $(element); |
|||
init($element, settings); |
|||
}); |
|||
return this; |
|||
}; |
|||
|
|||
$(function() { |
|||
// Initialize all autocomplete widgets except the one in the template
|
|||
// form used when a new formset is added.
|
|||
$('.admin-autocomplete').not('[name*=__prefix__]').djangoAdminSelect2(); |
|||
}); |
|||
|
|||
$(document).on('formset:added', (function() { |
|||
return function(event, $newFormset) { |
|||
return $newFormset.find('.admin-autocomplete').djangoAdminSelect2(); |
|||
}; |
|||
})(this)); |
|||
}(django.jQuery)); |
|||
@ -1,208 +0,0 @@ |
|||
/*global gettext, pgettext, get_format, quickElement, removeChildren*/ |
|||
/* |
|||
calendar.js - Calendar functions by Adrian Holovaty |
|||
depends on core.js for utility functions like removeChildren or quickElement |
|||
*/ |
|||
|
|||
(function() { |
|||
'use strict'; |
|||
// CalendarNamespace -- Provides a collection of HTML calendar-related helper functions
|
|||
var CalendarNamespace = { |
|||
monthsOfYear: [ |
|||
gettext('January'), |
|||
gettext('February'), |
|||
gettext('March'), |
|||
gettext('April'), |
|||
gettext('May'), |
|||
gettext('June'), |
|||
gettext('July'), |
|||
gettext('August'), |
|||
gettext('September'), |
|||
gettext('October'), |
|||
gettext('November'), |
|||
gettext('December') |
|||
], |
|||
daysOfWeek: [ |
|||
pgettext('one letter Sunday', 'S'), |
|||
pgettext('one letter Monday', 'M'), |
|||
pgettext('one letter Tuesday', 'T'), |
|||
pgettext('one letter Wednesday', 'W'), |
|||
pgettext('one letter Thursday', 'T'), |
|||
pgettext('one letter Friday', 'F'), |
|||
pgettext('one letter Saturday', 'S') |
|||
], |
|||
firstDayOfWeek: parseInt(get_format('FIRST_DAY_OF_WEEK')), |
|||
isLeapYear: function(year) { |
|||
return (((year % 4) === 0) && ((year % 100) !== 0 ) || ((year % 400) === 0)); |
|||
}, |
|||
getDaysInMonth: function(month, year) { |
|||
var days; |
|||
if (month === 1 || month === 3 || month === 5 || month === 7 || month === 8 || month === 10 || month === 12) { |
|||
days = 31; |
|||
} |
|||
else if (month === 4 || month === 6 || month === 9 || month === 11) { |
|||
days = 30; |
|||
} |
|||
else if (month === 2 && CalendarNamespace.isLeapYear(year)) { |
|||
days = 29; |
|||
} |
|||
else { |
|||
days = 28; |
|||
} |
|||
return days; |
|||
}, |
|||
draw: function(month, year, div_id, callback, selected) { // month = 1-12, year = 1-9999
|
|||
var today = new Date(); |
|||
var todayDay = today.getDate(); |
|||
var todayMonth = today.getMonth() + 1; |
|||
var todayYear = today.getFullYear(); |
|||
var todayClass = ''; |
|||
|
|||
// Use UTC functions here because the date field does not contain time
|
|||
// and using the UTC function variants prevent the local time offset
|
|||
// from altering the date, specifically the day field. For example:
|
|||
//
|
|||
// ```
|
|||
// var x = new Date('2013-10-02');
|
|||
// var day = x.getDate();
|
|||
// ```
|
|||
//
|
|||
// The day variable above will be 1 instead of 2 in, say, US Pacific time
|
|||
// zone.
|
|||
var isSelectedMonth = false; |
|||
if (typeof selected !== 'undefined') { |
|||
isSelectedMonth = (selected.getUTCFullYear() === year && (selected.getUTCMonth() + 1) === month); |
|||
} |
|||
|
|||
month = parseInt(month); |
|||
year = parseInt(year); |
|||
var calDiv = document.getElementById(div_id); |
|||
removeChildren(calDiv); |
|||
var calTable = document.createElement('table'); |
|||
quickElement('caption', calTable, CalendarNamespace.monthsOfYear[month - 1] + ' ' + year); |
|||
var tableBody = quickElement('tbody', calTable); |
|||
|
|||
// Draw days-of-week header
|
|||
var tableRow = quickElement('tr', tableBody); |
|||
for (var i = 0; i < 7; i++) { |
|||
quickElement('th', tableRow, CalendarNamespace.daysOfWeek[(i + CalendarNamespace.firstDayOfWeek) % 7]); |
|||
} |
|||
|
|||
var startingPos = new Date(year, month - 1, 1 - CalendarNamespace.firstDayOfWeek).getDay(); |
|||
var days = CalendarNamespace.getDaysInMonth(month, year); |
|||
|
|||
var nonDayCell; |
|||
|
|||
// Draw blanks before first of month
|
|||
tableRow = quickElement('tr', tableBody); |
|||
for (i = 0; i < startingPos; i++) { |
|||
nonDayCell = quickElement('td', tableRow, ' '); |
|||
nonDayCell.className = "nonday"; |
|||
} |
|||
|
|||
function calendarMonth(y, m) { |
|||
function onClick(e) { |
|||
e.preventDefault(); |
|||
callback(y, m, this.textContent); |
|||
} |
|||
return onClick; |
|||
} |
|||
|
|||
// Draw days of month
|
|||
var currentDay = 1; |
|||
for (i = startingPos; currentDay <= days; i++) { |
|||
if (i % 7 === 0 && currentDay !== 1) { |
|||
tableRow = quickElement('tr', tableBody); |
|||
} |
|||
if ((currentDay === todayDay) && (month === todayMonth) && (year === todayYear)) { |
|||
todayClass = 'today'; |
|||
} else { |
|||
todayClass = ''; |
|||
} |
|||
|
|||
// use UTC function; see above for explanation.
|
|||
if (isSelectedMonth && currentDay === selected.getUTCDate()) { |
|||
if (todayClass !== '') { |
|||
todayClass += " "; |
|||
} |
|||
todayClass += "selected"; |
|||
} |
|||
|
|||
var cell = quickElement('td', tableRow, '', 'class', todayClass); |
|||
var link = quickElement('a', cell, currentDay, 'href', '#'); |
|||
link.addEventListener('click', calendarMonth(year, month)); |
|||
currentDay++; |
|||
} |
|||
|
|||
// Draw blanks after end of month (optional, but makes for valid code)
|
|||
while (tableRow.childNodes.length < 7) { |
|||
nonDayCell = quickElement('td', tableRow, ' '); |
|||
nonDayCell.className = "nonday"; |
|||
} |
|||
|
|||
calDiv.appendChild(calTable); |
|||
} |
|||
}; |
|||
|
|||
// Calendar -- A calendar instance
|
|||
function Calendar(div_id, callback, selected) { |
|||
// div_id (string) is the ID of the element in which the calendar will
|
|||
// be displayed
|
|||
// callback (string) is the name of a JavaScript function that will be
|
|||
// called with the parameters (year, month, day) when a day in the
|
|||
// calendar is clicked
|
|||
this.div_id = div_id; |
|||
this.callback = callback; |
|||
this.today = new Date(); |
|||
this.currentMonth = this.today.getMonth() + 1; |
|||
this.currentYear = this.today.getFullYear(); |
|||
if (typeof selected !== 'undefined') { |
|||
this.selected = selected; |
|||
} |
|||
} |
|||
Calendar.prototype = { |
|||
drawCurrent: function() { |
|||
CalendarNamespace.draw(this.currentMonth, this.currentYear, this.div_id, this.callback, this.selected); |
|||
}, |
|||
drawDate: function(month, year, selected) { |
|||
this.currentMonth = month; |
|||
this.currentYear = year; |
|||
|
|||
if(selected) { |
|||
this.selected = selected; |
|||
} |
|||
|
|||
this.drawCurrent(); |
|||
}, |
|||
drawPreviousMonth: function() { |
|||
if (this.currentMonth === 1) { |
|||
this.currentMonth = 12; |
|||
this.currentYear--; |
|||
} |
|||
else { |
|||
this.currentMonth--; |
|||
} |
|||
this.drawCurrent(); |
|||
}, |
|||
drawNextMonth: function() { |
|||
if (this.currentMonth === 12) { |
|||
this.currentMonth = 1; |
|||
this.currentYear++; |
|||
} |
|||
else { |
|||
this.currentMonth++; |
|||
} |
|||
this.drawCurrent(); |
|||
}, |
|||
drawPreviousYear: function() { |
|||
this.currentYear--; |
|||
this.drawCurrent(); |
|||
}, |
|||
drawNextYear: function() { |
|||
this.currentYear++; |
|||
this.drawCurrent(); |
|||
} |
|||
}; |
|||
window.Calendar = Calendar; |
|||
window.CalendarNamespace = CalendarNamespace; |
|||
})(); |
|||
@ -1,13 +0,0 @@ |
|||
(function($) { |
|||
'use strict'; |
|||
$(function() { |
|||
$('.cancel-link').on('click', function(e) { |
|||
e.preventDefault(); |
|||
if (window.location.search.indexOf('&_popup=1') === -1) { |
|||
window.history.back(); // Go back if not a popup.
|
|||
} else { |
|||
window.close(); // Otherwise, close the popup.
|
|||
} |
|||
}); |
|||
}); |
|||
})(django.jQuery); |
|||
@ -1,20 +0,0 @@ |
|||
/*global showAddAnotherPopup, showRelatedObjectLookupPopup showRelatedObjectPopup updateRelatedObjectLinks*/ |
|||
|
|||
(function($) { |
|||
'use strict'; |
|||
$(document).ready(function() { |
|||
var modelName = $('#django-admin-form-add-constants').data('modelName'); |
|||
$('body').on('click', '.add-another', function(e) { |
|||
e.preventDefault(); |
|||
var event = $.Event('django:add-another-related'); |
|||
$(this).trigger(event); |
|||
if (!event.isDefaultPrevented()) { |
|||
showAddAnotherPopup(this); |
|||
} |
|||
}); |
|||
|
|||
if (modelName) { |
|||
$('form#' + modelName + '_form :input:visible:enabled:first').focus(); |
|||
} |
|||
}); |
|||
})(django.jQuery); |
|||
@ -1,26 +0,0 @@ |
|||
/*global gettext*/ |
|||
(function($) { |
|||
'use strict'; |
|||
$(document).ready(function() { |
|||
// Add anchor tag for Show/Hide link
|
|||
$("fieldset.collapse").each(function(i, elem) { |
|||
// Don't hide if fields in this fieldset have errors
|
|||
if ($(elem).find("div.errors").length === 0) { |
|||
$(elem).addClass("collapsed").find("h2").first().append(' (<a id="fieldsetcollapser' + |
|||
i + '" class="collapse-toggle" href="#">' + gettext("Show") + |
|||
'</a>)'); |
|||
} |
|||
}); |
|||
// Add toggle to anchor tag
|
|||
$("fieldset.collapse a.collapse-toggle").on('click', function(ev) { |
|||
if ($(this).closest("fieldset").hasClass("collapsed")) { |
|||
// Show
|
|||
$(this).text(gettext("Hide")).closest("fieldset").removeClass("collapsed").trigger("show.fieldset", [$(this).attr("id")]); |
|||
} else { |
|||
// Hide
|
|||
$(this).text(gettext("Show")).closest("fieldset").addClass("collapsed").trigger("hide.fieldset", [$(this).attr("id")]); |
|||
} |
|||
return false; |
|||
}); |
|||
}); |
|||
})(django.jQuery); |
|||
@ -1,5 +0,0 @@ |
|||
var $jscomp=$jscomp||{};$jscomp.scope={};$jscomp.findInternal=function(a,c,b){a instanceof String&&(a=String(a));for(var d=a.length,e=0;e<d;e++){var f=a[e];if(c.call(b,f,e,a))return{i:e,v:f}}return{i:-1,v:void 0}};$jscomp.ASSUME_ES5=!1;$jscomp.ASSUME_NO_NATIVE_MAP=!1;$jscomp.ASSUME_NO_NATIVE_SET=!1;$jscomp.defineProperty=$jscomp.ASSUME_ES5||"function"==typeof Object.defineProperties?Object.defineProperty:function(a,c,b){a!=Array.prototype&&a!=Object.prototype&&(a[c]=b.value)}; |
|||
$jscomp.getGlobal=function(a){return"undefined"!=typeof window&&window===a?a:"undefined"!=typeof global&&null!=global?global:a};$jscomp.global=$jscomp.getGlobal(this);$jscomp.polyfill=function(a,c,b,d){if(c){b=$jscomp.global;a=a.split(".");for(d=0;d<a.length-1;d++){var e=a[d];e in b||(b[e]={});b=b[e]}a=a[a.length-1];d=b[a];c=c(d);c!=d&&null!=c&&$jscomp.defineProperty(b,a,{configurable:!0,writable:!0,value:c})}}; |
|||
$jscomp.polyfill("Array.prototype.find",function(a){return a?a:function(a,b){return $jscomp.findInternal(this,a,b).v}},"es6","es3"); |
|||
(function(a){a(document).ready(function(){a("fieldset.collapse").each(function(c,b){0===a(b).find("div.errors").length&&a(b).addClass("collapsed").find("h2").first().append(' (<a id="fieldsetcollapser'+c+'" class="collapse-toggle" href="#">'+gettext("Show")+"</a>)")});a("fieldset.collapse a.collapse-toggle").on("click",function(c){a(this).closest("fieldset").hasClass("collapsed")?a(this).text(gettext("Hide")).closest("fieldset").removeClass("collapsed").trigger("show.fieldset",[a(this).attr("id")]): |
|||
a(this).text(gettext("Show")).closest("fieldset").addClass("collapsed").trigger("hide.fieldset",[a(this).attr("id")]);return!1})})})(django.jQuery); |
|||
@ -1,212 +0,0 @@ |
|||
// Core javascript helper functions
|
|||
|
|||
// basic browser identification & version
|
|||
var isOpera = (navigator.userAgent.indexOf("Opera") >= 0) && parseFloat(navigator.appVersion); |
|||
var isIE = ((document.all) && (!isOpera)) && parseFloat(navigator.appVersion.split("MSIE ")[1].split(";")[0]); |
|||
|
|||
// quickElement(tagType, parentReference [, textInChildNode, attribute, attributeValue ...]);
|
|||
function quickElement() { |
|||
'use strict'; |
|||
var obj = document.createElement(arguments[0]); |
|||
if (arguments[2]) { |
|||
var textNode = document.createTextNode(arguments[2]); |
|||
obj.appendChild(textNode); |
|||
} |
|||
var len = arguments.length; |
|||
for (var i = 3; i < len; i += 2) { |
|||
obj.setAttribute(arguments[i], arguments[i + 1]); |
|||
} |
|||
arguments[1].appendChild(obj); |
|||
return obj; |
|||
} |
|||
|
|||
// "a" is reference to an object
|
|||
function removeChildren(a) { |
|||
'use strict'; |
|||
while (a.hasChildNodes()) { |
|||
a.removeChild(a.lastChild); |
|||
} |
|||
} |
|||
|
|||
// ----------------------------------------------------------------------------
|
|||
// Find-position functions by PPK
|
|||
// See http://www.quirksmode.org/js/findpos.html
|
|||
// ----------------------------------------------------------------------------
|
|||
function findPosX(obj) { |
|||
'use strict'; |
|||
var curleft = 0; |
|||
if (obj.offsetParent) { |
|||
while (obj.offsetParent) { |
|||
curleft += obj.offsetLeft - ((isOpera) ? 0 : obj.scrollLeft); |
|||
obj = obj.offsetParent; |
|||
} |
|||
// IE offsetParent does not include the top-level
|
|||
if (isIE && obj.parentElement) { |
|||
curleft += obj.offsetLeft - obj.scrollLeft; |
|||
} |
|||
} else if (obj.x) { |
|||
curleft += obj.x; |
|||
} |
|||
return curleft; |
|||
} |
|||
|
|||
function findPosY(obj) { |
|||
'use strict'; |
|||
var curtop = 0; |
|||
if (obj.offsetParent) { |
|||
while (obj.offsetParent) { |
|||
curtop += obj.offsetTop - ((isOpera) ? 0 : obj.scrollTop); |
|||
obj = obj.offsetParent; |
|||
} |
|||
// IE offsetParent does not include the top-level
|
|||
if (isIE && obj.parentElement) { |
|||
curtop += obj.offsetTop - obj.scrollTop; |
|||
} |
|||
} else if (obj.y) { |
|||
curtop += obj.y; |
|||
} |
|||
return curtop; |
|||
} |
|||
|
|||
//-----------------------------------------------------------------------------
|
|||
// Date object extensions
|
|||
// ----------------------------------------------------------------------------
|
|||
(function() { |
|||
'use strict'; |
|||
Date.prototype.getTwelveHours = function() { |
|||
var hours = this.getHours(); |
|||
if (hours === 0) { |
|||
return 12; |
|||
} |
|||
else { |
|||
return hours <= 12 ? hours : hours - 12; |
|||
} |
|||
}; |
|||
|
|||
Date.prototype.getTwoDigitMonth = function() { |
|||
return (this.getMonth() < 9) ? '0' + (this.getMonth() + 1) : (this.getMonth() + 1); |
|||
}; |
|||
|
|||
Date.prototype.getTwoDigitDate = function() { |
|||
return (this.getDate() < 10) ? '0' + this.getDate() : this.getDate(); |
|||
}; |
|||
|
|||
Date.prototype.getTwoDigitTwelveHour = function() { |
|||
return (this.getTwelveHours() < 10) ? '0' + this.getTwelveHours() : this.getTwelveHours(); |
|||
}; |
|||
|
|||
Date.prototype.getTwoDigitHour = function() { |
|||
return (this.getHours() < 10) ? '0' + this.getHours() : this.getHours(); |
|||
}; |
|||
|
|||
Date.prototype.getTwoDigitMinute = function() { |
|||
return (this.getMinutes() < 10) ? '0' + this.getMinutes() : this.getMinutes(); |
|||
}; |
|||
|
|||
Date.prototype.getTwoDigitSecond = function() { |
|||
return (this.getSeconds() < 10) ? '0' + this.getSeconds() : this.getSeconds(); |
|||
}; |
|||
|
|||
Date.prototype.getHourMinute = function() { |
|||
return this.getTwoDigitHour() + ':' + this.getTwoDigitMinute(); |
|||
}; |
|||
|
|||
Date.prototype.getHourMinuteSecond = function() { |
|||
return this.getTwoDigitHour() + ':' + this.getTwoDigitMinute() + ':' + this.getTwoDigitSecond(); |
|||
}; |
|||
|
|||
Date.prototype.getFullMonthName = function() { |
|||
return typeof window.CalendarNamespace === "undefined" |
|||
? this.getTwoDigitMonth() |
|||
: window.CalendarNamespace.monthsOfYear[this.getMonth()]; |
|||
}; |
|||
|
|||
Date.prototype.strftime = function(format) { |
|||
var fields = { |
|||
B: this.getFullMonthName(), |
|||
c: this.toString(), |
|||
d: this.getTwoDigitDate(), |
|||
H: this.getTwoDigitHour(), |
|||
I: this.getTwoDigitTwelveHour(), |
|||
m: this.getTwoDigitMonth(), |
|||
M: this.getTwoDigitMinute(), |
|||
p: (this.getHours() >= 12) ? 'PM' : 'AM', |
|||
S: this.getTwoDigitSecond(), |
|||
w: '0' + this.getDay(), |
|||
x: this.toLocaleDateString(), |
|||
X: this.toLocaleTimeString(), |
|||
y: ('' + this.getFullYear()).substr(2, 4), |
|||
Y: '' + this.getFullYear(), |
|||
'%': '%' |
|||
}; |
|||
var result = '', i = 0; |
|||
while (i < format.length) { |
|||
if (format.charAt(i) === '%') { |
|||
result = result + fields[format.charAt(i + 1)]; |
|||
++i; |
|||
} |
|||
else { |
|||
result = result + format.charAt(i); |
|||
} |
|||
++i; |
|||
} |
|||
return result; |
|||
}; |
|||
|
|||
// ----------------------------------------------------------------------------
|
|||
// String object extensions
|
|||
// ----------------------------------------------------------------------------
|
|||
String.prototype.pad_left = function(pad_length, pad_string) { |
|||
var new_string = this; |
|||
for (var i = 0; new_string.length < pad_length; i++) { |
|||
new_string = pad_string + new_string; |
|||
} |
|||
return new_string; |
|||
}; |
|||
|
|||
String.prototype.strptime = function(format) { |
|||
var split_format = format.split(/[.\-/]/); |
|||
var date = this.split(/[.\-/]/); |
|||
var i = 0; |
|||
var day, month, year; |
|||
while (i < split_format.length) { |
|||
switch (split_format[i]) { |
|||
case "%d": |
|||
day = date[i]; |
|||
break; |
|||
case "%m": |
|||
month = date[i] - 1; |
|||
break; |
|||
case "%Y": |
|||
year = date[i]; |
|||
break; |
|||
case "%y": |
|||
year = date[i]; |
|||
break; |
|||
} |
|||
++i; |
|||
} |
|||
// Create Date object from UTC since the parsed value is supposed to be
|
|||
// in UTC, not local time. Also, the calendar uses UTC functions for
|
|||
// date extraction.
|
|||
return new Date(Date.UTC(year, month, day)); |
|||
}; |
|||
|
|||
})(); |
|||
// ----------------------------------------------------------------------------
|
|||
// Get the computed style for and element
|
|||
// ----------------------------------------------------------------------------
|
|||
function getStyle(oElm, strCssRule) { |
|||
'use strict'; |
|||
var strValue = ""; |
|||
if(document.defaultView && document.defaultView.getComputedStyle) { |
|||
strValue = document.defaultView.getComputedStyle(oElm, "").getPropertyValue(strCssRule); |
|||
} |
|||
else if(oElm.currentStyle) { |
|||
strCssRule = strCssRule.replace(/\-(\w)/g, function(strMatch, p1) { |
|||
return p1.toUpperCase(); |
|||
}); |
|||
strValue = oElm.currentStyle[strCssRule]; |
|||
} |
|||
return strValue; |
|||
} |
|||
@ -1,298 +0,0 @@ |
|||
/*global DateTimeShortcuts, SelectFilter*/ |
|||
/** |
|||
* Django admin inlines |
|||
* |
|||
* Based on jQuery Formset 1.1 |
|||
* @author Stanislaus Madueke (stan DOT madueke AT gmail DOT com) |
|||
* @requires jQuery 1.2.6 or later |
|||
* |
|||
* Copyright (c) 2009, Stanislaus Madueke |
|||
* All rights reserved. |
|||
* |
|||
* Spiced up with Code from Zain Memon's GSoC project 2009 |
|||
* and modified for Django by Jannis Leidel, Travis Swicegood and Julien Phalip. |
|||
* |
|||
* Licensed under the New BSD License |
|||
* See: http://www.opensource.org/licenses/bsd-license.php
|
|||
*/ |
|||
(function($) { |
|||
'use strict'; |
|||
$.fn.formset = function(opts) { |
|||
var options = $.extend({}, $.fn.formset.defaults, opts); |
|||
var $this = $(this); |
|||
var $parent = $this.parent(); |
|||
var updateElementIndex = function(el, prefix, ndx) { |
|||
var id_regex = new RegExp("(" + prefix + "-(\\d+|__prefix__))"); |
|||
var replacement = prefix + "-" + ndx; |
|||
if ($(el).prop("for")) { |
|||
$(el).prop("for", $(el).prop("for").replace(id_regex, replacement)); |
|||
} |
|||
if (el.id) { |
|||
el.id = el.id.replace(id_regex, replacement); |
|||
} |
|||
if (el.name) { |
|||
el.name = el.name.replace(id_regex, replacement); |
|||
} |
|||
}; |
|||
var totalForms = $("#id_" + options.prefix + "-TOTAL_FORMS").prop("autocomplete", "off"); |
|||
var nextIndex = parseInt(totalForms.val(), 10); |
|||
var maxForms = $("#id_" + options.prefix + "-MAX_NUM_FORMS").prop("autocomplete", "off"); |
|||
// only show the add button if we are allowed to add more items,
|
|||
// note that max_num = None translates to a blank string.
|
|||
var showAddButton = maxForms.val() === '' || (maxForms.val() - totalForms.val()) > 0; |
|||
$this.each(function(i) { |
|||
$(this).not("." + options.emptyCssClass).addClass(options.formCssClass); |
|||
}); |
|||
if ($this.length && showAddButton) { |
|||
var addButton = options.addButton; |
|||
if (addButton === null) { |
|||
if ($this.prop("tagName") === "TR") { |
|||
// If forms are laid out as table rows, insert the
|
|||
// "add" button in a new table row:
|
|||
var numCols = this.eq(-1).children().length; |
|||
$parent.append('<tr class="' + options.addCssClass + '"><td colspan="' + numCols + '"><a href="#">' + options.addText + "</a></tr>"); |
|||
addButton = $parent.find("tr:last a"); |
|||
} else { |
|||
// Otherwise, insert it immediately after the last form:
|
|||
$this.filter(":last").after('<div class="' + options.addCssClass + '"><a href="#">' + options.addText + "</a></div>"); |
|||
addButton = $this.filter(":last").next().find("a"); |
|||
} |
|||
} |
|||
addButton.on('click', function(e) { |
|||
e.preventDefault(); |
|||
var template = $("#" + options.prefix + "-empty"); |
|||
var row = template.clone(true); |
|||
row.removeClass(options.emptyCssClass) |
|||
.addClass(options.formCssClass) |
|||
.attr("id", options.prefix + "-" + nextIndex); |
|||
if (row.is("tr")) { |
|||
// If the forms are laid out in table rows, insert
|
|||
// the remove button into the last table cell:
|
|||
row.children(":last").append('<div><a class="' + options.deleteCssClass + '" href="#">' + options.deleteText + "</a></div>"); |
|||
} else if (row.is("ul") || row.is("ol")) { |
|||
// If they're laid out as an ordered/unordered list,
|
|||
// insert an <li> after the last list item:
|
|||
row.append('<li><a class="' + options.deleteCssClass + '" href="#">' + options.deleteText + "</a></li>"); |
|||
} else { |
|||
// Otherwise, just insert the remove button as the
|
|||
// last child element of the form's container:
|
|||
row.children(":first").append('<span><a class="' + options.deleteCssClass + '" href="#">' + options.deleteText + "</a></span>"); |
|||
} |
|||
row.find("*").each(function() { |
|||
updateElementIndex(this, options.prefix, totalForms.val()); |
|||
}); |
|||
// Insert the new form when it has been fully edited
|
|||
row.insertBefore($(template)); |
|||
// Update number of total forms
|
|||
$(totalForms).val(parseInt(totalForms.val(), 10) + 1); |
|||
nextIndex += 1; |
|||
// Hide add button in case we've hit the max, except we want to add infinitely
|
|||
if ((maxForms.val() !== '') && (maxForms.val() - totalForms.val()) <= 0) { |
|||
addButton.parent().hide(); |
|||
} |
|||
// The delete button of each row triggers a bunch of other things
|
|||
row.find("a." + options.deleteCssClass).on('click', function(e1) { |
|||
e1.preventDefault(); |
|||
// Remove the parent form containing this button:
|
|||
row.remove(); |
|||
nextIndex -= 1; |
|||
// If a post-delete callback was provided, call it with the deleted form:
|
|||
if (options.removed) { |
|||
options.removed(row); |
|||
} |
|||
$(document).trigger('formset:removed', [row, options.prefix]); |
|||
// Update the TOTAL_FORMS form count.
|
|||
var forms = $("." + options.formCssClass); |
|||
$("#id_" + options.prefix + "-TOTAL_FORMS").val(forms.length); |
|||
// Show add button again once we drop below max
|
|||
if ((maxForms.val() === '') || (maxForms.val() - forms.length) > 0) { |
|||
addButton.parent().show(); |
|||
} |
|||
// Also, update names and ids for all remaining form controls
|
|||
// so they remain in sequence:
|
|||
var i, formCount; |
|||
var updateElementCallback = function() { |
|||
updateElementIndex(this, options.prefix, i); |
|||
}; |
|||
for (i = 0, formCount = forms.length; i < formCount; i++) { |
|||
updateElementIndex($(forms).get(i), options.prefix, i); |
|||
$(forms.get(i)).find("*").each(updateElementCallback); |
|||
} |
|||
}); |
|||
// If a post-add callback was supplied, call it with the added form:
|
|||
if (options.added) { |
|||
options.added(row); |
|||
} |
|||
$(document).trigger('formset:added', [row, options.prefix]); |
|||
}); |
|||
} |
|||
return this; |
|||
}; |
|||
|
|||
/* Setup plugin defaults */ |
|||
$.fn.formset.defaults = { |
|||
prefix: "form", // The form prefix for your django formset
|
|||
addText: "add another", // Text for the add link
|
|||
deleteText: "remove", // Text for the delete link
|
|||
addCssClass: "add-row", // CSS class applied to the add link
|
|||
deleteCssClass: "delete-row", // CSS class applied to the delete link
|
|||
emptyCssClass: "empty-row", // CSS class applied to the empty row
|
|||
formCssClass: "dynamic-form", // CSS class applied to each form in a formset
|
|||
added: null, // Function called each time a new form is added
|
|||
removed: null, // Function called each time a form is deleted
|
|||
addButton: null // Existing add button to use
|
|||
}; |
|||
|
|||
|
|||
// Tabular inlines ---------------------------------------------------------
|
|||
$.fn.tabularFormset = function(selector, options) { |
|||
var $rows = $(this); |
|||
var alternatingRows = function(row) { |
|||
$(selector).not(".add-row").removeClass("row1 row2") |
|||
.filter(":even").addClass("row1").end() |
|||
.filter(":odd").addClass("row2"); |
|||
}; |
|||
|
|||
var reinitDateTimeShortCuts = function() { |
|||
// Reinitialize the calendar and clock widgets by force
|
|||
if (typeof DateTimeShortcuts !== "undefined") { |
|||
$(".datetimeshortcuts").remove(); |
|||
DateTimeShortcuts.init(); |
|||
} |
|||
}; |
|||
|
|||
var updateSelectFilter = function() { |
|||
// If any SelectFilter widgets are a part of the new form,
|
|||
// instantiate a new SelectFilter instance for it.
|
|||
if (typeof SelectFilter !== 'undefined') { |
|||
$('.selectfilter').each(function(index, value) { |
|||
var namearr = value.name.split('-'); |
|||
SelectFilter.init(value.id, namearr[namearr.length - 1], false); |
|||
}); |
|||
$('.selectfilterstacked').each(function(index, value) { |
|||
var namearr = value.name.split('-'); |
|||
SelectFilter.init(value.id, namearr[namearr.length - 1], true); |
|||
}); |
|||
} |
|||
}; |
|||
|
|||
var initPrepopulatedFields = function(row) { |
|||
row.find('.prepopulated_field').each(function() { |
|||
var field = $(this), |
|||
input = field.find('input, select, textarea'), |
|||
dependency_list = input.data('dependency_list') || [], |
|||
dependencies = []; |
|||
$.each(dependency_list, function(i, field_name) { |
|||
dependencies.push('#' + row.find('.field-' + field_name).find('input, select, textarea').attr('id')); |
|||
}); |
|||
if (dependencies.length) { |
|||
input.prepopulate(dependencies, input.attr('maxlength')); |
|||
} |
|||
}); |
|||
}; |
|||
|
|||
$rows.formset({ |
|||
prefix: options.prefix, |
|||
addText: options.addText, |
|||
formCssClass: "dynamic-" + options.prefix, |
|||
deleteCssClass: "inline-deletelink", |
|||
deleteText: options.deleteText, |
|||
emptyCssClass: "empty-form", |
|||
removed: alternatingRows, |
|||
added: function(row) { |
|||
initPrepopulatedFields(row); |
|||
reinitDateTimeShortCuts(); |
|||
updateSelectFilter(); |
|||
alternatingRows(row); |
|||
}, |
|||
addButton: options.addButton |
|||
}); |
|||
|
|||
return $rows; |
|||
}; |
|||
|
|||
// Stacked inlines ---------------------------------------------------------
|
|||
$.fn.stackedFormset = function(selector, options) { |
|||
var $rows = $(this); |
|||
var updateInlineLabel = function(row) { |
|||
$(selector).find(".inline_label").each(function(i) { |
|||
var count = i + 1; |
|||
$(this).html($(this).html().replace(/(#\d+)/g, "#" + count)); |
|||
}); |
|||
}; |
|||
|
|||
var reinitDateTimeShortCuts = function() { |
|||
// Reinitialize the calendar and clock widgets by force, yuck.
|
|||
if (typeof DateTimeShortcuts !== "undefined") { |
|||
$(".datetimeshortcuts").remove(); |
|||
DateTimeShortcuts.init(); |
|||
} |
|||
}; |
|||
|
|||
var updateSelectFilter = function() { |
|||
// If any SelectFilter widgets were added, instantiate a new instance.
|
|||
if (typeof SelectFilter !== "undefined") { |
|||
$(".selectfilter").each(function(index, value) { |
|||
var namearr = value.name.split('-'); |
|||
SelectFilter.init(value.id, namearr[namearr.length - 1], false); |
|||
}); |
|||
$(".selectfilterstacked").each(function(index, value) { |
|||
var namearr = value.name.split('-'); |
|||
SelectFilter.init(value.id, namearr[namearr.length - 1], true); |
|||
}); |
|||
} |
|||
}; |
|||
|
|||
var initPrepopulatedFields = function(row) { |
|||
row.find('.prepopulated_field').each(function() { |
|||
var field = $(this), |
|||
input = field.find('input, select, textarea'), |
|||
dependency_list = input.data('dependency_list') || [], |
|||
dependencies = []; |
|||
$.each(dependency_list, function(i, field_name) { |
|||
dependencies.push('#' + row.find('.form-row .field-' + field_name).find('input, select, textarea').attr('id')); |
|||
}); |
|||
if (dependencies.length) { |
|||
input.prepopulate(dependencies, input.attr('maxlength')); |
|||
} |
|||
}); |
|||
}; |
|||
|
|||
$rows.formset({ |
|||
prefix: options.prefix, |
|||
addText: options.addText, |
|||
formCssClass: "dynamic-" + options.prefix, |
|||
deleteCssClass: "inline-deletelink", |
|||
deleteText: options.deleteText, |
|||
emptyCssClass: "empty-form", |
|||
removed: updateInlineLabel, |
|||
added: function(row) { |
|||
initPrepopulatedFields(row); |
|||
reinitDateTimeShortCuts(); |
|||
updateSelectFilter(); |
|||
updateInlineLabel(row); |
|||
}, |
|||
addButton: options.addButton |
|||
}); |
|||
|
|||
return $rows; |
|||
}; |
|||
|
|||
$(document).ready(function() { |
|||
$(".js-inline-admin-formset").each(function() { |
|||
var data = $(this).data(), |
|||
inlineOptions = data.inlineFormset, |
|||
selector; |
|||
switch(data.inlineType) { |
|||
case "stacked": |
|||
selector = inlineOptions.name + "-group .inline-related"; |
|||
$(selector).stackedFormset(selector, inlineOptions.options); |
|||
break; |
|||
case "tabular": |
|||
selector = inlineOptions.name + "-group .tabular.inline-related tbody:first > tr"; |
|||
$(selector).tabularFormset(selector, inlineOptions.options); |
|||
break; |
|||
} |
|||
}); |
|||
}); |
|||
})(django.jQuery); |
|||
@ -1,13 +0,0 @@ |
|||
var $jscomp=$jscomp||{};$jscomp.scope={};$jscomp.findInternal=function(b,d,a){b instanceof String&&(b=String(b));for(var c=b.length,f=0;f<c;f++){var g=b[f];if(d.call(a,g,f,b))return{i:f,v:g}}return{i:-1,v:void 0}};$jscomp.ASSUME_ES5=!1;$jscomp.ASSUME_NO_NATIVE_MAP=!1;$jscomp.ASSUME_NO_NATIVE_SET=!1;$jscomp.defineProperty=$jscomp.ASSUME_ES5||"function"==typeof Object.defineProperties?Object.defineProperty:function(b,d,a){b!=Array.prototype&&b!=Object.prototype&&(b[d]=a.value)}; |
|||
$jscomp.getGlobal=function(b){return"undefined"!=typeof window&&window===b?b:"undefined"!=typeof global&&null!=global?global:b};$jscomp.global=$jscomp.getGlobal(this);$jscomp.polyfill=function(b,d,a,c){if(d){a=$jscomp.global;b=b.split(".");for(c=0;c<b.length-1;c++){var f=b[c];f in a||(a[f]={});a=a[f]}b=b[b.length-1];c=a[b];d=d(c);d!=c&&null!=d&&$jscomp.defineProperty(a,b,{configurable:!0,writable:!0,value:d})}}; |
|||
$jscomp.polyfill("Array.prototype.find",function(b){return b?b:function(b,a){return $jscomp.findInternal(this,b,a).v}},"es6","es3"); |
|||
(function(b){b.fn.formset=function(d){var a=b.extend({},b.fn.formset.defaults,d),c=b(this);d=c.parent();var f=function(a,e,d){var c=new RegExp("("+e+"-(\\d+|__prefix__))");e=e+"-"+d;b(a).prop("for")&&b(a).prop("for",b(a).prop("for").replace(c,e));a.id&&(a.id=a.id.replace(c,e));a.name&&(a.name=a.name.replace(c,e))},g=b("#id_"+a.prefix+"-TOTAL_FORMS").prop("autocomplete","off"),h=parseInt(g.val(),10),e=b("#id_"+a.prefix+"-MAX_NUM_FORMS").prop("autocomplete","off"),m=""===e.val()||0<e.val()-g.val(); |
|||
c.each(function(e){b(this).not("."+a.emptyCssClass).addClass(a.formCssClass)});if(c.length&&m){var l=a.addButton;null===l&&("TR"===c.prop("tagName")?(c=this.eq(-1).children().length,d.append('<tr class="'+a.addCssClass+'"><td colspan="'+c+'"><a href="#">'+a.addText+"</a></tr>"),l=d.find("tr:last a")):(c.filter(":last").after('<div class="'+a.addCssClass+'"><a href="#">'+a.addText+"</a></div>"),l=c.filter(":last").next().find("a")));l.on("click",function(d){d.preventDefault();d=b("#"+a.prefix+"-empty"); |
|||
var c=d.clone(!0);c.removeClass(a.emptyCssClass).addClass(a.formCssClass).attr("id",a.prefix+"-"+h);c.is("tr")?c.children(":last").append('<div><a class="'+a.deleteCssClass+'" href="#">'+a.deleteText+"</a></div>"):c.is("ul")||c.is("ol")?c.append('<li><a class="'+a.deleteCssClass+'" href="#">'+a.deleteText+"</a></li>"):c.children(":first").append('<span><a class="'+a.deleteCssClass+'" href="#">'+a.deleteText+"</a></span>");c.find("*").each(function(){f(this,a.prefix,g.val())});c.insertBefore(b(d)); |
|||
b(g).val(parseInt(g.val(),10)+1);h+=1;""!==e.val()&&0>=e.val()-g.val()&&l.parent().hide();c.find("a."+a.deleteCssClass).on("click",function(d){d.preventDefault();c.remove();--h;a.removed&&a.removed(c);b(document).trigger("formset:removed",[c,a.prefix]);d=b("."+a.formCssClass);b("#id_"+a.prefix+"-TOTAL_FORMS").val(d.length);(""===e.val()||0<e.val()-d.length)&&l.parent().show();var m,g=function(){f(this,a.prefix,k)};var k=0;for(m=d.length;k<m;k++)f(b(d).get(k),a.prefix,k),b(d.get(k)).find("*").each(g)}); |
|||
a.added&&a.added(c);b(document).trigger("formset:added",[c,a.prefix])})}return this};b.fn.formset.defaults={prefix:"form",addText:"add another",deleteText:"remove",addCssClass:"add-row",deleteCssClass:"delete-row",emptyCssClass:"empty-row",formCssClass:"dynamic-form",added:null,removed:null,addButton:null};b.fn.tabularFormset=function(d,a){var c=b(this),f=function(a){b(d).not(".add-row").removeClass("row1 row2").filter(":even").addClass("row1").end().filter(":odd").addClass("row2")},g=function(){"undefined"!== |
|||
typeof SelectFilter&&(b(".selectfilter").each(function(b,a){b=a.name.split("-");SelectFilter.init(a.id,b[b.length-1],!1)}),b(".selectfilterstacked").each(function(b,a){b=a.name.split("-");SelectFilter.init(a.id,b[b.length-1],!0)}))},h=function(a){a.find(".prepopulated_field").each(function(){var c=b(this).find("input, select, textarea"),d=c.data("dependency_list")||[],e=[];b.each(d,function(b,c){e.push("#"+a.find(".field-"+c).find("input, select, textarea").attr("id"))});e.length&&c.prepopulate(e, |
|||
c.attr("maxlength"))})};c.formset({prefix:a.prefix,addText:a.addText,formCssClass:"dynamic-"+a.prefix,deleteCssClass:"inline-deletelink",deleteText:a.deleteText,emptyCssClass:"empty-form",removed:f,added:function(a){h(a);"undefined"!==typeof DateTimeShortcuts&&(b(".datetimeshortcuts").remove(),DateTimeShortcuts.init());g();f(a)},addButton:a.addButton});return c};b.fn.stackedFormset=function(d,a){var c=b(this),f=function(a){b(d).find(".inline_label").each(function(a){a+=1;b(this).html(b(this).html().replace(/(#\d+)/g, |
|||
"#"+a))})},g=function(){"undefined"!==typeof SelectFilter&&(b(".selectfilter").each(function(a,b){a=b.name.split("-");SelectFilter.init(b.id,a[a.length-1],!1)}),b(".selectfilterstacked").each(function(a,b){a=b.name.split("-");SelectFilter.init(b.id,a[a.length-1],!0)}))},h=function(a){a.find(".prepopulated_field").each(function(){var c=b(this).find("input, select, textarea"),d=c.data("dependency_list")||[],e=[];b.each(d,function(b,c){e.push("#"+a.find(".form-row .field-"+c).find("input, select, textarea").attr("id"))}); |
|||
e.length&&c.prepopulate(e,c.attr("maxlength"))})};c.formset({prefix:a.prefix,addText:a.addText,formCssClass:"dynamic-"+a.prefix,deleteCssClass:"inline-deletelink",deleteText:a.deleteText,emptyCssClass:"empty-form",removed:f,added:function(a){h(a);"undefined"!==typeof DateTimeShortcuts&&(b(".datetimeshortcuts").remove(),DateTimeShortcuts.init());g();f(a)},addButton:a.addButton});return c};b(document).ready(function(){b(".js-inline-admin-formset").each(function(){var d=b(this).data(),a=d.inlineFormset; |
|||
switch(d.inlineType){case "stacked":d=a.name+"-group .inline-related";b(d).stackedFormset(d,a.options);break;case "tabular":d=a.name+"-group .tabular.inline-related tbody:first > tr",b(d).tabularFormset(d,a.options)}})})})(django.jQuery); |
|||
@ -1,8 +0,0 @@ |
|||
/*global django:true, jQuery:false*/ |
|||
/* Puts the included jQuery into our own namespace using noConflict and passing |
|||
* it 'true'. This ensures that the included jQuery doesn't pollute the global |
|||
* namespace (i.e. this preserves pre-existing values for both window.$ and |
|||
* window.jQuery). |
|||
*/ |
|||
var django = django || {}; |
|||
django.jQuery = jQuery.noConflict(true); |
|||
@ -1,16 +0,0 @@ |
|||
/*global opener */ |
|||
(function() { |
|||
'use strict'; |
|||
var initData = JSON.parse(document.getElementById('django-admin-popup-response-constants').dataset.popupResponse); |
|||
switch(initData.action) { |
|||
case 'change': |
|||
opener.dismissChangeRelatedObjectPopup(window, initData.value, initData.obj, initData.new_value); |
|||
break; |
|||
case 'delete': |
|||
opener.dismissDeleteRelatedObjectPopup(window, initData.value); |
|||
break; |
|||
default: |
|||
opener.dismissAddRelatedObjectPopup(window, initData.value, initData.obj); |
|||
break; |
|||
} |
|||
})(); |
|||
@ -1,42 +0,0 @@ |
|||
/*global URLify*/ |
|||
(function($) { |
|||
'use strict'; |
|||
$.fn.prepopulate = function(dependencies, maxLength, allowUnicode) { |
|||
/* |
|||
Depends on urlify.js |
|||
Populates a selected field with the values of the dependent fields, |
|||
URLifies and shortens the string. |
|||
dependencies - array of dependent fields ids |
|||
maxLength - maximum length of the URLify'd string |
|||
allowUnicode - Unicode support of the URLify'd string |
|||
*/ |
|||
return this.each(function() { |
|||
var prepopulatedField = $(this); |
|||
|
|||
var populate = function() { |
|||
// Bail if the field's value has been changed by the user
|
|||
if (prepopulatedField.data('_changed')) { |
|||
return; |
|||
} |
|||
|
|||
var values = []; |
|||
$.each(dependencies, function(i, field) { |
|||
field = $(field); |
|||
if (field.val().length > 0) { |
|||
values.push(field.val()); |
|||
} |
|||
}); |
|||
prepopulatedField.val(URLify(values.join(' '), maxLength, allowUnicode)); |
|||
}; |
|||
|
|||
prepopulatedField.data('_changed', false); |
|||
prepopulatedField.on('change', function() { |
|||
prepopulatedField.data('_changed', true); |
|||
}); |
|||
|
|||
if (!prepopulatedField.val()) { |
|||
$(dependencies.join(',')).on('keyup change focus', populate); |
|||
} |
|||
}); |
|||
}; |
|||
})(django.jQuery); |
|||
@ -1 +0,0 @@ |
|||
(function(b){b.fn.prepopulate=function(d,f,g){return this.each(function(){var a=b(this),h=function(){if(!a.data("_changed")){var e=[];b.each(d,function(a,c){c=b(c);0<c.val().length&&e.push(c.val())});a.val(URLify(e.join(" "),f,g))}};a.data("_changed",!1);a.on("change",function(){a.data("_changed",!0)});if(!a.val())b(d.join(",")).on("keyup change focus",h)})}})(django.jQuery); |
|||
@ -1,10 +0,0 @@ |
|||
(function($) { |
|||
'use strict'; |
|||
var fields = $('#django-admin-prepopulated-fields-constants').data('prepopulatedFields'); |
|||
$.each(fields, function(index, field) { |
|||
$('.empty-form .form-row .field-' + field.name + ', .empty-form.form-row .field-' + field.name).addClass('prepopulated_field'); |
|||
$(field.id).data('dependency_list', field.dependency_list).prepopulate( |
|||
field.dependency_ids, field.maxLength, field.allowUnicode |
|||
); |
|||
}); |
|||
})(django.jQuery); |
|||
@ -1,106 +0,0 @@ |
|||
(function() { |
|||
'use strict'; |
|||
var timeParsePatterns = [ |
|||
// 9
|
|||
{ |
|||
re: /^\d{1,2}$/i, |
|||
handler: function(bits) { |
|||
if (bits[0].length === 1) { |
|||
return '0' + bits[0] + ':00'; |
|||
} else { |
|||
return bits[0] + ':00'; |
|||
} |
|||
} |
|||
}, |
|||
// 13:00
|
|||
{ |
|||
re: /^\d{2}[:.]\d{2}$/i, |
|||
handler: function(bits) { |
|||
return bits[0].replace('.', ':'); |
|||
} |
|||
}, |
|||
// 9:00
|
|||
{ |
|||
re: /^\d[:.]\d{2}$/i, |
|||
handler: function(bits) { |
|||
return '0' + bits[0].replace('.', ':'); |
|||
} |
|||
}, |
|||
// 3 am / 3 a.m. / 3am
|
|||
{ |
|||
re: /^(\d+)\s*([ap])(?:.?m.?)?$/i, |
|||
handler: function(bits) { |
|||
var hour = parseInt(bits[1]); |
|||
if (hour === 12) { |
|||
hour = 0; |
|||
} |
|||
if (bits[2].toLowerCase() === 'p') { |
|||
if (hour === 12) { |
|||
hour = 0; |
|||
} |
|||
return (hour + 12) + ':00'; |
|||
} else { |
|||
if (hour < 10) { |
|||
return '0' + hour + ':00'; |
|||
} else { |
|||
return hour + ':00'; |
|||
} |
|||
} |
|||
} |
|||
}, |
|||
// 3.30 am / 3:15 a.m. / 3.00am
|
|||
{ |
|||
re: /^(\d+)[.:](\d{2})\s*([ap]).?m.?$/i, |
|||
handler: function(bits) { |
|||
var hour = parseInt(bits[1]); |
|||
var mins = parseInt(bits[2]); |
|||
if (mins < 10) { |
|||
mins = '0' + mins; |
|||
} |
|||
if (hour === 12) { |
|||
hour = 0; |
|||
} |
|||
if (bits[3].toLowerCase() === 'p') { |
|||
if (hour === 12) { |
|||
hour = 0; |
|||
} |
|||
return (hour + 12) + ':' + mins; |
|||
} else { |
|||
if (hour < 10) { |
|||
return '0' + hour + ':' + mins; |
|||
} else { |
|||
return hour + ':' + mins; |
|||
} |
|||
} |
|||
} |
|||
}, |
|||
// noon
|
|||
{ |
|||
re: /^no/i, |
|||
handler: function(bits) { |
|||
return '12:00'; |
|||
} |
|||
}, |
|||
// midnight
|
|||
{ |
|||
re: /^mid/i, |
|||
handler: function(bits) { |
|||
return '00:00'; |
|||
} |
|||
} |
|||
]; |
|||
|
|||
function parseTimeString(s) { |
|||
for (var i = 0; i < timeParsePatterns.length; i++) { |
|||
var re = timeParsePatterns[i].re; |
|||
var handler = timeParsePatterns[i].handler; |
|||
var bits = re.exec(s); |
|||
if (bits) { |
|||
return handler(bits); |
|||
} |
|||
} |
|||
return s; |
|||
} |
|||
|
|||
window.parseTimeString = parseTimeString; |
|||
})(); |
|||
@ -1,195 +0,0 @@ |
|||
/*global XRegExp*/ |
|||
(function() { |
|||
'use strict'; |
|||
|
|||
var LATIN_MAP = { |
|||
'À': 'A', 'Á': 'A', 'Â': 'A', 'Ã': 'A', 'Ä': 'A', 'Å': 'A', 'Æ': 'AE', |
|||
'Ç': 'C', 'È': 'E', 'É': 'E', 'Ê': 'E', 'Ë': 'E', 'Ì': 'I', 'Í': 'I', |
|||
'Î': 'I', 'Ï': 'I', 'Ð': 'D', 'Ñ': 'N', 'Ò': 'O', 'Ó': 'O', 'Ô': 'O', |
|||
'Õ': 'O', 'Ö': 'O', 'Ő': 'O', 'Ø': 'O', 'Ù': 'U', 'Ú': 'U', 'Û': 'U', |
|||
'Ü': 'U', 'Ű': 'U', 'Ý': 'Y', 'Þ': 'TH', 'Ÿ': 'Y', 'ß': 'ss', 'à': 'a', |
|||
'á': 'a', 'â': 'a', 'ã': 'a', 'ä': 'a', 'å': 'a', 'æ': 'ae', 'ç': 'c', |
|||
'è': 'e', 'é': 'e', 'ê': 'e', 'ë': 'e', 'ì': 'i', 'í': 'i', 'î': 'i', |
|||
'ï': 'i', 'ð': 'd', 'ñ': 'n', 'ò': 'o', 'ó': 'o', 'ô': 'o', 'õ': 'o', |
|||
'ö': 'o', 'ő': 'o', 'ø': 'o', 'ù': 'u', 'ú': 'u', 'û': 'u', 'ü': 'u', |
|||
'ű': 'u', 'ý': 'y', 'þ': 'th', 'ÿ': 'y' |
|||
}; |
|||
var LATIN_SYMBOLS_MAP = { |
|||
'©': '(c)' |
|||
}; |
|||
var GREEK_MAP = { |
|||
'α': 'a', 'β': 'b', 'γ': 'g', 'δ': 'd', 'ε': 'e', 'ζ': 'z', 'η': 'h', |
|||
'θ': '8', 'ι': 'i', 'κ': 'k', 'λ': 'l', 'μ': 'm', 'ν': 'n', 'ξ': '3', |
|||
'ο': 'o', 'π': 'p', 'ρ': 'r', 'σ': 's', 'τ': 't', 'υ': 'y', 'φ': 'f', |
|||
'χ': 'x', 'ψ': 'ps', 'ω': 'w', 'ά': 'a', 'έ': 'e', 'ί': 'i', 'ό': 'o', |
|||
'ύ': 'y', 'ή': 'h', 'ώ': 'w', 'ς': 's', 'ϊ': 'i', 'ΰ': 'y', 'ϋ': 'y', |
|||
'ΐ': 'i', 'Α': 'A', 'Β': 'B', 'Γ': 'G', 'Δ': 'D', 'Ε': 'E', 'Ζ': 'Z', |
|||
'Η': 'H', 'Θ': '8', 'Ι': 'I', 'Κ': 'K', 'Λ': 'L', 'Μ': 'M', 'Ν': 'N', |
|||
'Ξ': '3', 'Ο': 'O', 'Π': 'P', 'Ρ': 'R', 'Σ': 'S', 'Τ': 'T', 'Υ': 'Y', |
|||
'Φ': 'F', 'Χ': 'X', 'Ψ': 'PS', 'Ω': 'W', 'Ά': 'A', 'Έ': 'E', 'Ί': 'I', |
|||
'Ό': 'O', 'Ύ': 'Y', 'Ή': 'H', 'Ώ': 'W', 'Ϊ': 'I', 'Ϋ': 'Y' |
|||
}; |
|||
var TURKISH_MAP = { |
|||
'ş': 's', 'Ş': 'S', 'ı': 'i', 'İ': 'I', 'ç': 'c', 'Ç': 'C', 'ü': 'u', |
|||
'Ü': 'U', 'ö': 'o', 'Ö': 'O', 'ğ': 'g', 'Ğ': 'G' |
|||
}; |
|||
var ROMANIAN_MAP = { |
|||
'ă': 'a', 'î': 'i', 'ș': 's', 'ț': 't', 'â': 'a', |
|||
'Ă': 'A', 'Î': 'I', 'Ș': 'S', 'Ț': 'T', 'Â': 'A' |
|||
}; |
|||
var RUSSIAN_MAP = { |
|||
'а': 'a', 'б': 'b', 'в': 'v', 'г': 'g', 'д': 'd', 'е': 'e', 'ё': 'yo', |
|||
'ж': 'zh', 'з': 'z', 'и': 'i', 'й': 'j', 'к': 'k', 'л': 'l', 'м': 'm', |
|||
'н': 'n', 'о': 'o', 'п': 'p', 'р': 'r', 'с': 's', 'т': 't', 'у': 'u', |
|||
'ф': 'f', 'х': 'h', 'ц': 'c', 'ч': 'ch', 'ш': 'sh', 'щ': 'sh', 'ъ': '', |
|||
'ы': 'y', 'ь': '', 'э': 'e', 'ю': 'yu', 'я': 'ya', |
|||
'А': 'A', 'Б': 'B', 'В': 'V', 'Г': 'G', 'Д': 'D', 'Е': 'E', 'Ё': 'Yo', |
|||
'Ж': 'Zh', 'З': 'Z', 'И': 'I', 'Й': 'J', 'К': 'K', 'Л': 'L', 'М': 'M', |
|||
'Н': 'N', 'О': 'O', 'П': 'P', 'Р': 'R', 'С': 'S', 'Т': 'T', 'У': 'U', |
|||
'Ф': 'F', 'Х': 'H', 'Ц': 'C', 'Ч': 'Ch', 'Ш': 'Sh', 'Щ': 'Sh', 'Ъ': '', |
|||
'Ы': 'Y', 'Ь': '', 'Э': 'E', 'Ю': 'Yu', 'Я': 'Ya' |
|||
}; |
|||
var UKRAINIAN_MAP = { |
|||
'Є': 'Ye', 'І': 'I', 'Ї': 'Yi', 'Ґ': 'G', 'є': 'ye', 'і': 'i', |
|||
'ї': 'yi', 'ґ': 'g' |
|||
}; |
|||
var CZECH_MAP = { |
|||
'č': 'c', 'ď': 'd', 'ě': 'e', 'ň': 'n', 'ř': 'r', 'š': 's', 'ť': 't', |
|||
'ů': 'u', 'ž': 'z', 'Č': 'C', 'Ď': 'D', 'Ě': 'E', 'Ň': 'N', 'Ř': 'R', |
|||
'Š': 'S', 'Ť': 'T', 'Ů': 'U', 'Ž': 'Z' |
|||
}; |
|||
var SLOVAK_MAP = { |
|||
'á': 'a', 'ä': 'a', 'č': 'c', 'ď': 'd', 'é': 'e', 'í': 'i', 'ľ': 'l', |
|||
'ĺ': 'l', 'ň': 'n', 'ó': 'o', 'ô': 'o', 'ŕ': 'r', 'š': 's', 'ť': 't', |
|||
'ú': 'u', 'ý': 'y', 'ž': 'z', |
|||
'Á': 'a', 'Ä': 'A', 'Č': 'C', 'Ď': 'D', 'É': 'E', 'Í': 'I', 'Ľ': 'L', |
|||
'Ĺ': 'L', 'Ň': 'N', 'Ó': 'O', 'Ô': 'O', 'Ŕ': 'R', 'Š': 'S', 'Ť': 'T', |
|||
'Ú': 'U', 'Ý': 'Y', 'Ž': 'Z' |
|||
}; |
|||
var POLISH_MAP = { |
|||
'ą': 'a', 'ć': 'c', 'ę': 'e', 'ł': 'l', 'ń': 'n', 'ó': 'o', 'ś': 's', |
|||
'ź': 'z', 'ż': 'z', |
|||
'Ą': 'A', 'Ć': 'C', 'Ę': 'E', 'Ł': 'L', 'Ń': 'N', 'Ó': 'O', 'Ś': 'S', |
|||
'Ź': 'Z', 'Ż': 'Z' |
|||
}; |
|||
var LATVIAN_MAP = { |
|||
'ā': 'a', 'č': 'c', 'ē': 'e', 'ģ': 'g', 'ī': 'i', 'ķ': 'k', 'ļ': 'l', |
|||
'ņ': 'n', 'š': 's', 'ū': 'u', 'ž': 'z', |
|||
'Ā': 'A', 'Č': 'C', 'Ē': 'E', 'Ģ': 'G', 'Ī': 'I', 'Ķ': 'K', 'Ļ': 'L', |
|||
'Ņ': 'N', 'Š': 'S', 'Ū': 'U', 'Ž': 'Z' |
|||
}; |
|||
var ARABIC_MAP = { |
|||
'أ': 'a', 'ب': 'b', 'ت': 't', 'ث': 'th', 'ج': 'g', 'ح': 'h', 'خ': 'kh', 'د': 'd', |
|||
'ذ': 'th', 'ر': 'r', 'ز': 'z', 'س': 's', 'ش': 'sh', 'ص': 's', 'ض': 'd', 'ط': 't', |
|||
'ظ': 'th', 'ع': 'aa', 'غ': 'gh', 'ف': 'f', 'ق': 'k', 'ك': 'k', 'ل': 'l', 'م': 'm', |
|||
'ن': 'n', 'ه': 'h', 'و': 'o', 'ي': 'y' |
|||
}; |
|||
var LITHUANIAN_MAP = { |
|||
'ą': 'a', 'č': 'c', 'ę': 'e', 'ė': 'e', 'į': 'i', 'š': 's', 'ų': 'u', |
|||
'ū': 'u', 'ž': 'z', |
|||
'Ą': 'A', 'Č': 'C', 'Ę': 'E', 'Ė': 'E', 'Į': 'I', 'Š': 'S', 'Ų': 'U', |
|||
'Ū': 'U', 'Ž': 'Z' |
|||
}; |
|||
var SERBIAN_MAP = { |
|||
'ђ': 'dj', 'ј': 'j', 'љ': 'lj', 'њ': 'nj', 'ћ': 'c', 'џ': 'dz', |
|||
'đ': 'dj', 'Ђ': 'Dj', 'Ј': 'j', 'Љ': 'Lj', 'Њ': 'Nj', 'Ћ': 'C', |
|||
'Џ': 'Dz', 'Đ': 'Dj' |
|||
}; |
|||
var AZERBAIJANI_MAP = { |
|||
'ç': 'c', 'ə': 'e', 'ğ': 'g', 'ı': 'i', 'ö': 'o', 'ş': 's', 'ü': 'u', |
|||
'Ç': 'C', 'Ə': 'E', 'Ğ': 'G', 'İ': 'I', 'Ö': 'O', 'Ş': 'S', 'Ü': 'U' |
|||
}; |
|||
var GEORGIAN_MAP = { |
|||
'ა': 'a', 'ბ': 'b', 'გ': 'g', 'დ': 'd', 'ე': 'e', 'ვ': 'v', 'ზ': 'z', |
|||
'თ': 't', 'ი': 'i', 'კ': 'k', 'ლ': 'l', 'მ': 'm', 'ნ': 'n', 'ო': 'o', |
|||
'პ': 'p', 'ჟ': 'j', 'რ': 'r', 'ს': 's', 'ტ': 't', 'უ': 'u', 'ფ': 'f', |
|||
'ქ': 'q', 'ღ': 'g', 'ყ': 'y', 'შ': 'sh', 'ჩ': 'ch', 'ც': 'c', 'ძ': 'dz', |
|||
'წ': 'w', 'ჭ': 'ch', 'ხ': 'x', 'ჯ': 'j', 'ჰ': 'h' |
|||
}; |
|||
|
|||
var ALL_DOWNCODE_MAPS = [ |
|||
LATIN_MAP, |
|||
LATIN_SYMBOLS_MAP, |
|||
GREEK_MAP, |
|||
TURKISH_MAP, |
|||
ROMANIAN_MAP, |
|||
RUSSIAN_MAP, |
|||
UKRAINIAN_MAP, |
|||
CZECH_MAP, |
|||
SLOVAK_MAP, |
|||
POLISH_MAP, |
|||
LATVIAN_MAP, |
|||
ARABIC_MAP, |
|||
LITHUANIAN_MAP, |
|||
SERBIAN_MAP, |
|||
AZERBAIJANI_MAP, |
|||
GEORGIAN_MAP |
|||
]; |
|||
|
|||
var Downcoder = { |
|||
'Initialize': function() { |
|||
if (Downcoder.map) { // already made
|
|||
return; |
|||
} |
|||
Downcoder.map = {}; |
|||
Downcoder.chars = []; |
|||
for (var i = 0; i < ALL_DOWNCODE_MAPS.length; i++) { |
|||
var lookup = ALL_DOWNCODE_MAPS[i]; |
|||
for (var c in lookup) { |
|||
if (lookup.hasOwnProperty(c)) { |
|||
Downcoder.map[c] = lookup[c]; |
|||
} |
|||
} |
|||
} |
|||
for (var k in Downcoder.map) { |
|||
if (Downcoder.map.hasOwnProperty(k)) { |
|||
Downcoder.chars.push(k); |
|||
} |
|||
} |
|||
Downcoder.regex = new RegExp(Downcoder.chars.join('|'), 'g'); |
|||
} |
|||
}; |
|||
|
|||
function downcode(slug) { |
|||
Downcoder.Initialize(); |
|||
return slug.replace(Downcoder.regex, function(m) { |
|||
return Downcoder.map[m]; |
|||
}); |
|||
} |
|||
|
|||
|
|||
function URLify(s, num_chars, allowUnicode) { |
|||
// changes, e.g., "Petty theft" to "petty-theft"
|
|||
// remove all these words from the string before urlifying
|
|||
if (!allowUnicode) { |
|||
s = downcode(s); |
|||
} |
|||
var hasUnicodeChars = /[^\u0000-\u007f]/.test(s); |
|||
// Remove English words only if the string contains ASCII (English)
|
|||
// characters.
|
|||
if (!hasUnicodeChars) { |
|||
var removeList = [ |
|||
"a", "an", "as", "at", "before", "but", "by", "for", "from", |
|||
"is", "in", "into", "like", "of", "off", "on", "onto", "per", |
|||
"since", "than", "the", "this", "that", "to", "up", "via", |
|||
"with" |
|||
]; |
|||
var r = new RegExp('\\b(' + removeList.join('|') + ')\\b', 'gi'); |
|||
s = s.replace(r, ''); |
|||
} |
|||
// if downcode doesn't hit, the char will be stripped here
|
|||
if (allowUnicode) { |
|||
// Keep Unicode letters including both lowercase and uppercase
|
|||
// characters, whitespace, and dash; remove other characters.
|
|||
s = XRegExp.replace(s, XRegExp('[^-_\\p{L}\\p{N}\\s]', 'g'), ''); |
|||
} else { |
|||
s = s.replace(/[^-\w\s]/g, ''); // remove unneeded chars
|
|||
} |
|||
s = s.replace(/^\s+|\s+$/g, ''); // trim leading/trailing spaces
|
|||
s = s.replace(/[-\s]+/g, '-'); // convert spaces to hyphens
|
|||
s = s.substring(0, num_chars); // trim to first num_chars chars
|
|||
s = s.replace(/-+$/g, ''); // trim any trailing hyphens
|
|||
return s.toLowerCase(); // convert to lowercase
|
|||
} |
|||
window.URLify = URLify; |
|||
})(); |
|||
@ -1,26 +0,0 @@ |
|||
Copyright jQuery Foundation and other contributors, https://jquery.org/ |
|||
|
|||
This software consists of voluntary contributions made by many |
|||
individuals. For exact contribution history, see the revision history |
|||
available at https://github.com/jquery/jquery |
|||
|
|||
==== |
|||
|
|||
Permission is hereby granted, free of charge, to any person obtaining |
|||
a copy of this software and associated documentation files (the |
|||
"Software"), to deal in the Software without restriction, including |
|||
without limitation the rights to use, copy, modify, merge, publish, |
|||
distribute, sublicense, and/or sell copies of the Software, and to |
|||
permit persons to whom the Software is furnished to do so, subject to |
|||
the following conditions: |
|||
|
|||
The above copyright notice and this permission notice shall be |
|||
included in all copies or substantial portions of the Software. |
|||
|
|||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, |
|||
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF |
|||
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND |
|||
NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE |
|||
LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION |
|||
OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION |
|||
WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. |
|||