Compare commits
414 Commits
patrick-cr
...
6e57c28d4b
| Author | SHA1 | Date | |
|---|---|---|---|
| 6e57c28d4b | |||
| 153e937bfe | |||
| 719774dcf4 | |||
| bdad7a38b1 | |||
| 094d7bed13 | |||
| 8d4f899184 | |||
| 245679da83 | |||
| a724d07b96 | |||
| e6b6bdbf12 | |||
| ec3c15e5a1 | |||
| a3ffde3206 | |||
| 2b25ad30af | |||
|
|
b5af399ca1 | ||
|
|
1ebc551370 | ||
|
|
b7aaedba14 | ||
| 7b16f85dd1 | |||
| 0a67502dc5 | |||
| 34ec726c10 | |||
| 54f9394673 | |||
| fc8de40524 | |||
| fb3466ff63 | |||
| cd9c81cfc2 | |||
| 83cbf037fc | |||
| 484dce8305 | |||
| 1a47dd2165 | |||
| 1b73b94e07 | |||
| 7b78368eb0 | |||
| 8939fe5776 | |||
| 96b2549503 | |||
| 60f231d908 | |||
| 42b80bd143 | |||
| 15e8ffc3c8 | |||
| ead98785de | |||
| 0ae2c86e90 | |||
| f107c3dd13 | |||
| d975477705 | |||
| 022e8537c5 | |||
| 6bc265bdd8 | |||
| 5922340ebc | |||
| c9c33d780f | |||
| 7a7ddc034b | |||
| 4f57e01326 | |||
| aef9a0871b | |||
| 14617e5492 | |||
| 4ee9b3eaa5 | |||
| faad8635e5 | |||
| ed9d115361 | |||
| b24a17b3b6 | |||
| c0fe059e78 | |||
| 4c669c0fb6 | |||
| 3db68f4bf4 | |||
| 77d18cf58c | |||
| dc263ee28c | |||
| 97c01c4a97 | |||
| c6684122ea | |||
| 5b0b071564 | |||
| 4e278fccab | |||
| e17d12a079 | |||
| 1cfe36197f | |||
| 2e55fae418 | |||
| c15d60ac6a | |||
| e98da4426a | |||
| 97f2425434 | |||
| 3adc98144f | |||
| 1f3fc92f6b | |||
| 0ee85a2a77 | |||
| 6bbb92e9a9 | |||
| 23544cbaff | |||
| 58b74bdfab | |||
| f6ffcd37da | |||
| 3fd408846e | |||
| 591b757a8e | |||
| bc105eefcd | |||
| 2bc64cdc5b | |||
| ace625a530 | |||
| b1e02bbf0a | |||
| ad74ae2c51 | |||
| e68c2eca63 | |||
| 8121a45ead | |||
| c2b6dfa3e4 | |||
| a7ee650729 | |||
| 6d5694a153 | |||
| c897b5be08 | |||
| fcf63d8bf9 | |||
| f0d0c44fd6 | |||
| f999a98d7c | |||
| 9b05663cf5 | |||
| 532b834629 | |||
| 57b3e2144e | |||
| 5cac8f8275 | |||
| dd401538d3 | |||
| 08a0f43fff | |||
| 9663df15d3 | |||
| bf13b1ebd2 | |||
| e80094f1bf | |||
| 2138f6da24 | |||
| be234907cc | |||
| 0455c6ec62 | |||
| f82582a449 | |||
| 8c9f9702d7 | |||
| 8feb25d7f7 | |||
| c70f6228bd | |||
| eb232b7f56 | |||
| 4bf74ded5a | |||
| f0763d2c05 | |||
| a7d951dbab | |||
| 13d7969532 | |||
| f121239d31 | |||
| 4134ad67d5 | |||
| d8dec47c6a | |||
| 2f94b0f510 | |||
| 9408208ed6 | |||
| 555f4ebe49 | |||
|
|
3419f8b044 | ||
| baa0845344 | |||
| 2990cfd2cd | |||
| 797ff84b32 | |||
| 4d8088fb3e | |||
| 65b0e2494c | |||
| c831000fae | |||
| 2c80bb3c88 | |||
| 1bb359b322 | |||
| 18f73b5f21 | |||
| a4cba458ee | |||
| ce97a5f27e | |||
| de14fdc9d3 | |||
| dcc9f13804 | |||
| c219059cb3 | |||
| 0483c9b7dc | |||
| 36627adb94 | |||
| 04f878dd9f | |||
| 3f8241cc63 | |||
| 8dd9ab1511 | |||
| 99b06b78a5 | |||
| ec3c11467f | |||
| d1c235f7cb | |||
| a23321a98b | |||
| 491a81aece | |||
| 53d099a55c | |||
| c16bcb9291 | |||
| 327b84d137 | |||
| 89eb72f8c1 | |||
| 9359a1ae52 | |||
| 9f21a16ab3 | |||
| 8512c82d3f | |||
| 6248a5343a | |||
| a6bb11d64d | |||
| 3991895ac2 | |||
| d91f4c6228 | |||
| 2f4a53d1ce | |||
| 35749c2ff6 | |||
| f22de7d919 | |||
| 3e2d124a63 | |||
| 21aaef068b | |||
| 803610ea5e | |||
| f58006f6c6 | |||
| 3e2022f353 | |||
| 7ca73f65f8 | |||
| 762cda8b20 | |||
| 5f5414f29a | |||
| 2eadadc452 | |||
| c0301d97fe | |||
| 0f2e3a0d8a | |||
| 938c3e1bdd | |||
| 906c3da007 | |||
| 798dba3fe6 | |||
| aa2d8b385f | |||
| aa5e45c430 | |||
| d11dc8d7fe | |||
| ced2a1dfab | |||
| 706b711d22 | |||
| 56cec2bc44 | |||
| 7f139b2172 | |||
| d73d7b329f | |||
| da3586b38e | |||
| ff78e823db | |||
| bcf8956c05 | |||
| 77811f4017 | |||
| 5db1887e40 | |||
| 0091339014 | |||
| 51d6a89d11 | |||
| 28d37933cd | |||
| f01eb87f08 | |||
| 4b01e89265 | |||
| 9292eaf1cf | |||
| d11dace81f | |||
| d560f56d86 | |||
| 8c6685a12c | |||
| 1b9a6aeec3 | |||
| d83f14894c | |||
| 4bb673f096 | |||
| 5ce1b3b4f9 | |||
| 54e8675b15 | |||
| e2cb2c8a90 | |||
| 45279aac8d | |||
| d54a632d67 | |||
| fee676d0c5 | |||
| 8073215888 | |||
| a0fd1844f2 | |||
| 8c17506a4b | |||
| c9d4a09203 | |||
| dab1391a07 | |||
| 0682df6472 | |||
| 3f9e41a7e7 | |||
| 46d715d96e | |||
| 21abfa5eda | |||
| eb782d879c | |||
| cdb36aaf1a | |||
| 48f36b54f7 | |||
| c01d4bb4a4 | |||
| ec7e225783 | |||
| d2ffadf96a | |||
| 39247b3e46 | |||
| 2ff9b47983 | |||
| e648a45aa9 | |||
| 16fa0064dd | |||
| 12b8d13a45 | |||
| 178cb9e53f | |||
| 3c387c22c6 | |||
| 71117b8e63 | |||
| b4a288be0a | |||
| 6f94bceb08 | |||
| 13f7080503 | |||
| 0a3e343adb | |||
| 37b9375389 | |||
| 082ad8f0b9 | |||
| 1c6c850689 | |||
| b12e7d8f16 | |||
| 93a5be82a8 | |||
| a7b1033a87 | |||
| b6cd9d5b16 | |||
| 9433a58a0b | |||
| 17741daeb9 | |||
| 403684d558 | |||
| dc1a5bc405 | |||
| 49d904c49d | |||
| 3dc5d43d21 | |||
| bde7b72d40 | |||
| a290ba8c9f | |||
| 6a1b576bbe | |||
| 4a6be8f75e | |||
| 5a1222187a | |||
| afa05afcc0 | |||
| 76eba4392e | |||
| 3a7d87c3eb | |||
| c8fd414f8c | |||
| faf80d59f0 | |||
| 9f37ab1097 | |||
| d23b4ef87b | |||
| 63679973f7 | |||
| 91c5cd9dfc | |||
| 0616849a6d | |||
| 67917dd05c | |||
| 308461b0c0 | |||
| 047eac7b5c | |||
| 647544b460 | |||
| 7d2091b0a9 | |||
| eeeeaa50dc | |||
| 35bae02f48 | |||
| 51a233ce92 | |||
| f4991b863d | |||
| 59c546a035 | |||
| 7abc6f1d0d | |||
| 3107cd0806 | |||
| 61b68ec8ea | |||
| eb0b4af9d7 | |||
| 0d17f30d72 | |||
| 70b017af9e | |||
| 3cfab5e13e | |||
| 24ceef1c7c | |||
| 3d12454700 | |||
| a6d2c43a6c | |||
| a3d5e28ccd | |||
| ecf2871ba8 | |||
| db01cb3a9c | |||
| 842c19ad65 | |||
| 2a2b8909db | |||
| 0fcead7454 | |||
| d38a76a341 | |||
| cae5221581 | |||
| 503bbe8237 | |||
| 97d0fa97a2 | |||
| 2dfaf326f1 | |||
| db0b3b3b41 | |||
| 18c114a1c5 | |||
| c05993dcba | |||
| 19e272e9be | |||
| d921336ff9 | |||
| 5c1d62c9f6 | |||
| 294bffdef4 | |||
| 478619c1dd | |||
| c69a4469da | |||
| cd8eb957ec | |||
| ffd9281df7 | |||
| 6f7eab8c38 | |||
| c5a67ad37c | |||
| 0a0282cdfa | |||
| 3d854c0617 | |||
| 46836370ef | |||
| 69b8b926c7 | |||
| 6a32504e59 | |||
| ea567f5a89 | |||
| d4edec9a09 | |||
| 92ef3b3fae | |||
| 67dd93dd2b | |||
| 3c0810d9a9 | |||
| a04e4018c8 | |||
| 5b52470f87 | |||
| 1fc063a378 | |||
| 2622e82500 | |||
| 3b9be918bf | |||
| a44fc0bfcb | |||
| d85e81b184 | |||
| c32619b703 | |||
| 2b3302d9c4 | |||
| eca6d68dc3 | |||
| 771eaa3917 | |||
| b47aa54ffe | |||
| f42e47a650 | |||
| 274257ff58 | |||
| cd28dd177d | |||
| eba93d87b1 | |||
| b5f274328f | |||
| 5a8d993cbb | |||
| a2ae24d0ae | |||
| 0ee942e296 | |||
| 7fb89158a9 | |||
| b48a817e8c | |||
| e213f41bb7 | |||
| af7dbe74f3 | |||
| 1ca5049a06 | |||
| 8c8d53a238 | |||
| 632a097a25 | |||
| 641d435d4e | |||
| 3793aa914c | |||
| 7ab97c91b7 | |||
| 1a3f87ef9e | |||
| 851c10c274 | |||
| 0e0aeee5f0 | |||
| 7365009e0f | |||
| a803c97307 | |||
| afe4235a8f | |||
| c8daeb043e | |||
| 83debd3824 | |||
| 9a7245294b | |||
| 78e5f03830 | |||
| 55df4f266a | |||
| b0dfe25ac5 | |||
| e8a772ea7f | |||
| 077f70bf9f | |||
| b2573b398e | |||
| 8007480ed7 | |||
| 3de3e2780e | |||
| c0f85896f0 | |||
| 593f9025a1 | |||
| fe83d69453 | |||
| 3c54be75d6 | |||
| 9b0a2cd70c | |||
| c10091a9c9 | |||
| 2a01717033 | |||
| 191ffc682f | |||
| a3f9965d87 | |||
| 131b5580c4 | |||
| 5d0a31d7f0 | |||
| 830c7b7616 | |||
| 96d78f0f32 | |||
| 6a3354c5c2 | |||
| 9f7e4f3659 | |||
| 2b52e6433b | |||
| df7b804b2b | |||
| 3e8ffe058d | |||
| ee2bbdb4b8 | |||
| 25f60c5dbf | |||
| d85728858f | |||
| 081d612bff | |||
| dcdbb6ea68 | |||
| 35453ffe8b | |||
| 66b5bc1603 | |||
| 9a59727124 | |||
| 02130df21f | |||
| a8c52bdf7b | |||
| a62ec0c2cb | |||
| 75cad5cc4c | |||
| 7a5b888152 | |||
| e333bae8ca | |||
| 608277f7de | |||
| c83e9fb93b | |||
| c609e7de5b | |||
| e019ec9965 | |||
| 0470900951 | |||
| c2f3feb9b7 | |||
| f75cdcdae7 | |||
| dc3bdb59a3 | |||
| eef6b59f9b | |||
| bc69f366df | |||
| 916e7caaa5 | |||
| 76804d6c2a | |||
| 881eec0ec7 | |||
| 44e9dddf23 | |||
| 8ce674e2de | |||
| 53ca22f003 | |||
| f55b67e20f | |||
| 94c8fb7326 | |||
| 9018fda102 | |||
| ee357cae28 | |||
| f48c6439d0 | |||
| f2e45d85cc | |||
| 77d6536c61 | |||
| 6d72c7a2d3 | |||
| 8dfa69cf8d | |||
| ce7529e871 | |||
| 7dd6a91658 | |||
| 0cef42afbe | |||
| 9149a6c690 |
@@ -1,6 +0,0 @@
|
|||||||
DEBUG=FALSE
|
|
||||||
HOST_NAME=uat1.2020.fet.at
|
|
||||||
SECRET_KEY=235t3groing43qo4ntgigon43qgi3q4gong
|
|
||||||
MYSQL_USER=user
|
|
||||||
MYSQL_PASSWORD=hgu
|
|
||||||
MYSQL_PORT=3306
|
|
||||||
11
.gitignore
vendored
@@ -1,7 +1,6 @@
|
|||||||
.env/*
|
.env/*
|
||||||
*.pyc
|
*.pyc
|
||||||
*_design1
|
*_design1
|
||||||
fet2020/files/*
|
|
||||||
fet2020/.env/*
|
fet2020/.env/*
|
||||||
*.sqlite3
|
*.sqlite3
|
||||||
.theia/*
|
.theia/*
|
||||||
@@ -11,4 +10,12 @@ run
|
|||||||
*.pid
|
*.pid
|
||||||
*~
|
*~
|
||||||
APIKEY.txt
|
APIKEY.txt
|
||||||
tmp
|
tmp
|
||||||
|
.ruff_cache
|
||||||
|
.venv
|
||||||
|
etherpad
|
||||||
|
files
|
||||||
|
flowbite
|
||||||
|
gallery
|
||||||
|
tailwind
|
||||||
|
whoosh_index
|
||||||
|
|||||||
@@ -1,17 +0,0 @@
|
|||||||
{
|
|
||||||
"folders": [
|
|
||||||
|
|
||||||
{
|
|
||||||
"path": "fet2020"
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"settings": {
|
|
||||||
"launch": {},
|
|
||||||
"python.linting.flake8Enabled": true,
|
|
||||||
"python.linting.banditEnabled": true,
|
|
||||||
"python.testing.pytestEnabled": true,
|
|
||||||
"python.linting.flake8Args": [
|
|
||||||
"--max-line-length=100"
|
|
||||||
]
|
|
||||||
}
|
|
||||||
}
|
|
||||||
34
Dockerfile
@@ -5,13 +5,43 @@ RUN python -m venv /opt/venv
|
|||||||
ENV PATH="/opt/venv/bin:$PATH"
|
ENV PATH="/opt/venv/bin:$PATH"
|
||||||
|
|
||||||
RUN apk add --no-cache --virtual .build-deps ca-certificates gcc linux-headers \
|
RUN apk add --no-cache --virtual .build-deps ca-certificates gcc linux-headers \
|
||||||
musl-dev jpeg-dev zlib-dev libffi-dev mysql mariadb-dev freetype-dev\
|
musl-dev \
|
||||||
&& pip install --upgrade pip
|
jpeg-dev \
|
||||||
|
zlib-dev \
|
||||||
|
libffi-dev \
|
||||||
|
mysql \
|
||||||
|
mariadb-dev \
|
||||||
|
freetype-dev \
|
||||||
|
# install for pymupdf
|
||||||
|
# && apk add --no-cache \
|
||||||
|
# libffi-dev \
|
||||||
|
# zlib-dev \
|
||||||
|
# freetype-dev \
|
||||||
|
# make \
|
||||||
|
# build-base \
|
||||||
|
# gcc \
|
||||||
|
# jbig2dec \
|
||||||
|
# jpeg-dev \
|
||||||
|
# harfbuzz-dev \
|
||||||
|
# libc-dev \
|
||||||
|
# mupdf-dev \
|
||||||
|
# musl-dev \
|
||||||
|
# openjpeg-dev \
|
||||||
|
# swig \
|
||||||
|
# && ln -s /usr/lib/libjbig2dec.so.0 /usr/lib/libjbig2dec.so \
|
||||||
|
# && pip install pymupdf==1.23.18 \
|
||||||
|
# upgrade pip
|
||||||
|
&& pip install --upgrade pip
|
||||||
|
|
||||||
|
# setting for pymupdf
|
||||||
|
# ENV PYMUPDF_SETUP_MUPDF_TESSERACT="0"
|
||||||
|
|
||||||
COPY ./fet2020/requirements.txt /app/requirements.txt
|
COPY ./fet2020/requirements.txt /app/requirements.txt
|
||||||
|
|
||||||
RUN pip install -r requirements.txt
|
RUN pip install -r requirements.txt
|
||||||
|
|
||||||
|
# Remove virtual environment dependencies
|
||||||
|
# RUN apk del .builddeps
|
||||||
|
|
||||||
FROM tiangolo/uwsgi-nginx:python3.8-alpine
|
FROM tiangolo/uwsgi-nginx:python3.8-alpine
|
||||||
|
|
||||||
|
|||||||
213
Readme.md
@@ -1,61 +1,152 @@
|
|||||||
##Fet 2020 Django Project
|
# Fet 2020 Django Project
|
||||||
|
|
||||||
Diese Webseite ist im Jahr 2020 entwickelt worden. Wir haben dazu einige Designentscheidungen getroffen:
|
Diese Webseite ist im Jahr 2020 entwickelt worden. Wir haben dazu einige Designentscheidungen getroffen:
|
||||||
1. Zunächst auf die externen Kernfunktionen fokusieren
|
|
||||||
2. Python+Django nutzen weil:
|
1. Zunächst auf die externen Kernfunktionen fokussieren
|
||||||
* Wir Python mögen
|
2. Python + Django nutzen weil:
|
||||||
* Das Framework uns freiheit gibt zB die Mitglieder Daten entsprechend abzubilden
|
* wir Python mögen
|
||||||
* Das Design unabhängig von der Funktion bleibt
|
* das Framework uns die Freiheit gibt, zB die Mitglieder Daten entsprechend abzubilden
|
||||||
* und einiges mehr
|
* das Design unabhängig von der Funktion bleibt
|
||||||
3. Als Kernfunktionen festgelegt wurden anfangs:
|
* und einiges mehr
|
||||||
* Neuigkeiten posten
|
3. Als Kernfunktionen festgelegt wurden anfangs:
|
||||||
* FET Sitzungen ankündigen
|
* Neuigkeiten posten
|
||||||
* Etherpad für Agenda und Protokoll
|
* FET Sitzungen ankündigen
|
||||||
* Informationen zu Mitgliedern anzeigen
|
* Etherpad für Agenda und Protokoll
|
||||||
4. Unter dem Eindruck eines Jahres des Lockdown wurde zusätzlich hinzugefügt
|
* Informationen zu Mitgliedern anzeigen
|
||||||
* Ein virtuelles Schwarzesbrett
|
4. Unter dem Eindruck eines Jahres des Lockdown wurde zusätzlich hinzugefügt
|
||||||
* Eine virtuelle Aufgabenliste
|
* Ein virtuelles Schwarzesbrett
|
||||||
|
|
||||||
### Ablage und Entwicklung
|
## Development
|
||||||
Der Master liegt auf dem virtuellen git Server und kann wie folgt geholt werden:
|
|
||||||
```bash
|
The main branch is hosted on the FET git server. Clone the repository using the following command:
|
||||||
git clone https://git.fet.at/bofh/fet2020
|
|
||||||
```
|
```bash
|
||||||
### Deployment
|
git clone https://git.fet.at/bofh/fet2020
|
||||||
|
```
|
||||||
{{docker-compose.yml}}
|
|
||||||
<code>
|
## Debug
|
||||||
docker-compose up
|
|
||||||
</code>
|
If you are developing on Windows, install Visual Studio Code and Docker Desktop.
|
||||||
|
|
||||||
### Command Befehle
|
Add a local user/member for login because the project is not connected to FET LDAP in dev mode:
|
||||||
|
|
||||||
Erstellt die fehlenden Thumbs für die Alben in der Galerie:
|
```bash
|
||||||
<code>
|
python manage.py createsuperuser
|
||||||
python3 fet2020/manage.py create_thumbs
|
```
|
||||||
</code>
|
|
||||||
|
### Python version
|
||||||
Erstellt alle Searchindexes neu:
|
|
||||||
<code>
|
View all python versions:
|
||||||
python3 fet2020/manage.py rebuild_index
|
|
||||||
</code>
|
```bash
|
||||||
|
uv python list
|
||||||
Aktualisiert alle Searchindexes:
|
```
|
||||||
<code>
|
|
||||||
python3 fet2020/manage.py update_index
|
Installing Python executables:
|
||||||
</code>
|
|
||||||
|
```bash
|
||||||
Fügt alle Cronjobs in diesem Projekt hinzu:
|
uv python install $(.python-version) --default
|
||||||
<code>
|
```
|
||||||
python3 fet2020/manage.py crontab add
|
|
||||||
</code>
|
Update the following files if the python version is increased:
|
||||||
|
|
||||||
Fügt alle Staticfiles in die Assets hinzu:
|
* .python-version
|
||||||
<code>
|
* pyproject.toml
|
||||||
python3 fet2020/manage.py collectstatic
|
* run-pre-commit.sh
|
||||||
</code>
|
|
||||||
|
## Deployment
|
||||||
Überprüft, ob die Software bereit für die Produktion ist.
|
|
||||||
<code>
|
### Docker image for django
|
||||||
python3 fet2020/manage.py check --deploy
|
|
||||||
</code>
|
Makemigrations:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
python fet2020/manage.py makemigrations blackboard core finance gallery members posts rental
|
||||||
|
```
|
||||||
|
|
||||||
|
```bash
|
||||||
|
python fet2020/manage.py makemigrations intern
|
||||||
|
```
|
||||||
|
|
||||||
|
Add all static files to the assets:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
python fet2020/manage.py collectstatic
|
||||||
|
```
|
||||||
|
|
||||||
|
Check if the project is for deployment:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
python fet2020/manage.py check --deploy
|
||||||
|
```
|
||||||
|
|
||||||
|
Build the docker image of django project:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
docker build -t django-image -f fet2020/Dockerfile ./fet2020
|
||||||
|
```
|
||||||
|
|
||||||
|
### Docker image for nginx
|
||||||
|
|
||||||
|
Build the docker image of nginx:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
docker build -t django-nginx-image -f nginx/Dockerfile ./nginx
|
||||||
|
```
|
||||||
|
|
||||||
|
### Start docker container
|
||||||
|
|
||||||
|
Build the docker containers:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
docker compose -f docker-compose.yml up -d
|
||||||
|
```
|
||||||
|
|
||||||
|
Remove all unused docker images older than 24 hours:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
docker image prune -a --filter "until=24h"
|
||||||
|
```
|
||||||
|
|
||||||
|
## Other Useful Commands
|
||||||
|
|
||||||
|
Please use the command carefully! Remove all unused docker volumes:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
docker volume prune -a
|
||||||
|
```
|
||||||
|
|
||||||
|
Rebuilds all search indexes:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
python3 fet2020/manage.py rebuild_index
|
||||||
|
```
|
||||||
|
|
||||||
|
Updates all search indexes:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
python3 fet2020/manage.py update_index
|
||||||
|
```
|
||||||
|
|
||||||
|
## TODO
|
||||||
|
|
||||||
|
ckeditor -> django-prose-editor
|
||||||
|
|
||||||
|
## Version History
|
||||||
|
|
||||||
|
2.2.0
|
||||||
|
|
||||||
|
* Add rental
|
||||||
|
|
||||||
|
2.1.0
|
||||||
|
|
||||||
|
* Add finance system
|
||||||
|
|
||||||
|
2.0.0
|
||||||
|
|
||||||
|
* Update the homepage design
|
||||||
|
* Add intern
|
||||||
|
|
||||||
|
1.0.0
|
||||||
|
|
||||||
|
* First release of the new homepage
|
||||||
|
|||||||
2883
assets/Gallery-3.3.0/package-lock.json
generated
@@ -1,23 +1,23 @@
|
|||||||
MIT License
|
MIT License
|
||||||
|
|
||||||
Copyright © 2013 Sebastian Tschan, https://blueimp.net
|
Copyright © 2013 Sebastian Tschan, https://blueimp.net
|
||||||
|
|
||||||
Swipe implementation based on: https://github.com/thebird/Swipe
|
Swipe implementation based on: https://github.com/thebird/Swipe
|
||||||
Copyright © 2013 Brad Birdsall, https://github.com/thebird
|
Copyright © 2013 Brad Birdsall, https://github.com/thebird
|
||||||
|
|
||||||
Permission is hereby granted, free of charge, to any person obtaining a copy of
|
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
|
this software and associated documentation files (the "Software"), to deal in
|
||||||
the Software without restriction, including without limitation the rights to
|
the Software without restriction, including without limitation the rights to
|
||||||
use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
|
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,
|
the Software, and to permit persons to whom the Software is furnished to do so,
|
||||||
subject to the following conditions:
|
subject to the following conditions:
|
||||||
|
|
||||||
The above copyright notice and this permission notice shall be included in all
|
The above copyright notice and this permission notice shall be included in all
|
||||||
copies or substantial portions of the Software.
|
copies or substantial portions of the Software.
|
||||||
|
|
||||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
|
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
|
||||||
FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
|
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
|
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
|
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.
|
CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||||
3
assets/Gallery-3.4.0/bin/sync-vendor-libs.sh
Normal file
@@ -0,0 +1,3 @@
|
|||||||
|
#!/bin/sh
|
||||||
|
cd "$(dirname "$0")/.."
|
||||||
|
cp node_modules/jquery/dist/jquery.js js/vendor/
|
||||||
@@ -1,97 +1,97 @@
|
|||||||
@charset "UTF-8";
|
@charset "UTF-8";
|
||||||
/*
|
/*
|
||||||
* blueimp Gallery Indicator CSS
|
* blueimp Gallery Indicator CSS
|
||||||
* https://github.com/blueimp/Gallery
|
* https://github.com/blueimp/Gallery
|
||||||
*
|
*
|
||||||
* Copyright 2013, Sebastian Tschan
|
* Copyright 2013, Sebastian Tschan
|
||||||
* https://blueimp.net
|
* https://blueimp.net
|
||||||
*
|
*
|
||||||
* Licensed under the MIT license:
|
* Licensed under the MIT license:
|
||||||
* https://opensource.org/licenses/MIT
|
* https://opensource.org/licenses/MIT
|
||||||
*/
|
*/
|
||||||
|
|
||||||
.blueimp-gallery > .indicator {
|
.blueimp-gallery > .indicator {
|
||||||
position: absolute;
|
position: absolute;
|
||||||
top: auto;
|
top: auto;
|
||||||
right: 15px;
|
right: 15px;
|
||||||
bottom: 15px;
|
bottom: 15px;
|
||||||
left: 15px;
|
left: 15px;
|
||||||
margin: 0 40px;
|
margin: 0 40px;
|
||||||
padding: 0;
|
padding: 0;
|
||||||
list-style: none;
|
list-style: none;
|
||||||
text-align: center;
|
text-align: center;
|
||||||
line-height: 10px;
|
line-height: 10px;
|
||||||
display: none;
|
display: none;
|
||||||
-webkit-user-select: none;
|
-webkit-user-select: none;
|
||||||
-khtml-user-select: none;
|
-khtml-user-select: none;
|
||||||
-moz-user-select: none;
|
-moz-user-select: none;
|
||||||
-ms-user-select: none;
|
-ms-user-select: none;
|
||||||
user-select: none;
|
user-select: none;
|
||||||
}
|
}
|
||||||
.blueimp-gallery > .indicator > li {
|
.blueimp-gallery > .indicator > li {
|
||||||
display: inline-block;
|
display: inline-block;
|
||||||
position: relative;
|
position: relative;
|
||||||
width: 9px;
|
width: 9px;
|
||||||
height: 9px;
|
height: 9px;
|
||||||
margin: 6px 3px 0 3px;
|
margin: 6px 3px 0 3px;
|
||||||
-webkit-box-sizing: content-box;
|
-webkit-box-sizing: content-box;
|
||||||
-moz-box-sizing: content-box;
|
-moz-box-sizing: content-box;
|
||||||
box-sizing: content-box;
|
box-sizing: content-box;
|
||||||
border: 1px solid transparent;
|
border: 1px solid transparent;
|
||||||
background: #ccc;
|
background: #ccc;
|
||||||
background: rgba(255, 255, 255, 0.25) center no-repeat;
|
background: rgba(255, 255, 255, 0.25) center no-repeat;
|
||||||
border-radius: 5px;
|
border-radius: 5px;
|
||||||
box-shadow: 0 0 2px #000;
|
box-shadow: 0 0 2px #000;
|
||||||
opacity: 0.5;
|
opacity: 0.5;
|
||||||
cursor: pointer;
|
cursor: pointer;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* IE7 fixes */
|
/* IE7 fixes */
|
||||||
* + html .blueimp-gallery > .indicator > li {
|
* + html .blueimp-gallery > .indicator > li {
|
||||||
display: inline;
|
display: inline;
|
||||||
}
|
}
|
||||||
|
|
||||||
.blueimp-gallery > .indicator > li:hover,
|
.blueimp-gallery > .indicator > li:hover,
|
||||||
.blueimp-gallery > .indicator > .active {
|
.blueimp-gallery > .indicator > .active {
|
||||||
background-color: #fff;
|
background-color: #fff;
|
||||||
border-color: #fff;
|
border-color: #fff;
|
||||||
opacity: 1;
|
opacity: 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
.blueimp-gallery > .indicator > li:after {
|
.blueimp-gallery > .indicator > li:after {
|
||||||
opacity: 0;
|
opacity: 0;
|
||||||
display: block;
|
display: block;
|
||||||
position: absolute;
|
position: absolute;
|
||||||
content: '';
|
content: '';
|
||||||
top: -5em;
|
top: -5em;
|
||||||
left: 4px;
|
left: 4px;
|
||||||
width: 75px;
|
width: 75px;
|
||||||
height: 75px;
|
height: 75px;
|
||||||
transition: transform 600ms ease-out, opacity 400ms ease-out;
|
transition: transform 600ms ease-out, opacity 400ms ease-out;
|
||||||
transform: translateX(-50%) translateY(0) translateZ(0px);
|
transform: translateX(-50%) translateY(0) translateZ(0px);
|
||||||
pointer-events: none;
|
pointer-events: none;
|
||||||
}
|
}
|
||||||
|
|
||||||
.blueimp-gallery > .indicator > li:hover:after {
|
.blueimp-gallery > .indicator > li:hover:after {
|
||||||
opacity: 1;
|
opacity: 1;
|
||||||
border-radius: 50%;
|
border-radius: 50%;
|
||||||
background: inherit;
|
background: inherit;
|
||||||
transform: translateX(-50%) translateY(-5px) translateZ(0px);
|
transform: translateX(-50%) translateY(-5px) translateZ(0px);
|
||||||
}
|
}
|
||||||
|
|
||||||
.blueimp-gallery > .indicator > .active:after {
|
.blueimp-gallery > .indicator > .active:after {
|
||||||
display: none;
|
display: none;
|
||||||
}
|
}
|
||||||
|
|
||||||
.blueimp-gallery-controls > .indicator {
|
.blueimp-gallery-controls > .indicator {
|
||||||
display: block;
|
display: block;
|
||||||
/* Fix z-index issues (controls behind slide element) on Android: */
|
/* Fix z-index issues (controls behind slide element) on Android: */
|
||||||
-webkit-transform: translateZ(0);
|
-webkit-transform: translateZ(0);
|
||||||
-moz-transform: translateZ(0);
|
-moz-transform: translateZ(0);
|
||||||
-ms-transform: translateZ(0);
|
-ms-transform: translateZ(0);
|
||||||
-o-transform: translateZ(0);
|
-o-transform: translateZ(0);
|
||||||
transform: translateZ(0);
|
transform: translateZ(0);
|
||||||
}
|
}
|
||||||
.blueimp-gallery-single > .indicator {
|
.blueimp-gallery-single > .indicator {
|
||||||
display: none;
|
display: none;
|
||||||
}
|
}
|
||||||
@@ -1,69 +1,69 @@
|
|||||||
@charset "UTF-8";
|
@charset "UTF-8";
|
||||||
/*
|
/*
|
||||||
* blueimp Gallery Video Factory CSS
|
* blueimp Gallery Video Factory CSS
|
||||||
* https://github.com/blueimp/Gallery
|
* https://github.com/blueimp/Gallery
|
||||||
*
|
*
|
||||||
* Copyright 2013, Sebastian Tschan
|
* Copyright 2013, Sebastian Tschan
|
||||||
* https://blueimp.net
|
* https://blueimp.net
|
||||||
*
|
*
|
||||||
* Licensed under the MIT license:
|
* Licensed under the MIT license:
|
||||||
* https://opensource.org/licenses/MIT
|
* https://opensource.org/licenses/MIT
|
||||||
*/
|
*/
|
||||||
|
|
||||||
.blueimp-gallery > .slides > .slide > .video-content > video,
|
.blueimp-gallery > .slides > .slide > .video-content > video,
|
||||||
.blueimp-gallery > .slides > .slide > .video-content > iframe,
|
.blueimp-gallery > .slides > .slide > .video-content > iframe,
|
||||||
.blueimp-gallery > .slides > .slide > .video-content > .video-cover {
|
.blueimp-gallery > .slides > .slide > .video-content > .video-cover {
|
||||||
position: absolute;
|
position: absolute;
|
||||||
top: 0;
|
top: 0;
|
||||||
left: 0;
|
left: 0;
|
||||||
width: 100%;
|
width: 100%;
|
||||||
height: 100%;
|
height: 100%;
|
||||||
border: none;
|
border: none;
|
||||||
}
|
}
|
||||||
.blueimp-gallery > .slides > .slide > .video-content > .video-cover {
|
.blueimp-gallery > .slides > .slide > .video-content > .video-cover {
|
||||||
background: center no-repeat;
|
background: center no-repeat;
|
||||||
background-size: contain;
|
background-size: contain;
|
||||||
}
|
}
|
||||||
.blueimp-gallery > .slides > .slide > .video-iframe > .video-cover {
|
.blueimp-gallery > .slides > .slide > .video-iframe > .video-cover {
|
||||||
background-color: #000;
|
background-color: #000;
|
||||||
background-color: rgba(0, 0, 0, 0.7);
|
background-color: rgba(0, 0, 0, 0.7);
|
||||||
}
|
}
|
||||||
.blueimp-gallery > .slides > .slide > .video-content > .video-play {
|
.blueimp-gallery > .slides > .slide > .video-content > .video-play {
|
||||||
position: absolute;
|
position: absolute;
|
||||||
top: 50%;
|
top: 50%;
|
||||||
right: 0;
|
right: 0;
|
||||||
left: 0;
|
left: 0;
|
||||||
margin: -64px auto 0;
|
margin: -64px auto 0;
|
||||||
width: 128px;
|
width: 128px;
|
||||||
height: 128px;
|
height: 128px;
|
||||||
background: url(../img/video-play.png) center no-repeat;
|
background: url(../img/video-play.png) center no-repeat;
|
||||||
opacity: 0.8;
|
opacity: 0.8;
|
||||||
cursor: pointer;
|
cursor: pointer;
|
||||||
}
|
}
|
||||||
.blueimp-gallery-svgasimg > .slides > .slide > .video-content > .video-play {
|
.blueimp-gallery-svgasimg > .slides > .slide > .video-content > .video-play {
|
||||||
background-image: url(../img/video-play.svg);
|
background-image: url(../img/video-play.svg);
|
||||||
}
|
}
|
||||||
.blueimp-gallery > .slides > .slide > .video-playing > .video-play,
|
.blueimp-gallery > .slides > .slide > .video-playing > .video-play,
|
||||||
.blueimp-gallery > .slides > .slide > .video-playing > .video-cover {
|
.blueimp-gallery > .slides > .slide > .video-playing > .video-cover {
|
||||||
display: none;
|
display: none;
|
||||||
}
|
}
|
||||||
.blueimp-gallery > .slides > .slide > .video-loading > .video-play {
|
.blueimp-gallery > .slides > .slide > .video-loading > .video-play {
|
||||||
background: url(../img/loading.gif) center no-repeat;
|
background: url(../img/loading.gif) center no-repeat;
|
||||||
background-size: 64px 64px;
|
background-size: 64px 64px;
|
||||||
}
|
}
|
||||||
.blueimp-gallery-smil > .slides > .slide > .video-loading > .video-play {
|
.blueimp-gallery-smil > .slides > .slide > .video-loading > .video-play {
|
||||||
background-image: url(../img/loading.svg);
|
background-image: url(../img/loading.svg);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* IE7 fixes */
|
/* IE7 fixes */
|
||||||
* + html .blueimp-gallery > .slides > .slide > .video-content {
|
* + html .blueimp-gallery > .slides > .slide > .video-content {
|
||||||
height: 100%;
|
height: 100%;
|
||||||
}
|
}
|
||||||
* + html .blueimp-gallery > .slides > .slide > .video-content > .video-play {
|
* + html .blueimp-gallery > .slides > .slide > .video-content > .video-play {
|
||||||
left: 50%;
|
left: 50%;
|
||||||
margin-left: -64px;
|
margin-left: -64px;
|
||||||
}
|
}
|
||||||
|
|
||||||
.blueimp-gallery > .slides > .slide > .video-content > .video-play:hover {
|
.blueimp-gallery > .slides > .slide > .video-content > .video-play:hover {
|
||||||
opacity: 1;
|
opacity: 1;
|
||||||
}
|
}
|
||||||
@@ -1,249 +1,249 @@
|
|||||||
@charset "UTF-8";
|
@charset "UTF-8";
|
||||||
/*
|
/*
|
||||||
* blueimp Gallery CSS
|
* blueimp Gallery CSS
|
||||||
* https://github.com/blueimp/Gallery
|
* https://github.com/blueimp/Gallery
|
||||||
*
|
*
|
||||||
* Copyright 2013, Sebastian Tschan
|
* Copyright 2013, Sebastian Tschan
|
||||||
* https://blueimp.net
|
* https://blueimp.net
|
||||||
*
|
*
|
||||||
* Licensed under the MIT license:
|
* Licensed under the MIT license:
|
||||||
* https://opensource.org/licenses/MIT
|
* https://opensource.org/licenses/MIT
|
||||||
*/
|
*/
|
||||||
|
|
||||||
.blueimp-gallery,
|
.blueimp-gallery,
|
||||||
.blueimp-gallery > .slides > .slide > .slide-content,
|
.blueimp-gallery > .slides > .slide > .slide-content,
|
||||||
.blueimp-gallery > .slides > .slide > .slide-content > img {
|
.blueimp-gallery > .slides > .slide > .slide-content > img {
|
||||||
position: absolute;
|
position: absolute;
|
||||||
top: 0;
|
top: 0;
|
||||||
right: 0;
|
right: 0;
|
||||||
bottom: 0;
|
bottom: 0;
|
||||||
left: 0;
|
left: 0;
|
||||||
-webkit-transition: opacity 0.2s linear;
|
-webkit-transition: opacity 0.2s linear;
|
||||||
-moz-transition: opacity 0.2s linear;
|
-moz-transition: opacity 0.2s linear;
|
||||||
-ms-transition: opacity 0.2s linear;
|
-ms-transition: opacity 0.2s linear;
|
||||||
-o-transition: opacity 0.2s linear;
|
-o-transition: opacity 0.2s linear;
|
||||||
transition: opacity 0.2s linear;
|
transition: opacity 0.2s linear;
|
||||||
/* Prevent artifacts in Mozilla Firefox: */
|
/* Prevent artifacts in Mozilla Firefox: */
|
||||||
backface-visibility: hidden;
|
backface-visibility: hidden;
|
||||||
-moz-backface-visibility: hidden;
|
-moz-backface-visibility: hidden;
|
||||||
}
|
}
|
||||||
.blueimp-gallery > .slides > .slide > .slide-content,
|
.blueimp-gallery > .slides > .slide > .slide-content,
|
||||||
.blueimp-gallery > .slides > .slide > .slide-content > img {
|
.blueimp-gallery > .slides > .slide > .slide-content > img {
|
||||||
margin: auto;
|
margin: auto;
|
||||||
width: auto;
|
width: auto;
|
||||||
height: auto;
|
height: auto;
|
||||||
max-width: 100%;
|
max-width: 100%;
|
||||||
max-height: 100%;
|
max-height: 100%;
|
||||||
opacity: 1;
|
opacity: 1;
|
||||||
}
|
}
|
||||||
.blueimp-gallery {
|
.blueimp-gallery {
|
||||||
position: fixed;
|
position: fixed;
|
||||||
z-index: 999999;
|
z-index: 999999;
|
||||||
overflow: hidden;
|
overflow: hidden;
|
||||||
background: #000;
|
background: #000;
|
||||||
opacity: 0;
|
opacity: 0;
|
||||||
display: none;
|
display: none;
|
||||||
direction: ltr;
|
direction: ltr;
|
||||||
-ms-touch-action: pinch-zoom;
|
-ms-touch-action: pinch-zoom;
|
||||||
touch-action: pinch-zoom;
|
touch-action: pinch-zoom;
|
||||||
}
|
}
|
||||||
.blueimp-gallery-carousel {
|
.blueimp-gallery-carousel {
|
||||||
position: relative;
|
position: relative;
|
||||||
z-index: auto;
|
z-index: auto;
|
||||||
margin: 1em auto;
|
margin: 1em auto;
|
||||||
/* Set the carousel width/height ratio to 16/9: */
|
/* Set the carousel width/height ratio to 16/9: */
|
||||||
padding-bottom: 56.25%;
|
padding-bottom: 56.25%;
|
||||||
box-shadow: 0 0 4px rgba(0, 0, 0, 0.1);
|
box-shadow: 0 0 4px rgba(0, 0, 0, 0.1);
|
||||||
-ms-touch-action: pan-y pinch-zoom;
|
-ms-touch-action: pan-y pinch-zoom;
|
||||||
touch-action: pan-y pinch-zoom;
|
touch-action: pan-y pinch-zoom;
|
||||||
display: block;
|
display: block;
|
||||||
}
|
}
|
||||||
.blueimp-gallery-display {
|
.blueimp-gallery-display {
|
||||||
display: block;
|
display: block;
|
||||||
opacity: 1;
|
opacity: 1;
|
||||||
}
|
}
|
||||||
.blueimp-gallery > .slides {
|
.blueimp-gallery > .slides {
|
||||||
position: relative;
|
position: relative;
|
||||||
height: 100%;
|
height: 100%;
|
||||||
overflow: hidden;
|
overflow: hidden;
|
||||||
}
|
}
|
||||||
.blueimp-gallery-carousel > .slides {
|
.blueimp-gallery-carousel > .slides {
|
||||||
position: absolute;
|
position: absolute;
|
||||||
}
|
}
|
||||||
.blueimp-gallery > .slides > .slide {
|
.blueimp-gallery > .slides > .slide {
|
||||||
visibility: hidden;
|
visibility: hidden;
|
||||||
position: relative;
|
position: relative;
|
||||||
float: left;
|
float: left;
|
||||||
height: 100%;
|
height: 100%;
|
||||||
text-align: center;
|
text-align: center;
|
||||||
-webkit-transition-timing-function: cubic-bezier(0.645, 0.045, 0.355, 1);
|
-webkit-transition-timing-function: cubic-bezier(0.645, 0.045, 0.355, 1);
|
||||||
-moz-transition-timing-function: cubic-bezier(0.645, 0.045, 0.355, 1);
|
-moz-transition-timing-function: cubic-bezier(0.645, 0.045, 0.355, 1);
|
||||||
-ms-transition-timing-function: cubic-bezier(0.645, 0.045, 0.355, 1);
|
-ms-transition-timing-function: cubic-bezier(0.645, 0.045, 0.355, 1);
|
||||||
-o-transition-timing-function: cubic-bezier(0.645, 0.045, 0.355, 1);
|
-o-transition-timing-function: cubic-bezier(0.645, 0.045, 0.355, 1);
|
||||||
transition-timing-function: cubic-bezier(0.645, 0.045, 0.355, 1);
|
transition-timing-function: cubic-bezier(0.645, 0.045, 0.355, 1);
|
||||||
}
|
}
|
||||||
.blueimp-gallery > .slides > .slide-prev,
|
.blueimp-gallery > .slides > .slide-prev,
|
||||||
.blueimp-gallery > .slides > .slide-active,
|
.blueimp-gallery > .slides > .slide-active,
|
||||||
.blueimp-gallery > .slides > .slide-next {
|
.blueimp-gallery > .slides > .slide-next {
|
||||||
visibility: visible;
|
visibility: visible;
|
||||||
}
|
}
|
||||||
.blueimp-gallery > .slides > .slide-loading {
|
.blueimp-gallery > .slides > .slide-loading {
|
||||||
background: url(../img/loading.gif) center no-repeat;
|
background: url(../img/loading.gif) center no-repeat;
|
||||||
background-size: 64px 64px;
|
background-size: 64px 64px;
|
||||||
}
|
}
|
||||||
.blueimp-gallery-smil > .slides > .slide-loading {
|
.blueimp-gallery-smil > .slides > .slide-loading {
|
||||||
background-image: url(../img/loading.svg);
|
background-image: url(../img/loading.svg);
|
||||||
}
|
}
|
||||||
.blueimp-gallery > .slides > .slide-loading > .slide-content {
|
.blueimp-gallery > .slides > .slide-loading > .slide-content {
|
||||||
opacity: 0;
|
opacity: 0;
|
||||||
}
|
}
|
||||||
.blueimp-gallery > .slides > .slide-error {
|
.blueimp-gallery > .slides > .slide-error {
|
||||||
background: url(../img/error.png) center no-repeat;
|
background: url(../img/error.png) center no-repeat;
|
||||||
}
|
}
|
||||||
.blueimp-gallery-svgasimg > .slides > .slide-error {
|
.blueimp-gallery-svgasimg > .slides > .slide-error {
|
||||||
background-image: url(../img/error.svg);
|
background-image: url(../img/error.svg);
|
||||||
}
|
}
|
||||||
.blueimp-gallery > .slides > .slide-error > .slide-content {
|
.blueimp-gallery > .slides > .slide-error > .slide-content {
|
||||||
display: none;
|
display: none;
|
||||||
}
|
}
|
||||||
.blueimp-gallery-display > .prev,
|
.blueimp-gallery-display > .prev,
|
||||||
.blueimp-gallery-display > .next {
|
.blueimp-gallery-display > .next {
|
||||||
position: absolute;
|
position: absolute;
|
||||||
top: 50%;
|
top: 50%;
|
||||||
left: 15px;
|
left: 15px;
|
||||||
width: 8px;
|
width: 8px;
|
||||||
height: 20px;
|
height: 20px;
|
||||||
padding: 10px 14px 10px 18px;
|
padding: 10px 14px 10px 18px;
|
||||||
margin-top: -23px;
|
margin-top: -23px;
|
||||||
-webkit-box-sizing: content-box;
|
-webkit-box-sizing: content-box;
|
||||||
-moz-box-sizing: content-box;
|
-moz-box-sizing: content-box;
|
||||||
box-sizing: content-box;
|
box-sizing: content-box;
|
||||||
background: #222 url(../img/prev.png) center no-repeat;
|
background: #222 url(../img/prev.png) center no-repeat;
|
||||||
background-color: rgba(0, 0, 0, 0.5);
|
background-color: rgba(0, 0, 0, 0.5);
|
||||||
border: 3px solid #fff;
|
border: 3px solid #fff;
|
||||||
-webkit-border-radius: 30px;
|
-webkit-border-radius: 30px;
|
||||||
-moz-border-radius: 30px;
|
-moz-border-radius: 30px;
|
||||||
border-radius: 30px;
|
border-radius: 30px;
|
||||||
opacity: 0.5;
|
opacity: 0.5;
|
||||||
cursor: pointer;
|
cursor: pointer;
|
||||||
display: none;
|
display: none;
|
||||||
}
|
}
|
||||||
.blueimp-gallery-display > .next {
|
.blueimp-gallery-display > .next {
|
||||||
right: 15px;
|
right: 15px;
|
||||||
left: auto;
|
left: auto;
|
||||||
background-image: url(../img/next.png);
|
background-image: url(../img/next.png);
|
||||||
}
|
}
|
||||||
.blueimp-gallery-svgasimg > .prev {
|
.blueimp-gallery-svgasimg > .prev {
|
||||||
background-image: url(../img/prev.svg);
|
background-image: url(../img/prev.svg);
|
||||||
}
|
}
|
||||||
.blueimp-gallery-svgasimg > .next {
|
.blueimp-gallery-svgasimg > .next {
|
||||||
background-image: url(../img/next.svg);
|
background-image: url(../img/next.svg);
|
||||||
}
|
}
|
||||||
.blueimp-gallery-display > .close {
|
.blueimp-gallery-display > .close {
|
||||||
position: absolute;
|
position: absolute;
|
||||||
top: 15px;
|
top: 15px;
|
||||||
right: 15px;
|
right: 15px;
|
||||||
width: 30px;
|
width: 30px;
|
||||||
height: 30px;
|
height: 30px;
|
||||||
background: url(../img/close.png) center no-repeat;
|
background: url(../img/close.png) center no-repeat;
|
||||||
opacity: 0.8;
|
opacity: 0.8;
|
||||||
cursor: pointer;
|
cursor: pointer;
|
||||||
display: none;
|
display: none;
|
||||||
}
|
}
|
||||||
.blueimp-gallery-svgasimg > .close {
|
.blueimp-gallery-svgasimg > .close {
|
||||||
background-image: url(../img/close.svg);
|
background-image: url(../img/close.svg);
|
||||||
}
|
}
|
||||||
.blueimp-gallery > .title {
|
.blueimp-gallery > .title {
|
||||||
position: absolute;
|
position: absolute;
|
||||||
top: 15px;
|
top: 15px;
|
||||||
left: 15px;
|
left: 15px;
|
||||||
margin: 0 60px 0 0;
|
margin: 0 60px 0 0;
|
||||||
font-size: 20px;
|
font-size: 20px;
|
||||||
line-height: 30px;
|
line-height: 30px;
|
||||||
color: #fff;
|
color: #fff;
|
||||||
text-shadow: 0 0 2px #000;
|
text-shadow: 0 0 2px #000;
|
||||||
opacity: 0.8;
|
opacity: 0.8;
|
||||||
display: none;
|
display: none;
|
||||||
}
|
}
|
||||||
.blueimp-gallery-display > .play-pause {
|
.blueimp-gallery-display > .play-pause {
|
||||||
position: absolute;
|
position: absolute;
|
||||||
right: 15px;
|
right: 15px;
|
||||||
bottom: 15px;
|
bottom: 15px;
|
||||||
width: 30px;
|
width: 30px;
|
||||||
height: 30px;
|
height: 30px;
|
||||||
background: url(../img/play-pause.png) 0 0 no-repeat;
|
background: url(../img/play-pause.png) 0 0 no-repeat;
|
||||||
cursor: pointer;
|
cursor: pointer;
|
||||||
opacity: 0.5;
|
opacity: 0.5;
|
||||||
display: none;
|
display: none;
|
||||||
}
|
}
|
||||||
.blueimp-gallery-svgasimg > .play-pause {
|
.blueimp-gallery-svgasimg > .play-pause {
|
||||||
background-image: url(../img/play-pause.svg);
|
background-image: url(../img/play-pause.svg);
|
||||||
}
|
}
|
||||||
.blueimp-gallery-playing > .play-pause {
|
.blueimp-gallery-playing > .play-pause {
|
||||||
background-position: -30px 0;
|
background-position: -30px 0;
|
||||||
}
|
}
|
||||||
.blueimp-gallery-controls > .prev,
|
.blueimp-gallery-controls > .prev,
|
||||||
.blueimp-gallery-controls > .next,
|
.blueimp-gallery-controls > .next,
|
||||||
.blueimp-gallery-controls > .close,
|
.blueimp-gallery-controls > .close,
|
||||||
.blueimp-gallery-controls > .title,
|
.blueimp-gallery-controls > .title,
|
||||||
.blueimp-gallery-controls > .play-pause {
|
.blueimp-gallery-controls > .play-pause {
|
||||||
display: block;
|
display: block;
|
||||||
/* Fix z-index issues (controls behind slide element) on Android: */
|
/* Fix z-index issues (controls behind slide element) on Android: */
|
||||||
-webkit-transform: translateZ(0);
|
-webkit-transform: translateZ(0);
|
||||||
-moz-transform: translateZ(0);
|
-moz-transform: translateZ(0);
|
||||||
-ms-transform: translateZ(0);
|
-ms-transform: translateZ(0);
|
||||||
-o-transform: translateZ(0);
|
-o-transform: translateZ(0);
|
||||||
transform: translateZ(0);
|
transform: translateZ(0);
|
||||||
}
|
}
|
||||||
.blueimp-gallery-single > .prev,
|
.blueimp-gallery-single > .prev,
|
||||||
.blueimp-gallery-left > .prev,
|
.blueimp-gallery-left > .prev,
|
||||||
.blueimp-gallery-single > .next,
|
.blueimp-gallery-single > .next,
|
||||||
.blueimp-gallery-right > .next,
|
.blueimp-gallery-right > .next,
|
||||||
.blueimp-gallery-single > .play-pause {
|
.blueimp-gallery-single > .play-pause {
|
||||||
display: none;
|
display: none;
|
||||||
}
|
}
|
||||||
.blueimp-gallery > .slides > .slide > .slide-content,
|
.blueimp-gallery > .slides > .slide > .slide-content,
|
||||||
.blueimp-gallery > .prev,
|
.blueimp-gallery > .prev,
|
||||||
.blueimp-gallery > .next,
|
.blueimp-gallery > .next,
|
||||||
.blueimp-gallery > .close,
|
.blueimp-gallery > .close,
|
||||||
.blueimp-gallery > .play-pause {
|
.blueimp-gallery > .play-pause {
|
||||||
-webkit-user-select: none;
|
-webkit-user-select: none;
|
||||||
-khtml-user-select: none;
|
-khtml-user-select: none;
|
||||||
-moz-user-select: none;
|
-moz-user-select: none;
|
||||||
-ms-user-select: none;
|
-ms-user-select: none;
|
||||||
user-select: none;
|
user-select: none;
|
||||||
}
|
}
|
||||||
.blueimp-gallery > .prev:hover,
|
.blueimp-gallery > .prev:hover,
|
||||||
.blueimp-gallery > .next:hover,
|
.blueimp-gallery > .next:hover,
|
||||||
.blueimp-gallery > .close:hover,
|
.blueimp-gallery > .close:hover,
|
||||||
.blueimp-gallery > .title:hover,
|
.blueimp-gallery > .title:hover,
|
||||||
.blueimp-gallery > .play-pause:hover {
|
.blueimp-gallery > .play-pause:hover {
|
||||||
color: #fff;
|
color: #fff;
|
||||||
opacity: 1;
|
opacity: 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* IE7 fixes */
|
/* IE7 fixes */
|
||||||
* + html .blueimp-gallery > .slides > .slide {
|
* + html .blueimp-gallery > .slides > .slide {
|
||||||
min-height: 300px;
|
min-height: 300px;
|
||||||
}
|
}
|
||||||
* + html .blueimp-gallery > .slides > .slide > .slide-content {
|
* + html .blueimp-gallery > .slides > .slide > .slide-content {
|
||||||
position: relative;
|
position: relative;
|
||||||
}
|
}
|
||||||
* + html .blueimp-gallery > .slides > .slide > .slide-content > img {
|
* + html .blueimp-gallery > .slides > .slide > .slide-content > img {
|
||||||
position: relative;
|
position: relative;
|
||||||
}
|
}
|
||||||
|
|
||||||
@supports (object-fit: contain) {
|
@supports (object-fit: contain) {
|
||||||
.blueimp-gallery-contain > .slides > .slide > .slide-content,
|
.blueimp-gallery-contain > .slides > .slide > .slide-content,
|
||||||
.blueimp-gallery-contain > .slides > .slide > .slide-content > img {
|
.blueimp-gallery-contain > .slides > .slide > .slide-content > img {
|
||||||
width: 100%;
|
width: 100%;
|
||||||
height: 100%;
|
height: 100%;
|
||||||
object-fit: contain;
|
object-fit: contain;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@media (prefers-color-scheme: light) {
|
@media (prefers-color-scheme: light) {
|
||||||
.blueimp-gallery-carousel {
|
.blueimp-gallery-carousel {
|
||||||
background: #fff;
|
background: #fff;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
2
assets/Gallery-3.4.0/css/blueimp-gallery.min.css
vendored
Normal file
@@ -1 +1 @@
|
|||||||
{"version":3,"sources":["blueimp-gallery.css","blueimp-gallery-indicator.css","blueimp-gallery-video.css"],"names":[],"mappings":"iBAYA,iBACA,+CACA,mDACE,SAAU,SACV,IAAK,EACL,MAAO,EACP,OAAQ,EACR,KAAM,EACN,mBAAoB,QAAQ,IAAK,OACjC,gBAAiB,QAAQ,IAAK,OAC9B,eAAgB,QAAQ,IAAK,OAC7B,cAAe,QAAQ,IAAK,OAC5B,WAAY,QAAQ,IAAK,OAEzB,oBAAqB,OACrB,yBAA0B,OAE5B,+CACA,mDACE,OAAQ,KACR,MAAO,KACP,OAAQ,KACR,UAAW,KACX,WAAY,KACZ,QAAS,EAEX,iBACE,SAAU,MACV,QAAS,OACT,SAAU,OACV,WAAY,KACZ,QAAS,EACT,QAAS,KACT,UAAW,IACX,iBAAkB,WAClB,aAAc,WAEhB,0BACE,SAAU,SACV,QAAS,KACT,OAAQ,IAAI,KAEZ,eAAgB,OAChB,WAAY,EAAE,EAAE,IAAI,eACpB,iBAAkB,MAAM,WACxB,aAAc,MAAM,WACpB,QAAS,MAEX,yBACE,QAAS,MACT,QAAS,EAEX,yBACE,SAAU,SACV,OAAQ,KACR,SAAU,OAEZ,kCACE,SAAU,SAEZ,gCACE,WAAY,OACZ,SAAU,SACV,MAAO,KACP,OAAQ,KACR,WAAY,OACZ,mCAAoC,+BACpC,gCAAiC,+BACjC,+BAAgC,+BAChC,8BAA+B,+BAC/B,2BAA4B,+BAG9B,uCACA,qCAFA,qCAGE,WAAY,QAEd,wCACE,WAAY,wBAAwB,OAAO,UAC3C,gBAAiB,KAAK,KAExB,6CACE,iBAAkB,wBAEpB,uDACE,QAAS,EAEX,sCACE,WAAY,sBAAsB,OAAO,UAE3C,+CACE,iBAAkB,sBAEpB,qDACE,QAAS,KAGX,+BADA,+BAEE,SAAU,SACV,IAAK,IACL,KAAM,KACN,MAAO,IACP,OAAQ,KACR,QAAS,KAAK,KAAK,KAAK,KACxB,WAAY,MACZ,mBAAoB,YACpB,gBAAiB,YACjB,WAAY,YACZ,WAAY,KAAK,qBAAqB,OAAO,UAC7C,iBAAkB,eAClB,OAAQ,IAAI,MAAM,KAClB,sBAAuB,KACvB,mBAAoB,KACpB,cAAe,KACf,QAAS,GACT,OAAQ,QACR,QAAS,KAEX,+BACE,MAAO,KACP,KAAM,KACN,iBAAkB,qBAEpB,gCACE,iBAAkB,qBAEpB,gCACE,iBAAkB,qBAEpB,gCACE,SAAU,SACV,IAAK,KACL,MAAO,KACP,MAAO,KACP,OAAQ,KACR,WAAY,sBAAsB,OAAO,UACzC,QAAS,GACT,OAAQ,QACR,QAAS,KAEX,iCACE,iBAAkB,sBAEpB,wBACE,SAAU,SACV,IAAK,KACL,KAAM,KACN,OAAQ,EAAE,KAAK,EAAE,EACjB,UAAW,KACX,YAAa,KACb,MAAO,KACP,YAAa,EAAE,EAAE,IAAI,KACrB,QAAS,GACT,QAAS,KAEX,qCACE,SAAU,SACV,MAAO,KACP,OAAQ,KACR,MAAO,KACP,OAAQ,KACR,WAAY,2BAA2B,EAAE,EAAE,UAC3C,OAAQ,QACR,QAAS,GACT,QAAS,KAEX,sCACE,iBAAkB,2BAEpB,qCACE,oBAAqB,MAAM,EAI7B,iCADA,gCAGA,sCAJA,gCAGA,iCAEE,QAAS,MAET,kBAAmB,cACnB,eAAgB,cAChB,cAAe,cACf,aAAc,cACd,UAAW,cAGb,4BAEA,6BADA,8BAEA,oCAJA,8BAKE,QAAS,KAKX,wBADA,uBAEA,6BAHA,uBADA,+CAKE,oBAAqB,KACrB,mBAAoB,KACpB,iBAAkB,KAClB,gBAAiB,KACjB,YAAa,KAIf,8BADA,6BAGA,mCAJA,6BAGA,8BAEE,MAAO,KACP,QAAS,EAIX,uCACE,WAAY,MAEd,sDACE,SAAU,SAEZ,0DACE,SAAU,SAGZ,+BACE,uDACA,2DACE,MAAO,KACP,OAAQ,KACR,WAAY,SAIhB,oCACE,0BACE,WAAY,MC1OhB,4BACE,SAAU,SACV,IAAK,KACL,MAAO,KACP,OAAQ,KACR,KAAM,KACN,OAAQ,EAAE,KACV,QAAS,EACT,WAAY,KACZ,WAAY,OACZ,YAAa,KACb,QAAS,KACT,oBAAqB,KACrB,mBAAoB,KACpB,iBAAkB,KAClB,gBAAiB,KACjB,YAAa,KAEf,+BACE,QAAS,aACT,SAAU,SACV,MAAO,IACP,OAAQ,IACR,OAAQ,IAAI,IAAI,EAAE,IAClB,mBAAoB,YACpB,gBAAiB,YACjB,WAAY,YACZ,OAAQ,IAAI,MAAM,YAClB,WAAY,KACZ,WAAY,sBAA0B,OAAO,UAC7C,cAAe,IACf,WAAY,EAAE,EAAE,IAAI,KACpB,QAAS,GACT,OAAQ,QAIV,sCACE,QAAS,OAIX,oCADA,qCAEE,iBAAkB,KAClB,aAAc,KACd,QAAS,EAGX,qCACE,QAAS,EACT,QAAS,MACT,SAAU,SACV,QAAS,GACT,IAAK,KACL,KAAM,IACN,MAAO,KACP,OAAQ,KACR,WAAY,UAAU,IAAM,QAAQ,CAAE,QAAQ,IAAM,SACpD,UAAW,iBAAiB,cAAc,cAC1C,eAAgB,KAGlB,2CACE,QAAS,EACT,cAAe,IACf,WAAY,QACZ,UAAW,iBAAiB,iBAAiB,cAG/C,0CACE,QAAS,KAGX,qCACE,QAAS,MAET,kBAAmB,cACnB,eAAgB,cAChB,cAAe,cACf,aAAc,cACd,UAAW,cAEb,mCACE,QAAS,KCjFX,4DADA,sDADA,qDAGE,SAAU,SACV,IAAK,EACL,KAAM,EACN,MAAO,KACP,OAAQ,KACR,OAAQ,KAEV,4DACE,WAAY,OAAO,UACnB,gBAAiB,QAEnB,2DACE,iBAAkB,KAClB,iBAAkB,eAEpB,2DACE,SAAU,SACV,IAAK,IACL,MAAO,EACP,KAAM,EACN,OAAQ,MAAM,KAAK,EACnB,MAAO,MACP,OAAQ,MACR,WAAY,2BAA2B,OAAO,UAC9C,QAAS,GACT,OAAQ,QAEV,oEACE,iBAAkB,2BAGpB,4DADA,2DAEE,QAAS,KAEX,2DACE,WAAY,wBAAwB,OAAO,UAC3C,gBAAiB,KAAK,KAExB,gEACE,iBAAkB,wBAIpB,sDACE,OAAQ,KAEV,kEACE,KAAM,IACN,YAAa,MAGf,iEACE,QAAS"}
|
{"version":3,"sources":["blueimp-gallery.css","blueimp-gallery-indicator.css","blueimp-gallery-video.css"],"names":[],"mappings":"iBAYA,iBACA,+CACA,mDACE,SAAU,SACV,IAAK,EACL,MAAO,EACP,OAAQ,EACR,KAAM,EACN,mBAAoB,QAAQ,IAAK,OACjC,gBAAiB,QAAQ,IAAK,OAC9B,eAAgB,QAAQ,IAAK,OAC7B,cAAe,QAAQ,IAAK,OAC5B,WAAY,QAAQ,IAAK,OAEzB,oBAAqB,OACrB,yBAA0B,OAE5B,+CACA,mDACE,OAAQ,KACR,MAAO,KACP,OAAQ,KACR,UAAW,KACX,WAAY,KACZ,QAAS,EAEX,iBACE,SAAU,MACV,QAAS,OACT,SAAU,OACV,WAAY,KACZ,QAAS,EACT,QAAS,KACT,UAAW,IACX,iBAAkB,WAClB,aAAc,WAEhB,0BACE,SAAU,SACV,QAAS,KACT,OAAQ,IAAI,KAEZ,eAAgB,OAChB,WAAY,EAAE,EAAE,IAAI,eACpB,iBAAkB,MAAM,WACxB,aAAc,MAAM,WACpB,QAAS,MAEX,yBACE,QAAS,MACT,QAAS,EAEX,yBACE,SAAU,SACV,OAAQ,KACR,SAAU,OAEZ,kCACE,SAAU,SAEZ,gCACE,WAAY,OACZ,SAAU,SACV,MAAO,KACP,OAAQ,KACR,WAAY,OACZ,mCAAoC,kCACpC,gCAAiC,kCACjC,+BAAgC,kCAChC,8BAA+B,kCAC/B,2BAA4B,kCAG9B,uCACA,qCAFA,qCAGE,WAAY,QAEd,wCACE,WAAY,wBAAwB,OAAO,UAC3C,gBAAiB,KAAK,KAExB,6CACE,iBAAkB,wBAEpB,uDACE,QAAS,EAEX,sCACE,WAAY,sBAAsB,OAAO,UAE3C,+CACE,iBAAkB,sBAEpB,qDACE,QAAS,KAGX,+BADA,+BAEE,SAAU,SACV,IAAK,IACL,KAAM,KACN,MAAO,IACP,OAAQ,KACR,QAAS,KAAK,KAAK,KAAK,KACxB,WAAY,MACZ,mBAAoB,YACpB,gBAAiB,YACjB,WAAY,YACZ,WAAY,KAAK,qBAAqB,OAAO,UAC7C,iBAAkB,eAClB,OAAQ,IAAI,MAAM,KAClB,sBAAuB,KACvB,mBAAoB,KACpB,cAAe,KACf,QAAS,GACT,OAAQ,QACR,QAAS,KAEX,+BACE,MAAO,KACP,KAAM,KACN,iBAAkB,qBAEpB,gCACE,iBAAkB,qBAEpB,gCACE,iBAAkB,qBAEpB,gCACE,SAAU,SACV,IAAK,KACL,MAAO,KACP,MAAO,KACP,OAAQ,KACR,WAAY,sBAAsB,OAAO,UACzC,QAAS,GACT,OAAQ,QACR,QAAS,KAEX,iCACE,iBAAkB,sBAEpB,wBACE,SAAU,SACV,IAAK,KACL,KAAM,KACN,OAAQ,EAAE,KAAK,EAAE,EACjB,UAAW,KACX,YAAa,KACb,MAAO,KACP,YAAa,EAAE,EAAE,IAAI,KACrB,QAAS,GACT,QAAS,KAEX,qCACE,SAAU,SACV,MAAO,KACP,OAAQ,KACR,MAAO,KACP,OAAQ,KACR,WAAY,2BAA2B,EAAE,EAAE,UAC3C,OAAQ,QACR,QAAS,GACT,QAAS,KAEX,sCACE,iBAAkB,2BAEpB,qCACE,oBAAqB,MAAM,EAI7B,iCADA,gCAGA,sCAJA,gCAGA,iCAEE,QAAS,MAET,kBAAmB,cACnB,eAAgB,cAChB,cAAe,cACf,aAAc,cACd,UAAW,cAGb,4BAEA,6BADA,8BAEA,oCAJA,8BAKE,QAAS,KAKX,wBADA,uBAEA,6BAHA,uBADA,+CAKE,oBAAqB,KACrB,mBAAoB,KACpB,iBAAkB,KAClB,gBAAiB,KACjB,YAAa,KAIf,8BADA,6BAGA,mCAJA,6BAGA,8BAEE,MAAO,KACP,QAAS,EAIX,uCACE,WAAY,MAEd,sDACE,SAAU,SAEZ,0DACE,SAAU,SAGZ,+BACE,uDACA,2DACE,MAAO,KACP,OAAQ,KACR,WAAY,SAIhB,oCACE,0BACE,WAAY,MC1OhB,4BACE,SAAU,SACV,IAAK,KACL,MAAO,KACP,OAAQ,KACR,KAAM,KACN,OAAQ,EAAE,KACV,QAAS,EACT,WAAY,KACZ,WAAY,OACZ,YAAa,KACb,QAAS,KACT,oBAAqB,KACrB,mBAAoB,KACpB,iBAAkB,KAClB,gBAAiB,KACjB,YAAa,KAEf,+BACE,QAAS,aACT,SAAU,SACV,MAAO,IACP,OAAQ,IACR,OAAQ,IAAI,IAAI,EAAE,IAClB,mBAAoB,YACpB,gBAAiB,YACjB,WAAY,YACZ,OAAQ,IAAI,MAAM,YAClB,WAAY,KACZ,WAAY,sBAA0B,OAAO,UAC7C,cAAe,IACf,WAAY,EAAE,EAAE,IAAI,KACpB,QAAS,GACT,OAAQ,QAIV,sCACE,QAAS,OAIX,oCADA,qCAEE,iBAAkB,KAClB,aAAc,KACd,QAAS,EAGX,qCACE,QAAS,EACT,QAAS,MACT,SAAU,SACV,QAAS,GACT,IAAK,KACL,KAAM,IACN,MAAO,KACP,OAAQ,KACR,WAAY,UAAU,IAAM,QAAQ,CAAE,QAAQ,IAAM,SACpD,UAAW,iBAAiB,cAAc,cAC1C,eAAgB,KAGlB,2CACE,QAAS,EACT,cAAe,IACf,WAAY,QACZ,UAAW,iBAAiB,iBAAiB,cAG/C,0CACE,QAAS,KAGX,qCACE,QAAS,MAET,kBAAmB,cACnB,eAAgB,cAChB,cAAe,cACf,aAAc,cACd,UAAW,cAEb,mCACE,QAAS,KCjFX,4DADA,sDADA,qDAGE,SAAU,SACV,IAAK,EACL,KAAM,EACN,MAAO,KACP,OAAQ,KACR,OAAQ,KAEV,4DACE,WAAY,OAAO,UACnB,gBAAiB,QAEnB,2DACE,iBAAkB,KAClB,iBAAkB,eAEpB,2DACE,SAAU,SACV,IAAK,IACL,MAAO,EACP,KAAM,EACN,OAAQ,MAAM,KAAK,EACnB,MAAO,MACP,OAAQ,MACR,WAAY,2BAA2B,OAAO,UAC9C,QAAS,GACT,OAAQ,QAEV,oEACE,iBAAkB,2BAGpB,4DADA,2DAEE,QAAS,KAEX,2DACE,WAAY,wBAAwB,OAAO,UAC3C,gBAAiB,KAAK,KAExB,gEACE,iBAAkB,wBAIpB,sDACE,OAAQ,KAEV,kEACE,KAAM,IACN,YAAa,MAGf,iEACE,QAAS"}
|
||||||
@@ -1,78 +1,78 @@
|
|||||||
/*
|
/*
|
||||||
* blueimp Gallery Demo CSS
|
* blueimp Gallery Demo CSS
|
||||||
* https://github.com/blueimp/Gallery
|
* https://github.com/blueimp/Gallery
|
||||||
*
|
*
|
||||||
* Copyright 2013, Sebastian Tschan
|
* Copyright 2013, Sebastian Tschan
|
||||||
* https://blueimp.net
|
* https://blueimp.net
|
||||||
*
|
*
|
||||||
* Licensed under the MIT license:
|
* Licensed under the MIT license:
|
||||||
* https://opensource.org/licenses/MIT
|
* https://opensource.org/licenses/MIT
|
||||||
*/
|
*/
|
||||||
|
|
||||||
body {
|
body {
|
||||||
max-width: 990px;
|
max-width: 990px;
|
||||||
margin: 0 auto;
|
margin: 0 auto;
|
||||||
padding: 1em;
|
padding: 1em;
|
||||||
font-family: system-ui, -apple-system, 'Segoe UI', Roboto, 'Helvetica Neue',
|
font-family: system-ui, -apple-system, 'Segoe UI', Roboto, 'Helvetica Neue',
|
||||||
Arial, sans-serif;
|
Arial, sans-serif;
|
||||||
-webkit-text-size-adjust: 100%;
|
-webkit-text-size-adjust: 100%;
|
||||||
line-height: 1.4;
|
line-height: 1.4;
|
||||||
background: #212121;
|
background: #212121;
|
||||||
color: #dedede;
|
color: #dedede;
|
||||||
}
|
}
|
||||||
a {
|
a {
|
||||||
color: #61afef;
|
color: #61afef;
|
||||||
text-decoration: none;
|
text-decoration: none;
|
||||||
}
|
}
|
||||||
a:visited {
|
a:visited {
|
||||||
color: #56b6c2;
|
color: #56b6c2;
|
||||||
}
|
}
|
||||||
a:hover {
|
a:hover {
|
||||||
color: #98c379;
|
color: #98c379;
|
||||||
}
|
}
|
||||||
img {
|
img {
|
||||||
max-width: 100%;
|
max-width: 100%;
|
||||||
border: 0;
|
border: 0;
|
||||||
vertical-align: middle;
|
vertical-align: middle;
|
||||||
}
|
}
|
||||||
h1,
|
h1,
|
||||||
h2,
|
h2,
|
||||||
h3,
|
h3,
|
||||||
h4,
|
h4,
|
||||||
h5,
|
h5,
|
||||||
h6 {
|
h6 {
|
||||||
margin-top: 1.5em;
|
margin-top: 1.5em;
|
||||||
margin-bottom: 0.5em;
|
margin-bottom: 0.5em;
|
||||||
}
|
}
|
||||||
h1 {
|
h1 {
|
||||||
margin-top: 0.5em;
|
margin-top: 0.5em;
|
||||||
}
|
}
|
||||||
|
|
||||||
@media (prefers-color-scheme: light) {
|
@media (prefers-color-scheme: light) {
|
||||||
body {
|
body {
|
||||||
background: #ececec;
|
background: #ececec;
|
||||||
color: #212121;
|
color: #212121;
|
||||||
}
|
}
|
||||||
a {
|
a {
|
||||||
color: #225c8d;
|
color: #225c8d;
|
||||||
}
|
}
|
||||||
a:visited {
|
a:visited {
|
||||||
color: #378f9a;
|
color: #378f9a;
|
||||||
}
|
}
|
||||||
a:hover {
|
a:hover {
|
||||||
color: #6fa349;
|
color: #6fa349;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@media (min-width: 540px) {
|
@media (min-width: 540px) {
|
||||||
#navigation {
|
#navigation {
|
||||||
list-style: none;
|
list-style: none;
|
||||||
padding: 0;
|
padding: 0;
|
||||||
}
|
}
|
||||||
#navigation li {
|
#navigation li {
|
||||||
display: inline-block;
|
display: inline-block;
|
||||||
}
|
}
|
||||||
#navigation li:not(:first-child)::before {
|
#navigation li:not(:first-child)::before {
|
||||||
content: ' | ';
|
content: ' | ';
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Before Width: | Height: | Size: 163 B After Width: | Height: | Size: 163 B |
@@ -1,4 +1,4 @@
|
|||||||
<?xml version="1.0" encoding="UTF-8"?>
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
<svg xmlns="http://www.w3.org/2000/svg" version="1.1" width="20" height="20">
|
<svg xmlns="http://www.w3.org/2000/svg" version="1.1" width="20" height="20">
|
||||||
<path d="M1 5 L5 1 L10 6 L15 1 L19 5 L14 10 L19 15 L15 19 L10 14 L5 19 L1 15 L6 10 Z" stroke="#fff" fill="#000" fill-opacity="0.5"/>
|
<path d="M1 5 L5 1 L10 6 L15 1 L19 5 L14 10 L19 15 L15 19 L10 14 L5 19 L1 15 L6 10 Z" stroke="#fff" fill="#000" fill-opacity="0.5"/>
|
||||||
</svg>
|
</svg>
|
||||||
|
Before Width: | Height: | Size: 258 B After Width: | Height: | Size: 262 B |
|
Before Width: | Height: | Size: 1.0 KiB After Width: | Height: | Size: 1.0 KiB |
@@ -1,6 +1,6 @@
|
|||||||
<?xml version="1.0" encoding="UTF-8"?>
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
<svg xmlns="http://www.w3.org/2000/svg" version="1.1" width="64" height="64">
|
<svg xmlns="http://www.w3.org/2000/svg" version="1.1" width="64" height="64">
|
||||||
<circle cx="32" cy="32" r="25" stroke="red" stroke-width="7" fill="#fff" fill-opacity="0.2"/>
|
<circle cx="32" cy="32" r="25" stroke="red" stroke-width="7" fill="#fff" fill-opacity="0.2"/>
|
||||||
<rect x="28" y="17" width="8" height="30" fill="red" transform="rotate(45, 32, 32)"/>
|
<rect x="28" y="17" width="8" height="30" fill="red" transform="rotate(45, 32, 32)"/>
|
||||||
<rect x="28" y="17" width="8" height="30" fill="red" transform="rotate(135, 32, 32)"/>
|
<rect x="28" y="17" width="8" height="30" fill="red" transform="rotate(135, 32, 32)"/>
|
||||||
</svg>
|
</svg>
|
||||||
|
Before Width: | Height: | Size: 394 B After Width: | Height: | Size: 400 B |
|
Before Width: | Height: | Size: 3.7 KiB After Width: | Height: | Size: 3.7 KiB |
@@ -1,52 +1,52 @@
|
|||||||
<?xml version="1.0" encoding="utf-8"?>
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" style="margin: auto; background: none; display: block; shape-rendering: auto;" width="64px" height="64px" viewBox="0 0 100 100" preserveAspectRatio="xMidYMid">
|
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" style="margin: auto; background: none; display: block; shape-rendering: auto;" width="64px" height="64px" viewBox="0 0 100 100" preserveAspectRatio="xMidYMid">
|
||||||
<g transform="rotate(0 50 50)">
|
<g transform="rotate(0 50 50)">
|
||||||
<rect x="47" y="2" rx="3" ry="3.6" width="6" height="24" fill="#bdbdbd">
|
<rect x="47" y="2" rx="3" ry="3.6" width="6" height="24" fill="#bdbdbd">
|
||||||
<animate attributeName="opacity" values="1;0" keyTimes="0;1" dur="0.625s" begin="-0.5729166666666666s" repeatCount="indefinite"></animate>
|
<animate attributeName="opacity" values="1;0" keyTimes="0;1" dur="0.625s" begin="-0.5729166666666666s" repeatCount="indefinite"></animate>
|
||||||
</rect>
|
</rect>
|
||||||
</g><g transform="rotate(30 50 50)">
|
</g><g transform="rotate(30 50 50)">
|
||||||
<rect x="47" y="2" rx="3" ry="3.6" width="6" height="24" fill="#bdbdbd">
|
<rect x="47" y="2" rx="3" ry="3.6" width="6" height="24" fill="#bdbdbd">
|
||||||
<animate attributeName="opacity" values="1;0" keyTimes="0;1" dur="0.625s" begin="-0.5208333333333333s" repeatCount="indefinite"></animate>
|
<animate attributeName="opacity" values="1;0" keyTimes="0;1" dur="0.625s" begin="-0.5208333333333333s" repeatCount="indefinite"></animate>
|
||||||
</rect>
|
</rect>
|
||||||
</g><g transform="rotate(60 50 50)">
|
</g><g transform="rotate(60 50 50)">
|
||||||
<rect x="47" y="2" rx="3" ry="3.6" width="6" height="24" fill="#bdbdbd">
|
<rect x="47" y="2" rx="3" ry="3.6" width="6" height="24" fill="#bdbdbd">
|
||||||
<animate attributeName="opacity" values="1;0" keyTimes="0;1" dur="0.625s" begin="-0.46874999999999994s" repeatCount="indefinite"></animate>
|
<animate attributeName="opacity" values="1;0" keyTimes="0;1" dur="0.625s" begin="-0.46874999999999994s" repeatCount="indefinite"></animate>
|
||||||
</rect>
|
</rect>
|
||||||
</g><g transform="rotate(90 50 50)">
|
</g><g transform="rotate(90 50 50)">
|
||||||
<rect x="47" y="2" rx="3" ry="3.6" width="6" height="24" fill="#bdbdbd">
|
<rect x="47" y="2" rx="3" ry="3.6" width="6" height="24" fill="#bdbdbd">
|
||||||
<animate attributeName="opacity" values="1;0" keyTimes="0;1" dur="0.625s" begin="-0.41666666666666663s" repeatCount="indefinite"></animate>
|
<animate attributeName="opacity" values="1;0" keyTimes="0;1" dur="0.625s" begin="-0.41666666666666663s" repeatCount="indefinite"></animate>
|
||||||
</rect>
|
</rect>
|
||||||
</g><g transform="rotate(120 50 50)">
|
</g><g transform="rotate(120 50 50)">
|
||||||
<rect x="47" y="2" rx="3" ry="3.6" width="6" height="24" fill="#bdbdbd">
|
<rect x="47" y="2" rx="3" ry="3.6" width="6" height="24" fill="#bdbdbd">
|
||||||
<animate attributeName="opacity" values="1;0" keyTimes="0;1" dur="0.625s" begin="-0.36458333333333326s" repeatCount="indefinite"></animate>
|
<animate attributeName="opacity" values="1;0" keyTimes="0;1" dur="0.625s" begin="-0.36458333333333326s" repeatCount="indefinite"></animate>
|
||||||
</rect>
|
</rect>
|
||||||
</g><g transform="rotate(150 50 50)">
|
</g><g transform="rotate(150 50 50)">
|
||||||
<rect x="47" y="2" rx="3" ry="3.6" width="6" height="24" fill="#bdbdbd">
|
<rect x="47" y="2" rx="3" ry="3.6" width="6" height="24" fill="#bdbdbd">
|
||||||
<animate attributeName="opacity" values="1;0" keyTimes="0;1" dur="0.625s" begin="-0.31249999999999994s" repeatCount="indefinite"></animate>
|
<animate attributeName="opacity" values="1;0" keyTimes="0;1" dur="0.625s" begin="-0.31249999999999994s" repeatCount="indefinite"></animate>
|
||||||
</rect>
|
</rect>
|
||||||
</g><g transform="rotate(180 50 50)">
|
</g><g transform="rotate(180 50 50)">
|
||||||
<rect x="47" y="2" rx="3" ry="3.6" width="6" height="24" fill="#bdbdbd">
|
<rect x="47" y="2" rx="3" ry="3.6" width="6" height="24" fill="#bdbdbd">
|
||||||
<animate attributeName="opacity" values="1;0" keyTimes="0;1" dur="0.625s" begin="-0.26041666666666663s" repeatCount="indefinite"></animate>
|
<animate attributeName="opacity" values="1;0" keyTimes="0;1" dur="0.625s" begin="-0.26041666666666663s" repeatCount="indefinite"></animate>
|
||||||
</rect>
|
</rect>
|
||||||
</g><g transform="rotate(210 50 50)">
|
</g><g transform="rotate(210 50 50)">
|
||||||
<rect x="47" y="2" rx="3" ry="3.6" width="6" height="24" fill="#bdbdbd">
|
<rect x="47" y="2" rx="3" ry="3.6" width="6" height="24" fill="#bdbdbd">
|
||||||
<animate attributeName="opacity" values="1;0" keyTimes="0;1" dur="0.625s" begin="-0.20833333333333331s" repeatCount="indefinite"></animate>
|
<animate attributeName="opacity" values="1;0" keyTimes="0;1" dur="0.625s" begin="-0.20833333333333331s" repeatCount="indefinite"></animate>
|
||||||
</rect>
|
</rect>
|
||||||
</g><g transform="rotate(240 50 50)">
|
</g><g transform="rotate(240 50 50)">
|
||||||
<rect x="47" y="2" rx="3" ry="3.6" width="6" height="24" fill="#bdbdbd">
|
<rect x="47" y="2" rx="3" ry="3.6" width="6" height="24" fill="#bdbdbd">
|
||||||
<animate attributeName="opacity" values="1;0" keyTimes="0;1" dur="0.625s" begin="-0.15624999999999997s" repeatCount="indefinite"></animate>
|
<animate attributeName="opacity" values="1;0" keyTimes="0;1" dur="0.625s" begin="-0.15624999999999997s" repeatCount="indefinite"></animate>
|
||||||
</rect>
|
</rect>
|
||||||
</g><g transform="rotate(270 50 50)">
|
</g><g transform="rotate(270 50 50)">
|
||||||
<rect x="47" y="2" rx="3" ry="3.6" width="6" height="24" fill="#bdbdbd">
|
<rect x="47" y="2" rx="3" ry="3.6" width="6" height="24" fill="#bdbdbd">
|
||||||
<animate attributeName="opacity" values="1;0" keyTimes="0;1" dur="0.625s" begin="-0.10416666666666666s" repeatCount="indefinite"></animate>
|
<animate attributeName="opacity" values="1;0" keyTimes="0;1" dur="0.625s" begin="-0.10416666666666666s" repeatCount="indefinite"></animate>
|
||||||
</rect>
|
</rect>
|
||||||
</g><g transform="rotate(300 50 50)">
|
</g><g transform="rotate(300 50 50)">
|
||||||
<rect x="47" y="2" rx="3" ry="3.6" width="6" height="24" fill="#bdbdbd">
|
<rect x="47" y="2" rx="3" ry="3.6" width="6" height="24" fill="#bdbdbd">
|
||||||
<animate attributeName="opacity" values="1;0" keyTimes="0;1" dur="0.625s" begin="-0.05208333333333333s" repeatCount="indefinite"></animate>
|
<animate attributeName="opacity" values="1;0" keyTimes="0;1" dur="0.625s" begin="-0.05208333333333333s" repeatCount="indefinite"></animate>
|
||||||
</rect>
|
</rect>
|
||||||
</g><g transform="rotate(330 50 50)">
|
</g><g transform="rotate(330 50 50)">
|
||||||
<rect x="47" y="2" rx="3" ry="3.6" width="6" height="24" fill="#bdbdbd">
|
<rect x="47" y="2" rx="3" ry="3.6" width="6" height="24" fill="#bdbdbd">
|
||||||
<animate attributeName="opacity" values="1;0" keyTimes="0;1" dur="0.625s" begin="0s" repeatCount="indefinite"></animate>
|
<animate attributeName="opacity" values="1;0" keyTimes="0;1" dur="0.625s" begin="0s" repeatCount="indefinite"></animate>
|
||||||
</rect>
|
</rect>
|
||||||
</g>
|
</g>
|
||||||
</svg>
|
</svg>
|
||||||
|
Before Width: | Height: | Size: 3.4 KiB After Width: | Height: | Size: 3.4 KiB |
|
Before Width: | Height: | Size: 166 B After Width: | Height: | Size: 166 B |
@@ -1,4 +1,4 @@
|
|||||||
<?xml version="1.0" encoding="UTF-8"?>
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
<svg xmlns="http://www.w3.org/2000/svg" version="1.1" width="8" height="20">
|
<svg xmlns="http://www.w3.org/2000/svg" version="1.1" width="8" height="20">
|
||||||
<path d="M0 0 V2 L6 10 L0 18 V20 L8 10 Z" stroke="#fff" fill="#fff"/>
|
<path d="M0 0 V2 L6 10 L0 18 V20 L8 10 Z" stroke="#fff" fill="#fff"/>
|
||||||
</svg>
|
</svg>
|
||||||
|
Before Width: | Height: | Size: 194 B After Width: | Height: | Size: 198 B |
|
Before Width: | Height: | Size: 432 B After Width: | Height: | Size: 432 B |
@@ -1,6 +1,6 @@
|
|||||||
<?xml version="1.0" encoding="UTF-8"?>
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
<svg xmlns="http://www.w3.org/2000/svg" version="1.1" width="60" height="30">
|
<svg xmlns="http://www.w3.org/2000/svg" version="1.1" width="60" height="30">
|
||||||
<polygon points="5,2 5,28 27,15" stroke="#fff" stroke-width="2" fill="#000" fill-opacity="0.5"/>
|
<polygon points="5,2 5,28 27,15" stroke="#fff" stroke-width="2" fill="#000" fill-opacity="0.5"/>
|
||||||
<rect x="35" y="3" width="8" height="24" stroke="#fff" stroke-width="2" fill="#000" fill-opacity="0.5"/>
|
<rect x="35" y="3" width="8" height="24" stroke="#fff" stroke-width="2" fill="#000" fill-opacity="0.5"/>
|
||||||
<rect x="47" y="3" width="8" height="24" stroke="#fff" stroke-width="2" fill="#000" fill-opacity="0.5"/>
|
<rect x="47" y="3" width="8" height="24" stroke="#fff" stroke-width="2" fill="#000" fill-opacity="0.5"/>
|
||||||
</svg>
|
</svg>
|
||||||
|
Before Width: | Height: | Size: 434 B After Width: | Height: | Size: 440 B |
|
Before Width: | Height: | Size: 170 B After Width: | Height: | Size: 170 B |
@@ -1,4 +1,4 @@
|
|||||||
<?xml version="1.0" encoding="UTF-8"?>
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
<svg xmlns="http://www.w3.org/2000/svg" version="1.1" width="8" height="20">
|
<svg xmlns="http://www.w3.org/2000/svg" version="1.1" width="8" height="20">
|
||||||
<path d="M8 0 V2 L2 10 L8 18 V20 L0 10 Z" stroke="#fff" fill="#fff"/>
|
<path d="M8 0 V2 L2 10 L8 18 V20 L0 10 Z" stroke="#fff" fill="#fff"/>
|
||||||
</svg>
|
</svg>
|
||||||
|
Before Width: | Height: | Size: 194 B After Width: | Height: | Size: 198 B |
|
Before Width: | Height: | Size: 993 B After Width: | Height: | Size: 993 B |
@@ -1,5 +1,5 @@
|
|||||||
<?xml version="1.0" encoding="UTF-8"?>
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
<svg xmlns="http://www.w3.org/2000/svg" version="1.1" width="64" height="64">
|
<svg xmlns="http://www.w3.org/2000/svg" version="1.1" width="64" height="64">
|
||||||
<circle cx="32" cy="32" r="25" stroke="#fff" stroke-width="7" fill="#000" fill-opacity="0.2"/>
|
<circle cx="32" cy="32" r="25" stroke="#fff" stroke-width="7" fill="#000" fill-opacity="0.2"/>
|
||||||
<polygon points="26,22 26,42 43,32" fill="#fff"/>
|
<polygon points="26,22 26,42 43,32" fill="#fff"/>
|
||||||
</svg>
|
</svg>
|
||||||
|
Before Width: | Height: | Size: 271 B After Width: | Height: | Size: 276 B |
@@ -1,158 +1,158 @@
|
|||||||
<!DOCTYPE html>
|
<!DOCTYPE html>
|
||||||
<!--
|
<!--
|
||||||
/*
|
/*
|
||||||
* blueimp Gallery Demo
|
* blueimp Gallery Demo
|
||||||
* https://github.com/blueimp/Gallery
|
* https://github.com/blueimp/Gallery
|
||||||
*
|
*
|
||||||
* Copyright 2013, Sebastian Tschan
|
* Copyright 2013, Sebastian Tschan
|
||||||
* https://blueimp.net
|
* https://blueimp.net
|
||||||
*
|
*
|
||||||
* Licensed under the MIT license:
|
* Licensed under the MIT license:
|
||||||
* https://opensource.org/licenses/MIT
|
* https://opensource.org/licenses/MIT
|
||||||
*/
|
*/
|
||||||
-->
|
-->
|
||||||
<html lang="en">
|
<html lang="en">
|
||||||
<head>
|
<head>
|
||||||
<!--[if IE]>
|
<!--[if IE]>
|
||||||
<meta http-equiv="X-UA-Compatible" content="IE=edge" />
|
<meta http-equiv="X-UA-Compatible" content="IE=edge" />
|
||||||
<![endif]-->
|
<![endif]-->
|
||||||
<meta charset="utf-8" />
|
<meta charset="utf-8" />
|
||||||
<title>blueimp Gallery</title>
|
<title>blueimp Gallery</title>
|
||||||
<meta
|
<meta
|
||||||
name="description"
|
name="description"
|
||||||
content="blueimp Gallery is a touch-enabled, responsive and customizable image and video gallery, carousel and lightbox, optimized for both mobile and desktop web browsers. It features swipe, mouse and keyboard navigation, transition effects, slideshow functionality, fullscreen support and on-demand content loading and can be extended to display additional content types."
|
content="blueimp Gallery is a touch-enabled, responsive and customizable image and video gallery, carousel and lightbox, optimized for both mobile and desktop web browsers. It features swipe, mouse and keyboard navigation, transition effects, slideshow functionality, fullscreen support and on-demand content loading and can be extended to display additional content types."
|
||||||
/>
|
/>
|
||||||
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
||||||
<link rel="stylesheet" href="css/blueimp-gallery.css" />
|
<link rel="stylesheet" href="css/blueimp-gallery.css" />
|
||||||
<link rel="stylesheet" href="css/blueimp-gallery-indicator.css" />
|
<link rel="stylesheet" href="css/blueimp-gallery-indicator.css" />
|
||||||
<link rel="stylesheet" href="css/blueimp-gallery-video.css" />
|
<link rel="stylesheet" href="css/blueimp-gallery-video.css" />
|
||||||
<link rel="stylesheet" href="css/demo/demo.css" />
|
<link rel="stylesheet" href="css/demo/demo.css" />
|
||||||
</head>
|
</head>
|
||||||
<body>
|
<body>
|
||||||
<h1>blueimp Gallery</h1>
|
<h1>blueimp Gallery</h1>
|
||||||
<p>
|
<p>
|
||||||
<a href="https://github.com/blueimp/Gallery">blueimp Gallery</a> is a
|
<a href="https://github.com/blueimp/Gallery">blueimp Gallery</a> is a
|
||||||
touch-enabled, responsive and customizable image & video gallery,
|
touch-enabled, responsive and customizable image & video gallery,
|
||||||
carousel and lightbox, optimized for both mobile and desktop web browsers.
|
carousel and lightbox, optimized for both mobile and desktop web browsers.
|
||||||
</p>
|
</p>
|
||||||
<p>
|
<p>
|
||||||
It features swipe, mouse and keyboard navigation, transition effects,
|
It features swipe, mouse and keyboard navigation, transition effects,
|
||||||
slideshow functionality, fullscreen support and on-demand content loading
|
slideshow functionality, fullscreen support and on-demand content loading
|
||||||
and can be extended to display additional content types.
|
and can be extended to display additional content types.
|
||||||
</p>
|
</p>
|
||||||
<ul id="navigation">
|
<ul id="navigation">
|
||||||
<li>
|
<li>
|
||||||
<a href="https://github.com/blueimp/Gallery/releases">Download</a>
|
<a href="https://github.com/blueimp/Gallery/releases">Download</a>
|
||||||
</li>
|
</li>
|
||||||
<li><a href="https://github.com/blueimp/Gallery">Source Code</a></li>
|
<li><a href="https://github.com/blueimp/Gallery">Source Code</a></li>
|
||||||
<li>
|
<li>
|
||||||
<a href="https://github.com/blueimp/Gallery/blob/master/README.md"
|
<a href="https://github.com/blueimp/Gallery/blob/master/README.md"
|
||||||
>Documentation</a
|
>Documentation</a
|
||||||
>
|
>
|
||||||
</li>
|
</li>
|
||||||
<li><a href="https://blueimp.net">© Sebastian Tschan</a></li>
|
<li><a href="https://blueimp.net">© Sebastian Tschan</a></li>
|
||||||
</ul>
|
</ul>
|
||||||
<h2>Carousel image gallery</h2>
|
<h2>Carousel image gallery</h2>
|
||||||
<!-- The Gallery as inline carousel -->
|
<!-- The Gallery as inline carousel -->
|
||||||
<div
|
<div
|
||||||
id="blueimp-image-carousel"
|
id="blueimp-image-carousel"
|
||||||
class="blueimp-gallery blueimp-gallery-carousel"
|
class="blueimp-gallery blueimp-gallery-carousel"
|
||||||
aria-label="image carousel"
|
aria-label="image carousel"
|
||||||
>
|
>
|
||||||
<div class="slides" aria-live="off"></div>
|
<div class="slides" aria-live="off"></div>
|
||||||
<h3 class="title"></h3>
|
<h3 class="title"></h3>
|
||||||
<a
|
<a
|
||||||
class="prev"
|
class="prev"
|
||||||
aria-controls="blueimp-image-carousel"
|
aria-controls="blueimp-image-carousel"
|
||||||
aria-label="previous slide"
|
aria-label="previous slide"
|
||||||
></a>
|
></a>
|
||||||
<a
|
<a
|
||||||
class="next"
|
class="next"
|
||||||
aria-controls="blueimp-image-carousel"
|
aria-controls="blueimp-image-carousel"
|
||||||
aria-label="next slide"
|
aria-label="next slide"
|
||||||
></a>
|
></a>
|
||||||
<a
|
<a
|
||||||
class="play-pause"
|
class="play-pause"
|
||||||
aria-controls="blueimp-image-carousel"
|
aria-controls="blueimp-image-carousel"
|
||||||
aria-label="play slideshow"
|
aria-label="play slideshow"
|
||||||
aria-pressed="true"
|
aria-pressed="true"
|
||||||
role="button"
|
role="button"
|
||||||
></a>
|
></a>
|
||||||
</div>
|
</div>
|
||||||
<h2>Carousel video gallery</h2>
|
<h2>Carousel video gallery</h2>
|
||||||
<!-- The Gallery as inline carousel -->
|
<!-- The Gallery as inline carousel -->
|
||||||
<div
|
<div
|
||||||
id="blueimp-video-carousel"
|
id="blueimp-video-carousel"
|
||||||
class="blueimp-gallery blueimp-gallery-controls blueimp-gallery-carousel"
|
class="blueimp-gallery blueimp-gallery-controls blueimp-gallery-carousel"
|
||||||
aria-label="video carousel"
|
aria-label="video carousel"
|
||||||
>
|
>
|
||||||
<div class="slides" aria-live="polite"></div>
|
<div class="slides" aria-live="polite"></div>
|
||||||
<h3 class="title"></h3>
|
<h3 class="title"></h3>
|
||||||
<a
|
<a
|
||||||
class="prev"
|
class="prev"
|
||||||
aria-controls="blueimp-video-carousel"
|
aria-controls="blueimp-video-carousel"
|
||||||
aria-label="previous slide"
|
aria-label="previous slide"
|
||||||
></a>
|
></a>
|
||||||
<a
|
<a
|
||||||
class="next"
|
class="next"
|
||||||
aria-controls="blueimp-video-carousel"
|
aria-controls="blueimp-video-carousel"
|
||||||
aria-label="next slide"
|
aria-label="next slide"
|
||||||
></a>
|
></a>
|
||||||
</div>
|
</div>
|
||||||
<h2>Lightbox image gallery</h2>
|
<h2>Lightbox image gallery</h2>
|
||||||
<p>
|
<p>
|
||||||
<input type="checkbox" id="fullscreen" />
|
<input type="checkbox" id="fullscreen" />
|
||||||
<label for="fullscreen">Fullscreen</label>
|
<label for="fullscreen">Fullscreen</label>
|
||||||
</p>
|
</p>
|
||||||
<!-- The container for the list of example images -->
|
<!-- The container for the list of example images -->
|
||||||
<div id="links" class="links"></div>
|
<div id="links" class="links"></div>
|
||||||
<!-- The Gallery as lightbox dialog -->
|
<!-- The Gallery as lightbox dialog -->
|
||||||
<div
|
<div
|
||||||
id="blueimp-gallery"
|
id="blueimp-gallery"
|
||||||
class="blueimp-gallery"
|
class="blueimp-gallery"
|
||||||
aria-label="image gallery"
|
aria-label="image gallery"
|
||||||
aria-modal="true"
|
aria-modal="true"
|
||||||
role="dialog"
|
role="dialog"
|
||||||
>
|
>
|
||||||
<div class="slides" aria-live="polite"></div>
|
<div class="slides" aria-live="polite"></div>
|
||||||
<h3 class="title"></h3>
|
<h3 class="title"></h3>
|
||||||
<a
|
<a
|
||||||
class="prev"
|
class="prev"
|
||||||
aria-controls="blueimp-gallery"
|
aria-controls="blueimp-gallery"
|
||||||
aria-label="previous slide"
|
aria-label="previous slide"
|
||||||
aria-keyshortcuts="ArrowLeft"
|
aria-keyshortcuts="ArrowLeft"
|
||||||
></a>
|
></a>
|
||||||
<a
|
<a
|
||||||
class="next"
|
class="next"
|
||||||
aria-controls="blueimp-gallery"
|
aria-controls="blueimp-gallery"
|
||||||
aria-label="next slide"
|
aria-label="next slide"
|
||||||
aria-keyshortcuts="ArrowRight"
|
aria-keyshortcuts="ArrowRight"
|
||||||
></a>
|
></a>
|
||||||
<a
|
<a
|
||||||
class="close"
|
class="close"
|
||||||
aria-controls="blueimp-gallery"
|
aria-controls="blueimp-gallery"
|
||||||
aria-label="close"
|
aria-label="close"
|
||||||
aria-keyshortcuts="Escape"
|
aria-keyshortcuts="Escape"
|
||||||
></a>
|
></a>
|
||||||
<a
|
<a
|
||||||
class="play-pause"
|
class="play-pause"
|
||||||
aria-controls="blueimp-gallery"
|
aria-controls="blueimp-gallery"
|
||||||
aria-label="play slideshow"
|
aria-label="play slideshow"
|
||||||
aria-keyshortcuts="Space"
|
aria-keyshortcuts="Space"
|
||||||
aria-pressed="false"
|
aria-pressed="false"
|
||||||
role="button"
|
role="button"
|
||||||
></a>
|
></a>
|
||||||
<ol class="indicator"></ol>
|
<ol class="indicator"></ol>
|
||||||
</div>
|
</div>
|
||||||
<script src="js/blueimp-helper.js"></script>
|
<script src="js/blueimp-helper.js"></script>
|
||||||
<script src="js/blueimp-gallery.js"></script>
|
<script src="js/blueimp-gallery.js"></script>
|
||||||
<script src="js/blueimp-gallery-fullscreen.js"></script>
|
<script src="js/blueimp-gallery-fullscreen.js"></script>
|
||||||
<script src="js/blueimp-gallery-indicator.js"></script>
|
<script src="js/blueimp-gallery-indicator.js"></script>
|
||||||
<script src="js/blueimp-gallery-video.js"></script>
|
<script src="js/blueimp-gallery-video.js"></script>
|
||||||
<script src="js/blueimp-gallery-vimeo.js"></script>
|
<script src="js/blueimp-gallery-vimeo.js"></script>
|
||||||
<script src="js/blueimp-gallery-youtube.js"></script>
|
<script src="js/blueimp-gallery-youtube.js"></script>
|
||||||
<script src="js/vendor/jquery.js"></script>
|
<script src="js/vendor/jquery.js"></script>
|
||||||
<script src="js/jquery.blueimp-gallery.js"></script>
|
<script src="js/jquery.blueimp-gallery.js"></script>
|
||||||
<script src="js/demo/demo.js"></script>
|
<script src="js/demo/demo.js"></script>
|
||||||
</body>
|
</body>
|
||||||
</html>
|
</html>
|
||||||
@@ -1,86 +1,86 @@
|
|||||||
/*
|
/*
|
||||||
* blueimp Gallery Fullscreen JS
|
* blueimp Gallery Fullscreen JS
|
||||||
* https://github.com/blueimp/Gallery
|
* https://github.com/blueimp/Gallery
|
||||||
*
|
*
|
||||||
* Copyright 2013, Sebastian Tschan
|
* Copyright 2013, Sebastian Tschan
|
||||||
* https://blueimp.net
|
* https://blueimp.net
|
||||||
*
|
*
|
||||||
* Licensed under the MIT license:
|
* Licensed under the MIT license:
|
||||||
* https://opensource.org/licenses/MIT
|
* https://opensource.org/licenses/MIT
|
||||||
*/
|
*/
|
||||||
|
|
||||||
/* global define */
|
/* global define */
|
||||||
|
|
||||||
;(function (factory) {
|
;(function (factory) {
|
||||||
'use strict'
|
'use strict'
|
||||||
if (typeof define === 'function' && define.amd) {
|
if (typeof define === 'function' && define.amd) {
|
||||||
// Register as an anonymous AMD module:
|
// Register as an anonymous AMD module:
|
||||||
define(['./blueimp-helper', './blueimp-gallery'], factory)
|
define(['./blueimp-helper', './blueimp-gallery'], factory)
|
||||||
} else {
|
} else {
|
||||||
// Browser globals:
|
// Browser globals:
|
||||||
factory(window.blueimp.helper || window.jQuery, window.blueimp.Gallery)
|
factory(window.blueimp.helper || window.jQuery, window.blueimp.Gallery)
|
||||||
}
|
}
|
||||||
})(function ($, Gallery) {
|
})(function ($, Gallery) {
|
||||||
'use strict'
|
'use strict'
|
||||||
|
|
||||||
var galleryPrototype = Gallery.prototype
|
var galleryPrototype = Gallery.prototype
|
||||||
|
|
||||||
$.extend(galleryPrototype.options, {
|
$.extend(galleryPrototype.options, {
|
||||||
// Defines if the gallery should open in fullscreen mode:
|
// Defines if the gallery should open in fullscreen mode:
|
||||||
fullscreen: false
|
fullscreen: false
|
||||||
})
|
})
|
||||||
|
|
||||||
var initialize = galleryPrototype.initialize
|
var initialize = galleryPrototype.initialize
|
||||||
var close = galleryPrototype.close
|
var close = galleryPrototype.close
|
||||||
|
|
||||||
$.extend(galleryPrototype, {
|
$.extend(galleryPrototype, {
|
||||||
getFullScreenElement: function () {
|
getFullScreenElement: function () {
|
||||||
return (
|
return (
|
||||||
document.fullscreenElement ||
|
document.fullscreenElement ||
|
||||||
document.webkitFullscreenElement ||
|
document.webkitFullscreenElement ||
|
||||||
document.mozFullScreenElement ||
|
document.mozFullScreenElement ||
|
||||||
document.msFullscreenElement
|
document.msFullscreenElement
|
||||||
)
|
)
|
||||||
},
|
},
|
||||||
|
|
||||||
requestFullScreen: function (element) {
|
requestFullScreen: function (element) {
|
||||||
if (element.requestFullscreen) {
|
if (element.requestFullscreen) {
|
||||||
element.requestFullscreen()
|
element.requestFullscreen()
|
||||||
} else if (element.webkitRequestFullscreen) {
|
} else if (element.webkitRequestFullscreen) {
|
||||||
element.webkitRequestFullscreen()
|
element.webkitRequestFullscreen()
|
||||||
} else if (element.mozRequestFullScreen) {
|
} else if (element.mozRequestFullScreen) {
|
||||||
element.mozRequestFullScreen()
|
element.mozRequestFullScreen()
|
||||||
} else if (element.msRequestFullscreen) {
|
} else if (element.msRequestFullscreen) {
|
||||||
element.msRequestFullscreen()
|
element.msRequestFullscreen()
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
|
||||||
exitFullScreen: function () {
|
exitFullScreen: function () {
|
||||||
if (document.exitFullscreen) {
|
if (document.exitFullscreen) {
|
||||||
document.exitFullscreen()
|
document.exitFullscreen()
|
||||||
} else if (document.webkitCancelFullScreen) {
|
} else if (document.webkitCancelFullScreen) {
|
||||||
document.webkitCancelFullScreen()
|
document.webkitCancelFullScreen()
|
||||||
} else if (document.mozCancelFullScreen) {
|
} else if (document.mozCancelFullScreen) {
|
||||||
document.mozCancelFullScreen()
|
document.mozCancelFullScreen()
|
||||||
} else if (document.msExitFullscreen) {
|
} else if (document.msExitFullscreen) {
|
||||||
document.msExitFullscreen()
|
document.msExitFullscreen()
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
|
||||||
initialize: function () {
|
initialize: function () {
|
||||||
initialize.call(this)
|
initialize.call(this)
|
||||||
if (this.options.fullscreen && !this.getFullScreenElement()) {
|
if (this.options.fullscreen && !this.getFullScreenElement()) {
|
||||||
this.requestFullScreen(this.container[0])
|
this.requestFullScreen(this.container[0])
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
|
||||||
close: function () {
|
close: function () {
|
||||||
if (this.getFullScreenElement() === this.container[0]) {
|
if (this.getFullScreenElement() === this.container[0]) {
|
||||||
this.exitFullScreen()
|
this.exitFullScreen()
|
||||||
}
|
}
|
||||||
close.call(this)
|
close.call(this)
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
|
|
||||||
return Gallery
|
return Gallery
|
||||||
})
|
})
|
||||||
@@ -1,148 +1,148 @@
|
|||||||
/*
|
/*
|
||||||
* blueimp Gallery Indicator JS
|
* blueimp Gallery Indicator JS
|
||||||
* https://github.com/blueimp/Gallery
|
* https://github.com/blueimp/Gallery
|
||||||
*
|
*
|
||||||
* Copyright 2013, Sebastian Tschan
|
* Copyright 2013, Sebastian Tschan
|
||||||
* https://blueimp.net
|
* https://blueimp.net
|
||||||
*
|
*
|
||||||
* Licensed under the MIT license:
|
* Licensed under the MIT license:
|
||||||
* https://opensource.org/licenses/MIT
|
* https://opensource.org/licenses/MIT
|
||||||
*/
|
*/
|
||||||
|
|
||||||
/* global define */
|
/* global define */
|
||||||
|
|
||||||
;(function (factory) {
|
;(function (factory) {
|
||||||
'use strict'
|
'use strict'
|
||||||
if (typeof define === 'function' && define.amd) {
|
if (typeof define === 'function' && define.amd) {
|
||||||
// Register as an anonymous AMD module:
|
// Register as an anonymous AMD module:
|
||||||
define(['./blueimp-helper', './blueimp-gallery'], factory)
|
define(['./blueimp-helper', './blueimp-gallery'], factory)
|
||||||
} else {
|
} else {
|
||||||
// Browser globals:
|
// Browser globals:
|
||||||
factory(window.blueimp.helper || window.jQuery, window.blueimp.Gallery)
|
factory(window.blueimp.helper || window.jQuery, window.blueimp.Gallery)
|
||||||
}
|
}
|
||||||
})(function ($, Gallery) {
|
})(function ($, Gallery) {
|
||||||
'use strict'
|
'use strict'
|
||||||
|
|
||||||
var galleryPrototype = Gallery.prototype
|
var galleryPrototype = Gallery.prototype
|
||||||
|
|
||||||
$.extend(galleryPrototype.options, {
|
$.extend(galleryPrototype.options, {
|
||||||
// The tag name, Id, element or querySelector of the indicator container:
|
// The tag name, Id, element or querySelector of the indicator container:
|
||||||
indicatorContainer: 'ol',
|
indicatorContainer: 'ol',
|
||||||
// The class for the active indicator:
|
// The class for the active indicator:
|
||||||
activeIndicatorClass: 'active',
|
activeIndicatorClass: 'active',
|
||||||
// The list object property (or data attribute) with the thumbnail URL,
|
// The list object property (or data attribute) with the thumbnail URL,
|
||||||
// used as alternative to a thumbnail child element:
|
// used as alternative to a thumbnail child element:
|
||||||
thumbnailProperty: 'thumbnail',
|
thumbnailProperty: 'thumbnail',
|
||||||
// Defines if the gallery indicators should display a thumbnail:
|
// Defines if the gallery indicators should display a thumbnail:
|
||||||
thumbnailIndicators: true
|
thumbnailIndicators: true
|
||||||
})
|
})
|
||||||
|
|
||||||
var initSlides = galleryPrototype.initSlides
|
var initSlides = galleryPrototype.initSlides
|
||||||
var addSlide = galleryPrototype.addSlide
|
var addSlide = galleryPrototype.addSlide
|
||||||
var resetSlides = galleryPrototype.resetSlides
|
var resetSlides = galleryPrototype.resetSlides
|
||||||
var handleClick = galleryPrototype.handleClick
|
var handleClick = galleryPrototype.handleClick
|
||||||
var handleSlide = galleryPrototype.handleSlide
|
var handleSlide = galleryPrototype.handleSlide
|
||||||
var handleClose = galleryPrototype.handleClose
|
var handleClose = galleryPrototype.handleClose
|
||||||
|
|
||||||
$.extend(galleryPrototype, {
|
$.extend(galleryPrototype, {
|
||||||
createIndicator: function (obj) {
|
createIndicator: function (obj) {
|
||||||
var indicator = this.indicatorPrototype.cloneNode(false)
|
var indicator = this.indicatorPrototype.cloneNode(false)
|
||||||
var title = this.getItemProperty(obj, this.options.titleProperty)
|
var title = this.getItemProperty(obj, this.options.titleProperty)
|
||||||
var thumbnailProperty = this.options.thumbnailProperty
|
var thumbnailProperty = this.options.thumbnailProperty
|
||||||
var thumbnailUrl
|
var thumbnailUrl
|
||||||
var thumbnail
|
var thumbnail
|
||||||
if (this.options.thumbnailIndicators) {
|
if (this.options.thumbnailIndicators) {
|
||||||
if (thumbnailProperty) {
|
if (thumbnailProperty) {
|
||||||
thumbnailUrl = this.getItemProperty(obj, thumbnailProperty)
|
thumbnailUrl = this.getItemProperty(obj, thumbnailProperty)
|
||||||
}
|
}
|
||||||
if (thumbnailUrl === undefined) {
|
if (thumbnailUrl === undefined) {
|
||||||
thumbnail = obj.getElementsByTagName && $(obj).find('img')[0]
|
thumbnail = obj.getElementsByTagName && $(obj).find('img')[0]
|
||||||
if (thumbnail) {
|
if (thumbnail) {
|
||||||
thumbnailUrl = thumbnail.src
|
thumbnailUrl = thumbnail.src
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (thumbnailUrl) {
|
if (thumbnailUrl) {
|
||||||
indicator.style.backgroundImage = 'url("' + thumbnailUrl + '")'
|
indicator.style.backgroundImage = 'url("' + thumbnailUrl + '")'
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (title) {
|
if (title) {
|
||||||
indicator.title = title
|
indicator.title = title
|
||||||
}
|
}
|
||||||
indicator.setAttribute('role', 'link')
|
indicator.setAttribute('role', 'link')
|
||||||
return indicator
|
return indicator
|
||||||
},
|
},
|
||||||
|
|
||||||
addIndicator: function (index) {
|
addIndicator: function (index) {
|
||||||
if (this.indicatorContainer.length) {
|
if (this.indicatorContainer.length) {
|
||||||
var indicator = this.createIndicator(this.list[index])
|
var indicator = this.createIndicator(this.list[index])
|
||||||
indicator.setAttribute('data-index', index)
|
indicator.setAttribute('data-index', index)
|
||||||
this.indicatorContainer[0].appendChild(indicator)
|
this.indicatorContainer[0].appendChild(indicator)
|
||||||
this.indicators.push(indicator)
|
this.indicators.push(indicator)
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
|
||||||
setActiveIndicator: function (index) {
|
setActiveIndicator: function (index) {
|
||||||
if (this.indicators) {
|
if (this.indicators) {
|
||||||
if (this.activeIndicator) {
|
if (this.activeIndicator) {
|
||||||
this.activeIndicator.removeClass(this.options.activeIndicatorClass)
|
this.activeIndicator.removeClass(this.options.activeIndicatorClass)
|
||||||
}
|
}
|
||||||
this.activeIndicator = $(this.indicators[index])
|
this.activeIndicator = $(this.indicators[index])
|
||||||
this.activeIndicator.addClass(this.options.activeIndicatorClass)
|
this.activeIndicator.addClass(this.options.activeIndicatorClass)
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
|
||||||
initSlides: function (reload) {
|
initSlides: function (reload) {
|
||||||
if (!reload) {
|
if (!reload) {
|
||||||
this.indicatorContainer = this.container.find(
|
this.indicatorContainer = this.container.find(
|
||||||
this.options.indicatorContainer
|
this.options.indicatorContainer
|
||||||
)
|
)
|
||||||
if (this.indicatorContainer.length) {
|
if (this.indicatorContainer.length) {
|
||||||
this.indicatorPrototype = document.createElement('li')
|
this.indicatorPrototype = document.createElement('li')
|
||||||
this.indicators = this.indicatorContainer[0].children
|
this.indicators = this.indicatorContainer[0].children
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
initSlides.call(this, reload)
|
initSlides.call(this, reload)
|
||||||
},
|
},
|
||||||
|
|
||||||
addSlide: function (index) {
|
addSlide: function (index) {
|
||||||
addSlide.call(this, index)
|
addSlide.call(this, index)
|
||||||
this.addIndicator(index)
|
this.addIndicator(index)
|
||||||
},
|
},
|
||||||
|
|
||||||
resetSlides: function () {
|
resetSlides: function () {
|
||||||
resetSlides.call(this)
|
resetSlides.call(this)
|
||||||
this.indicatorContainer.empty()
|
this.indicatorContainer.empty()
|
||||||
this.indicators = []
|
this.indicators = []
|
||||||
},
|
},
|
||||||
|
|
||||||
handleClick: function (event) {
|
handleClick: function (event) {
|
||||||
var target = event.target || event.srcElement
|
var target = event.target || event.srcElement
|
||||||
var parent = target.parentNode
|
var parent = target.parentNode
|
||||||
if (parent === this.indicatorContainer[0]) {
|
if (parent === this.indicatorContainer[0]) {
|
||||||
// Click on indicator element
|
// Click on indicator element
|
||||||
this.preventDefault(event)
|
this.preventDefault(event)
|
||||||
this.slide(this.getNodeIndex(target))
|
this.slide(this.getNodeIndex(target))
|
||||||
} else if (parent.parentNode === this.indicatorContainer[0]) {
|
} else if (parent.parentNode === this.indicatorContainer[0]) {
|
||||||
// Click on indicator child element
|
// Click on indicator child element
|
||||||
this.preventDefault(event)
|
this.preventDefault(event)
|
||||||
this.slide(this.getNodeIndex(parent))
|
this.slide(this.getNodeIndex(parent))
|
||||||
} else {
|
} else {
|
||||||
return handleClick.call(this, event)
|
return handleClick.call(this, event)
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
|
||||||
handleSlide: function (oldIndex, newIndex) {
|
handleSlide: function (oldIndex, newIndex) {
|
||||||
handleSlide.call(this, oldIndex, newIndex)
|
handleSlide.call(this, oldIndex, newIndex)
|
||||||
this.setActiveIndicator(newIndex)
|
this.setActiveIndicator(newIndex)
|
||||||
},
|
},
|
||||||
|
|
||||||
handleClose: function () {
|
handleClose: function () {
|
||||||
if (this.activeIndicator) {
|
if (this.activeIndicator) {
|
||||||
this.activeIndicator.removeClass(this.options.activeIndicatorClass)
|
this.activeIndicator.removeClass(this.options.activeIndicatorClass)
|
||||||
}
|
}
|
||||||
handleClose.call(this)
|
handleClose.call(this)
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
|
|
||||||
return Gallery
|
return Gallery
|
||||||
})
|
})
|
||||||
@@ -1,188 +1,188 @@
|
|||||||
/*
|
/*
|
||||||
* blueimp Gallery Video Factory JS
|
* blueimp Gallery Video Factory JS
|
||||||
* https://github.com/blueimp/Gallery
|
* https://github.com/blueimp/Gallery
|
||||||
*
|
*
|
||||||
* Copyright 2013, Sebastian Tschan
|
* Copyright 2013, Sebastian Tschan
|
||||||
* https://blueimp.net
|
* https://blueimp.net
|
||||||
*
|
*
|
||||||
* Licensed under the MIT license:
|
* Licensed under the MIT license:
|
||||||
* https://opensource.org/licenses/MIT
|
* https://opensource.org/licenses/MIT
|
||||||
*/
|
*/
|
||||||
|
|
||||||
/* global define */
|
/* global define */
|
||||||
|
|
||||||
;(function (factory) {
|
;(function (factory) {
|
||||||
'use strict'
|
'use strict'
|
||||||
if (typeof define === 'function' && define.amd) {
|
if (typeof define === 'function' && define.amd) {
|
||||||
// Register as an anonymous AMD module:
|
// Register as an anonymous AMD module:
|
||||||
define(['./blueimp-helper', './blueimp-gallery'], factory)
|
define(['./blueimp-helper', './blueimp-gallery'], factory)
|
||||||
} else {
|
} else {
|
||||||
// Browser globals:
|
// Browser globals:
|
||||||
factory(window.blueimp.helper || window.jQuery, window.blueimp.Gallery)
|
factory(window.blueimp.helper || window.jQuery, window.blueimp.Gallery)
|
||||||
}
|
}
|
||||||
})(function ($, Gallery) {
|
})(function ($, Gallery) {
|
||||||
'use strict'
|
'use strict'
|
||||||
|
|
||||||
var galleryPrototype = Gallery.prototype
|
var galleryPrototype = Gallery.prototype
|
||||||
|
|
||||||
$.extend(galleryPrototype.options, {
|
$.extend(galleryPrototype.options, {
|
||||||
// The class for video content elements:
|
// The class for video content elements:
|
||||||
videoContentClass: 'video-content',
|
videoContentClass: 'video-content',
|
||||||
// The class for video when it is loading:
|
// The class for video when it is loading:
|
||||||
videoLoadingClass: 'video-loading',
|
videoLoadingClass: 'video-loading',
|
||||||
// The class for video when it is playing:
|
// The class for video when it is playing:
|
||||||
videoPlayingClass: 'video-playing',
|
videoPlayingClass: 'video-playing',
|
||||||
// The class for video content displayed in an iframe:
|
// The class for video content displayed in an iframe:
|
||||||
videoIframeClass: 'video-iframe',
|
videoIframeClass: 'video-iframe',
|
||||||
// The class for the video cover element:
|
// The class for the video cover element:
|
||||||
videoCoverClass: 'video-cover',
|
videoCoverClass: 'video-cover',
|
||||||
// The class for the video play control:
|
// The class for the video play control:
|
||||||
videoPlayClass: 'video-play',
|
videoPlayClass: 'video-play',
|
||||||
// Play videos inline by default:
|
// Play videos inline by default:
|
||||||
videoPlaysInline: true,
|
videoPlaysInline: true,
|
||||||
// The list object property (or data attribute) for video preload:
|
// The list object property (or data attribute) for video preload:
|
||||||
videoPreloadProperty: 'preload',
|
videoPreloadProperty: 'preload',
|
||||||
// The list object property (or data attribute) for the video poster URL:
|
// The list object property (or data attribute) for the video poster URL:
|
||||||
videoPosterProperty: 'poster'
|
videoPosterProperty: 'poster'
|
||||||
})
|
})
|
||||||
|
|
||||||
var handleSlide = galleryPrototype.handleSlide
|
var handleSlide = galleryPrototype.handleSlide
|
||||||
|
|
||||||
$.extend(galleryPrototype, {
|
$.extend(galleryPrototype, {
|
||||||
handleSlide: function (oldIndex, newIndex) {
|
handleSlide: function (oldIndex, newIndex) {
|
||||||
handleSlide.call(this, oldIndex, newIndex)
|
handleSlide.call(this, oldIndex, newIndex)
|
||||||
this.setTimeout(function () {
|
this.setTimeout(function () {
|
||||||
if (this.activeVideo) {
|
if (this.activeVideo) {
|
||||||
this.activeVideo.pause()
|
this.activeVideo.pause()
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
},
|
},
|
||||||
|
|
||||||
videoFactory: function (obj, callback, videoInterface) {
|
videoFactory: function (obj, callback, videoInterface) {
|
||||||
var that = this
|
var that = this
|
||||||
var options = this.options
|
var options = this.options
|
||||||
var videoContainerNode = this.elementPrototype.cloneNode(false)
|
var videoContainerNode = this.elementPrototype.cloneNode(false)
|
||||||
var videoContainer = $(videoContainerNode)
|
var videoContainer = $(videoContainerNode)
|
||||||
var errorArgs = [
|
var errorArgs = [
|
||||||
{
|
{
|
||||||
type: 'error',
|
type: 'error',
|
||||||
target: videoContainerNode
|
target: videoContainerNode
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
var video = videoInterface || document.createElement('video')
|
var video = videoInterface || document.createElement('video')
|
||||||
var coverElement = this.elementPrototype.cloneNode(false)
|
var coverElement = this.elementPrototype.cloneNode(false)
|
||||||
var playElement = document.createElement('a')
|
var playElement = document.createElement('a')
|
||||||
var url = this.getItemProperty(obj, options.urlProperty)
|
var url = this.getItemProperty(obj, options.urlProperty)
|
||||||
var sources = this.getItemProperty(obj, options.sourcesProperty)
|
var sources = this.getItemProperty(obj, options.sourcesProperty)
|
||||||
var title = this.getItemProperty(obj, options.titleProperty)
|
var title = this.getItemProperty(obj, options.titleProperty)
|
||||||
var posterUrl = this.getItemProperty(obj, options.videoPosterProperty)
|
var posterUrl = this.getItemProperty(obj, options.videoPosterProperty)
|
||||||
var playControls = [playElement]
|
var playControls = [playElement]
|
||||||
var hasGalleryControls
|
var hasGalleryControls
|
||||||
var isLoading
|
var isLoading
|
||||||
var i
|
var i
|
||||||
videoContainer.addClass(options.videoContentClass)
|
videoContainer.addClass(options.videoContentClass)
|
||||||
$(playElement).addClass(options.videoPlayClass)
|
$(playElement).addClass(options.videoPlayClass)
|
||||||
if (
|
if (
|
||||||
!$(coverElement)
|
!$(coverElement)
|
||||||
.addClass(options.videoCoverClass)
|
.addClass(options.videoCoverClass)
|
||||||
.hasClass(options.toggleClass)
|
.hasClass(options.toggleClass)
|
||||||
) {
|
) {
|
||||||
playControls.push(coverElement)
|
playControls.push(coverElement)
|
||||||
}
|
}
|
||||||
coverElement.draggable = false
|
coverElement.draggable = false
|
||||||
if (title) {
|
if (title) {
|
||||||
videoContainerNode.title = title
|
videoContainerNode.title = title
|
||||||
playElement.setAttribute('aria-label', title)
|
playElement.setAttribute('aria-label', title)
|
||||||
}
|
}
|
||||||
if (posterUrl) {
|
if (posterUrl) {
|
||||||
// Set as background image instead of as poster video element property:
|
// Set as background image instead of as poster video element property:
|
||||||
// - Is accessible for browsers that do not support the video element
|
// - Is accessible for browsers that do not support the video element
|
||||||
// - Is accessible for both video element and iframe video players
|
// - Is accessible for both video element and iframe video players
|
||||||
// - Avoids visual artifacts in IE with the poster property set
|
// - Avoids visual artifacts in IE with the poster property set
|
||||||
coverElement.style.backgroundImage = 'url("' + posterUrl + '")'
|
coverElement.style.backgroundImage = 'url("' + posterUrl + '")'
|
||||||
}
|
}
|
||||||
if (video.setAttribute) {
|
if (video.setAttribute) {
|
||||||
if (options.videoPlaysInline) video.setAttribute('playsinline', '')
|
if (options.videoPlaysInline) video.setAttribute('playsinline', '')
|
||||||
} else {
|
} else {
|
||||||
videoContainer.addClass(options.videoIframeClass)
|
videoContainer.addClass(options.videoIframeClass)
|
||||||
}
|
}
|
||||||
video.preload =
|
video.preload =
|
||||||
this.getItemProperty(obj, options.videoPreloadProperty) || 'none'
|
this.getItemProperty(obj, options.videoPreloadProperty) || 'none'
|
||||||
if (this.support.source && sources) {
|
if (this.support.source && sources) {
|
||||||
for (i = 0; i < sources.length; i += 1) {
|
for (i = 0; i < sources.length; i += 1) {
|
||||||
video.appendChild(
|
video.appendChild(
|
||||||
$.extend(this.sourcePrototype.cloneNode(false), sources[i])
|
$.extend(this.sourcePrototype.cloneNode(false), sources[i])
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (url) video.src = url
|
if (url) video.src = url
|
||||||
playElement.href = url || (sources && sources.length && sources[0].src)
|
playElement.href = url || (sources && sources.length && sources[0].src)
|
||||||
if (video.play && video.pause) {
|
if (video.play && video.pause) {
|
||||||
;(videoInterface || $(video))
|
;(videoInterface || $(video))
|
||||||
.on('error', function () {
|
.on('error', function () {
|
||||||
that.setTimeout(callback, errorArgs)
|
that.setTimeout(callback, errorArgs)
|
||||||
})
|
})
|
||||||
.on('pause', function () {
|
.on('pause', function () {
|
||||||
if (video.seeking) return
|
if (video.seeking) return
|
||||||
isLoading = false
|
isLoading = false
|
||||||
videoContainer
|
videoContainer
|
||||||
.removeClass(that.options.videoLoadingClass)
|
.removeClass(that.options.videoLoadingClass)
|
||||||
.removeClass(that.options.videoPlayingClass)
|
.removeClass(that.options.videoPlayingClass)
|
||||||
if (hasGalleryControls) {
|
if (hasGalleryControls) {
|
||||||
that.container.addClass(that.options.controlsClass)
|
that.container.addClass(that.options.controlsClass)
|
||||||
}
|
}
|
||||||
video.controls = false
|
video.controls = false
|
||||||
if (video === that.activeVideo) delete that.activeVideo
|
if (video === that.activeVideo) delete that.activeVideo
|
||||||
if (that.interval) {
|
if (that.interval) {
|
||||||
// Continue slideshow interval
|
// Continue slideshow interval
|
||||||
that.play()
|
that.play()
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
.on('playing', function () {
|
.on('playing', function () {
|
||||||
isLoading = false
|
isLoading = false
|
||||||
coverElement.removeAttribute('style')
|
coverElement.removeAttribute('style')
|
||||||
videoContainer
|
videoContainer
|
||||||
.removeClass(that.options.videoLoadingClass)
|
.removeClass(that.options.videoLoadingClass)
|
||||||
.addClass(that.options.videoPlayingClass)
|
.addClass(that.options.videoPlayingClass)
|
||||||
})
|
})
|
||||||
.on('play', function () {
|
.on('play', function () {
|
||||||
// Clear slideshow timeout:
|
// Clear slideshow timeout:
|
||||||
window.clearTimeout(that.timeout)
|
window.clearTimeout(that.timeout)
|
||||||
isLoading = true
|
isLoading = true
|
||||||
videoContainer.addClass(that.options.videoLoadingClass)
|
videoContainer.addClass(that.options.videoLoadingClass)
|
||||||
if (that.container.hasClass(that.options.controlsClass)) {
|
if (that.container.hasClass(that.options.controlsClass)) {
|
||||||
hasGalleryControls = true
|
hasGalleryControls = true
|
||||||
that.container.removeClass(that.options.controlsClass)
|
that.container.removeClass(that.options.controlsClass)
|
||||||
} else {
|
} else {
|
||||||
hasGalleryControls = false
|
hasGalleryControls = false
|
||||||
}
|
}
|
||||||
video.controls = true
|
video.controls = true
|
||||||
that.activeVideo = video
|
that.activeVideo = video
|
||||||
})
|
})
|
||||||
$(playControls).on('click', function (event) {
|
$(playControls).on('click', function (event) {
|
||||||
that.preventDefault(event)
|
that.preventDefault(event)
|
||||||
that.activeVideo = video
|
that.activeVideo = video
|
||||||
if (isLoading) {
|
if (isLoading) {
|
||||||
video.pause()
|
video.pause()
|
||||||
} else {
|
} else {
|
||||||
video.play()
|
video.play()
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
videoContainerNode.appendChild(
|
videoContainerNode.appendChild(
|
||||||
(videoInterface && videoInterface.element) || video
|
(videoInterface && videoInterface.element) || video
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
videoContainerNode.appendChild(coverElement)
|
videoContainerNode.appendChild(coverElement)
|
||||||
videoContainerNode.appendChild(playElement)
|
videoContainerNode.appendChild(playElement)
|
||||||
this.setTimeout(callback, [
|
this.setTimeout(callback, [
|
||||||
{
|
{
|
||||||
type: 'load',
|
type: 'load',
|
||||||
target: videoContainerNode
|
target: videoContainerNode
|
||||||
}
|
}
|
||||||
])
|
])
|
||||||
return videoContainerNode
|
return videoContainerNode
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
|
|
||||||
return Gallery
|
return Gallery
|
||||||
})
|
})
|
||||||
@@ -1,212 +1,212 @@
|
|||||||
/*
|
/*
|
||||||
* blueimp Gallery Vimeo Video Factory JS
|
* blueimp Gallery Vimeo Video Factory JS
|
||||||
* https://github.com/blueimp/Gallery
|
* https://github.com/blueimp/Gallery
|
||||||
*
|
*
|
||||||
* Copyright 2013, Sebastian Tschan
|
* Copyright 2013, Sebastian Tschan
|
||||||
* https://blueimp.net
|
* https://blueimp.net
|
||||||
*
|
*
|
||||||
* Licensed under the MIT license:
|
* Licensed under the MIT license:
|
||||||
* https://opensource.org/licenses/MIT
|
* https://opensource.org/licenses/MIT
|
||||||
*/
|
*/
|
||||||
|
|
||||||
/* global define, $f */
|
/* global define, $f */
|
||||||
|
|
||||||
;(function (factory) {
|
;(function (factory) {
|
||||||
'use strict'
|
'use strict'
|
||||||
if (typeof define === 'function' && define.amd) {
|
if (typeof define === 'function' && define.amd) {
|
||||||
// Register as an anonymous AMD module:
|
// Register as an anonymous AMD module:
|
||||||
define(['./blueimp-helper', './blueimp-gallery-video'], factory)
|
define(['./blueimp-helper', './blueimp-gallery-video'], factory)
|
||||||
} else {
|
} else {
|
||||||
// Browser globals:
|
// Browser globals:
|
||||||
factory(window.blueimp.helper || window.jQuery, window.blueimp.Gallery)
|
factory(window.blueimp.helper || window.jQuery, window.blueimp.Gallery)
|
||||||
}
|
}
|
||||||
})(function ($, Gallery) {
|
})(function ($, Gallery) {
|
||||||
'use strict'
|
'use strict'
|
||||||
|
|
||||||
if (!window.postMessage) {
|
if (!window.postMessage) {
|
||||||
return Gallery
|
return Gallery
|
||||||
}
|
}
|
||||||
|
|
||||||
var galleryPrototype = Gallery.prototype
|
var galleryPrototype = Gallery.prototype
|
||||||
|
|
||||||
$.extend(galleryPrototype.options, {
|
$.extend(galleryPrototype.options, {
|
||||||
// The list object property (or data attribute) with the Vimeo video id:
|
// The list object property (or data attribute) with the Vimeo video id:
|
||||||
vimeoVideoIdProperty: 'vimeo',
|
vimeoVideoIdProperty: 'vimeo',
|
||||||
// The URL for the Vimeo video player, can be extended with custom parameters:
|
// The URL for the Vimeo video player, can be extended with custom parameters:
|
||||||
// https://developer.vimeo.com/player/embedding
|
// https://developer.vimeo.com/player/embedding
|
||||||
vimeoPlayerUrl:
|
vimeoPlayerUrl:
|
||||||
'https://player.vimeo.com/video/VIDEO_ID?api=1&player_id=PLAYER_ID',
|
'https://player.vimeo.com/video/VIDEO_ID?api=1&player_id=PLAYER_ID',
|
||||||
// The prefix for the Vimeo video player ID:
|
// The prefix for the Vimeo video player ID:
|
||||||
vimeoPlayerIdPrefix: 'vimeo-player-',
|
vimeoPlayerIdPrefix: 'vimeo-player-',
|
||||||
// Require a click on the native Vimeo player for the initial playback:
|
// Require a click on the native Vimeo player for the initial playback:
|
||||||
vimeoClickToPlay: false
|
vimeoClickToPlay: false
|
||||||
})
|
})
|
||||||
|
|
||||||
var textFactory =
|
var textFactory =
|
||||||
galleryPrototype.textFactory || galleryPrototype.imageFactory
|
galleryPrototype.textFactory || galleryPrototype.imageFactory
|
||||||
var VimeoPlayer = function (url, videoId, playerId, clickToPlay) {
|
var VimeoPlayer = function (url, videoId, playerId, clickToPlay) {
|
||||||
this.url = url
|
this.url = url
|
||||||
this.videoId = videoId
|
this.videoId = videoId
|
||||||
this.playerId = playerId
|
this.playerId = playerId
|
||||||
this.clickToPlay = clickToPlay
|
this.clickToPlay = clickToPlay
|
||||||
this.element = document.createElement('div')
|
this.element = document.createElement('div')
|
||||||
this.listeners = {}
|
this.listeners = {}
|
||||||
}
|
}
|
||||||
var counter = 0
|
var counter = 0
|
||||||
|
|
||||||
$.extend(VimeoPlayer.prototype, {
|
$.extend(VimeoPlayer.prototype, {
|
||||||
on: function (type, func) {
|
on: function (type, func) {
|
||||||
this.listeners[type] = func
|
this.listeners[type] = func
|
||||||
return this
|
return this
|
||||||
},
|
},
|
||||||
|
|
||||||
loadAPI: function () {
|
loadAPI: function () {
|
||||||
var that = this
|
var that = this
|
||||||
var apiUrl = 'https://f.vimeocdn.com/js/froogaloop2.min.js'
|
var apiUrl = 'https://f.vimeocdn.com/js/froogaloop2.min.js'
|
||||||
var scriptTags = document.getElementsByTagName('script')
|
var scriptTags = document.getElementsByTagName('script')
|
||||||
var i = scriptTags.length
|
var i = scriptTags.length
|
||||||
var scriptTag
|
var scriptTag
|
||||||
var called
|
var called
|
||||||
/**
|
/**
|
||||||
* Callback function
|
* Callback function
|
||||||
*/
|
*/
|
||||||
function callback() {
|
function callback() {
|
||||||
if (!called && that.playOnReady) {
|
if (!called && that.playOnReady) {
|
||||||
that.play()
|
that.play()
|
||||||
}
|
}
|
||||||
called = true
|
called = true
|
||||||
}
|
}
|
||||||
while (i) {
|
while (i) {
|
||||||
i -= 1
|
i -= 1
|
||||||
if (scriptTags[i].src === apiUrl) {
|
if (scriptTags[i].src === apiUrl) {
|
||||||
scriptTag = scriptTags[i]
|
scriptTag = scriptTags[i]
|
||||||
break
|
break
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (!scriptTag) {
|
if (!scriptTag) {
|
||||||
scriptTag = document.createElement('script')
|
scriptTag = document.createElement('script')
|
||||||
scriptTag.src = apiUrl
|
scriptTag.src = apiUrl
|
||||||
}
|
}
|
||||||
$(scriptTag).on('load', callback)
|
$(scriptTag).on('load', callback)
|
||||||
scriptTags[0].parentNode.insertBefore(scriptTag, scriptTags[0])
|
scriptTags[0].parentNode.insertBefore(scriptTag, scriptTags[0])
|
||||||
// Fix for cached scripts on IE 8:
|
// Fix for cached scripts on IE 8:
|
||||||
if (/loaded|complete/.test(scriptTag.readyState)) {
|
if (/loaded|complete/.test(scriptTag.readyState)) {
|
||||||
callback()
|
callback()
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
|
||||||
onReady: function () {
|
onReady: function () {
|
||||||
var that = this
|
var that = this
|
||||||
this.ready = true
|
this.ready = true
|
||||||
this.player.addEvent('play', function () {
|
this.player.addEvent('play', function () {
|
||||||
that.hasPlayed = true
|
that.hasPlayed = true
|
||||||
that.onPlaying()
|
that.onPlaying()
|
||||||
})
|
})
|
||||||
this.player.addEvent('pause', function () {
|
this.player.addEvent('pause', function () {
|
||||||
that.onPause()
|
that.onPause()
|
||||||
})
|
})
|
||||||
this.player.addEvent('finish', function () {
|
this.player.addEvent('finish', function () {
|
||||||
that.onPause()
|
that.onPause()
|
||||||
})
|
})
|
||||||
if (this.playOnReady) {
|
if (this.playOnReady) {
|
||||||
this.play()
|
this.play()
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
|
||||||
onPlaying: function () {
|
onPlaying: function () {
|
||||||
if (this.playStatus < 2) {
|
if (this.playStatus < 2) {
|
||||||
this.listeners.playing()
|
this.listeners.playing()
|
||||||
this.playStatus = 2
|
this.playStatus = 2
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
|
||||||
onPause: function () {
|
onPause: function () {
|
||||||
this.listeners.pause()
|
this.listeners.pause()
|
||||||
delete this.playStatus
|
delete this.playStatus
|
||||||
},
|
},
|
||||||
|
|
||||||
insertIframe: function () {
|
insertIframe: function () {
|
||||||
var iframe = document.createElement('iframe')
|
var iframe = document.createElement('iframe')
|
||||||
iframe.src = this.url
|
iframe.src = this.url
|
||||||
.replace('VIDEO_ID', this.videoId)
|
.replace('VIDEO_ID', this.videoId)
|
||||||
.replace('PLAYER_ID', this.playerId)
|
.replace('PLAYER_ID', this.playerId)
|
||||||
iframe.id = this.playerId
|
iframe.id = this.playerId
|
||||||
iframe.allow = 'autoplay'
|
iframe.allow = 'autoplay'
|
||||||
this.element.parentNode.replaceChild(iframe, this.element)
|
this.element.parentNode.replaceChild(iframe, this.element)
|
||||||
this.element = iframe
|
this.element = iframe
|
||||||
},
|
},
|
||||||
|
|
||||||
play: function () {
|
play: function () {
|
||||||
var that = this
|
var that = this
|
||||||
if (!this.playStatus) {
|
if (!this.playStatus) {
|
||||||
this.listeners.play()
|
this.listeners.play()
|
||||||
this.playStatus = 1
|
this.playStatus = 1
|
||||||
}
|
}
|
||||||
if (this.ready) {
|
if (this.ready) {
|
||||||
if (
|
if (
|
||||||
!this.hasPlayed &&
|
!this.hasPlayed &&
|
||||||
(this.clickToPlay ||
|
(this.clickToPlay ||
|
||||||
(window.navigator &&
|
(window.navigator &&
|
||||||
/iP(hone|od|ad)/.test(window.navigator.platform)))
|
/iP(hone|od|ad)/.test(window.navigator.platform)))
|
||||||
) {
|
) {
|
||||||
// Manually trigger the playing callback if clickToPlay
|
// Manually trigger the playing callback if clickToPlay
|
||||||
// is enabled and to workaround a limitation in iOS,
|
// is enabled and to workaround a limitation in iOS,
|
||||||
// which requires synchronous user interaction to start
|
// which requires synchronous user interaction to start
|
||||||
// the video playback:
|
// the video playback:
|
||||||
this.onPlaying()
|
this.onPlaying()
|
||||||
} else {
|
} else {
|
||||||
this.player.api('play')
|
this.player.api('play')
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
this.playOnReady = true
|
this.playOnReady = true
|
||||||
if (!window.$f) {
|
if (!window.$f) {
|
||||||
this.loadAPI()
|
this.loadAPI()
|
||||||
} else if (!this.player) {
|
} else if (!this.player) {
|
||||||
this.insertIframe()
|
this.insertIframe()
|
||||||
this.player = $f(this.element)
|
this.player = $f(this.element)
|
||||||
this.player.addEvent('ready', function () {
|
this.player.addEvent('ready', function () {
|
||||||
that.onReady()
|
that.onReady()
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
|
||||||
pause: function () {
|
pause: function () {
|
||||||
if (this.ready) {
|
if (this.ready) {
|
||||||
this.player.api('pause')
|
this.player.api('pause')
|
||||||
} else if (this.playStatus) {
|
} else if (this.playStatus) {
|
||||||
delete this.playOnReady
|
delete this.playOnReady
|
||||||
this.listeners.pause()
|
this.listeners.pause()
|
||||||
delete this.playStatus
|
delete this.playStatus
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
|
|
||||||
$.extend(galleryPrototype, {
|
$.extend(galleryPrototype, {
|
||||||
VimeoPlayer: VimeoPlayer,
|
VimeoPlayer: VimeoPlayer,
|
||||||
|
|
||||||
textFactory: function (obj, callback) {
|
textFactory: function (obj, callback) {
|
||||||
var options = this.options
|
var options = this.options
|
||||||
var videoId = this.getItemProperty(obj, options.vimeoVideoIdProperty)
|
var videoId = this.getItemProperty(obj, options.vimeoVideoIdProperty)
|
||||||
if (videoId) {
|
if (videoId) {
|
||||||
if (this.getItemProperty(obj, options.urlProperty) === undefined) {
|
if (this.getItemProperty(obj, options.urlProperty) === undefined) {
|
||||||
obj[options.urlProperty] = 'https://vimeo.com/' + videoId
|
obj[options.urlProperty] = 'https://vimeo.com/' + videoId
|
||||||
}
|
}
|
||||||
counter += 1
|
counter += 1
|
||||||
return this.videoFactory(
|
return this.videoFactory(
|
||||||
obj,
|
obj,
|
||||||
callback,
|
callback,
|
||||||
new VimeoPlayer(
|
new VimeoPlayer(
|
||||||
options.vimeoPlayerUrl,
|
options.vimeoPlayerUrl,
|
||||||
videoId,
|
videoId,
|
||||||
options.vimeoPlayerIdPrefix + counter,
|
options.vimeoPlayerIdPrefix + counter,
|
||||||
options.vimeoClickToPlay
|
options.vimeoClickToPlay
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
return textFactory.call(this, obj, callback)
|
return textFactory.call(this, obj, callback)
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
|
|
||||||
return Gallery
|
return Gallery
|
||||||
})
|
})
|
||||||
@@ -1,224 +1,224 @@
|
|||||||
/*
|
/*
|
||||||
* blueimp Gallery YouTube Video Factory JS
|
* blueimp Gallery YouTube Video Factory JS
|
||||||
* https://github.com/blueimp/Gallery
|
* https://github.com/blueimp/Gallery
|
||||||
*
|
*
|
||||||
* Copyright 2013, Sebastian Tschan
|
* Copyright 2013, Sebastian Tschan
|
||||||
* https://blueimp.net
|
* https://blueimp.net
|
||||||
*
|
*
|
||||||
* Licensed under the MIT license:
|
* Licensed under the MIT license:
|
||||||
* https://opensource.org/licenses/MIT
|
* https://opensource.org/licenses/MIT
|
||||||
*/
|
*/
|
||||||
|
|
||||||
/* global define, YT */
|
/* global define, YT */
|
||||||
|
|
||||||
;(function (factory) {
|
;(function (factory) {
|
||||||
'use strict'
|
'use strict'
|
||||||
if (typeof define === 'function' && define.amd) {
|
if (typeof define === 'function' && define.amd) {
|
||||||
// Register as an anonymous AMD module:
|
// Register as an anonymous AMD module:
|
||||||
define(['./blueimp-helper', './blueimp-gallery-video'], factory)
|
define(['./blueimp-helper', './blueimp-gallery-video'], factory)
|
||||||
} else {
|
} else {
|
||||||
// Browser globals:
|
// Browser globals:
|
||||||
factory(window.blueimp.helper || window.jQuery, window.blueimp.Gallery)
|
factory(window.blueimp.helper || window.jQuery, window.blueimp.Gallery)
|
||||||
}
|
}
|
||||||
})(function ($, Gallery) {
|
})(function ($, Gallery) {
|
||||||
'use strict'
|
'use strict'
|
||||||
|
|
||||||
if (!window.postMessage) {
|
if (!window.postMessage) {
|
||||||
return Gallery
|
return Gallery
|
||||||
}
|
}
|
||||||
|
|
||||||
var galleryPrototype = Gallery.prototype
|
var galleryPrototype = Gallery.prototype
|
||||||
|
|
||||||
$.extend(galleryPrototype.options, {
|
$.extend(galleryPrototype.options, {
|
||||||
// The list object property (or data attribute) with the YouTube video id:
|
// The list object property (or data attribute) with the YouTube video id:
|
||||||
youTubeVideoIdProperty: 'youtube',
|
youTubeVideoIdProperty: 'youtube',
|
||||||
// Optional object with parameters passed to the YouTube video player:
|
// Optional object with parameters passed to the YouTube video player:
|
||||||
// https://developers.google.com/youtube/player_parameters
|
// https://developers.google.com/youtube/player_parameters
|
||||||
youTubePlayerVars: {
|
youTubePlayerVars: {
|
||||||
wmode: 'transparent'
|
wmode: 'transparent'
|
||||||
},
|
},
|
||||||
// Require a click on the native YouTube player for the initial playback:
|
// Require a click on the native YouTube player for the initial playback:
|
||||||
youTubeClickToPlay: false
|
youTubeClickToPlay: false
|
||||||
})
|
})
|
||||||
|
|
||||||
var textFactory =
|
var textFactory =
|
||||||
galleryPrototype.textFactory || galleryPrototype.imageFactory
|
galleryPrototype.textFactory || galleryPrototype.imageFactory
|
||||||
var YouTubePlayer = function (videoId, playerVars, clickToPlay) {
|
var YouTubePlayer = function (videoId, playerVars, clickToPlay) {
|
||||||
this.videoId = videoId
|
this.videoId = videoId
|
||||||
this.playerVars = playerVars
|
this.playerVars = playerVars
|
||||||
this.clickToPlay = clickToPlay
|
this.clickToPlay = clickToPlay
|
||||||
this.element = document.createElement('div')
|
this.element = document.createElement('div')
|
||||||
this.listeners = {}
|
this.listeners = {}
|
||||||
}
|
}
|
||||||
|
|
||||||
$.extend(YouTubePlayer.prototype, {
|
$.extend(YouTubePlayer.prototype, {
|
||||||
on: function (type, func) {
|
on: function (type, func) {
|
||||||
this.listeners[type] = func
|
this.listeners[type] = func
|
||||||
return this
|
return this
|
||||||
},
|
},
|
||||||
|
|
||||||
loadAPI: function () {
|
loadAPI: function () {
|
||||||
var that = this
|
var that = this
|
||||||
var onYouTubeIframeAPIReady = window.onYouTubeIframeAPIReady
|
var onYouTubeIframeAPIReady = window.onYouTubeIframeAPIReady
|
||||||
var apiUrl = 'https://www.youtube.com/iframe_api'
|
var apiUrl = 'https://www.youtube.com/iframe_api'
|
||||||
var scriptTags = document.getElementsByTagName('script')
|
var scriptTags = document.getElementsByTagName('script')
|
||||||
var i = scriptTags.length
|
var i = scriptTags.length
|
||||||
var scriptTag
|
var scriptTag
|
||||||
window.onYouTubeIframeAPIReady = function () {
|
window.onYouTubeIframeAPIReady = function () {
|
||||||
if (onYouTubeIframeAPIReady) {
|
if (onYouTubeIframeAPIReady) {
|
||||||
onYouTubeIframeAPIReady.apply(this)
|
onYouTubeIframeAPIReady.apply(this)
|
||||||
}
|
}
|
||||||
if (that.playOnReady) {
|
if (that.playOnReady) {
|
||||||
that.play()
|
that.play()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
while (i) {
|
while (i) {
|
||||||
i -= 1
|
i -= 1
|
||||||
if (scriptTags[i].src === apiUrl) {
|
if (scriptTags[i].src === apiUrl) {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
scriptTag = document.createElement('script')
|
scriptTag = document.createElement('script')
|
||||||
scriptTag.src = apiUrl
|
scriptTag.src = apiUrl
|
||||||
scriptTags[0].parentNode.insertBefore(scriptTag, scriptTags[0])
|
scriptTags[0].parentNode.insertBefore(scriptTag, scriptTags[0])
|
||||||
},
|
},
|
||||||
|
|
||||||
onReady: function () {
|
onReady: function () {
|
||||||
this.ready = true
|
this.ready = true
|
||||||
if (this.playOnReady) {
|
if (this.playOnReady) {
|
||||||
this.play()
|
this.play()
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
|
||||||
onPlaying: function () {
|
onPlaying: function () {
|
||||||
if (this.playStatus < 2) {
|
if (this.playStatus < 2) {
|
||||||
this.listeners.playing()
|
this.listeners.playing()
|
||||||
this.playStatus = 2
|
this.playStatus = 2
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
|
||||||
onPause: function () {
|
onPause: function () {
|
||||||
this.listeners.pause()
|
this.listeners.pause()
|
||||||
delete this.playStatus
|
delete this.playStatus
|
||||||
},
|
},
|
||||||
|
|
||||||
onStateChange: function (event) {
|
onStateChange: function (event) {
|
||||||
window.clearTimeout(this.pauseTimeout)
|
window.clearTimeout(this.pauseTimeout)
|
||||||
switch (event.data) {
|
switch (event.data) {
|
||||||
case YT.PlayerState.PLAYING:
|
case YT.PlayerState.PLAYING:
|
||||||
this.hasPlayed = true
|
this.hasPlayed = true
|
||||||
this.onPlaying()
|
this.onPlaying()
|
||||||
break
|
break
|
||||||
case YT.PlayerState.UNSTARTED:
|
case YT.PlayerState.UNSTARTED:
|
||||||
case YT.PlayerState.PAUSED:
|
case YT.PlayerState.PAUSED:
|
||||||
// YouTube sends an unstarted event if pause is triggered before the
|
// YouTube sends an unstarted event if pause is triggered before the
|
||||||
// video has started.
|
// video has started.
|
||||||
// YouTube sends a pause event when seeking.
|
// YouTube sends a pause event when seeking.
|
||||||
// In both cases, we initiate a pause in a timeout that gets cleared
|
// In both cases, we initiate a pause in a timeout that gets cleared
|
||||||
// if followed by another event within the timeout window.
|
// if followed by another event within the timeout window.
|
||||||
this.pauseTimeout = galleryPrototype.setTimeout.call(
|
this.pauseTimeout = galleryPrototype.setTimeout.call(
|
||||||
this,
|
this,
|
||||||
this.onPause,
|
this.onPause,
|
||||||
null,
|
null,
|
||||||
500
|
500
|
||||||
)
|
)
|
||||||
break
|
break
|
||||||
case YT.PlayerState.ENDED:
|
case YT.PlayerState.ENDED:
|
||||||
this.onPause()
|
this.onPause()
|
||||||
break
|
break
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
|
||||||
onError: function (event) {
|
onError: function (event) {
|
||||||
this.listeners.error(event)
|
this.listeners.error(event)
|
||||||
},
|
},
|
||||||
|
|
||||||
play: function () {
|
play: function () {
|
||||||
var that = this
|
var that = this
|
||||||
if (!this.playStatus) {
|
if (!this.playStatus) {
|
||||||
this.listeners.play()
|
this.listeners.play()
|
||||||
this.playStatus = 1
|
this.playStatus = 1
|
||||||
}
|
}
|
||||||
if (this.ready) {
|
if (this.ready) {
|
||||||
if (
|
if (
|
||||||
!this.hasPlayed &&
|
!this.hasPlayed &&
|
||||||
(this.clickToPlay ||
|
(this.clickToPlay ||
|
||||||
(window.navigator &&
|
(window.navigator &&
|
||||||
/iP(hone|od|ad)/.test(window.navigator.platform)))
|
/iP(hone|od|ad)/.test(window.navigator.platform)))
|
||||||
) {
|
) {
|
||||||
// Manually trigger the playing callback if clickToPlay
|
// Manually trigger the playing callback if clickToPlay
|
||||||
// is enabled and to workaround a limitation in iOS,
|
// is enabled and to workaround a limitation in iOS,
|
||||||
// which requires synchronous user interaction to start
|
// which requires synchronous user interaction to start
|
||||||
// the video playback:
|
// the video playback:
|
||||||
this.onPlaying()
|
this.onPlaying()
|
||||||
} else {
|
} else {
|
||||||
this.player.playVideo()
|
this.player.playVideo()
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
this.playOnReady = true
|
this.playOnReady = true
|
||||||
if (!(window.YT && YT.Player)) {
|
if (!(window.YT && YT.Player)) {
|
||||||
this.loadAPI()
|
this.loadAPI()
|
||||||
} else if (!this.player) {
|
} else if (!this.player) {
|
||||||
this.player = new YT.Player(this.element, {
|
this.player = new YT.Player(this.element, {
|
||||||
videoId: this.videoId,
|
videoId: this.videoId,
|
||||||
playerVars: this.playerVars,
|
playerVars: this.playerVars,
|
||||||
events: {
|
events: {
|
||||||
onReady: function () {
|
onReady: function () {
|
||||||
that.onReady()
|
that.onReady()
|
||||||
},
|
},
|
||||||
onStateChange: function (event) {
|
onStateChange: function (event) {
|
||||||
that.onStateChange(event)
|
that.onStateChange(event)
|
||||||
},
|
},
|
||||||
onError: function (event) {
|
onError: function (event) {
|
||||||
that.onError(event)
|
that.onError(event)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
|
||||||
pause: function () {
|
pause: function () {
|
||||||
if (this.ready) {
|
if (this.ready) {
|
||||||
this.player.pauseVideo()
|
this.player.pauseVideo()
|
||||||
} else if (this.playStatus) {
|
} else if (this.playStatus) {
|
||||||
delete this.playOnReady
|
delete this.playOnReady
|
||||||
this.listeners.pause()
|
this.listeners.pause()
|
||||||
delete this.playStatus
|
delete this.playStatus
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
|
|
||||||
$.extend(galleryPrototype, {
|
$.extend(galleryPrototype, {
|
||||||
YouTubePlayer: YouTubePlayer,
|
YouTubePlayer: YouTubePlayer,
|
||||||
|
|
||||||
textFactory: function (obj, callback) {
|
textFactory: function (obj, callback) {
|
||||||
var options = this.options
|
var options = this.options
|
||||||
var videoId = this.getItemProperty(obj, options.youTubeVideoIdProperty)
|
var videoId = this.getItemProperty(obj, options.youTubeVideoIdProperty)
|
||||||
if (videoId) {
|
if (videoId) {
|
||||||
if (this.getItemProperty(obj, options.urlProperty) === undefined) {
|
if (this.getItemProperty(obj, options.urlProperty) === undefined) {
|
||||||
obj[options.urlProperty] =
|
obj[options.urlProperty] =
|
||||||
'https://www.youtube.com/watch?v=' + videoId
|
'https://www.youtube.com/watch?v=' + videoId
|
||||||
}
|
}
|
||||||
if (
|
if (
|
||||||
this.getItemProperty(obj, options.videoPosterProperty) === undefined
|
this.getItemProperty(obj, options.videoPosterProperty) === undefined
|
||||||
) {
|
) {
|
||||||
obj[options.videoPosterProperty] =
|
obj[options.videoPosterProperty] =
|
||||||
'https://img.youtube.com/vi/' + videoId + '/maxresdefault.jpg'
|
'https://img.youtube.com/vi/' + videoId + '/maxresdefault.jpg'
|
||||||
}
|
}
|
||||||
return this.videoFactory(
|
return this.videoFactory(
|
||||||
obj,
|
obj,
|
||||||
callback,
|
callback,
|
||||||
new YouTubePlayer(
|
new YouTubePlayer(
|
||||||
videoId,
|
videoId,
|
||||||
options.youTubePlayerVars,
|
options.youTubePlayerVars,
|
||||||
options.youTubeClickToPlay
|
options.youTubeClickToPlay
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
return textFactory.call(this, obj, callback)
|
return textFactory.call(this, obj, callback)
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
|
|
||||||
return Gallery
|
return Gallery
|
||||||
})
|
})
|
||||||
2
assets/Gallery-3.4.0/js/blueimp-gallery.min.js
vendored
Normal file
1
assets/Gallery-3.4.0/js/blueimp-gallery.min.js.map
Normal file
@@ -1,217 +1,217 @@
|
|||||||
/*
|
/*
|
||||||
* blueimp helper JS
|
* blueimp helper JS
|
||||||
* https://github.com/blueimp/Gallery
|
* https://github.com/blueimp/Gallery
|
||||||
*
|
*
|
||||||
* Copyright 2013, Sebastian Tschan
|
* Copyright 2013, Sebastian Tschan
|
||||||
* https://blueimp.net
|
* https://blueimp.net
|
||||||
*
|
*
|
||||||
* Licensed under the MIT license:
|
* Licensed under the MIT license:
|
||||||
* https://opensource.org/licenses/MIT
|
* https://opensource.org/licenses/MIT
|
||||||
*/
|
*/
|
||||||
|
|
||||||
/* global define */
|
/* global define */
|
||||||
|
|
||||||
/* eslint-disable no-param-reassign */
|
/* eslint-disable no-param-reassign */
|
||||||
|
|
||||||
;(function () {
|
;(function () {
|
||||||
'use strict'
|
'use strict'
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Object.assign polyfill
|
* Object.assign polyfill
|
||||||
*
|
*
|
||||||
* @param {object} obj1 First object
|
* @param {object} obj1 First object
|
||||||
* @param {object} obj2 Second object
|
* @param {object} obj2 Second object
|
||||||
* @returns {object} Merged object
|
* @returns {object} Merged object
|
||||||
*/
|
*/
|
||||||
function extend(obj1, obj2) {
|
function extend(obj1, obj2) {
|
||||||
var prop
|
var prop
|
||||||
for (prop in obj2) {
|
for (prop in obj2) {
|
||||||
if (Object.prototype.hasOwnProperty.call(obj2, prop)) {
|
if (Object.prototype.hasOwnProperty.call(obj2, prop)) {
|
||||||
obj1[prop] = obj2[prop]
|
obj1[prop] = obj2[prop]
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return obj1
|
return obj1
|
||||||
}
|
}
|
||||||
/**
|
/**
|
||||||
* Helper constructor
|
* Helper constructor
|
||||||
*
|
*
|
||||||
* @class
|
* @class
|
||||||
* @param {*} query jQuery type query argument
|
* @param {*} query jQuery type query argument
|
||||||
*/
|
*/
|
||||||
function Helper(query) {
|
function Helper(query) {
|
||||||
if (!this || this.find !== Helper.prototype.find) {
|
if (!this || this.find !== Helper.prototype.find) {
|
||||||
// Called as function instead of as constructor,
|
// Called as function instead of as constructor,
|
||||||
// so we simply return a new instance:
|
// so we simply return a new instance:
|
||||||
return new Helper(query)
|
return new Helper(query)
|
||||||
}
|
}
|
||||||
this.length = 0
|
this.length = 0
|
||||||
if (query) {
|
if (query) {
|
||||||
if (typeof query === 'string') {
|
if (typeof query === 'string') {
|
||||||
query = this.find(query)
|
query = this.find(query)
|
||||||
}
|
}
|
||||||
if (query.nodeType || query === query.window) {
|
if (query.nodeType || query === query.window) {
|
||||||
// Single HTML element
|
// Single HTML element
|
||||||
this.length = 1
|
this.length = 1
|
||||||
this[0] = query
|
this[0] = query
|
||||||
} else {
|
} else {
|
||||||
// HTML element collection
|
// HTML element collection
|
||||||
var i = query.length
|
var i = query.length
|
||||||
this.length = i
|
this.length = i
|
||||||
while (i) {
|
while (i) {
|
||||||
i -= 1
|
i -= 1
|
||||||
this[i] = query[i]
|
this[i] = query[i]
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
Helper.extend = extend
|
Helper.extend = extend
|
||||||
|
|
||||||
Helper.contains = function (container, element) {
|
Helper.contains = function (container, element) {
|
||||||
do {
|
do {
|
||||||
element = element.parentNode
|
element = element.parentNode
|
||||||
if (element === container) {
|
if (element === container) {
|
||||||
return true
|
return true
|
||||||
}
|
}
|
||||||
} while (element)
|
} while (element)
|
||||||
return false
|
return false
|
||||||
}
|
}
|
||||||
|
|
||||||
Helper.parseJSON = function (string) {
|
Helper.parseJSON = function (string) {
|
||||||
return JSON.parse(string)
|
return JSON.parse(string)
|
||||||
}
|
}
|
||||||
|
|
||||||
extend(Helper.prototype, {
|
extend(Helper.prototype, {
|
||||||
find: function (query) {
|
find: function (query) {
|
||||||
var container = this[0] || document
|
var container = this[0] || document
|
||||||
if (typeof query === 'string') {
|
if (typeof query === 'string') {
|
||||||
if (container.querySelectorAll) {
|
if (container.querySelectorAll) {
|
||||||
query = container.querySelectorAll(query)
|
query = container.querySelectorAll(query)
|
||||||
} else if (query.charAt(0) === '#') {
|
} else if (query.charAt(0) === '#') {
|
||||||
query = container.getElementById(query.slice(1))
|
query = container.getElementById(query.slice(1))
|
||||||
} else {
|
} else {
|
||||||
query = container.getElementsByTagName(query)
|
query = container.getElementsByTagName(query)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return new Helper(query)
|
return new Helper(query)
|
||||||
},
|
},
|
||||||
|
|
||||||
hasClass: function (className) {
|
hasClass: function (className) {
|
||||||
if (!this[0]) return false
|
if (!this[0]) return false
|
||||||
return new RegExp('(?:^|\\s+)' + className + '(?:\\s+|$)').test(
|
return new RegExp('(?:^|\\s+)' + className + '(?:\\s+|$)').test(
|
||||||
this[0].className
|
this[0].className
|
||||||
)
|
)
|
||||||
},
|
},
|
||||||
|
|
||||||
addClass: function (className) {
|
addClass: function (className) {
|
||||||
var i = this.length
|
var i = this.length
|
||||||
var classNames
|
var classNames
|
||||||
var element
|
var element
|
||||||
var j
|
var j
|
||||||
while (i) {
|
while (i) {
|
||||||
i -= 1
|
i -= 1
|
||||||
element = this[i]
|
element = this[i]
|
||||||
if (!element.className) {
|
if (!element.className) {
|
||||||
element.className = className
|
element.className = className
|
||||||
continue
|
continue
|
||||||
}
|
}
|
||||||
if (!classNames) classNames = className.split(/\s+/)
|
if (!classNames) classNames = className.split(/\s+/)
|
||||||
for (j = 0; j < classNames.length; j += 1) {
|
for (j = 0; j < classNames.length; j += 1) {
|
||||||
if (this.hasClass(classNames[j])) {
|
if (this.hasClass(classNames[j])) {
|
||||||
continue
|
continue
|
||||||
}
|
}
|
||||||
element.className += ' ' + classNames[j]
|
element.className += ' ' + classNames[j]
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return this
|
return this
|
||||||
},
|
},
|
||||||
|
|
||||||
removeClass: function (className) {
|
removeClass: function (className) {
|
||||||
// Match any of the given class names
|
// Match any of the given class names
|
||||||
var regexp = new RegExp('^(?:' + className.split(/\s+/).join('|') + ')$')
|
var regexp = new RegExp('^(?:' + className.split(/\s+/).join('|') + ')$')
|
||||||
// Match any class names and their trailing whitespace
|
// Match any class names and their trailing whitespace
|
||||||
var matcher = /(\S+)(?:\s+|$)/g
|
var matcher = /(\S+)(?:\s+|$)/g
|
||||||
var replacer = function (match, className) {
|
var replacer = function (match, className) {
|
||||||
// Replace class names that match the given ones
|
// Replace class names that match the given ones
|
||||||
return regexp.test(className) ? '' : match
|
return regexp.test(className) ? '' : match
|
||||||
}
|
}
|
||||||
var trimEnd = /\s+$/
|
var trimEnd = /\s+$/
|
||||||
var i = this.length
|
var i = this.length
|
||||||
var element
|
var element
|
||||||
while (i) {
|
while (i) {
|
||||||
i -= 1
|
i -= 1
|
||||||
element = this[i]
|
element = this[i]
|
||||||
element.className = element.className
|
element.className = element.className
|
||||||
.replace(matcher, replacer)
|
.replace(matcher, replacer)
|
||||||
.replace(trimEnd, '')
|
.replace(trimEnd, '')
|
||||||
}
|
}
|
||||||
return this
|
return this
|
||||||
},
|
},
|
||||||
|
|
||||||
on: function (eventName, handler) {
|
on: function (eventName, handler) {
|
||||||
var eventNames = eventName.split(/\s+/)
|
var eventNames = eventName.split(/\s+/)
|
||||||
var i
|
var i
|
||||||
var element
|
var element
|
||||||
while (eventNames.length) {
|
while (eventNames.length) {
|
||||||
eventName = eventNames.shift()
|
eventName = eventNames.shift()
|
||||||
i = this.length
|
i = this.length
|
||||||
while (i) {
|
while (i) {
|
||||||
i -= 1
|
i -= 1
|
||||||
element = this[i]
|
element = this[i]
|
||||||
if (element.addEventListener) {
|
if (element.addEventListener) {
|
||||||
element.addEventListener(eventName, handler, false)
|
element.addEventListener(eventName, handler, false)
|
||||||
} else if (element.attachEvent) {
|
} else if (element.attachEvent) {
|
||||||
element.attachEvent('on' + eventName, handler)
|
element.attachEvent('on' + eventName, handler)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return this
|
return this
|
||||||
},
|
},
|
||||||
|
|
||||||
off: function (eventName, handler) {
|
off: function (eventName, handler) {
|
||||||
var eventNames = eventName.split(/\s+/)
|
var eventNames = eventName.split(/\s+/)
|
||||||
var i
|
var i
|
||||||
var element
|
var element
|
||||||
while (eventNames.length) {
|
while (eventNames.length) {
|
||||||
eventName = eventNames.shift()
|
eventName = eventNames.shift()
|
||||||
i = this.length
|
i = this.length
|
||||||
while (i) {
|
while (i) {
|
||||||
i -= 1
|
i -= 1
|
||||||
element = this[i]
|
element = this[i]
|
||||||
if (element.removeEventListener) {
|
if (element.removeEventListener) {
|
||||||
element.removeEventListener(eventName, handler, false)
|
element.removeEventListener(eventName, handler, false)
|
||||||
} else if (element.detachEvent) {
|
} else if (element.detachEvent) {
|
||||||
element.detachEvent('on' + eventName, handler)
|
element.detachEvent('on' + eventName, handler)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return this
|
return this
|
||||||
},
|
},
|
||||||
|
|
||||||
empty: function () {
|
empty: function () {
|
||||||
var i = this.length
|
var i = this.length
|
||||||
var element
|
var element
|
||||||
while (i) {
|
while (i) {
|
||||||
i -= 1
|
i -= 1
|
||||||
element = this[i]
|
element = this[i]
|
||||||
while (element.hasChildNodes()) {
|
while (element.hasChildNodes()) {
|
||||||
element.removeChild(element.lastChild)
|
element.removeChild(element.lastChild)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return this
|
return this
|
||||||
},
|
},
|
||||||
|
|
||||||
first: function () {
|
first: function () {
|
||||||
return new Helper(this[0])
|
return new Helper(this[0])
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
|
|
||||||
if (typeof define === 'function' && define.amd) {
|
if (typeof define === 'function' && define.amd) {
|
||||||
define(function () {
|
define(function () {
|
||||||
return Helper
|
return Helper
|
||||||
})
|
})
|
||||||
} else {
|
} else {
|
||||||
window.blueimp = window.blueimp || {}
|
window.blueimp = window.blueimp || {}
|
||||||
window.blueimp.helper = Helper
|
window.blueimp.helper = Helper
|
||||||
}
|
}
|
||||||
})()
|
})()
|
||||||
@@ -1,140 +1,140 @@
|
|||||||
/*
|
/*
|
||||||
* blueimp Gallery Demo JS
|
* blueimp Gallery Demo JS
|
||||||
* https://github.com/blueimp/Gallery
|
* https://github.com/blueimp/Gallery
|
||||||
*
|
*
|
||||||
* Copyright 2013, Sebastian Tschan
|
* Copyright 2013, Sebastian Tschan
|
||||||
* https://blueimp.net
|
* https://blueimp.net
|
||||||
*
|
*
|
||||||
* Licensed under the MIT license:
|
* Licensed under the MIT license:
|
||||||
* https://opensource.org/licenses/MIT
|
* https://opensource.org/licenses/MIT
|
||||||
*/
|
*/
|
||||||
|
|
||||||
/* global blueimp, $ */
|
/* global blueimp, $ */
|
||||||
|
|
||||||
$(function () {
|
$(function () {
|
||||||
'use strict'
|
'use strict'
|
||||||
|
|
||||||
// Flickr image types:
|
// Flickr image types:
|
||||||
var imageTypes = [
|
var imageTypes = [
|
||||||
// https://www.flickr.com/services/api/misc.urls.html
|
// https://www.flickr.com/services/api/misc.urls.html
|
||||||
'sq', // 75x75
|
'sq', // 75x75
|
||||||
'q', // 150x150
|
'q', // 150x150
|
||||||
't', // 100 on longest side
|
't', // 100 on longest side
|
||||||
's', // 240 on longest side
|
's', // 240 on longest side
|
||||||
'n', // 320 on longest side
|
'n', // 320 on longest side
|
||||||
'm', // 500 on longest side
|
'm', // 500 on longest side
|
||||||
'z', // 640 on longest side
|
'z', // 640 on longest side
|
||||||
'c', // 800 on longest side
|
'c', // 800 on longest side
|
||||||
'l', // 1024 on longest side
|
'l', // 1024 on longest side
|
||||||
'h', // 1600 on longest side
|
'h', // 1600 on longest side
|
||||||
'k', // 2048 on longest side
|
'k', // 2048 on longest side
|
||||||
'o' // original dimensions
|
'o' // original dimensions
|
||||||
]
|
]
|
||||||
|
|
||||||
// Load demo images from Flickr:
|
// Load demo images from Flickr:
|
||||||
$.ajax({
|
$.ajax({
|
||||||
url: 'https://api.flickr.com/services/rest/',
|
url: 'https://api.flickr.com/services/rest/',
|
||||||
data: {
|
data: {
|
||||||
// https://www.flickr.com/services/api/flickr.interestingness.getList.html
|
// https://www.flickr.com/services/api/flickr.interestingness.getList.html
|
||||||
method: 'flickr.interestingness.getList',
|
method: 'flickr.interestingness.getList',
|
||||||
format: 'json',
|
format: 'json',
|
||||||
extras: 'url_' + imageTypes.join(',url_'),
|
extras: 'url_' + imageTypes.join(',url_'),
|
||||||
// eslint-disable-next-line camelcase
|
// eslint-disable-next-line camelcase
|
||||||
api_key: '7617adae70159d09ba78cfec73c13be3'
|
api_key: '7617adae70159d09ba78cfec73c13be3'
|
||||||
},
|
},
|
||||||
dataType: 'jsonp',
|
dataType: 'jsonp',
|
||||||
jsonp: 'jsoncallback'
|
jsonp: 'jsoncallback'
|
||||||
}).done(function (result) {
|
}).done(function (result) {
|
||||||
var maxWidth = $(document.body).css('max-width')
|
var maxWidth = $(document.body).css('max-width')
|
||||||
var sizes = '(min-width: ' + maxWidth + ') ' + maxWidth + ', 100vw'
|
var sizes = '(min-width: ' + maxWidth + ') ' + maxWidth + ', 100vw'
|
||||||
var carouselLinks = []
|
var carouselLinks = []
|
||||||
var linksContainer = $('#links')
|
var linksContainer = $('#links')
|
||||||
// Add the demo images as links with thumbnails to the page:
|
// Add the demo images as links with thumbnails to the page:
|
||||||
$.each(result.photos.photo, function (_, photo) {
|
$.each(result.photos.photo, function (_, photo) {
|
||||||
var thumbnail = $('<img>')
|
var thumbnail = $('<img>')
|
||||||
.prop('loading', 'lazy')
|
.prop('loading', 'lazy')
|
||||||
.prop('width', photo.width_sq)
|
.prop('width', photo.width_sq)
|
||||||
.prop('height', photo.height_sq)
|
.prop('height', photo.height_sq)
|
||||||
.prop('src', photo.url_sq)
|
.prop('src', photo.url_sq)
|
||||||
.prop('alt', photo.title)
|
.prop('alt', photo.title)
|
||||||
var srcset = []
|
var srcset = []
|
||||||
$.each(imageTypes, function (_, type) {
|
$.each(imageTypes, function (_, type) {
|
||||||
var url = photo['url_' + type]
|
var url = photo['url_' + type]
|
||||||
var width = photo['width_' + type]
|
var width = photo['width_' + type]
|
||||||
if (url) {
|
if (url) {
|
||||||
srcset.push(url + ' ' + width + 'w')
|
srcset.push(url + ' ' + width + 'w')
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
srcset = srcset.join(',')
|
srcset = srcset.join(',')
|
||||||
$('<a></a>')
|
$('<a></a>')
|
||||||
.append(thumbnail)
|
.append(thumbnail)
|
||||||
.prop('title', photo.title)
|
.prop('title', photo.title)
|
||||||
.prop('href', photo.url_l)
|
.prop('href', photo.url_l)
|
||||||
.attr('data-srcset', srcset)
|
.attr('data-srcset', srcset)
|
||||||
.attr('data-gallery', '')
|
.attr('data-gallery', '')
|
||||||
.appendTo(linksContainer)
|
.appendTo(linksContainer)
|
||||||
carouselLinks.push({
|
carouselLinks.push({
|
||||||
title: photo.title,
|
title: photo.title,
|
||||||
href: photo.url_l,
|
href: photo.url_l,
|
||||||
sizes: sizes,
|
sizes: sizes,
|
||||||
srcset: srcset
|
srcset: srcset
|
||||||
})
|
})
|
||||||
})
|
})
|
||||||
// Initialize the Gallery as image carousel:
|
// Initialize the Gallery as image carousel:
|
||||||
// eslint-disable-next-line new-cap
|
// eslint-disable-next-line new-cap
|
||||||
blueimp.Gallery(carouselLinks, {
|
blueimp.Gallery(carouselLinks, {
|
||||||
container: '#blueimp-image-carousel',
|
container: '#blueimp-image-carousel',
|
||||||
carousel: true
|
carousel: true
|
||||||
})
|
})
|
||||||
})
|
})
|
||||||
|
|
||||||
// Initialize the Gallery as video carousel:
|
// Initialize the Gallery as video carousel:
|
||||||
// eslint-disable-next-line new-cap
|
// eslint-disable-next-line new-cap
|
||||||
blueimp.Gallery(
|
blueimp.Gallery(
|
||||||
[
|
[
|
||||||
{
|
{
|
||||||
title: 'Sintel',
|
title: 'Sintel',
|
||||||
type: 'video',
|
type: 'video',
|
||||||
sources: [
|
sources: [
|
||||||
{
|
{
|
||||||
type: 'video/webm',
|
type: 'video/webm',
|
||||||
src:
|
src:
|
||||||
'https://upload.wikimedia.org/wikipedia/commons/f/f1/' +
|
'https://upload.wikimedia.org/wikipedia/commons/f/f1/' +
|
||||||
'Sintel_movie_4K.webm'
|
'Sintel_movie_4K.webm'
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
type: 'video/mp4',
|
type: 'video/mp4',
|
||||||
src: 'https://archive.org/download/Sintel/sintel-2048-surround.mp4'
|
src: 'https://archive.org/download/Sintel/sintel-2048-surround.mp4'
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
type: 'video/ogg',
|
type: 'video/ogg',
|
||||||
src: 'https://archive.org/download/Sintel/sintel-2048-stereo.ogv'
|
src: 'https://archive.org/download/Sintel/sintel-2048-stereo.ogv'
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
poster:
|
poster:
|
||||||
'https://upload.wikimedia.org/wikipedia/commons/d/dc/' +
|
'https://upload.wikimedia.org/wikipedia/commons/d/dc/' +
|
||||||
'Sintel_1920x1080.png'
|
'Sintel_1920x1080.png'
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
title: 'LES TWINS - An Industry Ahead',
|
title: 'LES TWINS - An Industry Ahead',
|
||||||
type: 'text/html',
|
type: 'text/html',
|
||||||
youtube: 'zi4CIXpx7Bg'
|
youtube: 'zi4CIXpx7Bg'
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
title: 'KN1GHT - Last Moon',
|
title: 'KN1GHT - Last Moon',
|
||||||
type: 'text/html',
|
type: 'text/html',
|
||||||
vimeo: '73686146',
|
vimeo: '73686146',
|
||||||
poster: 'https://secure-a.vimeocdn.com/ts/448/835/448835699_960.jpg'
|
poster: 'https://secure-a.vimeocdn.com/ts/448/835/448835699_960.jpg'
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
{
|
{
|
||||||
container: '#blueimp-video-carousel',
|
container: '#blueimp-video-carousel',
|
||||||
carousel: true,
|
carousel: true,
|
||||||
startSlideshow: false
|
startSlideshow: false
|
||||||
}
|
}
|
||||||
)
|
)
|
||||||
|
|
||||||
$('#fullscreen').change(function () {
|
$('#fullscreen').change(function () {
|
||||||
$('#blueimp-gallery').data('fullscreen', this.checked)
|
$('#blueimp-gallery').data('fullscreen', this.checked)
|
||||||
})
|
})
|
||||||
})
|
})
|
||||||
@@ -1,75 +1,75 @@
|
|||||||
/*
|
/*
|
||||||
* blueimp Gallery jQuery plugin
|
* blueimp Gallery jQuery plugin
|
||||||
* https://github.com/blueimp/Gallery
|
* https://github.com/blueimp/Gallery
|
||||||
*
|
*
|
||||||
* Copyright 2013, Sebastian Tschan
|
* Copyright 2013, Sebastian Tschan
|
||||||
* https://blueimp.net
|
* https://blueimp.net
|
||||||
*
|
*
|
||||||
* Licensed under the MIT license:
|
* Licensed under the MIT license:
|
||||||
* https://opensource.org/licenses/MIT
|
* https://opensource.org/licenses/MIT
|
||||||
*/
|
*/
|
||||||
|
|
||||||
/* global define */
|
/* global define */
|
||||||
|
|
||||||
;(function (factory) {
|
;(function (factory) {
|
||||||
'use strict'
|
'use strict'
|
||||||
if (typeof define === 'function' && define.amd) {
|
if (typeof define === 'function' && define.amd) {
|
||||||
define(['jquery', './blueimp-gallery'], factory)
|
define(['jquery', './blueimp-gallery'], factory)
|
||||||
} else {
|
} else {
|
||||||
factory(window.jQuery, window.blueimp.Gallery)
|
factory(window.jQuery, window.blueimp.Gallery)
|
||||||
}
|
}
|
||||||
})(function ($, Gallery) {
|
})(function ($, Gallery) {
|
||||||
'use strict'
|
'use strict'
|
||||||
|
|
||||||
// Global click handler to open links with data-gallery attribute
|
// Global click handler to open links with data-gallery attribute
|
||||||
// in the Gallery lightbox:
|
// in the Gallery lightbox:
|
||||||
$(document).on('click', '[data-gallery]', function (event) {
|
$(document).on('click', '[data-gallery]', function (event) {
|
||||||
// Get the container id from the data-gallery attribute:
|
// Get the container id from the data-gallery attribute:
|
||||||
var id = $(this).data('gallery')
|
var id = $(this).data('gallery')
|
||||||
var widget = $(id)
|
var widget = $(id)
|
||||||
var container =
|
var container =
|
||||||
(widget.length && widget) || $(Gallery.prototype.options.container)
|
(widget.length && widget) || $(Gallery.prototype.options.container)
|
||||||
var callbacks = {
|
var callbacks = {
|
||||||
onopen: function () {
|
onopen: function () {
|
||||||
container.data('gallery', this).trigger('open')
|
container.data('gallery', this).trigger('open')
|
||||||
},
|
},
|
||||||
onopened: function () {
|
onopened: function () {
|
||||||
container.trigger('opened')
|
container.trigger('opened')
|
||||||
},
|
},
|
||||||
onslide: function () {
|
onslide: function () {
|
||||||
container.trigger('slide', arguments)
|
container.trigger('slide', arguments)
|
||||||
},
|
},
|
||||||
onslideend: function () {
|
onslideend: function () {
|
||||||
container.trigger('slideend', arguments)
|
container.trigger('slideend', arguments)
|
||||||
},
|
},
|
||||||
onslidecomplete: function () {
|
onslidecomplete: function () {
|
||||||
container.trigger('slidecomplete', arguments)
|
container.trigger('slidecomplete', arguments)
|
||||||
},
|
},
|
||||||
onclose: function () {
|
onclose: function () {
|
||||||
container.trigger('close')
|
container.trigger('close')
|
||||||
},
|
},
|
||||||
onclosed: function () {
|
onclosed: function () {
|
||||||
container.trigger('closed').removeData('gallery')
|
container.trigger('closed').removeData('gallery')
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
var options = $.extend(
|
var options = $.extend(
|
||||||
// Retrieve custom options from data-attributes
|
// Retrieve custom options from data-attributes
|
||||||
// on the Gallery widget:
|
// on the Gallery widget:
|
||||||
container.data(),
|
container.data(),
|
||||||
{
|
{
|
||||||
container: container[0],
|
container: container[0],
|
||||||
index: this,
|
index: this,
|
||||||
event: event
|
event: event
|
||||||
},
|
},
|
||||||
callbacks
|
callbacks
|
||||||
)
|
)
|
||||||
// Select all links with the same data-gallery attribute:
|
// Select all links with the same data-gallery attribute:
|
||||||
var links = $(this)
|
var links = $(this)
|
||||||
.closest('[data-gallery-group], body')
|
.closest('[data-gallery-group], body')
|
||||||
.find('[data-gallery="' + id + '"]')
|
.find('[data-gallery="' + id + '"]')
|
||||||
if (options.filter) {
|
if (options.filter) {
|
||||||
links = links.filter(options.filter)
|
links = links.filter(options.filter)
|
||||||
}
|
}
|
||||||
return new Gallery(links, options)
|
return new Gallery(links, options)
|
||||||
})
|
})
|
||||||
})
|
})
|
||||||
2
assets/Gallery-3.4.0/js/jquery.blueimp-gallery.min.js
vendored
Normal file
6768
assets/Gallery-3.4.0/package-lock.json
generated
Normal file
@@ -1,98 +1,100 @@
|
|||||||
{
|
{
|
||||||
"name": "blueimp-gallery",
|
"name": "blueimp-gallery",
|
||||||
"version": "3.3.0",
|
"version": "3.4.0",
|
||||||
"title": "blueimp Gallery",
|
"title": "blueimp Gallery",
|
||||||
"description": "blueimp Gallery is a touch-enabled, responsive and customizable image and video gallery, carousel and lightbox, optimized for both mobile and desktop web browsers. It features swipe, mouse and keyboard navigation, transition effects, slideshow functionality, fullscreen support and on-demand content loading and can be extended to display additional content types.",
|
"description": "blueimp Gallery is a touch-enabled, responsive and customizable image and video gallery, carousel and lightbox, optimized for both mobile and desktop web browsers. It features swipe, mouse and keyboard navigation, transition effects, slideshow functionality, fullscreen support and on-demand content loading and can be extended to display additional content types.",
|
||||||
"keywords": [
|
"keywords": [
|
||||||
"image",
|
"image",
|
||||||
"video",
|
"video",
|
||||||
"gallery",
|
"gallery",
|
||||||
"carousel",
|
"carousel",
|
||||||
"lightbox",
|
"lightbox",
|
||||||
"mobile",
|
"mobile",
|
||||||
"desktop",
|
"desktop",
|
||||||
"touch",
|
"touch",
|
||||||
"responsive",
|
"responsive",
|
||||||
"swipe",
|
"swipe",
|
||||||
"mouse",
|
"mouse",
|
||||||
"keyboard",
|
"keyboard",
|
||||||
"navigation",
|
"navigation",
|
||||||
"transition",
|
"transition",
|
||||||
"effects",
|
"effects",
|
||||||
"slideshow",
|
"slideshow",
|
||||||
"fullscreen"
|
"fullscreen"
|
||||||
],
|
],
|
||||||
"homepage": "https://github.com/blueimp/Gallery",
|
"homepage": "https://github.com/blueimp/Gallery",
|
||||||
"author": {
|
"author": {
|
||||||
"name": "Sebastian Tschan",
|
"name": "Sebastian Tschan",
|
||||||
"url": "https://blueimp.net"
|
"url": "https://blueimp.net"
|
||||||
},
|
},
|
||||||
"repository": {
|
"repository": {
|
||||||
"type": "git",
|
"type": "git",
|
||||||
"url": "git://github.com/blueimp/Gallery.git"
|
"url": "git://github.com/blueimp/Gallery.git"
|
||||||
},
|
},
|
||||||
"license": "MIT",
|
"license": "MIT",
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
"clean-css-cli": "4",
|
"clean-css-cli": "5",
|
||||||
"eslint": "7",
|
"eslint": "7",
|
||||||
"eslint-config-blueimp": "2",
|
"eslint-config-blueimp": "2",
|
||||||
"eslint-config-prettier": "6",
|
"eslint-config-prettier": "8",
|
||||||
"eslint-plugin-jsdoc": "30",
|
"eslint-plugin-jsdoc": "36",
|
||||||
"eslint-plugin-prettier": "3",
|
"eslint-plugin-prettier": "4",
|
||||||
"prettier": "2",
|
"jquery": "1",
|
||||||
"stylelint": "13",
|
"prettier": "2",
|
||||||
"stylelint-config-prettier": "8",
|
"stylelint": "13",
|
||||||
"stylelint-config-recommended": "3",
|
"stylelint-config-prettier": "8",
|
||||||
"uglify-js": "3"
|
"stylelint-config-recommended": "5",
|
||||||
},
|
"uglify-js": "3"
|
||||||
"stylelint": {
|
},
|
||||||
"extends": [
|
"stylelint": {
|
||||||
"stylelint-config-recommended",
|
"extends": [
|
||||||
"stylelint-config-prettier"
|
"stylelint-config-recommended",
|
||||||
],
|
"stylelint-config-prettier"
|
||||||
"ignoreFiles": [
|
],
|
||||||
"css/*.min.css"
|
"ignoreFiles": [
|
||||||
]
|
"css/*.min.css"
|
||||||
},
|
]
|
||||||
"eslintConfig": {
|
},
|
||||||
"extends": [
|
"eslintConfig": {
|
||||||
"blueimp",
|
"extends": [
|
||||||
"plugin:jsdoc/recommended",
|
"blueimp",
|
||||||
"plugin:prettier/recommended"
|
"plugin:jsdoc/recommended",
|
||||||
],
|
"plugin:prettier/recommended"
|
||||||
"env": {
|
],
|
||||||
"browser": true
|
"env": {
|
||||||
}
|
"browser": true
|
||||||
},
|
}
|
||||||
"eslintIgnore": [
|
},
|
||||||
"js/*.min.js",
|
"eslintIgnore": [
|
||||||
"js/vendor"
|
"js/*.min.js",
|
||||||
],
|
"js/vendor"
|
||||||
"prettier": {
|
],
|
||||||
"arrowParens": "avoid",
|
"prettier": {
|
||||||
"proseWrap": "always",
|
"arrowParens": "avoid",
|
||||||
"semi": false,
|
"proseWrap": "always",
|
||||||
"singleQuote": true,
|
"semi": false,
|
||||||
"trailingComma": "none"
|
"singleQuote": true,
|
||||||
},
|
"trailingComma": "none"
|
||||||
"scripts": {
|
},
|
||||||
"test": "stylelint '**/*.css' && eslint .",
|
"scripts": {
|
||||||
"build:js": "cd js && uglifyjs blueimp-helper.js blueimp-gallery.js blueimp-gallery-fullscreen.js blueimp-gallery-indicator.js blueimp-gallery-video.js blueimp-gallery-vimeo.js blueimp-gallery-youtube.js --ie8 -c -m -o blueimp-gallery.min.js --source-map url=blueimp-gallery.min.js.map",
|
"test": "stylelint '**/*.css' && eslint .",
|
||||||
"build:jquery": "cd js && uglifyjs blueimp-gallery.js blueimp-gallery-fullscreen.js blueimp-gallery-indicator.js blueimp-gallery-video.js blueimp-gallery-vimeo.js blueimp-gallery-youtube.js jquery.blueimp-gallery.js --ie8 -c -m -o jquery.blueimp-gallery.min.js --source-map url=jquery.blueimp-gallery.min.js.map",
|
"prebuild": "bin/sync-vendor-libs.sh",
|
||||||
"build:css": "cd css && cleancss -c ie7 --source-map -o blueimp-gallery.min.css blueimp-gallery.css blueimp-gallery-indicator.css blueimp-gallery-video.css",
|
"build:js": "cd js && uglifyjs blueimp-helper.js blueimp-gallery.js blueimp-gallery-fullscreen.js blueimp-gallery-indicator.js blueimp-gallery-video.js blueimp-gallery-vimeo.js blueimp-gallery-youtube.js --ie8 -c -m -o blueimp-gallery.min.js --source-map url=blueimp-gallery.min.js.map",
|
||||||
"build": "npm run build:js && npm run build:jquery && npm run build:css",
|
"build:jquery": "cd js && uglifyjs blueimp-gallery.js blueimp-gallery-fullscreen.js blueimp-gallery-indicator.js blueimp-gallery-video.js blueimp-gallery-vimeo.js blueimp-gallery-youtube.js jquery.blueimp-gallery.js --ie8 -c -m -o jquery.blueimp-gallery.min.js --source-map url=jquery.blueimp-gallery.min.js.map",
|
||||||
"preversion": "npm test",
|
"build:css": "cd css && cleancss -c ie7 --source-map -o blueimp-gallery.min.css blueimp-gallery.css blueimp-gallery-indicator.css blueimp-gallery-video.css",
|
||||||
"version": "npm run build && git add -A js css",
|
"build": "npm run build:js && npm run build:jquery && npm run build:css",
|
||||||
"postversion": "git push --tags origin master master:gh-pages && npm publish"
|
"preversion": "npm test",
|
||||||
},
|
"version": "npm run build && git add -A js css",
|
||||||
"files": [
|
"postversion": "git push --tags origin master master:gh-pages && npm publish"
|
||||||
"css/*.css",
|
},
|
||||||
"css/*.css.map",
|
"files": [
|
||||||
"img/*.gif",
|
"css/*.css",
|
||||||
"img/*.png",
|
"css/*.css.map",
|
||||||
"img/*.svg",
|
"img/*.gif",
|
||||||
"js/*.js",
|
"img/*.png",
|
||||||
"js/*.js.map"
|
"img/*.svg",
|
||||||
],
|
"js/*.js",
|
||||||
"main": "js/blueimp-gallery.js"
|
"js/*.js.map"
|
||||||
}
|
],
|
||||||
|
"main": "js/blueimp-gallery.js"
|
||||||
|
}
|
||||||
@@ -273,3 +273,7 @@ select.admin-autocomplete {
|
|||||||
display: block;
|
display: block;
|
||||||
padding: 6px;
|
padding: 6px;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.errors .select2-selection {
|
||||||
|
border: 1px solid var(--error-fg);
|
||||||
|
}
|
||||||
|
|||||||
@@ -2,93 +2,91 @@
|
|||||||
DJANGO Admin styles
|
DJANGO Admin styles
|
||||||
*/
|
*/
|
||||||
|
|
||||||
@import url(fonts.css);
|
|
||||||
|
|
||||||
/* VARIABLE DEFINITIONS */
|
/* VARIABLE DEFINITIONS */
|
||||||
|
html[data-theme="light"],
|
||||||
:root {
|
:root {
|
||||||
--primary: #79aec8;
|
--primary: #79aec8;
|
||||||
--secondary: #417690;
|
--secondary: #417690;
|
||||||
--accent: #f5dd5d;
|
--accent: #f5dd5d;
|
||||||
--primary-fg: #fff;
|
--primary-fg: #fff;
|
||||||
|
|
||||||
--body-fg: #333;
|
--body-fg: #333;
|
||||||
--body-bg: #fff;
|
--body-bg: #fff;
|
||||||
--body-quiet-color: #666;
|
--body-quiet-color: #666;
|
||||||
--body-loud-color: #000;
|
--body-medium-color: #444;
|
||||||
|
--body-loud-color: #000;
|
||||||
|
|
||||||
--header-color: #ffc;
|
--header-color: #ffc;
|
||||||
--header-branding-color: var(--accent);
|
--header-branding-color: var(--accent);
|
||||||
--header-bg: var(--secondary);
|
--header-bg: var(--secondary);
|
||||||
--header-link-color: var(--primary-fg);
|
--header-link-color: var(--primary-fg);
|
||||||
|
|
||||||
--breadcrumbs-fg: #c4dce8;
|
--breadcrumbs-fg: #c4dce8;
|
||||||
--breadcrumbs-link-fg: var(--body-bg);
|
--breadcrumbs-link-fg: var(--body-bg);
|
||||||
--breadcrumbs-bg: var(--primary);
|
--breadcrumbs-bg: #264b5d;
|
||||||
|
|
||||||
--link-fg: #447e9b;
|
--link-fg: #417893;
|
||||||
--link-hover-color: #036;
|
--link-hover-color: #036;
|
||||||
--link-selected-fg: #5b80b2;
|
--link-selected-fg: var(--secondary);
|
||||||
|
|
||||||
--hairline-color: #e8e8e8;
|
--hairline-color: #e8e8e8;
|
||||||
--border-color: #ccc;
|
--border-color: #ccc;
|
||||||
|
|
||||||
--error-fg: #ba2121;
|
--error-fg: #ba2121;
|
||||||
|
|
||||||
--message-success-bg: #dfd;
|
--message-success-bg: #dfd;
|
||||||
--message-warning-bg: #ffc;
|
--message-warning-bg: #ffc;
|
||||||
--message-error-bg: #ffefef;
|
--message-error-bg: #ffefef;
|
||||||
|
|
||||||
--darkened-bg: #f8f8f8; /* A bit darker than --body-bg */
|
--darkened-bg: #f8f8f8; /* A bit darker than --body-bg */
|
||||||
--selected-bg: #e4e4e4; /* E.g. selected table cells */
|
--selected-bg: #e4e4e4; /* E.g. selected table cells */
|
||||||
--selected-row: #ffc;
|
--selected-row: #ffc;
|
||||||
|
|
||||||
--button-fg: #fff;
|
--button-fg: #fff;
|
||||||
--button-bg: var(--primary);
|
--button-bg: var(--secondary);
|
||||||
--button-hover-bg: #609ab6;
|
--button-hover-bg: #205067;
|
||||||
--default-button-bg: var(--secondary);
|
--default-button-bg: #205067;
|
||||||
--default-button-hover-bg: #205067;
|
--default-button-hover-bg: var(--secondary);
|
||||||
--close-button-bg: #888; /* Previously #bbb, contrast 1.92 */
|
--close-button-bg: #747474;
|
||||||
--close-button-hover-bg: #747474;
|
--close-button-hover-bg: #333;
|
||||||
--delete-button-bg: #ba2121;
|
--delete-button-bg: #ba2121;
|
||||||
--delete-button-hover-bg: #a41515;
|
--delete-button-hover-bg: #a41515;
|
||||||
|
|
||||||
--object-tools-fg: var(--button-fg);
|
--object-tools-fg: var(--button-fg);
|
||||||
--object-tools-bg: var(--close-button-bg);
|
--object-tools-bg: var(--close-button-bg);
|
||||||
--object-tools-hover-bg: var(--close-button-hover-bg);
|
--object-tools-hover-bg: var(--close-button-hover-bg);
|
||||||
}
|
|
||||||
|
|
||||||
@media (prefers-color-scheme: dark) {
|
--font-family-primary:
|
||||||
:root {
|
"Segoe UI",
|
||||||
--primary: #264b5d;
|
system-ui,
|
||||||
--primary-fg: #eee;
|
Roboto,
|
||||||
|
"Helvetica Neue",
|
||||||
|
Arial,
|
||||||
|
sans-serif,
|
||||||
|
"Apple Color Emoji",
|
||||||
|
"Segoe UI Emoji",
|
||||||
|
"Segoe UI Symbol",
|
||||||
|
"Noto Color Emoji";
|
||||||
|
--font-family-monospace:
|
||||||
|
ui-monospace,
|
||||||
|
Menlo,
|
||||||
|
Monaco,
|
||||||
|
"Cascadia Mono",
|
||||||
|
"Segoe UI Mono",
|
||||||
|
"Roboto Mono",
|
||||||
|
"Oxygen Mono",
|
||||||
|
"Ubuntu Monospace",
|
||||||
|
"Source Code Pro",
|
||||||
|
"Fira Mono",
|
||||||
|
"Droid Sans Mono",
|
||||||
|
"Courier New",
|
||||||
|
monospace,
|
||||||
|
"Apple Color Emoji",
|
||||||
|
"Segoe UI Emoji",
|
||||||
|
"Segoe UI Symbol",
|
||||||
|
"Noto Color Emoji";
|
||||||
|
|
||||||
--body-fg: #eeeeee;
|
color-scheme: light;
|
||||||
--body-bg: #121212;
|
|
||||||
--body-quiet-color: #e0e0e0;
|
|
||||||
--body-loud-color: #ffffff;
|
|
||||||
|
|
||||||
--breadcrumbs-link-fg: #e0e0e0;
|
|
||||||
--breadcrumbs-bg: var(--primary);
|
|
||||||
|
|
||||||
--link-fg: #81d4fa;
|
|
||||||
--link-hover-color: #4ac1f7;
|
|
||||||
--link-selected-fg: #6f94c6;
|
|
||||||
|
|
||||||
--hairline-color: #272727;
|
|
||||||
--border-color: #353535;
|
|
||||||
|
|
||||||
--error-fg: #e35f5f;
|
|
||||||
--message-success-bg: #006b1b;
|
|
||||||
--message-warning-bg: #583305;
|
|
||||||
--message-error-bg: #570808;
|
|
||||||
|
|
||||||
--darkened-bg: #212121;
|
|
||||||
--selected-bg: #1b1b1b;
|
|
||||||
--selected-row: #00363a;
|
|
||||||
|
|
||||||
--close-button-bg: #333333;
|
|
||||||
--close-button-hover-bg: #666666;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
html, body {
|
html, body {
|
||||||
@@ -98,8 +96,8 @@ html, body {
|
|||||||
body {
|
body {
|
||||||
margin: 0;
|
margin: 0;
|
||||||
padding: 0;
|
padding: 0;
|
||||||
font-size: 14px;
|
font-size: 0.875rem;
|
||||||
font-family: "Roboto","Lucida Grande","DejaVu Sans","Bitstream Vera Sans",Verdana,Arial,sans-serif;
|
font-family: var(--font-family-primary);
|
||||||
color: var(--body-fg);
|
color: var(--body-fg);
|
||||||
background: var(--body-bg);
|
background: var(--body-bg);
|
||||||
}
|
}
|
||||||
@@ -151,12 +149,11 @@ h1,h2,h3,h4,h5 {
|
|||||||
h1 {
|
h1 {
|
||||||
margin: 0 0 20px;
|
margin: 0 0 20px;
|
||||||
font-weight: 300;
|
font-weight: 300;
|
||||||
font-size: 20px;
|
font-size: 1.25rem;
|
||||||
color: var(--body-quiet-color);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
h2 {
|
h2 {
|
||||||
font-size: 16px;
|
font-size: 1rem;
|
||||||
margin: 1em 0 .5em 0;
|
margin: 1em 0 .5em 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -166,20 +163,21 @@ h2.subhead {
|
|||||||
}
|
}
|
||||||
|
|
||||||
h3 {
|
h3 {
|
||||||
font-size: 14px;
|
font-size: 0.875rem;
|
||||||
margin: .8em 0 .3em 0;
|
margin: .8em 0 .3em 0;
|
||||||
color: var(--body-quiet-color);
|
color: var(--body-medium-color);
|
||||||
font-weight: bold;
|
font-weight: bold;
|
||||||
}
|
}
|
||||||
|
|
||||||
h4 {
|
h4 {
|
||||||
font-size: 12px;
|
font-size: 0.75rem;
|
||||||
margin: 1em 0 .8em 0;
|
margin: 1em 0 .8em 0;
|
||||||
padding-bottom: 3px;
|
padding-bottom: 3px;
|
||||||
|
color: var(--body-medium-color);
|
||||||
}
|
}
|
||||||
|
|
||||||
h5 {
|
h5 {
|
||||||
font-size: 10px;
|
font-size: 0.625rem;
|
||||||
margin: 1.5em 0 .5em 0;
|
margin: 1.5em 0 .5em 0;
|
||||||
color: var(--body-quiet-color);
|
color: var(--body-quiet-color);
|
||||||
text-transform: uppercase;
|
text-transform: uppercase;
|
||||||
@@ -196,8 +194,8 @@ li ul {
|
|||||||
}
|
}
|
||||||
|
|
||||||
li, dt, dd {
|
li, dt, dd {
|
||||||
font-size: 13px;
|
font-size: 0.8125rem;
|
||||||
line-height: 20px;
|
line-height: 1.25rem;
|
||||||
}
|
}
|
||||||
|
|
||||||
dt {
|
dt {
|
||||||
@@ -222,8 +220,12 @@ fieldset {
|
|||||||
border-top: 1px solid var(--hairline-color);
|
border-top: 1px solid var(--hairline-color);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
details summary {
|
||||||
|
cursor: pointer;
|
||||||
|
}
|
||||||
|
|
||||||
blockquote {
|
blockquote {
|
||||||
font-size: 11px;
|
font-size: 0.6875rem;
|
||||||
color: #777;
|
color: #777;
|
||||||
margin-left: 2px;
|
margin-left: 2px;
|
||||||
padding-left: 10px;
|
padding-left: 10px;
|
||||||
@@ -231,9 +233,9 @@ blockquote {
|
|||||||
}
|
}
|
||||||
|
|
||||||
code, pre {
|
code, pre {
|
||||||
font-family: "Bitstream Vera Sans Mono", Monaco, "Courier New", Courier, monospace;
|
font-family: var(--font-family-monospace);
|
||||||
color: var(--body-quiet-color);
|
color: var(--body-quiet-color);
|
||||||
font-size: 12px;
|
font-size: 0.75rem;
|
||||||
overflow-x: auto;
|
overflow-x: auto;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -255,22 +257,21 @@ hr {
|
|||||||
border: none;
|
border: none;
|
||||||
margin: 0;
|
margin: 0;
|
||||||
padding: 0;
|
padding: 0;
|
||||||
font-size: 1px;
|
|
||||||
line-height: 1px;
|
line-height: 1px;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* TEXT STYLES & MODIFIERS */
|
/* TEXT STYLES & MODIFIERS */
|
||||||
|
|
||||||
.small {
|
.small {
|
||||||
font-size: 11px;
|
font-size: 0.6875rem;
|
||||||
}
|
}
|
||||||
|
|
||||||
.mini {
|
.mini {
|
||||||
font-size: 10px;
|
font-size: 0.625rem;
|
||||||
}
|
}
|
||||||
|
|
||||||
.help, p.help, form p.help, div.help, form div.help, div.help li {
|
.help, p.help, form p.help, div.help, form div.help, div.help li {
|
||||||
font-size: 11px;
|
font-size: 0.6875rem;
|
||||||
color: var(--body-quiet-color);
|
color: var(--body-quiet-color);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -300,7 +301,7 @@ p img, h1 img, h2 img, h3 img, h4 img, td img {
|
|||||||
}
|
}
|
||||||
|
|
||||||
.hidden {
|
.hidden {
|
||||||
display: none;
|
display: none !important;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* TABLES */
|
/* TABLES */
|
||||||
@@ -311,15 +312,15 @@ table {
|
|||||||
}
|
}
|
||||||
|
|
||||||
td, th {
|
td, th {
|
||||||
font-size: 13px;
|
font-size: 0.8125rem;
|
||||||
line-height: 16px;
|
line-height: 1rem;
|
||||||
border-bottom: 1px solid var(--hairline-color);
|
border-bottom: 1px solid var(--hairline-color);
|
||||||
vertical-align: top;
|
vertical-align: top;
|
||||||
padding: 8px;
|
padding: 8px;
|
||||||
}
|
}
|
||||||
|
|
||||||
th {
|
th {
|
||||||
font-weight: 600;
|
font-weight: 500;
|
||||||
text-align: left;
|
text-align: left;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -327,7 +328,7 @@ thead th,
|
|||||||
tfoot td {
|
tfoot td {
|
||||||
color: var(--body-quiet-color);
|
color: var(--body-quiet-color);
|
||||||
padding: 5px 10px;
|
padding: 5px 10px;
|
||||||
font-size: 11px;
|
font-size: 0.6875rem;
|
||||||
background: var(--body-bg);
|
background: var(--body-bg);
|
||||||
border: none;
|
border: none;
|
||||||
border-top: 1px solid var(--hairline-color);
|
border-top: 1px solid var(--hairline-color);
|
||||||
@@ -340,7 +341,7 @@ tfoot td {
|
|||||||
}
|
}
|
||||||
|
|
||||||
thead th.required {
|
thead th.required {
|
||||||
color: var(--body-loud-color);
|
font-weight: bold;
|
||||||
}
|
}
|
||||||
|
|
||||||
tr.alt {
|
tr.alt {
|
||||||
@@ -437,7 +438,7 @@ table thead th.sorted .sortoptions a.sortremove:after {
|
|||||||
top: -6px;
|
top: -6px;
|
||||||
left: 3px;
|
left: 3px;
|
||||||
font-weight: 200;
|
font-weight: 200;
|
||||||
font-size: 18px;
|
font-size: 1.125rem;
|
||||||
color: var(--body-quiet-color);
|
color: var(--body-quiet-color);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -476,9 +477,9 @@ input, textarea, select, .form-row p, form .button {
|
|||||||
margin: 2px 0;
|
margin: 2px 0;
|
||||||
padding: 2px 3px;
|
padding: 2px 3px;
|
||||||
vertical-align: middle;
|
vertical-align: middle;
|
||||||
font-family: "Roboto", "Lucida Grande", Verdana, Arial, sans-serif;
|
font-family: var(--font-family-primary);
|
||||||
font-weight: normal;
|
font-weight: normal;
|
||||||
font-size: 13px;
|
font-size: 0.8125rem;
|
||||||
}
|
}
|
||||||
.form-row div.help {
|
.form-row div.help {
|
||||||
padding: 2px 3px;
|
padding: 2px 3px;
|
||||||
@@ -488,8 +489,13 @@ textarea {
|
|||||||
vertical-align: top;
|
vertical-align: top;
|
||||||
}
|
}
|
||||||
|
|
||||||
input[type=text], input[type=password], input[type=email], input[type=url],
|
/*
|
||||||
input[type=number], input[type=tel], textarea, select, .vTextField {
|
Minifiers remove the default (text) "type" attribute from "input" HTML tags.
|
||||||
|
Add input:not([type]) to make the CSS stylesheet work the same.
|
||||||
|
*/
|
||||||
|
input:not([type]), input[type=text], input[type=password], input[type=email],
|
||||||
|
input[type=url], input[type=number], input[type=tel], textarea, select,
|
||||||
|
.vTextField {
|
||||||
border: 1px solid var(--border-color);
|
border: 1px solid var(--border-color);
|
||||||
border-radius: 4px;
|
border-radius: 4px;
|
||||||
padding: 5px 6px;
|
padding: 5px 6px;
|
||||||
@@ -498,14 +504,18 @@ input[type=number], input[type=tel], textarea, select, .vTextField {
|
|||||||
background-color: var(--body-bg);
|
background-color: var(--body-bg);
|
||||||
}
|
}
|
||||||
|
|
||||||
input[type=text]:focus, input[type=password]:focus, input[type=email]:focus,
|
/*
|
||||||
input[type=url]:focus, input[type=number]:focus, input[type=tel]:focus,
|
Minifiers remove the default (text) "type" attribute from "input" HTML tags.
|
||||||
textarea:focus, select:focus, .vTextField:focus {
|
Add input:not([type]) to make the CSS stylesheet work the same.
|
||||||
|
*/
|
||||||
|
input:not([type]):focus, 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: var(--body-quiet-color);
|
border-color: var(--body-quiet-color);
|
||||||
}
|
}
|
||||||
|
|
||||||
select {
|
select {
|
||||||
height: 30px;
|
height: 1.875rem;
|
||||||
}
|
}
|
||||||
|
|
||||||
select[multiple] {
|
select[multiple] {
|
||||||
@@ -541,7 +551,6 @@ a.button {
|
|||||||
}
|
}
|
||||||
|
|
||||||
.button.default, input[type=submit].default, .submit-row input.default {
|
.button.default, input[type=submit].default, .submit-row input.default {
|
||||||
float: right;
|
|
||||||
border: none;
|
border: none;
|
||||||
font-weight: 400;
|
font-weight: 400;
|
||||||
background: var(--default-button-bg);
|
background: var(--default-button-bg);
|
||||||
@@ -589,15 +598,15 @@ input[type=button][disabled].default {
|
|||||||
margin: 0;
|
margin: 0;
|
||||||
padding: 8px;
|
padding: 8px;
|
||||||
font-weight: 400;
|
font-weight: 400;
|
||||||
font-size: 13px;
|
font-size: 0.8125rem;
|
||||||
text-align: left;
|
text-align: left;
|
||||||
background: var(--primary);
|
background: var(--header-bg);
|
||||||
color: var(--header-link-color);
|
color: var(--header-link-color);
|
||||||
}
|
}
|
||||||
|
|
||||||
.module caption,
|
.module caption,
|
||||||
.inline-group h2 {
|
.inline-group h2 {
|
||||||
font-size: 12px;
|
font-size: 0.75rem;
|
||||||
letter-spacing: 0.5px;
|
letter-spacing: 0.5px;
|
||||||
text-transform: uppercase;
|
text-transform: uppercase;
|
||||||
}
|
}
|
||||||
@@ -616,12 +625,13 @@ ul.messagelist {
|
|||||||
ul.messagelist li {
|
ul.messagelist li {
|
||||||
display: block;
|
display: block;
|
||||||
font-weight: 400;
|
font-weight: 400;
|
||||||
font-size: 13px;
|
font-size: 0.8125rem;
|
||||||
padding: 10px 10px 10px 65px;
|
padding: 10px 10px 10px 65px;
|
||||||
margin: 0 0 10px 0;
|
margin: 0 0 10px 0;
|
||||||
background: var(--message-success-bg) url(../img/icon-yes.svg) 40px 12px no-repeat;
|
background: var(--message-success-bg) url(../img/icon-yes.svg) 40px 12px no-repeat;
|
||||||
background-size: 16px auto;
|
background-size: 16px auto;
|
||||||
color: var(--body-fg);
|
color: var(--body-fg);
|
||||||
|
word-break: break-word;
|
||||||
}
|
}
|
||||||
|
|
||||||
ul.messagelist li.warning {
|
ul.messagelist li.warning {
|
||||||
@@ -635,7 +645,7 @@ ul.messagelist li.error {
|
|||||||
}
|
}
|
||||||
|
|
||||||
.errornote {
|
.errornote {
|
||||||
font-size: 14px;
|
font-size: 0.875rem;
|
||||||
font-weight: 700;
|
font-weight: 700;
|
||||||
display: block;
|
display: block;
|
||||||
padding: 10px 12px;
|
padding: 10px 12px;
|
||||||
@@ -656,7 +666,7 @@ ul.errorlist {
|
|||||||
}
|
}
|
||||||
|
|
||||||
ul.errorlist li {
|
ul.errorlist li {
|
||||||
font-size: 13px;
|
font-size: 0.8125rem;
|
||||||
display: block;
|
display: block;
|
||||||
margin-bottom: 4px;
|
margin-bottom: 4px;
|
||||||
overflow-wrap: break-word;
|
overflow-wrap: break-word;
|
||||||
@@ -697,7 +707,7 @@ td ul.errorlist + input, td ul.errorlist + select, td ul.errorlist + textarea {
|
|||||||
}
|
}
|
||||||
|
|
||||||
.description {
|
.description {
|
||||||
font-size: 12px;
|
font-size: 0.75rem;
|
||||||
padding: 5px 0 0 12px;
|
padding: 5px 0 0 12px;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -726,6 +736,11 @@ div.breadcrumbs a:focus, div.breadcrumbs a:hover {
|
|||||||
background: url(../img/icon-viewlink.svg) 0 1px no-repeat;
|
background: url(../img/icon-viewlink.svg) 0 1px no-repeat;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.hidelink {
|
||||||
|
padding-left: 16px;
|
||||||
|
background: url(../img/icon-hidelink.svg) 0 1px no-repeat;
|
||||||
|
}
|
||||||
|
|
||||||
.addlink {
|
.addlink {
|
||||||
padding-left: 16px;
|
padding-left: 16px;
|
||||||
background: url(../img/icon-addlink.svg) 0 1px no-repeat;
|
background: url(../img/icon-addlink.svg) 0 1px no-repeat;
|
||||||
@@ -753,7 +768,7 @@ a.deletelink:focus, a.deletelink:hover {
|
|||||||
/* OBJECT TOOLS */
|
/* OBJECT TOOLS */
|
||||||
|
|
||||||
.object-tools {
|
.object-tools {
|
||||||
font-size: 10px;
|
font-size: 0.625rem;
|
||||||
font-weight: bold;
|
font-weight: bold;
|
||||||
padding-left: 0;
|
padding-left: 0;
|
||||||
float: right;
|
float: right;
|
||||||
@@ -765,7 +780,7 @@ a.deletelink:focus, a.deletelink:hover {
|
|||||||
display: block;
|
display: block;
|
||||||
float: left;
|
float: left;
|
||||||
margin-left: 5px;
|
margin-left: 5px;
|
||||||
height: 16px;
|
height: 1rem;
|
||||||
}
|
}
|
||||||
|
|
||||||
.object-tools a {
|
.object-tools a {
|
||||||
@@ -779,7 +794,7 @@ a.deletelink:focus, a.deletelink:hover {
|
|||||||
background: var(--object-tools-bg);
|
background: var(--object-tools-bg);
|
||||||
color: var(--object-tools-fg);
|
color: var(--object-tools-fg);
|
||||||
font-weight: 400;
|
font-weight: 400;
|
||||||
font-size: 11px;
|
font-size: 0.6875rem;
|
||||||
text-transform: uppercase;
|
text-transform: uppercase;
|
||||||
letter-spacing: 0.5px;
|
letter-spacing: 0.5px;
|
||||||
}
|
}
|
||||||
@@ -808,14 +823,21 @@ a.deletelink:focus, a.deletelink:hover {
|
|||||||
|
|
||||||
/* OBJECT HISTORY */
|
/* OBJECT HISTORY */
|
||||||
|
|
||||||
table#change-history {
|
#change-history table {
|
||||||
width: 100%;
|
width: 100%;
|
||||||
}
|
}
|
||||||
|
|
||||||
table#change-history tbody th {
|
#change-history table tbody th {
|
||||||
width: 16em;
|
width: 16em;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#change-history .paginator {
|
||||||
|
color: var(--body-quiet-color);
|
||||||
|
border-bottom: 1px solid var(--hairline-color);
|
||||||
|
background: var(--body-bg);
|
||||||
|
overflow: hidden;
|
||||||
|
}
|
||||||
|
|
||||||
/* PAGE STRUCTURE */
|
/* PAGE STRUCTURE */
|
||||||
|
|
||||||
#container {
|
#container {
|
||||||
@@ -828,10 +850,6 @@ table#change-history tbody th {
|
|||||||
height: 100%;
|
height: 100%;
|
||||||
}
|
}
|
||||||
|
|
||||||
#container > div {
|
|
||||||
flex-shrink: 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
#container > .main {
|
#container > .main {
|
||||||
display: flex;
|
display: flex;
|
||||||
flex: 1 0 auto;
|
flex: 1 0 auto;
|
||||||
@@ -842,6 +860,20 @@ table#change-history tbody th {
|
|||||||
max-width: 100%;
|
max-width: 100%;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.skip-to-content-link {
|
||||||
|
position: absolute;
|
||||||
|
top: -999px;
|
||||||
|
margin: 5px;
|
||||||
|
padding: 5px;
|
||||||
|
background: var(--body-bg);
|
||||||
|
z-index: 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
.skip-to-content-link:focus {
|
||||||
|
left: 0px;
|
||||||
|
top: 0px;
|
||||||
|
}
|
||||||
|
|
||||||
#content {
|
#content {
|
||||||
padding: 20px 40px;
|
padding: 20px 40px;
|
||||||
}
|
}
|
||||||
@@ -862,9 +894,10 @@ table#change-history tbody th {
|
|||||||
margin-right: -300px;
|
margin-right: -300px;
|
||||||
}
|
}
|
||||||
|
|
||||||
#footer {
|
@media (forced-colors: active) {
|
||||||
clear: both;
|
#content-related {
|
||||||
padding: 10px;
|
border: 1px solid;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/* COLUMN TYPES */
|
/* COLUMN TYPES */
|
||||||
@@ -902,10 +935,9 @@ table#change-history tbody th {
|
|||||||
padding: 10px 40px;
|
padding: 10px 40px;
|
||||||
background: var(--header-bg);
|
background: var(--header-bg);
|
||||||
color: var(--header-color);
|
color: var(--header-color);
|
||||||
overflow: hidden;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
#header a:link, #header a:visited {
|
#header a:link, #header a:visited, #logout-form button {
|
||||||
color: var(--header-link-color);
|
color: var(--header-link-color);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -913,25 +945,32 @@ table#change-history tbody th {
|
|||||||
text-decoration: underline;
|
text-decoration: underline;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@media (forced-colors: active) {
|
||||||
|
#header {
|
||||||
|
border-bottom: 1px solid;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
#branding {
|
#branding {
|
||||||
float: left;
|
display: flex;
|
||||||
}
|
}
|
||||||
|
|
||||||
#branding h1 {
|
#site-name {
|
||||||
padding: 0;
|
padding: 0;
|
||||||
margin: 0 20px 0 0;
|
margin: 0;
|
||||||
|
margin-inline-end: 20px;
|
||||||
font-weight: 300;
|
font-weight: 300;
|
||||||
font-size: 24px;
|
font-size: 1.5rem;
|
||||||
color: var(--accent);
|
color: var(--header-branding-color);
|
||||||
}
|
}
|
||||||
|
|
||||||
#branding h1, #branding h1 a:link, #branding h1 a:visited {
|
#site-name a:link, #site-name a:visited {
|
||||||
color: var(--accent);
|
color: var(--accent);
|
||||||
}
|
}
|
||||||
|
|
||||||
#branding h2 {
|
#branding h2 {
|
||||||
padding: 0 10px;
|
padding: 0 10px;
|
||||||
font-size: 14px;
|
font-size: 0.875rem;
|
||||||
margin: -8px 0 8px 0;
|
margin: -8px 0 8px 0;
|
||||||
font-weight: normal;
|
font-weight: normal;
|
||||||
color: var(--header-color);
|
color: var(--header-color);
|
||||||
@@ -941,25 +980,43 @@ table#change-history tbody th {
|
|||||||
text-decoration: none;
|
text-decoration: none;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#logout-form {
|
||||||
|
display: inline;
|
||||||
|
}
|
||||||
|
|
||||||
|
#logout-form button {
|
||||||
|
background: none;
|
||||||
|
border: 0;
|
||||||
|
cursor: pointer;
|
||||||
|
font-family: var(--font-family-primary);
|
||||||
|
}
|
||||||
|
|
||||||
#user-tools {
|
#user-tools {
|
||||||
float: right;
|
float: right;
|
||||||
padding: 0;
|
|
||||||
margin: 0 0 0 20px;
|
margin: 0 0 0 20px;
|
||||||
font-weight: 300;
|
|
||||||
font-size: 11px;
|
|
||||||
letter-spacing: 0.5px;
|
|
||||||
text-transform: uppercase;
|
|
||||||
text-align: right;
|
text-align: right;
|
||||||
}
|
}
|
||||||
|
|
||||||
#user-tools a {
|
#user-tools, #logout-form button{
|
||||||
|
padding: 0;
|
||||||
|
font-weight: 300;
|
||||||
|
font-size: 0.6875rem;
|
||||||
|
letter-spacing: 0.5px;
|
||||||
|
text-transform: uppercase;
|
||||||
|
}
|
||||||
|
|
||||||
|
#user-tools a, #logout-form button {
|
||||||
border-bottom: 1px solid rgba(255, 255, 255, 0.25);
|
border-bottom: 1px solid rgba(255, 255, 255, 0.25);
|
||||||
}
|
}
|
||||||
|
|
||||||
#user-tools a:focus, #user-tools a:hover {
|
#user-tools a:focus, #user-tools a:hover,
|
||||||
|
#logout-form button:active, #logout-form button:hover {
|
||||||
text-decoration: none;
|
text-decoration: none;
|
||||||
border-bottom-color: var(--primary);
|
border-bottom: 0;
|
||||||
color: var(--primary);
|
}
|
||||||
|
|
||||||
|
#logout-form button:active, #logout-form button:hover {
|
||||||
|
margin-bottom: 1px;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* SIDEBAR */
|
/* SIDEBAR */
|
||||||
@@ -979,7 +1036,7 @@ table#change-history tbody th {
|
|||||||
}
|
}
|
||||||
|
|
||||||
#content-related h4 {
|
#content-related h4 {
|
||||||
font-size: 13px;
|
font-size: 0.8125rem;
|
||||||
}
|
}
|
||||||
|
|
||||||
#content-related p {
|
#content-related p {
|
||||||
@@ -1003,7 +1060,7 @@ table#change-history tbody th {
|
|||||||
padding: 16px;
|
padding: 16px;
|
||||||
margin-bottom: 16px;
|
margin-bottom: 16px;
|
||||||
border-bottom: 1px solid var(--hairline-color);
|
border-bottom: 1px solid var(--hairline-color);
|
||||||
font-size: 18px;
|
font-size: 1.125rem;
|
||||||
color: var(--body-fg);
|
color: var(--body-fg);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1023,8 +1080,8 @@ table#change-history tbody th {
|
|||||||
.delete-confirmation form .cancel-link {
|
.delete-confirmation form .cancel-link {
|
||||||
display: inline-block;
|
display: inline-block;
|
||||||
vertical-align: middle;
|
vertical-align: middle;
|
||||||
height: 15px;
|
height: 0.9375rem;
|
||||||
line-height: 15px;
|
line-height: 0.9375rem;
|
||||||
border-radius: 4px;
|
border-radius: 4px;
|
||||||
padding: 10px 15px;
|
padding: 10px 15px;
|
||||||
color: var(--button-fg);
|
color: var(--button-fg);
|
||||||
@@ -1050,3 +1107,74 @@ table#change-history tbody th {
|
|||||||
.popup #header {
|
.popup #header {
|
||||||
padding: 10px 20px;
|
padding: 10px 20px;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* PAGINATOR */
|
||||||
|
|
||||||
|
.paginator {
|
||||||
|
display: flex;
|
||||||
|
align-items: center;
|
||||||
|
gap: 4px;
|
||||||
|
font-size: 0.8125rem;
|
||||||
|
padding-top: 10px;
|
||||||
|
padding-bottom: 10px;
|
||||||
|
line-height: 22px;
|
||||||
|
margin: 0;
|
||||||
|
border-top: 1px solid var(--hairline-color);
|
||||||
|
width: 100%;
|
||||||
|
box-sizing: border-box;
|
||||||
|
}
|
||||||
|
|
||||||
|
.paginator a:link, .paginator a:visited {
|
||||||
|
padding: 2px 6px;
|
||||||
|
background: var(--button-bg);
|
||||||
|
text-decoration: none;
|
||||||
|
color: var(--button-fg);
|
||||||
|
}
|
||||||
|
|
||||||
|
.paginator a.showall {
|
||||||
|
border: none;
|
||||||
|
background: none;
|
||||||
|
color: var(--link-fg);
|
||||||
|
}
|
||||||
|
|
||||||
|
.paginator a.showall:focus, .paginator a.showall:hover {
|
||||||
|
background: none;
|
||||||
|
color: var(--link-hover-color);
|
||||||
|
}
|
||||||
|
|
||||||
|
.paginator .end {
|
||||||
|
margin-right: 6px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.paginator .this-page {
|
||||||
|
padding: 2px 6px;
|
||||||
|
font-weight: bold;
|
||||||
|
font-size: 0.8125rem;
|
||||||
|
vertical-align: top;
|
||||||
|
}
|
||||||
|
|
||||||
|
.paginator a:focus, .paginator a:hover {
|
||||||
|
color: white;
|
||||||
|
background: var(--link-hover-color);
|
||||||
|
}
|
||||||
|
|
||||||
|
.paginator input {
|
||||||
|
margin-left: auto;
|
||||||
|
}
|
||||||
|
|
||||||
|
.base-svgs {
|
||||||
|
display: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
.visually-hidden {
|
||||||
|
position: absolute;
|
||||||
|
width: 1px;
|
||||||
|
height: 1px;
|
||||||
|
padding: 0;
|
||||||
|
overflow: hidden;
|
||||||
|
clip: rect(0,0,0,0);
|
||||||
|
white-space: nowrap;
|
||||||
|
border: 0;
|
||||||
|
color: var(--body-fg);
|
||||||
|
background-color: var(--body-bg);
|
||||||
|
}
|
||||||
|
|||||||
@@ -84,18 +84,18 @@
|
|||||||
|
|
||||||
#toolbar form input {
|
#toolbar form input {
|
||||||
border-radius: 4px;
|
border-radius: 4px;
|
||||||
font-size: 14px;
|
font-size: 0.875rem;
|
||||||
padding: 5px;
|
padding: 5px;
|
||||||
color: var(--body-fg);
|
color: var(--body-fg);
|
||||||
}
|
}
|
||||||
|
|
||||||
#toolbar #searchbar {
|
#toolbar #searchbar {
|
||||||
height: 19px;
|
height: 1.1875rem;
|
||||||
border: 1px solid var(--border-color);
|
border: 1px solid var(--border-color);
|
||||||
padding: 2px 5px;
|
padding: 2px 5px;
|
||||||
margin: 0;
|
margin: 0;
|
||||||
vertical-align: top;
|
vertical-align: top;
|
||||||
font-size: 13px;
|
font-size: 0.8125rem;
|
||||||
max-width: 100%;
|
max-width: 100%;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -105,7 +105,7 @@
|
|||||||
|
|
||||||
#toolbar form input[type="submit"] {
|
#toolbar form input[type="submit"] {
|
||||||
border: 1px solid var(--border-color);
|
border: 1px solid var(--border-color);
|
||||||
font-size: 13px;
|
font-size: 0.8125rem;
|
||||||
padding: 4px 8px;
|
padding: 4px 8px;
|
||||||
margin: 0;
|
margin: 0;
|
||||||
vertical-align: middle;
|
vertical-align: middle;
|
||||||
@@ -139,8 +139,14 @@
|
|||||||
margin: 0 0 0 30px;
|
margin: 0 0 0 30px;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@media (forced-colors: active) {
|
||||||
|
#changelist-filter {
|
||||||
|
border: 1px solid;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
#changelist-filter h2 {
|
#changelist-filter h2 {
|
||||||
font-size: 14px;
|
font-size: 0.875rem;
|
||||||
text-transform: uppercase;
|
text-transform: uppercase;
|
||||||
letter-spacing: 0.5px;
|
letter-spacing: 0.5px;
|
||||||
padding: 5px 15px;
|
padding: 5px 15px;
|
||||||
@@ -148,12 +154,35 @@
|
|||||||
border-bottom: none;
|
border-bottom: none;
|
||||||
}
|
}
|
||||||
|
|
||||||
#changelist-filter h3 {
|
#changelist-filter h3,
|
||||||
|
#changelist-filter details summary {
|
||||||
font-weight: 400;
|
font-weight: 400;
|
||||||
padding: 0 15px;
|
padding: 0 15px;
|
||||||
margin-bottom: 10px;
|
margin-bottom: 10px;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#changelist-filter details summary > * {
|
||||||
|
display: inline;
|
||||||
|
}
|
||||||
|
|
||||||
|
#changelist-filter details > summary {
|
||||||
|
list-style-type: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
#changelist-filter details > summary::-webkit-details-marker {
|
||||||
|
display: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
#changelist-filter details > summary::before {
|
||||||
|
content: '→';
|
||||||
|
font-weight: bold;
|
||||||
|
color: var(--link-hover-color);
|
||||||
|
}
|
||||||
|
|
||||||
|
#changelist-filter details[open] > summary::before {
|
||||||
|
content: '↓';
|
||||||
|
}
|
||||||
|
|
||||||
#changelist-filter ul {
|
#changelist-filter ul {
|
||||||
margin: 5px 0;
|
margin: 5px 0;
|
||||||
padding: 0 15px 15px;
|
padding: 0 15px 15px;
|
||||||
@@ -173,8 +202,7 @@
|
|||||||
#changelist-filter a {
|
#changelist-filter a {
|
||||||
display: block;
|
display: block;
|
||||||
color: var(--body-quiet-color);
|
color: var(--body-quiet-color);
|
||||||
text-overflow: ellipsis;
|
word-break: break-word;
|
||||||
overflow-x: hidden;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
#changelist-filter li.selected {
|
#changelist-filter li.selected {
|
||||||
@@ -193,84 +221,35 @@
|
|||||||
color: var(--link-hover-color);
|
color: var(--link-hover-color);
|
||||||
}
|
}
|
||||||
|
|
||||||
#changelist-filter #changelist-filter-clear a {
|
#changelist-filter #changelist-filter-extra-actions {
|
||||||
font-size: 13px;
|
font-size: 0.8125rem;
|
||||||
padding-bottom: 10px;
|
margin-bottom: 10px;
|
||||||
border-bottom: 1px solid var(--hairline-color);
|
border-bottom: 1px solid var(--hairline-color);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* DATE DRILLDOWN */
|
/* DATE DRILLDOWN */
|
||||||
|
|
||||||
.change-list ul.toplinks {
|
.change-list .toplinks {
|
||||||
display: block;
|
display: flex;
|
||||||
float: left;
|
padding-bottom: 5px;
|
||||||
padding: 0;
|
flex-wrap: wrap;
|
||||||
margin: 0;
|
gap: 3px 17px;
|
||||||
width: 100%;
|
|
||||||
}
|
|
||||||
|
|
||||||
.change-list ul.toplinks li {
|
|
||||||
padding: 3px 6px;
|
|
||||||
font-weight: bold;
|
font-weight: bold;
|
||||||
list-style-type: none;
|
|
||||||
display: inline-block;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
.change-list ul.toplinks .date-back a {
|
.change-list .toplinks a {
|
||||||
|
font-size: 0.8125rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
.change-list .toplinks .date-back {
|
||||||
color: var(--body-quiet-color);
|
color: var(--body-quiet-color);
|
||||||
}
|
}
|
||||||
|
|
||||||
.change-list ul.toplinks .date-back a:focus,
|
.change-list .toplinks .date-back:focus,
|
||||||
.change-list ul.toplinks .date-back a:hover {
|
.change-list .toplinks .date-back:hover {
|
||||||
color: var(--link-hover-color);
|
color: var(--link-hover-color);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* PAGINATOR */
|
|
||||||
|
|
||||||
.paginator {
|
|
||||||
font-size: 13px;
|
|
||||||
padding-top: 10px;
|
|
||||||
padding-bottom: 10px;
|
|
||||||
line-height: 22px;
|
|
||||||
margin: 0;
|
|
||||||
border-top: 1px solid var(--hairline-color);
|
|
||||||
width: 100%;
|
|
||||||
}
|
|
||||||
|
|
||||||
.paginator a:link, .paginator a:visited {
|
|
||||||
padding: 2px 6px;
|
|
||||||
background: var(--button-bg);
|
|
||||||
text-decoration: none;
|
|
||||||
color: var(--button-fg);
|
|
||||||
}
|
|
||||||
|
|
||||||
.paginator a.showall {
|
|
||||||
border: none;
|
|
||||||
background: none;
|
|
||||||
color: var(--link-fg);
|
|
||||||
}
|
|
||||||
|
|
||||||
.paginator a.showall:focus, .paginator a.showall:hover {
|
|
||||||
background: none;
|
|
||||||
color: var(--link-hover-color);
|
|
||||||
}
|
|
||||||
|
|
||||||
.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: var(--link-hover-color);
|
|
||||||
}
|
|
||||||
|
|
||||||
/* ACTIONS */
|
/* ACTIONS */
|
||||||
|
|
||||||
.filtered .actions {
|
.filtered .actions {
|
||||||
@@ -282,31 +261,40 @@
|
|||||||
vertical-align: baseline;
|
vertical-align: baseline;
|
||||||
}
|
}
|
||||||
|
|
||||||
#changelist table tbody tr.selected {
|
/* Once the :has() pseudo-class is supported by all browsers, the tr.selected
|
||||||
|
selector and the JS adding the class can be removed. */
|
||||||
|
#changelist tbody tr.selected {
|
||||||
background-color: var(--selected-row);
|
background-color: var(--selected-row);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#changelist tbody tr:has(.action-select:checked) {
|
||||||
|
background-color: var(--selected-row);
|
||||||
|
}
|
||||||
|
|
||||||
|
@media (forced-colors: active) {
|
||||||
|
#changelist tbody tr.selected {
|
||||||
|
background-color: SelectedItem;
|
||||||
|
}
|
||||||
|
#changelist tbody tr:has(.action-select:checked) {
|
||||||
|
background-color: SelectedItem;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
#changelist .actions {
|
#changelist .actions {
|
||||||
padding: 10px;
|
padding: 10px;
|
||||||
background: var(--body-bg);
|
background: var(--body-bg);
|
||||||
border-top: none;
|
border-top: none;
|
||||||
border-bottom: none;
|
border-bottom: none;
|
||||||
line-height: 24px;
|
line-height: 1.5rem;
|
||||||
color: var(--body-quiet-color);
|
color: var(--body-quiet-color);
|
||||||
width: 100%;
|
width: 100%;
|
||||||
}
|
}
|
||||||
|
|
||||||
#changelist .actions.selected { /* XXX Probably unused? */
|
|
||||||
background: var(--body-bg);
|
|
||||||
border-top: 1px solid var(--body-bg);
|
|
||||||
border-bottom: 1px solid #edecd6;
|
|
||||||
}
|
|
||||||
|
|
||||||
#changelist .actions span.all,
|
#changelist .actions span.all,
|
||||||
#changelist .actions span.action-counter,
|
#changelist .actions span.action-counter,
|
||||||
#changelist .actions span.clear,
|
#changelist .actions span.clear,
|
||||||
#changelist .actions span.question {
|
#changelist .actions span.question {
|
||||||
font-size: 13px;
|
font-size: 0.8125rem;
|
||||||
margin: 0 0.5em;
|
margin: 0 0.5em;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -316,11 +304,11 @@
|
|||||||
|
|
||||||
#changelist .actions select {
|
#changelist .actions select {
|
||||||
vertical-align: top;
|
vertical-align: top;
|
||||||
height: 24px;
|
height: 1.5rem;
|
||||||
color: var(--body-fg);
|
color: var(--body-fg);
|
||||||
border: 1px solid var(--border-color);
|
border: 1px solid var(--border-color);
|
||||||
border-radius: 4px;
|
border-radius: 4px;
|
||||||
font-size: 14px;
|
font-size: 0.875rem;
|
||||||
padding: 0 0 0 4px;
|
padding: 0 0 0 4px;
|
||||||
margin: 0;
|
margin: 0;
|
||||||
margin-left: 10px;
|
margin-left: 10px;
|
||||||
@@ -333,17 +321,17 @@
|
|||||||
#changelist .actions label {
|
#changelist .actions label {
|
||||||
display: inline-block;
|
display: inline-block;
|
||||||
vertical-align: middle;
|
vertical-align: middle;
|
||||||
font-size: 13px;
|
font-size: 0.8125rem;
|
||||||
}
|
}
|
||||||
|
|
||||||
#changelist .actions .button {
|
#changelist .actions .button {
|
||||||
font-size: 13px;
|
font-size: 0.8125rem;
|
||||||
border: 1px solid var(--border-color);
|
border: 1px solid var(--border-color);
|
||||||
border-radius: 4px;
|
border-radius: 4px;
|
||||||
background: var(--body-bg);
|
background: var(--body-bg);
|
||||||
box-shadow: 0 -15px 20px -10px rgba(0, 0, 0, 0.15) inset;
|
box-shadow: 0 -15px 20px -10px rgba(0, 0, 0, 0.15) inset;
|
||||||
cursor: pointer;
|
cursor: pointer;
|
||||||
height: 24px;
|
height: 1.5rem;
|
||||||
line-height: 1;
|
line-height: 1;
|
||||||
padding: 4px 8px;
|
padding: 4px 8px;
|
||||||
margin: 0;
|
margin: 0;
|
||||||
|
|||||||
130
assets/admin/css/dark_mode.css
Normal file
@@ -0,0 +1,130 @@
|
|||||||
|
@media (prefers-color-scheme: dark) {
|
||||||
|
:root {
|
||||||
|
--primary: #264b5d;
|
||||||
|
--primary-fg: #f7f7f7;
|
||||||
|
|
||||||
|
--body-fg: #eeeeee;
|
||||||
|
--body-bg: #121212;
|
||||||
|
--body-quiet-color: #d0d0d0;
|
||||||
|
--body-medium-color: #e0e0e0;
|
||||||
|
--body-loud-color: #ffffff;
|
||||||
|
|
||||||
|
--breadcrumbs-link-fg: #e0e0e0;
|
||||||
|
--breadcrumbs-bg: var(--primary);
|
||||||
|
|
||||||
|
--link-fg: #81d4fa;
|
||||||
|
--link-hover-color: #4ac1f7;
|
||||||
|
--link-selected-fg: #6f94c6;
|
||||||
|
|
||||||
|
--hairline-color: #272727;
|
||||||
|
--border-color: #353535;
|
||||||
|
|
||||||
|
--error-fg: #e35f5f;
|
||||||
|
--message-success-bg: #006b1b;
|
||||||
|
--message-warning-bg: #583305;
|
||||||
|
--message-error-bg: #570808;
|
||||||
|
|
||||||
|
--darkened-bg: #212121;
|
||||||
|
--selected-bg: #1b1b1b;
|
||||||
|
--selected-row: #00363a;
|
||||||
|
|
||||||
|
--close-button-bg: #333333;
|
||||||
|
--close-button-hover-bg: #666666;
|
||||||
|
|
||||||
|
color-scheme: dark;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
html[data-theme="dark"] {
|
||||||
|
--primary: #264b5d;
|
||||||
|
--primary-fg: #f7f7f7;
|
||||||
|
|
||||||
|
--body-fg: #eeeeee;
|
||||||
|
--body-bg: #121212;
|
||||||
|
--body-quiet-color: #d0d0d0;
|
||||||
|
--body-medium-color: #e0e0e0;
|
||||||
|
--body-loud-color: #ffffff;
|
||||||
|
|
||||||
|
--breadcrumbs-link-fg: #e0e0e0;
|
||||||
|
--breadcrumbs-bg: var(--primary);
|
||||||
|
|
||||||
|
--link-fg: #81d4fa;
|
||||||
|
--link-hover-color: #4ac1f7;
|
||||||
|
--link-selected-fg: #6f94c6;
|
||||||
|
|
||||||
|
--hairline-color: #272727;
|
||||||
|
--border-color: #353535;
|
||||||
|
|
||||||
|
--error-fg: #e35f5f;
|
||||||
|
--message-success-bg: #006b1b;
|
||||||
|
--message-warning-bg: #583305;
|
||||||
|
--message-error-bg: #570808;
|
||||||
|
|
||||||
|
--darkened-bg: #212121;
|
||||||
|
--selected-bg: #1b1b1b;
|
||||||
|
--selected-row: #00363a;
|
||||||
|
|
||||||
|
--close-button-bg: #333333;
|
||||||
|
--close-button-hover-bg: #666666;
|
||||||
|
|
||||||
|
color-scheme: dark;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* THEME SWITCH */
|
||||||
|
.theme-toggle {
|
||||||
|
cursor: pointer;
|
||||||
|
border: none;
|
||||||
|
padding: 0;
|
||||||
|
background: transparent;
|
||||||
|
vertical-align: middle;
|
||||||
|
margin-inline-start: 5px;
|
||||||
|
margin-top: -1px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.theme-toggle svg {
|
||||||
|
vertical-align: middle;
|
||||||
|
height: 1.5rem;
|
||||||
|
width: 1.5rem;
|
||||||
|
display: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
Fully hide screen reader text so we only show the one matching the current
|
||||||
|
theme.
|
||||||
|
*/
|
||||||
|
.theme-toggle .visually-hidden {
|
||||||
|
display: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
html[data-theme="auto"] .theme-toggle .theme-label-when-auto {
|
||||||
|
display: block;
|
||||||
|
}
|
||||||
|
|
||||||
|
html[data-theme="dark"] .theme-toggle .theme-label-when-dark {
|
||||||
|
display: block;
|
||||||
|
}
|
||||||
|
|
||||||
|
html[data-theme="light"] .theme-toggle .theme-label-when-light {
|
||||||
|
display: block;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* ICONS */
|
||||||
|
.theme-toggle svg.theme-icon-when-auto,
|
||||||
|
.theme-toggle svg.theme-icon-when-dark,
|
||||||
|
.theme-toggle svg.theme-icon-when-light {
|
||||||
|
fill: var(--header-link-color);
|
||||||
|
color: var(--header-bg);
|
||||||
|
}
|
||||||
|
|
||||||
|
html[data-theme="auto"] .theme-toggle svg.theme-icon-when-auto {
|
||||||
|
display: block;
|
||||||
|
}
|
||||||
|
|
||||||
|
html[data-theme="dark"] .theme-toggle svg.theme-icon-when-dark {
|
||||||
|
display: block;
|
||||||
|
}
|
||||||
|
|
||||||
|
html[data-theme="light"] .theme-toggle svg.theme-icon-when-light {
|
||||||
|
display: block;
|
||||||
|
}
|
||||||
@@ -1,4 +1,7 @@
|
|||||||
/* DASHBOARD */
|
/* DASHBOARD */
|
||||||
|
.dashboard td, .dashboard th {
|
||||||
|
word-break: break-word;
|
||||||
|
}
|
||||||
|
|
||||||
.dashboard .module table th {
|
.dashboard .module table th {
|
||||||
width: 100%;
|
width: 100%;
|
||||||
|
|||||||
@@ -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;
|
|
||||||
}
|
|
||||||
@@ -5,7 +5,7 @@
|
|||||||
.form-row {
|
.form-row {
|
||||||
overflow: hidden;
|
overflow: hidden;
|
||||||
padding: 10px;
|
padding: 10px;
|
||||||
font-size: 13px;
|
font-size: 0.8125rem;
|
||||||
border-bottom: 1px solid var(--hairline-color);
|
border-bottom: 1px solid var(--hairline-color);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -22,17 +22,28 @@ form .form-row p {
|
|||||||
padding-left: 0;
|
padding-left: 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.flex-container {
|
||||||
|
display: flex;
|
||||||
|
}
|
||||||
|
|
||||||
|
.form-multiline {
|
||||||
|
flex-wrap: wrap;
|
||||||
|
}
|
||||||
|
|
||||||
|
.form-multiline > div {
|
||||||
|
padding-bottom: 10px;
|
||||||
|
}
|
||||||
|
|
||||||
/* FORM LABELS */
|
/* FORM LABELS */
|
||||||
|
|
||||||
label {
|
label {
|
||||||
font-weight: normal;
|
font-weight: normal;
|
||||||
color: var(--body-quiet-color);
|
color: var(--body-quiet-color);
|
||||||
font-size: 13px;
|
font-size: 0.8125rem;
|
||||||
}
|
}
|
||||||
|
|
||||||
.required label, label.required {
|
.required label, label.required {
|
||||||
font-weight: bold;
|
font-weight: bold;
|
||||||
color: var(--body-fg);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/* RADIO BUTTONS */
|
/* RADIO BUTTONS */
|
||||||
@@ -64,29 +75,41 @@ form ul.inline li {
|
|||||||
padding-right: 7px;
|
padding-right: 7px;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* FIELDSETS */
|
||||||
|
|
||||||
|
fieldset .fieldset-heading,
|
||||||
|
fieldset .inline-heading,
|
||||||
|
:not(.inline-related) .collapse summary {
|
||||||
|
border: 1px solid var(--header-bg);
|
||||||
|
margin: 0;
|
||||||
|
padding: 8px;
|
||||||
|
font-weight: 400;
|
||||||
|
font-size: 0.8125rem;
|
||||||
|
background: var(--header-bg);
|
||||||
|
color: var(--header-link-color);
|
||||||
|
}
|
||||||
|
|
||||||
/* ALIGNED FIELDSETS */
|
/* ALIGNED FIELDSETS */
|
||||||
|
|
||||||
.aligned label {
|
.aligned label {
|
||||||
display: block;
|
display: block;
|
||||||
padding: 4px 10px 0 0;
|
padding: 4px 10px 0 0;
|
||||||
float: left;
|
min-width: 160px;
|
||||||
width: 160px;
|
width: 160px;
|
||||||
word-wrap: break-word;
|
word-wrap: break-word;
|
||||||
line-height: 1;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
.aligned label:not(.vCheckboxLabel):after {
|
.aligned label:not(.vCheckboxLabel):after {
|
||||||
content: '';
|
content: '';
|
||||||
display: inline-block;
|
display: inline-block;
|
||||||
vertical-align: middle;
|
vertical-align: middle;
|
||||||
height: 26px;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
.aligned label + p, .aligned label + div.help, .aligned label + div.readonly {
|
.aligned label + p, .aligned .checkbox-row + div.help, .aligned label + div.readonly {
|
||||||
padding: 6px 0;
|
padding: 6px 0;
|
||||||
margin-top: 0;
|
margin-top: 0;
|
||||||
margin-bottom: 0;
|
margin-bottom: 0;
|
||||||
margin-left: 170px;
|
margin-left: 0;
|
||||||
overflow-wrap: break-word;
|
overflow-wrap: break-word;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -117,16 +140,17 @@ form .aligned div.radiolist {
|
|||||||
|
|
||||||
form .aligned p.help,
|
form .aligned p.help,
|
||||||
form .aligned div.help {
|
form .aligned div.help {
|
||||||
clear: left;
|
|
||||||
margin-top: 0;
|
margin-top: 0;
|
||||||
margin-left: 160px;
|
margin-left: 160px;
|
||||||
padding-left: 10px;
|
padding-left: 10px;
|
||||||
}
|
}
|
||||||
|
|
||||||
form .aligned label + p.help,
|
form .aligned p.date div.help.timezonewarning,
|
||||||
form .aligned label + div.help {
|
form .aligned p.datetime div.help.timezonewarning,
|
||||||
|
form .aligned p.time div.help.timezonewarning {
|
||||||
margin-left: 0;
|
margin-left: 0;
|
||||||
padding-left: 0;
|
padding-left: 0;
|
||||||
|
font-weight: normal;
|
||||||
}
|
}
|
||||||
|
|
||||||
form .aligned p.help:last-child,
|
form .aligned p.help:last-child,
|
||||||
@@ -145,6 +169,10 @@ form .aligned select + div.help {
|
|||||||
padding-left: 10px;
|
padding-left: 10px;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
form .aligned select option:checked {
|
||||||
|
background-color: var(--selected-row);
|
||||||
|
}
|
||||||
|
|
||||||
form .aligned ul li {
|
form .aligned ul li {
|
||||||
list-style: none;
|
list-style: none;
|
||||||
}
|
}
|
||||||
@@ -155,11 +183,7 @@ form .aligned table p {
|
|||||||
}
|
}
|
||||||
|
|
||||||
.aligned .vCheckboxLabel {
|
.aligned .vCheckboxLabel {
|
||||||
float: none;
|
padding: 1px 0 0 5px;
|
||||||
width: auto;
|
|
||||||
display: inline-block;
|
|
||||||
vertical-align: -3px;
|
|
||||||
padding: 0 0 5px 5px;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
.aligned .vCheckboxLabel + p.help,
|
.aligned .vCheckboxLabel + p.help,
|
||||||
@@ -171,14 +195,7 @@ form .aligned table p {
|
|||||||
width: 610px;
|
width: 610px;
|
||||||
}
|
}
|
||||||
|
|
||||||
.checkbox-row p.help,
|
|
||||||
.checkbox-row div.help {
|
|
||||||
margin-left: 0;
|
|
||||||
padding-left: 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
fieldset .fieldBox {
|
fieldset .fieldBox {
|
||||||
float: left;
|
|
||||||
margin-right: 20px;
|
margin-right: 20px;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -188,15 +205,10 @@ fieldset .fieldBox {
|
|||||||
width: 200px;
|
width: 200px;
|
||||||
}
|
}
|
||||||
|
|
||||||
form .wide p,
|
|
||||||
form .wide input + p.help,
|
|
||||||
form .wide input + div.help {
|
|
||||||
margin-left: 200px;
|
|
||||||
}
|
|
||||||
|
|
||||||
form .wide p.help,
|
form .wide p.help,
|
||||||
|
form .wide ul.errorlist,
|
||||||
form .wide div.help {
|
form .wide div.help {
|
||||||
padding-left: 38px;
|
padding-left: 50px;
|
||||||
}
|
}
|
||||||
|
|
||||||
form div.help ul {
|
form div.help ul {
|
||||||
@@ -208,53 +220,36 @@ form div.help ul {
|
|||||||
width: 450px;
|
width: 450px;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* COLLAPSED FIELDSETS */
|
/* COLLAPSIBLE FIELDSETS */
|
||||||
|
|
||||||
fieldset.collapsed * {
|
.collapse summary .fieldset-heading,
|
||||||
display: none;
|
.collapse summary .inline-heading {
|
||||||
}
|
|
||||||
|
|
||||||
fieldset.collapsed h2, fieldset.collapsed {
|
|
||||||
display: block;
|
|
||||||
}
|
|
||||||
|
|
||||||
fieldset.collapsed {
|
|
||||||
border: 1px solid var(--hairline-color);
|
|
||||||
border-radius: 4px;
|
|
||||||
overflow: hidden;
|
|
||||||
}
|
|
||||||
|
|
||||||
fieldset.collapsed h2 {
|
|
||||||
background: var(--darkened-bg);
|
|
||||||
color: var(--body-quiet-color);
|
|
||||||
}
|
|
||||||
|
|
||||||
fieldset .collapse-toggle {
|
|
||||||
color: var(--header-link-color);
|
|
||||||
}
|
|
||||||
|
|
||||||
fieldset.collapsed .collapse-toggle {
|
|
||||||
background: transparent;
|
background: transparent;
|
||||||
|
border: none;
|
||||||
|
color: currentColor;
|
||||||
display: inline;
|
display: inline;
|
||||||
color: var(--link-fg);
|
margin: 0;
|
||||||
|
padding: 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* MONOSPACE TEXTAREAS */
|
/* MONOSPACE TEXTAREAS */
|
||||||
|
|
||||||
fieldset.monospace textarea {
|
fieldset.monospace textarea {
|
||||||
font-family: "Bitstream Vera Sans Mono", Monaco, "Courier New", Courier, monospace;
|
font-family: var(--font-family-monospace);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* SUBMIT ROW */
|
/* SUBMIT ROW */
|
||||||
|
|
||||||
.submit-row {
|
.submit-row {
|
||||||
padding: 12px 14px;
|
padding: 12px 14px 12px;
|
||||||
margin: 0 0 20px;
|
margin: 0 0 20px;
|
||||||
background: var(--darkened-bg);
|
background: var(--darkened-bg);
|
||||||
border: 1px solid var(--hairline-color);
|
border: 1px solid var(--hairline-color);
|
||||||
border-radius: 4px;
|
border-radius: 4px;
|
||||||
text-align: right;
|
|
||||||
overflow: hidden;
|
overflow: hidden;
|
||||||
|
display: flex;
|
||||||
|
gap: 10px;
|
||||||
|
flex-wrap: wrap;
|
||||||
}
|
}
|
||||||
|
|
||||||
body.popup .submit-row {
|
body.popup .submit-row {
|
||||||
@@ -262,32 +257,29 @@ body.popup .submit-row {
|
|||||||
}
|
}
|
||||||
|
|
||||||
.submit-row input {
|
.submit-row input {
|
||||||
height: 35px;
|
height: 2.1875rem;
|
||||||
line-height: 15px;
|
line-height: 0.9375rem;
|
||||||
margin: 0 0 0 5px;
|
}
|
||||||
|
|
||||||
|
.submit-row input, .submit-row a {
|
||||||
|
margin: 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
.submit-row input.default {
|
.submit-row input.default {
|
||||||
margin: 0 0 0 8px;
|
|
||||||
text-transform: uppercase;
|
text-transform: uppercase;
|
||||||
}
|
}
|
||||||
|
|
||||||
.submit-row p {
|
.submit-row a.deletelink {
|
||||||
margin: 0.3em;
|
margin-left: auto;
|
||||||
}
|
|
||||||
|
|
||||||
.submit-row p.deletelink-box {
|
|
||||||
float: left;
|
|
||||||
margin: 0;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
.submit-row a.deletelink {
|
.submit-row a.deletelink {
|
||||||
display: block;
|
display: block;
|
||||||
background: var(--delete-button-bg);
|
background: var(--delete-button-bg);
|
||||||
border-radius: 4px;
|
border-radius: 4px;
|
||||||
padding: 10px 15px;
|
padding: 0.625rem 0.9375rem;
|
||||||
height: 15px;
|
height: 0.9375rem;
|
||||||
line-height: 15px;
|
line-height: 0.9375rem;
|
||||||
color: var(--button-fg);
|
color: var(--button-fg);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -296,9 +288,8 @@ body.popup .submit-row {
|
|||||||
background: var(--close-button-bg);
|
background: var(--close-button-bg);
|
||||||
border-radius: 4px;
|
border-radius: 4px;
|
||||||
padding: 10px 15px;
|
padding: 10px 15px;
|
||||||
height: 15px;
|
height: 0.9375rem;
|
||||||
line-height: 15px;
|
line-height: 0.9375rem;
|
||||||
margin: 0 0 0 5px;
|
|
||||||
color: var(--button-fg);
|
color: var(--button-fg);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -306,12 +297,14 @@ body.popup .submit-row {
|
|||||||
.submit-row a.deletelink:hover,
|
.submit-row a.deletelink:hover,
|
||||||
.submit-row a.deletelink:active {
|
.submit-row a.deletelink:active {
|
||||||
background: var(--delete-button-hover-bg);
|
background: var(--delete-button-hover-bg);
|
||||||
|
text-decoration: none;
|
||||||
}
|
}
|
||||||
|
|
||||||
.submit-row a.closelink:focus,
|
.submit-row a.closelink:focus,
|
||||||
.submit-row a.closelink:hover,
|
.submit-row a.closelink:hover,
|
||||||
.submit-row a.closelink:active {
|
.submit-row a.closelink:active {
|
||||||
background: var(--close-button-hover-bg);
|
background: var(--close-button-hover-bg);
|
||||||
|
text-decoration: none;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* CUSTOM FORM FIELDS */
|
/* CUSTOM FORM FIELDS */
|
||||||
@@ -353,10 +346,6 @@ body.popup .submit-row {
|
|||||||
width: 2.2em;
|
width: 2.2em;
|
||||||
}
|
}
|
||||||
|
|
||||||
.vTextField, .vUUIDField {
|
|
||||||
width: 20em;
|
|
||||||
}
|
|
||||||
|
|
||||||
.vIntegerField {
|
.vIntegerField {
|
||||||
width: 5em;
|
width: 5em;
|
||||||
}
|
}
|
||||||
@@ -369,6 +358,10 @@ body.popup .submit-row {
|
|||||||
width: 5em;
|
width: 5em;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.vTextField, .vUUIDField {
|
||||||
|
width: 20em;
|
||||||
|
}
|
||||||
|
|
||||||
/* INLINES */
|
/* INLINES */
|
||||||
|
|
||||||
.inline-group {
|
.inline-group {
|
||||||
@@ -388,14 +381,16 @@ body.popup .submit-row {
|
|||||||
position: relative;
|
position: relative;
|
||||||
}
|
}
|
||||||
|
|
||||||
.inline-related h3 {
|
.inline-related h4,
|
||||||
|
.inline-related:not(.tabular) .collapse summary {
|
||||||
margin: 0;
|
margin: 0;
|
||||||
color: var(--body-quiet-color);
|
color: var(--body-medium-color);
|
||||||
padding: 5px;
|
padding: 5px;
|
||||||
font-size: 13px;
|
font-size: 0.8125rem;
|
||||||
background: var(--darkened-bg);
|
background: var(--darkened-bg);
|
||||||
border-top: 1px solid var(--hairline-color);
|
border: 1px solid var(--hairline-color);
|
||||||
border-bottom: 1px solid var(--hairline-color);
|
border-left-color: var(--darkened-bg);
|
||||||
|
border-right-color: var(--darkened-bg);
|
||||||
}
|
}
|
||||||
|
|
||||||
.inline-related h3 span.delete {
|
.inline-related h3 span.delete {
|
||||||
@@ -404,7 +399,7 @@ body.popup .submit-row {
|
|||||||
|
|
||||||
.inline-related h3 span.delete label {
|
.inline-related h3 span.delete label {
|
||||||
margin-left: 2px;
|
margin-left: 2px;
|
||||||
font-size: 11px;
|
font-size: 0.6875rem;
|
||||||
}
|
}
|
||||||
|
|
||||||
.inline-related fieldset {
|
.inline-related fieldset {
|
||||||
@@ -414,16 +409,6 @@ body.popup .submit-row {
|
|||||||
width: 100%;
|
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: var(--body-bg);
|
|
||||||
}
|
|
||||||
|
|
||||||
.inline-group .tabular fieldset.module {
|
.inline-group .tabular fieldset.module {
|
||||||
border: none;
|
border: none;
|
||||||
}
|
}
|
||||||
@@ -458,23 +443,12 @@ body.popup .submit-row {
|
|||||||
height: 1.1em;
|
height: 1.1em;
|
||||||
padding: 2px 9px;
|
padding: 2px 9px;
|
||||||
overflow: hidden;
|
overflow: hidden;
|
||||||
font-size: 9px;
|
font-size: 0.5625rem;
|
||||||
font-weight: bold;
|
font-weight: bold;
|
||||||
color: var(--body-quiet-color);
|
color: var(--body-quiet-color);
|
||||||
_width: 700px;
|
_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 div.add-row,
|
||||||
.inline-group .tabular tr.add-row td {
|
.inline-group .tabular tr.add-row td {
|
||||||
color: var(--body-quiet-color);
|
color: var(--body-quiet-color);
|
||||||
@@ -488,12 +462,9 @@ body.popup .submit-row {
|
|||||||
border-bottom: 1px solid var(--hairline-color);
|
border-bottom: 1px solid var(--hairline-color);
|
||||||
}
|
}
|
||||||
|
|
||||||
.inline-group ul.tools a.add,
|
|
||||||
.inline-group div.add-row a,
|
.inline-group div.add-row a,
|
||||||
.inline-group .tabular tr.add-row td a {
|
.inline-group .tabular tr.add-row td a {
|
||||||
background: url(../img/icon-addlink.svg) 0 1px no-repeat;
|
font-size: 0.75rem;
|
||||||
padding-left: 16px;
|
|
||||||
font-size: 12px;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
.empty-form {
|
.empty-form {
|
||||||
@@ -511,8 +482,8 @@ body.popup .submit-row {
|
|||||||
}
|
}
|
||||||
|
|
||||||
.related-lookup {
|
.related-lookup {
|
||||||
width: 16px;
|
width: 1rem;
|
||||||
height: 16px;
|
height: 1rem;
|
||||||
background-image: url(../img/search.svg);
|
background-image: url(../img/search.svg);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -12,7 +12,7 @@
|
|||||||
}
|
}
|
||||||
|
|
||||||
.login #header h1 {
|
.login #header h1 {
|
||||||
font-size: 18px;
|
font-size: 1.125rem;
|
||||||
margin: 0;
|
margin: 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -21,7 +21,7 @@
|
|||||||
}
|
}
|
||||||
|
|
||||||
.login #content {
|
.login #content {
|
||||||
padding: 20px 20px 0;
|
padding: 20px;
|
||||||
}
|
}
|
||||||
|
|
||||||
.login #container {
|
.login #container {
|
||||||
|
|||||||
@@ -16,7 +16,7 @@
|
|||||||
border-right: 1px solid var(--hairline-color);
|
border-right: 1px solid var(--hairline-color);
|
||||||
background-color: var(--body-bg);
|
background-color: var(--body-bg);
|
||||||
cursor: pointer;
|
cursor: pointer;
|
||||||
font-size: 20px;
|
font-size: 1.25rem;
|
||||||
color: var(--link-fg);
|
color: var(--link-fg);
|
||||||
padding: 0;
|
padding: 0;
|
||||||
}
|
}
|
||||||
@@ -59,8 +59,13 @@
|
|||||||
content: '\00AB';
|
content: '\00AB';
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.main > #nav-sidebar {
|
||||||
|
visibility: hidden;
|
||||||
|
}
|
||||||
|
|
||||||
.main.shifted > #nav-sidebar {
|
.main.shifted > #nav-sidebar {
|
||||||
margin-left: 0;
|
margin-left: 0;
|
||||||
|
visibility: visible;
|
||||||
}
|
}
|
||||||
|
|
||||||
[dir="rtl"] .main.shifted > #nav-sidebar {
|
[dir="rtl"] .main.shifted > #nav-sidebar {
|
||||||
@@ -97,6 +102,12 @@
|
|||||||
background: var(--selected-row);
|
background: var(--selected-row);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@media (forced-colors: active) {
|
||||||
|
#nav-sidebar .current-model {
|
||||||
|
background-color: SelectedItem;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
.main > #nav-sidebar + .content {
|
.main > #nav-sidebar + .content {
|
||||||
max-width: calc(100% - 23px);
|
max-width: calc(100% - 23px);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -14,11 +14,11 @@ input[type="submit"], button {
|
|||||||
|
|
||||||
td, th {
|
td, th {
|
||||||
padding: 10px;
|
padding: 10px;
|
||||||
font-size: 14px;
|
font-size: 0.875rem;
|
||||||
}
|
}
|
||||||
|
|
||||||
.small {
|
.small {
|
||||||
font-size: 12px;
|
font-size: 0.75rem;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Layout */
|
/* Layout */
|
||||||
@@ -28,7 +28,7 @@ input[type="submit"], button {
|
|||||||
}
|
}
|
||||||
|
|
||||||
#content {
|
#content {
|
||||||
padding: 20px 30px 30px;
|
padding: 15px 20px 20px;
|
||||||
}
|
}
|
||||||
|
|
||||||
div.breadcrumbs {
|
div.breadcrumbs {
|
||||||
@@ -43,9 +43,8 @@ input[type="submit"], button {
|
|||||||
justify-content: flex-start;
|
justify-content: flex-start;
|
||||||
}
|
}
|
||||||
|
|
||||||
#branding h1 {
|
#site-name {
|
||||||
margin: 0 0 8px;
|
margin: 0 0 8px;
|
||||||
font-size: 20px;
|
|
||||||
line-height: 1.2;
|
line-height: 1.2;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -88,7 +87,7 @@ input[type="submit"], button {
|
|||||||
}
|
}
|
||||||
|
|
||||||
td .changelink, td .addlink {
|
td .changelink, td .addlink {
|
||||||
font-size: 13px;
|
font-size: 0.8125rem;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Changelist */
|
/* Changelist */
|
||||||
@@ -105,13 +104,13 @@ input[type="submit"], button {
|
|||||||
}
|
}
|
||||||
|
|
||||||
#changelist-search label {
|
#changelist-search label {
|
||||||
line-height: 22px;
|
line-height: 1.375rem;
|
||||||
}
|
}
|
||||||
|
|
||||||
#toolbar form #searchbar {
|
#toolbar form #searchbar {
|
||||||
flex: 1 0 auto;
|
flex: 1 0 auto;
|
||||||
width: 0;
|
width: 0;
|
||||||
height: 22px;
|
height: 1.375rem;
|
||||||
margin: 0 10px 0 6px;
|
margin: 0 10px 0 6px;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -131,10 +130,6 @@ input[type="submit"], button {
|
|||||||
padding: 15px 0;
|
padding: 15px 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
#changelist .actions.selected {
|
|
||||||
border: none;
|
|
||||||
}
|
|
||||||
|
|
||||||
#changelist .actions label {
|
#changelist .actions label {
|
||||||
display: flex;
|
display: flex;
|
||||||
}
|
}
|
||||||
@@ -152,7 +147,7 @@ input[type="submit"], button {
|
|||||||
#changelist .actions span.clear,
|
#changelist .actions span.clear,
|
||||||
#changelist .actions span.question,
|
#changelist .actions span.question,
|
||||||
#changelist .actions span.action-counter {
|
#changelist .actions span.action-counter {
|
||||||
font-size: 11px;
|
font-size: 0.6875rem;
|
||||||
margin: 0 10px 0 0;
|
margin: 0 10px 0 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -176,9 +171,14 @@ input[type="submit"], button {
|
|||||||
/* Forms */
|
/* Forms */
|
||||||
|
|
||||||
label {
|
label {
|
||||||
font-size: 14px;
|
font-size: 1rem;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
Minifiers remove the default (text) "type" attribute from "input" HTML
|
||||||
|
tags. Add input:not([type]) to make the CSS stylesheet work the same.
|
||||||
|
*/
|
||||||
|
.form-row input:not([type]),
|
||||||
.form-row input[type=text],
|
.form-row input[type=text],
|
||||||
.form-row input[type=password],
|
.form-row input[type=password],
|
||||||
.form-row input[type=email],
|
.form-row input[type=email],
|
||||||
@@ -191,12 +191,12 @@ input[type="submit"], button {
|
|||||||
box-sizing: border-box;
|
box-sizing: border-box;
|
||||||
margin: 0;
|
margin: 0;
|
||||||
padding: 6px 8px;
|
padding: 6px 8px;
|
||||||
min-height: 36px;
|
min-height: 2.25rem;
|
||||||
font-size: 14px;
|
font-size: 1rem;
|
||||||
}
|
}
|
||||||
|
|
||||||
.form-row select {
|
.form-row select {
|
||||||
height: 36px;
|
height: 2.25rem;
|
||||||
}
|
}
|
||||||
|
|
||||||
.form-row select[multiple] {
|
.form-row select[multiple] {
|
||||||
@@ -204,12 +204,6 @@ input[type="submit"], button {
|
|||||||
min-height: 0;
|
min-height: 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
fieldset .fieldBox {
|
|
||||||
float: none;
|
|
||||||
margin: 0 -10px;
|
|
||||||
padding: 0 10px;
|
|
||||||
}
|
|
||||||
|
|
||||||
fieldset .fieldBox + .fieldBox {
|
fieldset .fieldBox + .fieldBox {
|
||||||
margin-top: 10px;
|
margin-top: 10px;
|
||||||
padding-top: 10px;
|
padding-top: 10px;
|
||||||
@@ -236,20 +230,16 @@ input[type="submit"], button {
|
|||||||
margin-left: 2px;
|
margin-left: 2px;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Related widget */
|
.submit-row {
|
||||||
|
padding: 8px;
|
||||||
.related-widget-wrapper {
|
|
||||||
float: none;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
.related-widget-wrapper-link + .selector {
|
.submit-row a.deletelink {
|
||||||
max-width: calc(100% - 30px);
|
padding: 10px 7px;
|
||||||
margin-right: 15px;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
select + .related-widget-wrapper-link,
|
.button, input[type=submit], input[type=button], .submit-row input, a.button {
|
||||||
.related-widget-wrapper-link + .related-widget-wrapper-link {
|
padding: 7px;
|
||||||
margin-left: 10px;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Selector */
|
/* Selector */
|
||||||
@@ -264,12 +254,8 @@ input[type="submit"], button {
|
|||||||
align-items: center;
|
align-items: center;
|
||||||
}
|
}
|
||||||
|
|
||||||
.selector .selector-filter label {
|
|
||||||
margin: 0 8px 0 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
.selector .selector-filter input {
|
.selector .selector-filter input {
|
||||||
width: auto;
|
width: 100%;
|
||||||
min-height: 0;
|
min-height: 0;
|
||||||
flex: 1 1;
|
flex: 1 1;
|
||||||
}
|
}
|
||||||
@@ -287,30 +273,7 @@ input[type="submit"], button {
|
|||||||
margin-bottom: 5px;
|
margin-bottom: 5px;
|
||||||
}
|
}
|
||||||
|
|
||||||
.selector ul.selector-chooser {
|
.selector-chooseall, .selector-clearall {
|
||||||
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;
|
align-self: center;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -332,10 +295,7 @@ input[type="submit"], button {
|
|||||||
}
|
}
|
||||||
|
|
||||||
.stacked ul.selector-chooser {
|
.stacked ul.selector-chooser {
|
||||||
width: 52px;
|
|
||||||
height: 26px;
|
|
||||||
padding: 0 2px;
|
padding: 0 2px;
|
||||||
margin: 15px auto;
|
|
||||||
transform: none;
|
transform: none;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -343,62 +303,22 @@ input[type="submit"], button {
|
|||||||
padding: 3px;
|
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 -40px;
|
|
||||||
}
|
|
||||||
|
|
||||||
.active.selector-add:focus, .active.selector-add:hover {
|
|
||||||
background-position: 0 -140px;
|
|
||||||
}
|
|
||||||
|
|
||||||
.stacked .active.selector-add:focus, .stacked .active.selector-add:hover {
|
|
||||||
background-position: 0 -60px;
|
|
||||||
}
|
|
||||||
|
|
||||||
.stacked .selector-remove {
|
|
||||||
background-position: 0 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
.stacked .active.selector-remove {
|
|
||||||
background-position: 0 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
.active.selector-remove:focus, .active.selector-remove:hover {
|
|
||||||
background-position: 0 -100px;
|
|
||||||
}
|
|
||||||
|
|
||||||
.stacked .active.selector-remove:focus, .stacked .active.selector-remove:hover {
|
|
||||||
background-position: 0 -20px;
|
|
||||||
}
|
|
||||||
|
|
||||||
.help-tooltip, .selector .help-icon {
|
.help-tooltip, .selector .help-icon {
|
||||||
display: none;
|
display: none;
|
||||||
}
|
}
|
||||||
|
|
||||||
form .form-row p.datetime {
|
|
||||||
width: 100%;
|
|
||||||
}
|
|
||||||
|
|
||||||
.datetime input {
|
.datetime input {
|
||||||
width: 50%;
|
width: 50%;
|
||||||
max-width: 120px;
|
max-width: 120px;
|
||||||
}
|
}
|
||||||
|
|
||||||
.datetime span {
|
.datetime span {
|
||||||
font-size: 13px;
|
font-size: 0.8125rem;
|
||||||
}
|
}
|
||||||
|
|
||||||
.datetime .timezonewarning {
|
.datetime .timezonewarning {
|
||||||
display: block;
|
display: block;
|
||||||
font-size: 11px;
|
font-size: 0.6875rem;
|
||||||
color: var(--body-quiet-color);
|
color: var(--body-quiet-color);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -435,7 +355,7 @@ input[type="submit"], button {
|
|||||||
padding: 15px 20px;
|
padding: 15px 20px;
|
||||||
}
|
}
|
||||||
|
|
||||||
.login #branding h1 {
|
.login #site-name {
|
||||||
margin: 0;
|
margin: 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -467,14 +387,10 @@ input[type="submit"], button {
|
|||||||
@media (max-width: 767px) {
|
@media (max-width: 767px) {
|
||||||
/* Layout */
|
/* Layout */
|
||||||
|
|
||||||
#header, #content, #footer {
|
#header, #content {
|
||||||
padding: 15px;
|
padding: 15px;
|
||||||
}
|
}
|
||||||
|
|
||||||
#footer:empty {
|
|
||||||
padding: 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
div.breadcrumbs {
|
div.breadcrumbs {
|
||||||
padding: 10px 15px;
|
padding: 10px 15px;
|
||||||
}
|
}
|
||||||
@@ -496,7 +412,7 @@ input[type="submit"], button {
|
|||||||
|
|
||||||
#content-related .module h2 {
|
#content-related .module h2 {
|
||||||
padding: 10px 15px;
|
padding: 10px 15px;
|
||||||
font-size: 16px;
|
font-size: 1rem;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Changelist */
|
/* Changelist */
|
||||||
@@ -557,8 +473,6 @@ input[type="submit"], button {
|
|||||||
|
|
||||||
.aligned .form-row,
|
.aligned .form-row,
|
||||||
.aligned .form-row > div {
|
.aligned .form-row > div {
|
||||||
display: flex;
|
|
||||||
flex-wrap: wrap;
|
|
||||||
max-width: 100vw;
|
max-width: 100vw;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -566,6 +480,14 @@ input[type="submit"], button {
|
|||||||
width: calc(100vw - 30px);
|
width: calc(100vw - 30px);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.flex-container {
|
||||||
|
flex-flow: column;
|
||||||
|
}
|
||||||
|
|
||||||
|
.flex-container.checkbox-row {
|
||||||
|
flex-flow: row;
|
||||||
|
}
|
||||||
|
|
||||||
textarea {
|
textarea {
|
||||||
max-width: none;
|
max-width: none;
|
||||||
}
|
}
|
||||||
@@ -579,12 +501,9 @@ input[type="submit"], button {
|
|||||||
padding-top: 15px;
|
padding-top: 15px;
|
||||||
}
|
}
|
||||||
|
|
||||||
fieldset.collapsed .form-row {
|
|
||||||
display: none;
|
|
||||||
}
|
|
||||||
|
|
||||||
.aligned label {
|
.aligned label {
|
||||||
width: 100%;
|
width: 100%;
|
||||||
|
min-width: auto;
|
||||||
padding: 0 0 10px;
|
padding: 0 0 10px;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -599,10 +518,6 @@ input[type="submit"], button {
|
|||||||
max-width: 100%;
|
max-width: 100%;
|
||||||
}
|
}
|
||||||
|
|
||||||
.aligned .checkbox-row {
|
|
||||||
align-items: center;
|
|
||||||
}
|
|
||||||
|
|
||||||
.aligned .checkbox-row input {
|
.aligned .checkbox-row input {
|
||||||
flex: 0 1 auto;
|
flex: 0 1 auto;
|
||||||
margin: 0;
|
margin: 0;
|
||||||
@@ -621,8 +536,7 @@ input[type="submit"], button {
|
|||||||
}
|
}
|
||||||
|
|
||||||
.aligned p.file-upload {
|
.aligned p.file-upload {
|
||||||
margin-left: 0;
|
font-size: 0.8125rem;
|
||||||
font-size: 13px;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
span.clearable-file-input {
|
span.clearable-file-input {
|
||||||
@@ -630,7 +544,7 @@ input[type="submit"], button {
|
|||||||
}
|
}
|
||||||
|
|
||||||
span.clearable-file-input label {
|
span.clearable-file-input label {
|
||||||
font-size: 13px;
|
font-size: 0.8125rem;
|
||||||
padding-bottom: 0;
|
padding-bottom: 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -645,7 +559,8 @@ input[type="submit"], button {
|
|||||||
padding: 0;
|
padding: 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
form .aligned ul {
|
form .aligned ul,
|
||||||
|
form .aligned ul.errorlist {
|
||||||
margin-left: 0;
|
margin-left: 0;
|
||||||
padding-left: 0;
|
padding-left: 0;
|
||||||
}
|
}
|
||||||
@@ -670,6 +585,7 @@ input[type="submit"], button {
|
|||||||
|
|
||||||
.related-widget-wrapper .selector {
|
.related-widget-wrapper .selector {
|
||||||
order: 1;
|
order: 1;
|
||||||
|
flex: 1 0 auto;
|
||||||
}
|
}
|
||||||
|
|
||||||
.related-widget-wrapper > a {
|
.related-widget-wrapper > a {
|
||||||
@@ -684,23 +600,14 @@ input[type="submit"], button {
|
|||||||
align-self: center;
|
align-self: center;
|
||||||
}
|
}
|
||||||
|
|
||||||
select + .related-widget-wrapper-link,
|
|
||||||
.related-widget-wrapper-link + .related-widget-wrapper-link {
|
|
||||||
margin-left: 15px;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Selector */
|
/* Selector */
|
||||||
|
|
||||||
.selector {
|
.selector {
|
||||||
flex-direction: column;
|
flex-direction: column;
|
||||||
}
|
gap: 10px 0;
|
||||||
|
|
||||||
.selector > * {
|
|
||||||
float: none;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
.selector-available, .selector-chosen {
|
.selector-available, .selector-chosen {
|
||||||
margin-bottom: 0;
|
|
||||||
flex: 1 1 auto;
|
flex: 1 1 auto;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -709,12 +616,10 @@ input[type="submit"], button {
|
|||||||
}
|
}
|
||||||
|
|
||||||
.selector ul.selector-chooser {
|
.selector ul.selector-chooser {
|
||||||
display: block;
|
display: flex;
|
||||||
float: none;
|
width: 60px;
|
||||||
width: 52px;
|
height: 30px;
|
||||||
height: 26px;
|
|
||||||
padding: 0 2px;
|
padding: 0 2px;
|
||||||
margin: 15px auto 20px;
|
|
||||||
transform: none;
|
transform: none;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -726,16 +631,16 @@ input[type="submit"], button {
|
|||||||
background-position: 0 0;
|
background-position: 0 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
.active.selector-remove:focus, .active.selector-remove:hover {
|
:enabled.selector-remove:focus, :enabled.selector-remove:hover {
|
||||||
background-position: 0 -20px;
|
background-position: 0 -24px;
|
||||||
}
|
}
|
||||||
|
|
||||||
.selector-add {
|
.selector-add {
|
||||||
background-position: 0 -40px;
|
background-position: 0 -48px;
|
||||||
}
|
}
|
||||||
|
|
||||||
.active.selector-add:focus, .active.selector-add:hover {
|
:enabled.selector-add:focus, :enabled.selector-add:hover {
|
||||||
background-position: 0 -60px;
|
background-position: 0 -72px;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Inlines */
|
/* Inlines */
|
||||||
@@ -812,28 +717,23 @@ input[type="submit"], button {
|
|||||||
/* Submit row */
|
/* Submit row */
|
||||||
|
|
||||||
.submit-row {
|
.submit-row {
|
||||||
padding: 10px 10px 0;
|
padding: 10px;
|
||||||
margin: 0 0 15px;
|
margin: 0 0 15px;
|
||||||
display: flex;
|
|
||||||
flex-direction: column;
|
flex-direction: column;
|
||||||
|
gap: 8px;
|
||||||
}
|
}
|
||||||
|
|
||||||
.submit-row > * {
|
.submit-row input, .submit-row input.default, .submit-row a {
|
||||||
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;
|
text-align: center;
|
||||||
}
|
}
|
||||||
|
|
||||||
.submit-row a.closelink {
|
.submit-row a.closelink {
|
||||||
padding: 10px 0;
|
padding: 10px 0;
|
||||||
|
text-align: center;
|
||||||
}
|
}
|
||||||
|
|
||||||
.submit-row p.deletelink-box {
|
.submit-row a.deletelink {
|
||||||
order: 4;
|
margin: 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Messages */
|
/* Messages */
|
||||||
@@ -907,7 +807,7 @@ input[type="submit"], button {
|
|||||||
.errornote {
|
.errornote {
|
||||||
margin: 0 0 20px;
|
margin: 0 0 20px;
|
||||||
padding: 8px 12px;
|
padding: 8px 12px;
|
||||||
font-size: 13px;
|
font-size: 0.8125rem;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Calendar and clock */
|
/* Calendar and clock */
|
||||||
@@ -954,8 +854,8 @@ input[type="submit"], button {
|
|||||||
|
|
||||||
.calendar-shortcuts {
|
.calendar-shortcuts {
|
||||||
padding: 10px 0;
|
padding: 10px 0;
|
||||||
font-size: 12px;
|
font-size: 0.75rem;
|
||||||
line-height: 12px;
|
line-height: 0.75rem;
|
||||||
}
|
}
|
||||||
|
|
||||||
.calendar-shortcuts a {
|
.calendar-shortcuts a {
|
||||||
@@ -987,7 +887,7 @@ input[type="submit"], button {
|
|||||||
/* History */
|
/* History */
|
||||||
|
|
||||||
table#change-history tbody th, table#change-history tbody td {
|
table#change-history tbody th, table#change-history tbody td {
|
||||||
font-size: 13px;
|
font-size: 0.8125rem;
|
||||||
word-break: break-word;
|
word-break: break-word;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -998,7 +898,7 @@ input[type="submit"], button {
|
|||||||
/* Docs */
|
/* Docs */
|
||||||
|
|
||||||
table.model tbody th, table.model tbody td {
|
table.model tbody th, table.model tbody td {
|
||||||
font-size: 13px;
|
font-size: 0.8125rem;
|
||||||
word-break: break-word;
|
word-break: break-word;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -28,23 +28,12 @@
|
|||||||
margin-left: 0;
|
margin-left: 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
[dir="rtl"] .inline-group ul.tools a.add,
|
|
||||||
[dir="rtl"] .inline-group div.add-row a,
|
[dir="rtl"] .inline-group div.add-row a,
|
||||||
[dir="rtl"] .inline-group .tabular tr.add-row td a {
|
[dir="rtl"] .inline-group .tabular tr.add-row td a {
|
||||||
padding: 8px 26px 8px 10px;
|
padding: 8px 26px 8px 10px;
|
||||||
background-position: calc(100% - 8px) 9px;
|
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 {
|
[dir="rtl"] .object-tools li {
|
||||||
float: right;
|
float: right;
|
||||||
}
|
}
|
||||||
@@ -69,7 +58,8 @@
|
|||||||
margin-right: 15px;
|
margin-right: 15px;
|
||||||
}
|
}
|
||||||
|
|
||||||
[dir="rtl"] .aligned ul {
|
[dir="rtl"] .aligned ul,
|
||||||
|
[dir="rtl"] form .aligned ul.errorlist {
|
||||||
margin-right: 0;
|
margin-right: 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -77,4 +67,23 @@
|
|||||||
margin-left: 0;
|
margin-left: 0;
|
||||||
margin-right: 0;
|
margin-right: 0;
|
||||||
}
|
}
|
||||||
|
[dir="rtl"] .aligned .vCheckboxLabel {
|
||||||
|
padding: 1px 5px 0 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
[dir="rtl"] .selector-remove {
|
||||||
|
background-position: 0 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
[dir="rtl"] :enabled.selector-remove:focus, :enabled.selector-remove:hover {
|
||||||
|
background-position: 0 -24px;
|
||||||
|
}
|
||||||
|
|
||||||
|
[dir="rtl"] .selector-add {
|
||||||
|
background-position: 0 -48px;
|
||||||
|
}
|
||||||
|
|
||||||
|
[dir="rtl"] :enabled.selector-add:focus, :enabled.selector-add:hover {
|
||||||
|
background-position: 0 -72px;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -13,7 +13,7 @@ th {
|
|||||||
margin-right: 1.5em;
|
margin-right: 1.5em;
|
||||||
}
|
}
|
||||||
|
|
||||||
.viewlink, .addlink, .changelink {
|
.viewlink, .addlink, .changelink, .hidelink {
|
||||||
padding-left: 0;
|
padding-left: 0;
|
||||||
padding-right: 16px;
|
padding-right: 16px;
|
||||||
background-position: 100% 1px;
|
background-position: 100% 1px;
|
||||||
@@ -107,23 +107,25 @@ thead th.sorted .text {
|
|||||||
border-left: none;
|
border-left: none;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.paginator .end {
|
||||||
|
margin-left: 6px;
|
||||||
|
margin-right: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
.paginator input {
|
||||||
|
margin-left: 0;
|
||||||
|
margin-right: auto;
|
||||||
|
}
|
||||||
|
|
||||||
/* FORMS */
|
/* FORMS */
|
||||||
|
|
||||||
.aligned label {
|
.aligned label {
|
||||||
padding: 0 0 3px 1em;
|
padding: 0 0 3px 1em;
|
||||||
float: right;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
.submit-row {
|
.submit-row a.deletelink {
|
||||||
text-align: left
|
|
||||||
}
|
|
||||||
|
|
||||||
.submit-row p.deletelink-box {
|
|
||||||
float: right;
|
|
||||||
}
|
|
||||||
|
|
||||||
.submit-row input.default {
|
|
||||||
margin-left: 0;
|
margin-left: 0;
|
||||||
|
margin-right: auto;
|
||||||
}
|
}
|
||||||
|
|
||||||
.vDateField, .vTimeField {
|
.vDateField, .vTimeField {
|
||||||
@@ -134,13 +136,11 @@ thead th.sorted .text {
|
|||||||
margin-left: 5px;
|
margin-left: 5px;
|
||||||
}
|
}
|
||||||
|
|
||||||
form .aligned p.help, form .aligned div.help {
|
|
||||||
clear: right;
|
|
||||||
}
|
|
||||||
|
|
||||||
form .aligned ul {
|
form .aligned ul {
|
||||||
margin-right: 163px;
|
margin-right: 163px;
|
||||||
|
padding-right: 10px;
|
||||||
margin-left: 0;
|
margin-left: 0;
|
||||||
|
padding-left: 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
form ul.inline li {
|
form ul.inline li {
|
||||||
@@ -149,12 +149,34 @@ form ul.inline li {
|
|||||||
padding-left: 7px;
|
padding-left: 7px;
|
||||||
}
|
}
|
||||||
|
|
||||||
input[type=submit].default, .submit-row input.default {
|
form .aligned p.help,
|
||||||
float: left;
|
form .aligned div.help {
|
||||||
|
margin-left: 0;
|
||||||
|
margin-right: 160px;
|
||||||
|
padding-right: 10px;
|
||||||
|
}
|
||||||
|
|
||||||
|
form div.help ul,
|
||||||
|
form .aligned .checkbox-row + .help,
|
||||||
|
form .aligned p.date div.help.timezonewarning,
|
||||||
|
form .aligned p.datetime div.help.timezonewarning,
|
||||||
|
form .aligned p.time div.help.timezonewarning {
|
||||||
|
margin-right: 0;
|
||||||
|
padding-right: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
form .wide p.help,
|
||||||
|
form .wide ul.errorlist,
|
||||||
|
form .wide div.help {
|
||||||
|
padding-left: 0;
|
||||||
|
padding-right: 50px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.submit-row {
|
||||||
|
text-align: right;
|
||||||
}
|
}
|
||||||
|
|
||||||
fieldset .fieldBox {
|
fieldset .fieldBox {
|
||||||
float: right;
|
|
||||||
margin-left: 20px;
|
margin-left: 20px;
|
||||||
margin-right: 0;
|
margin-right: 0;
|
||||||
}
|
}
|
||||||
@@ -175,12 +197,14 @@ fieldset .fieldBox {
|
|||||||
top: 0;
|
top: 0;
|
||||||
left: auto;
|
left: auto;
|
||||||
right: 10px;
|
right: 10px;
|
||||||
|
background: url(../img/calendar-icons.svg) 0 -15px no-repeat;
|
||||||
}
|
}
|
||||||
|
|
||||||
.calendarnav-next {
|
.calendarnav-next {
|
||||||
top: 0;
|
top: 0;
|
||||||
right: auto;
|
right: auto;
|
||||||
left: 10px;
|
left: 10px;
|
||||||
|
background: url(../img/calendar-icons.svg) 0 0 no-repeat;
|
||||||
}
|
}
|
||||||
|
|
||||||
.calendar caption, .calendarbox h2 {
|
.calendar caption, .calendarbox h2 {
|
||||||
@@ -195,6 +219,40 @@ fieldset .fieldBox {
|
|||||||
text-align: right;
|
text-align: right;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.selector-add {
|
||||||
|
background: url(../img/selector-icons.svg) 0 -96px no-repeat;
|
||||||
|
background-size: 24px auto;
|
||||||
|
}
|
||||||
|
|
||||||
|
:enabled.selector-add:focus, :enabled.selector-add:hover {
|
||||||
|
background-position: 0 -120px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.selector-remove {
|
||||||
|
background: url(../img/selector-icons.svg) 0 -144px no-repeat;
|
||||||
|
background-size: 24px auto;
|
||||||
|
}
|
||||||
|
|
||||||
|
:enabled.selector-remove:focus, :enabled.selector-remove:hover {
|
||||||
|
background-position: 0 -168px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.selector-chooseall {
|
||||||
|
background: url(../img/selector-icons.svg) right -128px no-repeat;
|
||||||
|
}
|
||||||
|
|
||||||
|
:enabled.selector-chooseall:focus, :enabled.selector-chooseall:hover {
|
||||||
|
background-position: 100% -144px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.selector-clearall {
|
||||||
|
background: url(../img/selector-icons.svg) 0 -160px no-repeat;
|
||||||
|
}
|
||||||
|
|
||||||
|
:enabled.selector-clearall:focus, :enabled.selector-clearall:hover {
|
||||||
|
background-position: 0 -176px;
|
||||||
|
}
|
||||||
|
|
||||||
.inline-deletelink {
|
.inline-deletelink {
|
||||||
float: left;
|
float: left;
|
||||||
}
|
}
|
||||||
@@ -225,3 +283,11 @@ form .form-row p.datetime {
|
|||||||
margin-left: inherit;
|
margin-left: inherit;
|
||||||
margin-right: 2px;
|
margin-right: 2px;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.inline-group .tabular td.original p {
|
||||||
|
right: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
.selector .selector-chooser {
|
||||||
|
margin: 0;
|
||||||
|
}
|
||||||
|
|||||||
19
assets/admin/css/unusable_password_field.css
Normal file
@@ -0,0 +1,19 @@
|
|||||||
|
/* Hide warnings fields if usable password is selected */
|
||||||
|
form:has(#id_usable_password input[value="true"]:checked) .messagelist {
|
||||||
|
display: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Hide password fields if unusable password is selected */
|
||||||
|
form:has(#id_usable_password input[value="false"]:checked) .field-password1,
|
||||||
|
form:has(#id_usable_password input[value="false"]:checked) .field-password2 {
|
||||||
|
display: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Select appropriate submit button */
|
||||||
|
form:has(#id_usable_password input[value="true"]:checked) input[type="submit"].unset-password {
|
||||||
|
display: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
form:has(#id_usable_password input[value="false"]:checked) input[type="submit"].set-password {
|
||||||
|
display: none;
|
||||||
|
}
|
||||||
@@ -1,39 +1,67 @@
|
|||||||
/* SELECTOR (FILTER INTERFACE) */
|
/* SELECTOR (FILTER INTERFACE) */
|
||||||
|
|
||||||
.selector {
|
.selector {
|
||||||
width: 800px;
|
display: flex;
|
||||||
float: left;
|
flex: 1;
|
||||||
|
gap: 0 10px;
|
||||||
}
|
}
|
||||||
|
|
||||||
.selector select {
|
.selector select {
|
||||||
width: 380px;
|
|
||||||
height: 17.2em;
|
height: 17.2em;
|
||||||
|
flex: 1 0 auto;
|
||||||
|
overflow: scroll;
|
||||||
|
width: 100%;
|
||||||
}
|
}
|
||||||
|
|
||||||
.selector-available, .selector-chosen {
|
.selector-available, .selector-chosen {
|
||||||
float: left;
|
display: flex;
|
||||||
width: 380px;
|
flex-direction: column;
|
||||||
text-align: center;
|
flex: 1 1;
|
||||||
margin-bottom: 5px;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
.selector-chosen select {
|
.selector-available-title, .selector-chosen-title {
|
||||||
border-top: none;
|
|
||||||
}
|
|
||||||
|
|
||||||
.selector-available h2, .selector-chosen h2 {
|
|
||||||
border: 1px solid var(--border-color);
|
border: 1px solid var(--border-color);
|
||||||
border-radius: 4px 4px 0 0;
|
border-radius: 4px 4px 0 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
.selector-chosen h2 {
|
.selector .helptext {
|
||||||
background: var(--primary);
|
font-size: 0.6875rem;
|
||||||
color: var(--header-link-color);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
.selector .selector-available h2 {
|
.selector-chosen .list-footer-display {
|
||||||
|
border: 1px solid var(--border-color);
|
||||||
|
border-top: none;
|
||||||
|
border-radius: 0 0 4px 4px;
|
||||||
|
margin: 0 0 10px;
|
||||||
|
padding: 8px;
|
||||||
|
text-align: center;
|
||||||
|
background: var(--primary);
|
||||||
|
color: var(--header-link-color);
|
||||||
|
cursor: pointer;
|
||||||
|
}
|
||||||
|
.selector-chosen .list-footer-display__clear {
|
||||||
|
color: var(--breadcrumbs-fg);
|
||||||
|
}
|
||||||
|
|
||||||
|
.selector-chosen-title {
|
||||||
|
background: var(--secondary);
|
||||||
|
color: var(--header-link-color);
|
||||||
|
padding: 8px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.aligned .selector-chosen-title label {
|
||||||
|
color: var(--header-link-color);
|
||||||
|
width: 100%;
|
||||||
|
}
|
||||||
|
|
||||||
|
.selector-available-title {
|
||||||
background: var(--darkened-bg);
|
background: var(--darkened-bg);
|
||||||
color: var(--body-quiet-color);
|
color: var(--body-quiet-color);
|
||||||
|
padding: 8px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.aligned .selector-available-title label {
|
||||||
|
width: 100%;
|
||||||
}
|
}
|
||||||
|
|
||||||
.selector .selector-filter {
|
.selector .selector-filter {
|
||||||
@@ -41,9 +69,11 @@
|
|||||||
border-width: 0 1px;
|
border-width: 0 1px;
|
||||||
padding: 8px;
|
padding: 8px;
|
||||||
color: var(--body-quiet-color);
|
color: var(--body-quiet-color);
|
||||||
font-size: 10px;
|
font-size: 0.625rem;
|
||||||
margin: 0;
|
margin: 0;
|
||||||
text-align: left;
|
text-align: left;
|
||||||
|
display: flex;
|
||||||
|
gap: 8px;
|
||||||
}
|
}
|
||||||
|
|
||||||
.selector .selector-filter label,
|
.selector .selector-filter label,
|
||||||
@@ -55,20 +85,21 @@
|
|||||||
padding: 0;
|
padding: 0;
|
||||||
overflow: hidden;
|
overflow: hidden;
|
||||||
line-height: 1;
|
line-height: 1;
|
||||||
|
min-width: auto;
|
||||||
}
|
}
|
||||||
|
|
||||||
.selector .selector-available input {
|
.selector-filter input {
|
||||||
width: 320px;
|
flex-grow: 1;
|
||||||
margin-left: 8px;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
.selector ul.selector-chooser {
|
.selector ul.selector-chooser {
|
||||||
float: left;
|
align-self: center;
|
||||||
width: 22px;
|
width: 30px;
|
||||||
background-color: var(--selected-bg);
|
background-color: var(--selected-bg);
|
||||||
border-radius: 10px;
|
border-radius: 10px;
|
||||||
margin: 10em 5px 0 5px;
|
margin: 0;
|
||||||
padding: 0;
|
padding: 0;
|
||||||
|
transform: translateY(-17px);
|
||||||
}
|
}
|
||||||
|
|
||||||
.selector-chooser li {
|
.selector-chooser li {
|
||||||
@@ -82,84 +113,97 @@
|
|||||||
margin: 0 0 10px;
|
margin: 0 0 10px;
|
||||||
border-radius: 0 0 4px 4px;
|
border-radius: 0 0 4px 4px;
|
||||||
}
|
}
|
||||||
|
.selector .selector-chosen--with-filtered select {
|
||||||
|
margin: 0;
|
||||||
|
border-radius: 0;
|
||||||
|
height: 14em;
|
||||||
|
}
|
||||||
|
|
||||||
|
.selector .selector-chosen:not(.selector-chosen--with-filtered) .list-footer-display {
|
||||||
|
display: none;
|
||||||
|
}
|
||||||
|
|
||||||
.selector-add, .selector-remove {
|
.selector-add, .selector-remove {
|
||||||
width: 16px;
|
width: 24px;
|
||||||
height: 16px;
|
height: 24px;
|
||||||
display: block;
|
display: block;
|
||||||
text-indent: -3000px;
|
text-indent: -3000px;
|
||||||
overflow: hidden;
|
overflow: hidden;
|
||||||
cursor: default;
|
cursor: default;
|
||||||
opacity: 0.55;
|
opacity: 0.55;
|
||||||
|
border: none;
|
||||||
}
|
}
|
||||||
|
|
||||||
.active.selector-add, .active.selector-remove {
|
:enabled.selector-add, :enabled.selector-remove {
|
||||||
opacity: 1;
|
opacity: 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
.active.selector-add:hover, .active.selector-remove:hover {
|
:enabled.selector-add:hover, :enabled.selector-remove:hover {
|
||||||
cursor: pointer;
|
cursor: pointer;
|
||||||
}
|
}
|
||||||
|
|
||||||
.selector-add {
|
.selector-add {
|
||||||
background: url(../img/selector-icons.svg) 0 -96px no-repeat;
|
background: url(../img/selector-icons.svg) 0 -144px no-repeat;
|
||||||
|
background-size: 24px auto;
|
||||||
}
|
}
|
||||||
|
|
||||||
.active.selector-add:focus, .active.selector-add:hover {
|
:enabled.selector-add:focus, :enabled.selector-add:hover {
|
||||||
background-position: 0 -112px;
|
background-position: 0 -168px;
|
||||||
}
|
}
|
||||||
|
|
||||||
.selector-remove {
|
.selector-remove {
|
||||||
background: url(../img/selector-icons.svg) 0 -64px no-repeat;
|
background: url(../img/selector-icons.svg) 0 -96px no-repeat;
|
||||||
|
background-size: 24px auto;
|
||||||
}
|
}
|
||||||
|
|
||||||
.active.selector-remove:focus, .active.selector-remove:hover {
|
:enabled.selector-remove:focus, :enabled.selector-remove:hover {
|
||||||
background-position: 0 -80px;
|
background-position: 0 -120px;
|
||||||
}
|
}
|
||||||
|
|
||||||
a.selector-chooseall, a.selector-clearall {
|
.selector-chooseall, .selector-clearall {
|
||||||
display: inline-block;
|
display: inline-block;
|
||||||
height: 16px;
|
height: 16px;
|
||||||
text-align: left;
|
text-align: left;
|
||||||
margin: 1px auto 3px;
|
margin: 0 auto;
|
||||||
overflow: hidden;
|
overflow: hidden;
|
||||||
font-weight: bold;
|
font-weight: bold;
|
||||||
line-height: 16px;
|
line-height: 16px;
|
||||||
color: var(--body-quiet-color);
|
color: var(--body-quiet-color);
|
||||||
text-decoration: none;
|
text-decoration: none;
|
||||||
opacity: 0.55;
|
opacity: 0.55;
|
||||||
|
border: none;
|
||||||
}
|
}
|
||||||
|
|
||||||
a.active.selector-chooseall:focus, a.active.selector-clearall:focus,
|
:enabled.selector-chooseall:focus, :enabled.selector-clearall:focus,
|
||||||
a.active.selector-chooseall:hover, a.active.selector-clearall:hover {
|
:enabled.selector-chooseall:hover, :enabled.selector-clearall:hover {
|
||||||
color: var(--link-fg);
|
color: var(--link-fg);
|
||||||
}
|
}
|
||||||
|
|
||||||
a.active.selector-chooseall, a.active.selector-clearall {
|
:enabled.selector-chooseall, :enabled.selector-clearall {
|
||||||
opacity: 1;
|
opacity: 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
a.active.selector-chooseall:hover, a.active.selector-clearall:hover {
|
:enabled.selector-chooseall:hover, :enabled.selector-clearall:hover {
|
||||||
cursor: pointer;
|
cursor: pointer;
|
||||||
}
|
}
|
||||||
|
|
||||||
a.selector-chooseall {
|
.selector-chooseall {
|
||||||
padding: 0 18px 0 0;
|
padding: 0 18px 0 0;
|
||||||
background: url(../img/selector-icons.svg) right -160px no-repeat;
|
background: url(../img/selector-icons.svg) right -160px no-repeat;
|
||||||
cursor: default;
|
cursor: default;
|
||||||
}
|
}
|
||||||
|
|
||||||
a.active.selector-chooseall:focus, a.active.selector-chooseall:hover {
|
:enabled.selector-chooseall:focus, :enabled.selector-chooseall:hover {
|
||||||
background-position: 100% -176px;
|
background-position: 100% -176px;
|
||||||
}
|
}
|
||||||
|
|
||||||
a.selector-clearall {
|
.selector-clearall {
|
||||||
padding: 0 0 0 18px;
|
padding: 0 0 0 18px;
|
||||||
background: url(../img/selector-icons.svg) 0 -128px no-repeat;
|
background: url(../img/selector-icons.svg) 0 -128px no-repeat;
|
||||||
cursor: default;
|
cursor: default;
|
||||||
}
|
}
|
||||||
|
|
||||||
a.active.selector-clearall:focus, a.active.selector-clearall:hover {
|
:enabled.selector-clearall:focus, :enabled.selector-clearall:hover {
|
||||||
background-position: 0 -144px;
|
background-position: 0 -144px;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -168,6 +212,7 @@ a.active.selector-clearall:focus, a.active.selector-clearall:hover {
|
|||||||
.stacked {
|
.stacked {
|
||||||
float: left;
|
float: left;
|
||||||
width: 490px;
|
width: 490px;
|
||||||
|
display: block;
|
||||||
}
|
}
|
||||||
|
|
||||||
.stacked select {
|
.stacked select {
|
||||||
@@ -188,11 +233,13 @@ a.active.selector-clearall:focus, a.active.selector-clearall:hover {
|
|||||||
}
|
}
|
||||||
|
|
||||||
.stacked ul.selector-chooser {
|
.stacked ul.selector-chooser {
|
||||||
height: 22px;
|
display: flex;
|
||||||
width: 50px;
|
height: 30px;
|
||||||
|
width: 64px;
|
||||||
margin: 0 0 10px 40%;
|
margin: 0 0 10px 40%;
|
||||||
background-color: #eee;
|
background-color: #eee;
|
||||||
border-radius: 10px;
|
border-radius: 10px;
|
||||||
|
transform: none;
|
||||||
}
|
}
|
||||||
|
|
||||||
.stacked .selector-chooser li {
|
.stacked .selector-chooser li {
|
||||||
@@ -205,32 +252,34 @@ a.active.selector-clearall:focus, a.active.selector-clearall:hover {
|
|||||||
}
|
}
|
||||||
|
|
||||||
.stacked .selector-add {
|
.stacked .selector-add {
|
||||||
background: url(../img/selector-icons.svg) 0 -32px no-repeat;
|
background: url(../img/selector-icons.svg) 0 -48px no-repeat;
|
||||||
|
background-size: 24px auto;
|
||||||
cursor: default;
|
cursor: default;
|
||||||
}
|
}
|
||||||
|
|
||||||
.stacked .active.selector-add {
|
.stacked :enabled.selector-add {
|
||||||
background-position: 0 -32px;
|
background-position: 0 -48px;
|
||||||
cursor: pointer;
|
cursor: pointer;
|
||||||
}
|
}
|
||||||
|
|
||||||
.stacked .active.selector-add:focus, .stacked .active.selector-add:hover {
|
.stacked :enabled.selector-add:focus, .stacked :enabled.selector-add:hover {
|
||||||
background-position: 0 -48px;
|
background-position: 0 -72px;
|
||||||
cursor: pointer;
|
cursor: pointer;
|
||||||
}
|
}
|
||||||
|
|
||||||
.stacked .selector-remove {
|
.stacked .selector-remove {
|
||||||
background: url(../img/selector-icons.svg) 0 0 no-repeat;
|
background: url(../img/selector-icons.svg) 0 0 no-repeat;
|
||||||
|
background-size: 24px auto;
|
||||||
cursor: default;
|
cursor: default;
|
||||||
}
|
}
|
||||||
|
|
||||||
.stacked .active.selector-remove {
|
.stacked :enabled.selector-remove {
|
||||||
background-position: 0 0px;
|
background-position: 0 0px;
|
||||||
cursor: pointer;
|
cursor: pointer;
|
||||||
}
|
}
|
||||||
|
|
||||||
.stacked .active.selector-remove:focus, .stacked .active.selector-remove:hover {
|
.stacked :enabled.selector-remove:focus, .stacked :enabled.selector-remove:hover {
|
||||||
background-position: 0 -16px;
|
background-position: 0 -24px;
|
||||||
cursor: pointer;
|
cursor: pointer;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -250,8 +299,8 @@ a.active.selector-clearall:focus, a.active.selector-clearall:hover {
|
|||||||
.selector .search-label-icon {
|
.selector .search-label-icon {
|
||||||
background: url(../img/search.svg) 0 0 no-repeat;
|
background: url(../img/search.svg) 0 0 no-repeat;
|
||||||
display: inline-block;
|
display: inline-block;
|
||||||
height: 18px;
|
height: 1.125rem;
|
||||||
width: 18px;
|
width: 1.125rem;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* DATE AND TIME */
|
/* DATE AND TIME */
|
||||||
@@ -267,7 +316,7 @@ p.datetime {
|
|||||||
.datetime span {
|
.datetime span {
|
||||||
white-space: nowrap;
|
white-space: nowrap;
|
||||||
font-weight: normal;
|
font-weight: normal;
|
||||||
font-size: 11px;
|
font-size: 0.6875rem;
|
||||||
color: var(--body-quiet-color);
|
color: var(--body-quiet-color);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -277,7 +326,7 @@ p.datetime {
|
|||||||
}
|
}
|
||||||
|
|
||||||
table p.datetime {
|
table p.datetime {
|
||||||
font-size: 11px;
|
font-size: 0.6875rem;
|
||||||
margin-left: 0;
|
margin-left: 0;
|
||||||
padding-left: 0;
|
padding-left: 0;
|
||||||
}
|
}
|
||||||
@@ -286,32 +335,34 @@ table p.datetime {
|
|||||||
position: relative;
|
position: relative;
|
||||||
display: inline-block;
|
display: inline-block;
|
||||||
vertical-align: middle;
|
vertical-align: middle;
|
||||||
height: 16px;
|
height: 24px;
|
||||||
width: 16px;
|
width: 24px;
|
||||||
overflow: hidden;
|
overflow: hidden;
|
||||||
}
|
}
|
||||||
|
|
||||||
.datetimeshortcuts .clock-icon {
|
.datetimeshortcuts .clock-icon {
|
||||||
background: url(../img/icon-clock.svg) 0 0 no-repeat;
|
background: url(../img/icon-clock.svg) 0 0 no-repeat;
|
||||||
|
background-size: 24px auto;
|
||||||
}
|
}
|
||||||
|
|
||||||
.datetimeshortcuts a:focus .clock-icon,
|
.datetimeshortcuts a:focus .clock-icon,
|
||||||
.datetimeshortcuts a:hover .clock-icon {
|
.datetimeshortcuts a:hover .clock-icon {
|
||||||
background-position: 0 -16px;
|
background-position: 0 -24px;
|
||||||
}
|
}
|
||||||
|
|
||||||
.datetimeshortcuts .date-icon {
|
.datetimeshortcuts .date-icon {
|
||||||
background: url(../img/icon-calendar.svg) 0 0 no-repeat;
|
background: url(../img/icon-calendar.svg) 0 0 no-repeat;
|
||||||
|
background-size: 24px auto;
|
||||||
top: -1px;
|
top: -1px;
|
||||||
}
|
}
|
||||||
|
|
||||||
.datetimeshortcuts a:focus .date-icon,
|
.datetimeshortcuts a:focus .date-icon,
|
||||||
.datetimeshortcuts a:hover .date-icon {
|
.datetimeshortcuts a:hover .date-icon {
|
||||||
background-position: 0 -16px;
|
background-position: 0 -24px;
|
||||||
}
|
}
|
||||||
|
|
||||||
.timezonewarning {
|
.timezonewarning {
|
||||||
font-size: 11px;
|
font-size: 0.6875rem;
|
||||||
color: var(--body-quiet-color);
|
color: var(--body-quiet-color);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -322,7 +373,7 @@ p.url {
|
|||||||
margin: 0;
|
margin: 0;
|
||||||
padding: 0;
|
padding: 0;
|
||||||
color: var(--body-quiet-color);
|
color: var(--body-quiet-color);
|
||||||
font-size: 11px;
|
font-size: 0.6875rem;
|
||||||
font-weight: bold;
|
font-weight: bold;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -337,14 +388,10 @@ p.file-upload {
|
|||||||
margin: 0;
|
margin: 0;
|
||||||
padding: 0;
|
padding: 0;
|
||||||
color: var(--body-quiet-color);
|
color: var(--body-quiet-color);
|
||||||
font-size: 11px;
|
font-size: 0.6875rem;
|
||||||
font-weight: bold;
|
font-weight: bold;
|
||||||
}
|
}
|
||||||
|
|
||||||
.aligned p.file-upload {
|
|
||||||
margin-left: 170px;
|
|
||||||
}
|
|
||||||
|
|
||||||
.file-upload a {
|
.file-upload a {
|
||||||
font-weight: normal;
|
font-weight: normal;
|
||||||
}
|
}
|
||||||
@@ -355,7 +402,7 @@ p.file-upload {
|
|||||||
|
|
||||||
span.clearable-file-input label {
|
span.clearable-file-input label {
|
||||||
color: var(--body-fg);
|
color: var(--body-fg);
|
||||||
font-size: 11px;
|
font-size: 0.6875rem;
|
||||||
display: inline;
|
display: inline;
|
||||||
float: none;
|
float: none;
|
||||||
}
|
}
|
||||||
@@ -364,7 +411,7 @@ span.clearable-file-input label {
|
|||||||
|
|
||||||
.calendarbox, .clockbox {
|
.calendarbox, .clockbox {
|
||||||
margin: 5px auto;
|
margin: 5px auto;
|
||||||
font-size: 12px;
|
font-size: 0.75rem;
|
||||||
width: 19em;
|
width: 19em;
|
||||||
text-align: center;
|
text-align: center;
|
||||||
background: var(--body-bg);
|
background: var(--body-bg);
|
||||||
@@ -398,7 +445,7 @@ span.clearable-file-input label {
|
|||||||
text-align: center;
|
text-align: center;
|
||||||
border-top: none;
|
border-top: none;
|
||||||
font-weight: 700;
|
font-weight: 700;
|
||||||
font-size: 12px;
|
font-size: 0.75rem;
|
||||||
color: #333;
|
color: #333;
|
||||||
background: var(--accent);
|
background: var(--accent);
|
||||||
}
|
}
|
||||||
@@ -408,14 +455,14 @@ span.clearable-file-input label {
|
|||||||
background: var(--darkened-bg);
|
background: var(--darkened-bg);
|
||||||
border-bottom: 1px solid var(--border-color);
|
border-bottom: 1px solid var(--border-color);
|
||||||
font-weight: 400;
|
font-weight: 400;
|
||||||
font-size: 12px;
|
font-size: 0.75rem;
|
||||||
text-align: center;
|
text-align: center;
|
||||||
color: var(--body-quiet-color);
|
color: var(--body-quiet-color);
|
||||||
}
|
}
|
||||||
|
|
||||||
.calendar td {
|
.calendar td {
|
||||||
font-weight: 400;
|
font-weight: 400;
|
||||||
font-size: 12px;
|
font-size: 0.75rem;
|
||||||
text-align: center;
|
text-align: center;
|
||||||
padding: 0;
|
padding: 0;
|
||||||
border-top: 1px solid var(--hairline-color);
|
border-top: 1px solid var(--hairline-color);
|
||||||
@@ -423,7 +470,7 @@ span.clearable-file-input label {
|
|||||||
}
|
}
|
||||||
|
|
||||||
.calendar td.selected a {
|
.calendar td.selected a {
|
||||||
background: var(--primary);
|
background: var(--secondary);
|
||||||
color: var(--button-fg);
|
color: var(--button-fg);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -455,7 +502,7 @@ span.clearable-file-input label {
|
|||||||
}
|
}
|
||||||
|
|
||||||
.calendarnav {
|
.calendarnav {
|
||||||
font-size: 10px;
|
font-size: 0.625rem;
|
||||||
text-align: center;
|
text-align: center;
|
||||||
color: #ccc;
|
color: #ccc;
|
||||||
margin: 0;
|
margin: 0;
|
||||||
@@ -470,8 +517,8 @@ span.clearable-file-input label {
|
|||||||
.calendar-shortcuts {
|
.calendar-shortcuts {
|
||||||
background: var(--body-bg);
|
background: var(--body-bg);
|
||||||
color: var(--body-quiet-color);
|
color: var(--body-quiet-color);
|
||||||
font-size: 11px;
|
font-size: 0.6875rem;
|
||||||
line-height: 11px;
|
line-height: 0.6875rem;
|
||||||
border-top: 1px solid var(--hairline-color);
|
border-top: 1px solid var(--hairline-color);
|
||||||
padding: 8px 0;
|
padding: 8px 0;
|
||||||
}
|
}
|
||||||
@@ -491,36 +538,26 @@ span.clearable-file-input label {
|
|||||||
background: url(../img/calendar-icons.svg) 0 0 no-repeat;
|
background: url(../img/calendar-icons.svg) 0 0 no-repeat;
|
||||||
}
|
}
|
||||||
|
|
||||||
.calendarbox .calendarnav-previous:focus,
|
|
||||||
.calendarbox .calendarnav-previous:hover {
|
|
||||||
background-position: 0 -15px;
|
|
||||||
}
|
|
||||||
|
|
||||||
.calendarnav-next {
|
.calendarnav-next {
|
||||||
right: 10px;
|
right: 10px;
|
||||||
background: url(../img/calendar-icons.svg) 0 -30px no-repeat;
|
background: url(../img/calendar-icons.svg) 0 -15px no-repeat;
|
||||||
}
|
|
||||||
|
|
||||||
.calendarbox .calendarnav-next:focus,
|
|
||||||
.calendarbox .calendarnav-next:hover {
|
|
||||||
background-position: 0 -45px;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
.calendar-cancel {
|
.calendar-cancel {
|
||||||
margin: 0;
|
margin: 0;
|
||||||
padding: 4px 0;
|
padding: 4px 0;
|
||||||
font-size: 12px;
|
font-size: 0.75rem;
|
||||||
background: #eee;
|
background: var(--close-button-bg);
|
||||||
border-top: 1px solid var(--border-color);
|
border-top: 1px solid var(--border-color);
|
||||||
color: var(--body-fg);
|
color: var(--button-fg);
|
||||||
}
|
}
|
||||||
|
|
||||||
.calendar-cancel:focus, .calendar-cancel:hover {
|
.calendar-cancel:focus, .calendar-cancel:hover {
|
||||||
background: #ddd;
|
background: var(--close-button-hover-bg);
|
||||||
}
|
}
|
||||||
|
|
||||||
.calendar-cancel a {
|
.calendar-cancel a {
|
||||||
color: black;
|
color: var(--button-fg);
|
||||||
display: block;
|
display: block;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -540,9 +577,10 @@ ul.timelist, .timelist li {
|
|||||||
float: right;
|
float: right;
|
||||||
text-indent: -9999px;
|
text-indent: -9999px;
|
||||||
background: url(../img/inline-delete.svg) 0 0 no-repeat;
|
background: url(../img/inline-delete.svg) 0 0 no-repeat;
|
||||||
width: 16px;
|
width: 1.5rem;
|
||||||
height: 16px;
|
height: 1.5rem;
|
||||||
border: 0px none;
|
border: 0px none;
|
||||||
|
margin-bottom: .25rem;
|
||||||
}
|
}
|
||||||
|
|
||||||
.inline-deletelink:focus, .inline-deletelink:hover {
|
.inline-deletelink:focus, .inline-deletelink:hover {
|
||||||
@@ -551,24 +589,25 @@ ul.timelist, .timelist li {
|
|||||||
|
|
||||||
/* RELATED WIDGET WRAPPER */
|
/* RELATED WIDGET WRAPPER */
|
||||||
.related-widget-wrapper {
|
.related-widget-wrapper {
|
||||||
float: left; /* display properly in form rows with multiple fields */
|
display: flex;
|
||||||
overflow: hidden; /* clear floated contents */
|
gap: 0 10px;
|
||||||
|
flex-grow: 1;
|
||||||
|
flex-wrap: wrap;
|
||||||
|
margin-bottom: 5px;
|
||||||
}
|
}
|
||||||
|
|
||||||
.related-widget-wrapper-link {
|
.related-widget-wrapper-link {
|
||||||
opacity: 0.3;
|
opacity: .6;
|
||||||
|
filter: grayscale(1);
|
||||||
}
|
}
|
||||||
|
|
||||||
.related-widget-wrapper-link:link {
|
.related-widget-wrapper-link:link {
|
||||||
opacity: .8;
|
|
||||||
}
|
|
||||||
|
|
||||||
.related-widget-wrapper-link:link:focus,
|
|
||||||
.related-widget-wrapper-link:link:hover {
|
|
||||||
opacity: 1;
|
opacity: 1;
|
||||||
|
filter: grayscale(0);
|
||||||
}
|
}
|
||||||
|
|
||||||
select + .related-widget-wrapper-link,
|
/* GIS MAPS */
|
||||||
.related-widget-wrapper-link + .related-widget-wrapper-link {
|
.dj_map {
|
||||||
margin-left: 7px;
|
width: 600px;
|
||||||
|
height: 400px;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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,3 +0,0 @@
|
|||||||
Roboto webfont source: https://www.google.com/fonts/specimen/Roboto
|
|
||||||
WOFF files extracted using https://github.com/majodev/google-webfonts-helper
|
|
||||||
Weights used in this project: Light (300), Regular (400), Bold (700)
|
|
||||||
@@ -1,4 +1,4 @@
|
|||||||
All icons are taken from Font Awesome (http://fontawesome.io/) project.
|
All icons are taken from Font Awesome (https://fontawesome.com/) project.
|
||||||
The Font Awesome font is licensed under the SIL OFL 1.1:
|
The Font Awesome font is licensed under the SIL OFL 1.1:
|
||||||
- https://scripts.sil.org/OFL
|
- https://scripts.sil.org/OFL
|
||||||
|
|
||||||
|
|||||||
@@ -1,14 +1,63 @@
|
|||||||
<svg width="15" height="60" viewBox="0 0 1792 7168" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
|
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||||
<defs>
|
<svg
|
||||||
<g id="previous">
|
width="15"
|
||||||
<path d="M1037 1395l102-102q19-19 19-45t-19-45l-307-307 307-307q19-19 19-45t-19-45l-102-102q-19-19-45-19t-45 19l-454 454q-19 19-19 45t19 45l454 454q19 19 45 19t45-19zm627-499q0 209-103 385.5t-279.5 279.5-385.5 103-385.5-103-279.5-279.5-103-385.5 103-385.5 279.5-279.5 385.5-103 385.5 103 279.5 279.5 103 385.5z"/>
|
height="30"
|
||||||
|
viewBox="0 0 1792 3584"
|
||||||
|
version="1.1"
|
||||||
|
id="svg5"
|
||||||
|
sodipodi:docname="calendar-icons.svg"
|
||||||
|
inkscape:version="1.3.2 (091e20ef0f, 2023-11-25, custom)"
|
||||||
|
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
||||||
|
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
||||||
|
xmlns:xlink="http://www.w3.org/1999/xlink"
|
||||||
|
xmlns="http://www.w3.org/2000/svg"
|
||||||
|
xmlns:svg="http://www.w3.org/2000/svg">
|
||||||
|
<sodipodi:namedview
|
||||||
|
id="namedview5"
|
||||||
|
pagecolor="#ffffff"
|
||||||
|
bordercolor="#666666"
|
||||||
|
borderopacity="1.0"
|
||||||
|
inkscape:showpageshadow="2"
|
||||||
|
inkscape:pageopacity="0.0"
|
||||||
|
inkscape:pagecheckerboard="0"
|
||||||
|
inkscape:deskcolor="#d1d1d1"
|
||||||
|
showgrid="false"
|
||||||
|
inkscape:zoom="13.3"
|
||||||
|
inkscape:cx="15.526316"
|
||||||
|
inkscape:cy="20.977444"
|
||||||
|
inkscape:window-width="1920"
|
||||||
|
inkscape:window-height="1011"
|
||||||
|
inkscape:window-x="0"
|
||||||
|
inkscape:window-y="0"
|
||||||
|
inkscape:window-maximized="1"
|
||||||
|
inkscape:current-layer="svg5" />
|
||||||
|
<defs
|
||||||
|
id="defs2">
|
||||||
|
<g
|
||||||
|
id="previous">
|
||||||
|
<path
|
||||||
|
d="m 1037,1395 102,-102 q 19,-19 19,-45 0,-26 -19,-45 L 832,896 1139,589 q 19,-19 19,-45 0,-26 -19,-45 L 1037,397 q -19,-19 -45,-19 -26,0 -45,19 L 493,851 q -19,19 -19,45 0,26 19,45 l 454,454 q 19,19 45,19 26,0 45,-19 z m 627,-499 q 0,209 -103,385.5 Q 1458,1458 1281.5,1561 1105,1664 896,1664 687,1664 510.5,1561 334,1458 231,1281.5 128,1105 128,896 128,687 231,510.5 334,334 510.5,231 687,128 896,128 1105,128 1281.5,231 1458,334 1561,510.5 1664,687 1664,896 Z"
|
||||||
|
id="path1" />
|
||||||
</g>
|
</g>
|
||||||
<g id="next">
|
<g
|
||||||
<path d="M845 1395l454-454q19-19 19-45t-19-45l-454-454q-19-19-45-19t-45 19l-102 102q-19 19-19 45t19 45l307 307-307 307q-19 19-19 45t19 45l102 102q19 19 45 19t45-19zm819-499q0 209-103 385.5t-279.5 279.5-385.5 103-385.5-103-279.5-279.5-103-385.5 103-385.5 279.5-279.5 385.5-103 385.5 103 279.5 279.5 103 385.5z"/>
|
id="next">
|
||||||
|
<path
|
||||||
|
d="m 845,1395 454,-454 q 19,-19 19,-45 0,-26 -19,-45 L 845,397 q -19,-19 -45,-19 -26,0 -45,19 L 653,499 q -19,19 -19,45 0,26 19,45 l 307,307 -307,307 q -19,19 -19,45 0,26 19,45 l 102,102 q 19,19 45,19 26,0 45,-19 z m 819,-499 q 0,209 -103,385.5 Q 1458,1458 1281.5,1561 1105,1664 896,1664 687,1664 510.5,1561 334,1458 231,1281.5 128,1105 128,896 128,687 231,510.5 334,334 510.5,231 687,128 896,128 1105,128 1281.5,231 1458,334 1561,510.5 1664,687 1664,896 Z"
|
||||||
|
id="path2" />
|
||||||
</g>
|
</g>
|
||||||
</defs>
|
</defs>
|
||||||
<use xlink:href="#previous" x="0" y="0" fill="#333333" />
|
<use
|
||||||
<use xlink:href="#previous" x="0" y="1792" fill="#000000" />
|
xlink:href="#next"
|
||||||
<use xlink:href="#next" x="0" y="3584" fill="#333333" />
|
x="0"
|
||||||
<use xlink:href="#next" x="0" y="5376" fill="#000000" />
|
y="5376"
|
||||||
|
fill="#000000"
|
||||||
|
id="use5"
|
||||||
|
transform="translate(0,-3584)" />
|
||||||
|
<use
|
||||||
|
xlink:href="#previous"
|
||||||
|
x="0"
|
||||||
|
y="0"
|
||||||
|
fill="#333333"
|
||||||
|
id="use2"
|
||||||
|
style="fill:#000000;fill-opacity:1" />
|
||||||
</svg>
|
</svg>
|
||||||
|
|||||||
|
Before Width: | Height: | Size: 1.1 KiB After Width: | Height: | Size: 2.4 KiB |
@@ -1,3 +1,3 @@
|
|||||||
<svg width="13" height="13" viewBox="0 0 1792 1792" xmlns="http://www.w3.org/2000/svg">
|
<svg width="13" height="13" viewBox="0 0 1792 1792" xmlns="http://www.w3.org/2000/svg">
|
||||||
<path fill="#70bf2b" d="M1600 796v192q0 40-28 68t-68 28h-416v416q0 40-28 68t-68 28h-192q-40 0-68-28t-28-68v-416h-416q-40 0-68-28t-28-68v-192q0-40 28-68t68-28h416v-416q0-40 28-68t68-28h192q40 0 68 28t28 68v416h416q40 0 68 28t28 68z"/>
|
<path fill="#5fa225" d="M1600 796v192q0 40-28 68t-68 28h-416v416q0 40-28 68t-68 28h-192q-40 0-68-28t-28-68v-416h-416q-40 0-68-28t-28-68v-192q0-40 28-68t68-28h416v-416q0-40 28-68t68-28h192q40 0 68 28t28 68v416h416q40 0 68 28t28 68z"/>
|
||||||
</svg>
|
</svg>
|
||||||
|
|||||||
|
Before Width: | Height: | Size: 331 B After Width: | Height: | Size: 331 B |
@@ -1,3 +1,3 @@
|
|||||||
<svg width="13" height="13" viewBox="0 0 1792 1792" xmlns="http://www.w3.org/2000/svg">
|
<svg width="13" height="13" viewBox="0 0 1792 1792" xmlns="http://www.w3.org/2000/svg">
|
||||||
<path fill="#efb80b" d="M491 1536l91-91-235-235-91 91v107h128v128h107zm523-928q0-22-22-22-10 0-17 7l-542 542q-7 7-7 17 0 22 22 22 10 0 17-7l542-542q7-7 7-17zm-54-192l416 416-832 832h-416v-416zm683 96q0 53-37 90l-166 166-416-416 166-165q36-38 90-38 53 0 91 38l235 234q37 39 37 91z"/>
|
<path fill="#b48c08" d="M491 1536l91-91-235-235-91 91v107h128v128h107zm523-928q0-22-22-22-10 0-17 7l-542 542q-7 7-7 17 0 22 22 22 10 0 17-7l542-542q7-7 7-17zm-54-192l416 416-832 832h-416v-416zm683 96q0 53-37 90l-166 166-416-416 166-165q36-38 90-38 53 0 91 38l235 234q37 39 37 91z"/>
|
||||||
</svg>
|
</svg>
|
||||||
|
|||||||
|
Before Width: | Height: | Size: 380 B After Width: | Height: | Size: 380 B |
3
assets/admin/img/icon-hidelink.svg
Normal file
@@ -0,0 +1,3 @@
|
|||||||
|
<svg width="13" height="13" viewBox="0 0 1792 1792" xmlns="http://www.w3.org/2000/svg">
|
||||||
|
<path fill="#2b70bf" d="m555 1335 78-141q-87-63-136-159t-49-203q0-121 61-225-229 117-381 353 167 258 427 375zm389-759q0-20-14-34t-34-14q-125 0-214.5 89.5T592 832q0 20 14 34t34 14 34-14 14-34q0-86 61-147t147-61q20 0 34-14t14-34zm363-191q0 7-1 9-105 188-315 566t-316 567l-49 89q-10 16-28 16-12 0-134-70-16-10-16-28 0-12 44-87-143-65-263.5-173T20 1029Q0 998 0 960t20-69q153-235 380-371t496-136q89 0 180 17l54-97q10-16 28-16 5 0 18 6t31 15.5 33 18.5 31.5 18.5T1291 358q16 10 16 27zm37 447q0 139-79 253.5T1056 1250l280-502q8 45 8 84zm448 128q0 35-20 69-39 64-109 145-150 172-347.5 267T896 1536l74-132q212-18 392.5-137T1664 960q-115-179-282-294l63-112q95 64 182.5 153T1772 891q20 34 20 69z"/>
|
||||||
|
</svg>
|
||||||
|
After Width: | Height: | Size: 784 B |
@@ -1,3 +1,3 @@
|
|||||||
<svg width="16" height="16" viewBox="0 0 1792 1792" xmlns="http://www.w3.org/2000/svg">
|
<svg viewBox="0 0 1792 1792" xmlns="http://www.w3.org/2000/svg">
|
||||||
<path fill="#999999" d="M1277 1122q0-26-19-45l-181-181 181-181q19-19 19-45 0-27-19-46l-90-90q-19-19-46-19-26 0-45 19l-181 181-181-181q-19-19-45-19-27 0-46 19l-90 90q-19 19-19 46 0 26 19 45l181 181-181 181q-19 19-19 45 0 27 19 46l90 90q19 19 46 19 26 0 45-19l181-181 181 181q19 19 45 19 27 0 46-19l90-90q19-19 19-46zm387-226q0 209-103 385.5t-279.5 279.5-385.5 103-385.5-103-279.5-279.5-103-385.5 103-385.5 279.5-279.5 385.5-103 385.5 103 279.5 279.5 103 385.5z"/>
|
<path fill="#999999" d="M1277 1122q0-26-19-45l-181-181 181-181q19-19 19-45 0-27-19-46l-90-90q-19-19-46-19-26 0-45 19l-181 181-181-181q-19-19-45-19-27 0-46 19l-90 90q-19 19-19 46 0 26 19 45l181 181-181 181q-19 19-19 45 0 27 19 46l90 90q19 19 46 19 26 0 45-19l181-181 181 181q19 19 45 19 27 0 46-19l90-90q19-19 19-46zm387-226q0 209-103 385.5t-279.5 279.5-385.5 103-385.5-103-279.5-279.5-103-385.5 103-385.5 279.5-279.5 385.5-103 385.5 103 279.5 279.5 103 385.5z"/>
|
||||||
</svg>
|
</svg>
|
||||||
|
|||||||
|
Before Width: | Height: | Size: 560 B After Width: | Height: | Size: 537 B |
@@ -41,6 +41,10 @@
|
|||||||
}
|
}
|
||||||
SelectBox.redisplay(id);
|
SelectBox.redisplay(id);
|
||||||
},
|
},
|
||||||
|
get_hidden_node_count(id) {
|
||||||
|
const cache = SelectBox.cache[id] || [];
|
||||||
|
return cache.filter(node => node.displayed === 0).length;
|
||||||
|
},
|
||||||
delete_from_cache: function(id, value) {
|
delete_from_cache: function(id, value) {
|
||||||
let delete_index = null;
|
let delete_index = null;
|
||||||
const cache = SelectBox.cache[id];
|
const cache = SelectBox.cache[id];
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
/*global SelectBox, gettext, interpolate, quickElement, SelectFilter*/
|
/*global SelectBox, gettext, ngettext, interpolate, quickElement, SelectFilter*/
|
||||||
/*
|
/*
|
||||||
SelectFilter2 - Turns a multiple-select box into a filter interface.
|
SelectFilter2 - Turns a multiple-select box into a filter interface.
|
||||||
|
|
||||||
@@ -15,6 +15,7 @@ Requires core.js and SelectBox.js.
|
|||||||
const from_box = document.getElementById(field_id);
|
const from_box = document.getElementById(field_id);
|
||||||
from_box.id += '_from'; // change its ID
|
from_box.id += '_from'; // change its ID
|
||||||
from_box.className = 'filtered';
|
from_box.className = 'filtered';
|
||||||
|
from_box.setAttribute('aria-labelledby', field_id + '_from_title');
|
||||||
|
|
||||||
for (const p of from_box.parentNode.getElementsByTagName('p')) {
|
for (const p of from_box.parentNode.getElementsByTagName('p')) {
|
||||||
if (p.classList.contains("info")) {
|
if (p.classList.contains("info")) {
|
||||||
@@ -30,23 +31,23 @@ Requires core.js and SelectBox.js.
|
|||||||
|
|
||||||
// <div class="selector"> or <div class="selector stacked">
|
// <div class="selector"> or <div class="selector stacked">
|
||||||
const selector_div = quickElement('div', from_box.parentNode);
|
const selector_div = quickElement('div', from_box.parentNode);
|
||||||
|
// Make sure the selector div is at the beginning so that the
|
||||||
|
// add link would be displayed to the right of the widget.
|
||||||
|
from_box.parentNode.prepend(selector_div);
|
||||||
selector_div.className = is_stacked ? 'selector stacked' : 'selector';
|
selector_div.className = is_stacked ? 'selector stacked' : 'selector';
|
||||||
|
|
||||||
// <div class="selector-available">
|
// <div class="selector-available">
|
||||||
const selector_available = quickElement('div', selector_div);
|
const selector_available = quickElement('div', selector_div);
|
||||||
selector_available.className = 'selector-available';
|
selector_available.className = 'selector-available';
|
||||||
const title_available = quickElement('h2', selector_available, interpolate(gettext('Available %s') + ' ', [field_name]));
|
const selector_available_title = quickElement('div', selector_available);
|
||||||
|
selector_available_title.id = field_id + '_from_title';
|
||||||
|
selector_available_title.className = 'selector-available-title';
|
||||||
|
quickElement('label', selector_available_title, interpolate(gettext('Available %s') + ' ', [field_name]), 'for', field_id + '_from');
|
||||||
quickElement(
|
quickElement(
|
||||||
'span', title_available, '',
|
'p',
|
||||||
'class', 'help help-tooltip help-icon',
|
selector_available_title,
|
||||||
'title', interpolate(
|
interpolate(gettext('Choose %s by selecting them and then select the "Choose" arrow button.'), [field_name]),
|
||||||
gettext(
|
'class', 'helptext'
|
||||||
'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]
|
|
||||||
)
|
|
||||||
);
|
);
|
||||||
|
|
||||||
const filter_p = quickElement('p', selector_available, '', 'id', field_id + '_filter');
|
const filter_p = quickElement('p', selector_available, '', 'id', field_id + '_filter');
|
||||||
@@ -57,7 +58,7 @@ Requires core.js and SelectBox.js.
|
|||||||
quickElement(
|
quickElement(
|
||||||
'span', search_filter_label, '',
|
'span', search_filter_label, '',
|
||||||
'class', 'help-tooltip search-label-icon',
|
'class', 'help-tooltip search-label-icon',
|
||||||
'title', interpolate(gettext("Type into this box to filter down the list of available %s."), [field_name])
|
'aria-label', interpolate(gettext("Type into this box to filter down the list of available %s."), [field_name])
|
||||||
);
|
);
|
||||||
|
|
||||||
filter_p.appendChild(document.createTextNode(' '));
|
filter_p.appendChild(document.createTextNode(' '));
|
||||||
@@ -66,69 +67,135 @@ Requires core.js and SelectBox.js.
|
|||||||
filter_input.id = field_id + '_input';
|
filter_input.id = field_id + '_input';
|
||||||
|
|
||||||
selector_available.appendChild(from_box);
|
selector_available.appendChild(from_box);
|
||||||
const 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');
|
const choose_all = quickElement(
|
||||||
choose_all.className = 'selector-chooseall';
|
'button',
|
||||||
|
selector_available,
|
||||||
|
interpolate(gettext('Choose all %s'), [field_name]),
|
||||||
|
'id', field_id + '_add_all',
|
||||||
|
'class', 'selector-chooseall',
|
||||||
|
'type', 'button'
|
||||||
|
);
|
||||||
|
|
||||||
// <ul class="selector-chooser">
|
// <ul class="selector-chooser">
|
||||||
const selector_chooser = quickElement('ul', selector_div);
|
const selector_chooser = quickElement('ul', selector_div);
|
||||||
selector_chooser.className = 'selector-chooser';
|
selector_chooser.className = 'selector-chooser';
|
||||||
const add_link = quickElement('a', quickElement('li', selector_chooser), gettext('Choose'), 'title', gettext('Choose'), 'href', '#', 'id', field_id + '_add_link');
|
const add_button = quickElement(
|
||||||
add_link.className = 'selector-add';
|
'button',
|
||||||
const remove_link = quickElement('a', quickElement('li', selector_chooser), gettext('Remove'), 'title', gettext('Remove'), 'href', '#', 'id', field_id + '_remove_link');
|
quickElement('li', selector_chooser),
|
||||||
remove_link.className = 'selector-remove';
|
interpolate(gettext('Choose selected %s'), [field_name]),
|
||||||
|
'id', field_id + '_add',
|
||||||
// <div class="selector-chosen">
|
'class', 'selector-add',
|
||||||
const selector_chosen = quickElement('div', selector_div);
|
'type', 'button'
|
||||||
selector_chosen.className = 'selector-chosen';
|
);
|
||||||
const title_chosen = quickElement('h2', selector_chosen, interpolate(gettext('Chosen %s') + ' ', [field_name]));
|
const remove_button = quickElement(
|
||||||
quickElement(
|
'button',
|
||||||
'span', title_chosen, '',
|
quickElement('li', selector_chooser),
|
||||||
'class', 'help help-tooltip help-icon',
|
interpolate(gettext('Remove selected %s'), [field_name]),
|
||||||
'title', interpolate(
|
'id', field_id + '_remove',
|
||||||
gettext(
|
'class', 'selector-remove',
|
||||||
'This is the list of chosen %s. You may remove some by ' +
|
'type', 'button'
|
||||||
'selecting them in the box below and then clicking the ' +
|
|
||||||
'"Remove" arrow between the two boxes.'
|
|
||||||
),
|
|
||||||
[field_name]
|
|
||||||
)
|
|
||||||
);
|
);
|
||||||
|
|
||||||
const to_box = quickElement('select', selector_chosen, '', 'id', field_id + '_to', 'multiple', '', 'size', from_box.size, 'name', from_box.name);
|
// <div class="selector-chosen">
|
||||||
to_box.className = 'filtered';
|
const selector_chosen = quickElement('div', selector_div, '', 'id', field_id + '_selector_chosen');
|
||||||
const 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');
|
selector_chosen.className = 'selector-chosen';
|
||||||
clear_all.className = 'selector-clearall';
|
const selector_chosen_title = quickElement('div', selector_chosen);
|
||||||
|
selector_chosen_title.className = 'selector-chosen-title';
|
||||||
|
selector_chosen_title.id = field_id + '_to_title';
|
||||||
|
quickElement('label', selector_chosen_title, interpolate(gettext('Chosen %s') + ' ', [field_name]), 'for', field_id + '_to');
|
||||||
|
quickElement(
|
||||||
|
'p',
|
||||||
|
selector_chosen_title,
|
||||||
|
interpolate(gettext('Remove %s by selecting them and then select the "Remove" arrow button.'), [field_name]),
|
||||||
|
'class', 'helptext'
|
||||||
|
);
|
||||||
|
|
||||||
|
const filter_selected_p = quickElement('p', selector_chosen, '', 'id', field_id + '_filter_selected');
|
||||||
|
filter_selected_p.className = 'selector-filter';
|
||||||
|
|
||||||
|
const search_filter_selected_label = quickElement('label', filter_selected_p, '', 'for', field_id + '_selected_input');
|
||||||
|
|
||||||
|
quickElement(
|
||||||
|
'span', search_filter_selected_label, '',
|
||||||
|
'class', 'help-tooltip search-label-icon',
|
||||||
|
'aria-label', interpolate(gettext("Type into this box to filter down the list of selected %s."), [field_name])
|
||||||
|
);
|
||||||
|
|
||||||
|
filter_selected_p.appendChild(document.createTextNode(' '));
|
||||||
|
|
||||||
|
const filter_selected_input = quickElement('input', filter_selected_p, '', 'type', 'text', 'placeholder', gettext("Filter"));
|
||||||
|
filter_selected_input.id = field_id + '_selected_input';
|
||||||
|
|
||||||
|
quickElement(
|
||||||
|
'select',
|
||||||
|
selector_chosen,
|
||||||
|
'',
|
||||||
|
'id', field_id + '_to',
|
||||||
|
'multiple', '',
|
||||||
|
'size', from_box.size,
|
||||||
|
'name', from_box.name,
|
||||||
|
'aria-labelledby', field_id + '_to_title',
|
||||||
|
'class', 'filtered'
|
||||||
|
);
|
||||||
|
const warning_footer = quickElement('div', selector_chosen, '', 'class', 'list-footer-display');
|
||||||
|
quickElement('span', warning_footer, '', 'id', field_id + '_list-footer-display-text');
|
||||||
|
quickElement('span', warning_footer, ' ' + gettext('(click to clear)'), 'class', 'list-footer-display__clear');
|
||||||
|
const clear_all = quickElement(
|
||||||
|
'button',
|
||||||
|
selector_chosen,
|
||||||
|
interpolate(gettext('Remove all %s'), [field_name]),
|
||||||
|
'id', field_id + '_remove_all',
|
||||||
|
'class', 'selector-clearall',
|
||||||
|
'type', 'button'
|
||||||
|
);
|
||||||
|
|
||||||
from_box.name = from_box.name + '_old';
|
from_box.name = from_box.name + '_old';
|
||||||
|
|
||||||
// Set up the JavaScript event handlers for the select box filter interface
|
// Set up the JavaScript event handlers for the select box filter interface
|
||||||
const move_selection = function(e, elem, move_func, from, to) {
|
const move_selection = function(e, elem, move_func, from, to) {
|
||||||
if (elem.classList.contains('active')) {
|
if (!elem.hasAttribute('disabled')) {
|
||||||
move_func(from, to);
|
move_func(from, to);
|
||||||
SelectFilter.refresh_icons(field_id);
|
SelectFilter.refresh_icons(field_id);
|
||||||
|
SelectFilter.refresh_filtered_selects(field_id);
|
||||||
|
SelectFilter.refresh_filtered_warning(field_id);
|
||||||
}
|
}
|
||||||
e.preventDefault();
|
e.preventDefault();
|
||||||
};
|
};
|
||||||
choose_all.addEventListener('click', function(e) {
|
choose_all.addEventListener('click', function(e) {
|
||||||
move_selection(e, this, SelectBox.move_all, field_id + '_from', field_id + '_to');
|
move_selection(e, this, SelectBox.move_all, field_id + '_from', field_id + '_to');
|
||||||
});
|
});
|
||||||
add_link.addEventListener('click', function(e) {
|
add_button.addEventListener('click', function(e) {
|
||||||
move_selection(e, this, SelectBox.move, field_id + '_from', field_id + '_to');
|
move_selection(e, this, SelectBox.move, field_id + '_from', field_id + '_to');
|
||||||
});
|
});
|
||||||
remove_link.addEventListener('click', function(e) {
|
remove_button.addEventListener('click', function(e) {
|
||||||
move_selection(e, this, SelectBox.move, field_id + '_to', field_id + '_from');
|
move_selection(e, this, SelectBox.move, field_id + '_to', field_id + '_from');
|
||||||
});
|
});
|
||||||
clear_all.addEventListener('click', function(e) {
|
clear_all.addEventListener('click', function(e) {
|
||||||
move_selection(e, this, SelectBox.move_all, field_id + '_to', field_id + '_from');
|
move_selection(e, this, SelectBox.move_all, field_id + '_to', field_id + '_from');
|
||||||
});
|
});
|
||||||
|
warning_footer.addEventListener('click', function(e) {
|
||||||
|
filter_selected_input.value = '';
|
||||||
|
SelectBox.filter(field_id + '_to', '');
|
||||||
|
SelectFilter.refresh_filtered_warning(field_id);
|
||||||
|
SelectFilter.refresh_icons(field_id);
|
||||||
|
});
|
||||||
filter_input.addEventListener('keypress', function(e) {
|
filter_input.addEventListener('keypress', function(e) {
|
||||||
SelectFilter.filter_key_press(e, field_id);
|
SelectFilter.filter_key_press(e, field_id, '_from', '_to');
|
||||||
});
|
});
|
||||||
filter_input.addEventListener('keyup', function(e) {
|
filter_input.addEventListener('keyup', function(e) {
|
||||||
SelectFilter.filter_key_up(e, field_id);
|
SelectFilter.filter_key_up(e, field_id, '_from');
|
||||||
});
|
});
|
||||||
filter_input.addEventListener('keydown', function(e) {
|
filter_input.addEventListener('keydown', function(e) {
|
||||||
SelectFilter.filter_key_down(e, field_id);
|
SelectFilter.filter_key_down(e, field_id, '_from', '_to');
|
||||||
|
});
|
||||||
|
filter_selected_input.addEventListener('keypress', function(e) {
|
||||||
|
SelectFilter.filter_key_press(e, field_id, '_to', '_from');
|
||||||
|
});
|
||||||
|
filter_selected_input.addEventListener('keyup', function(e) {
|
||||||
|
SelectFilter.filter_key_up(e, field_id, '_to', '_selected_input');
|
||||||
|
});
|
||||||
|
filter_selected_input.addEventListener('keydown', function(e) {
|
||||||
|
SelectFilter.filter_key_down(e, field_id, '_to', '_from');
|
||||||
});
|
});
|
||||||
selector_div.addEventListener('change', function(e) {
|
selector_div.addEventListener('change', function(e) {
|
||||||
if (e.target.tagName === 'SELECT') {
|
if (e.target.tagName === 'SELECT') {
|
||||||
@@ -146,6 +213,7 @@ Requires core.js and SelectBox.js.
|
|||||||
}
|
}
|
||||||
});
|
});
|
||||||
from_box.closest('form').addEventListener('submit', function() {
|
from_box.closest('form').addEventListener('submit', function() {
|
||||||
|
SelectBox.filter(field_id + '_to', '');
|
||||||
SelectBox.select_all(field_id + '_to');
|
SelectBox.select_all(field_id + '_to');
|
||||||
});
|
});
|
||||||
SelectBox.init(field_id + '_from');
|
SelectBox.init(field_id + '_from');
|
||||||
@@ -153,24 +221,6 @@ Requires core.js and SelectBox.js.
|
|||||||
// Move selected from_box options to to_box
|
// Move selected from_box options to to_box
|
||||||
SelectBox.move(field_id + '_from', field_id + '_to');
|
SelectBox.move(field_id + '_from', field_id + '_to');
|
||||||
|
|
||||||
if (!is_stacked) {
|
|
||||||
// In horizontal mode, give the same height to the two boxes.
|
|
||||||
const j_from_box = document.getElementById(field_id + '_from');
|
|
||||||
const j_to_box = document.getElementById(field_id + '_to');
|
|
||||||
let height = filter_p.offsetHeight + j_from_box.offsetHeight;
|
|
||||||
|
|
||||||
const j_to_box_style = window.getComputedStyle(j_to_box);
|
|
||||||
if (j_to_box_style.getPropertyValue('box-sizing') === 'border-box') {
|
|
||||||
// Add the padding and border to the final height.
|
|
||||||
height += parseInt(j_to_box_style.getPropertyValue('padding-top'), 10)
|
|
||||||
+ parseInt(j_to_box_style.getPropertyValue('padding-bottom'), 10)
|
|
||||||
+ parseInt(j_to_box_style.getPropertyValue('border-top-width'), 10)
|
|
||||||
+ parseInt(j_to_box_style.getPropertyValue('border-bottom-width'), 10);
|
|
||||||
}
|
|
||||||
|
|
||||||
j_to_box.style.height = height + 'px';
|
|
||||||
}
|
|
||||||
|
|
||||||
// Initial icon refresh
|
// Initial icon refresh
|
||||||
SelectFilter.refresh_icons(field_id);
|
SelectFilter.refresh_icons(field_id);
|
||||||
},
|
},
|
||||||
@@ -181,48 +231,73 @@ Requires core.js and SelectBox.js.
|
|||||||
field.required = false;
|
field.required = false;
|
||||||
return any_selected;
|
return any_selected;
|
||||||
},
|
},
|
||||||
|
refresh_filtered_warning: function(field_id) {
|
||||||
|
const count = SelectBox.get_hidden_node_count(field_id + '_to');
|
||||||
|
const selector = document.getElementById(field_id + '_selector_chosen');
|
||||||
|
const warning = document.getElementById(field_id + '_list-footer-display-text');
|
||||||
|
selector.className = selector.className.replace('selector-chosen--with-filtered', '');
|
||||||
|
warning.textContent = interpolate(ngettext(
|
||||||
|
'%s selected option not visible',
|
||||||
|
'%s selected options not visible',
|
||||||
|
count
|
||||||
|
), [count]);
|
||||||
|
if(count > 0) {
|
||||||
|
selector.className += ' selector-chosen--with-filtered';
|
||||||
|
}
|
||||||
|
},
|
||||||
|
refresh_filtered_selects: function(field_id) {
|
||||||
|
SelectBox.filter(field_id + '_from', document.getElementById(field_id + "_input").value);
|
||||||
|
SelectBox.filter(field_id + '_to', document.getElementById(field_id + "_selected_input").value);
|
||||||
|
},
|
||||||
refresh_icons: function(field_id) {
|
refresh_icons: function(field_id) {
|
||||||
const from = document.getElementById(field_id + '_from');
|
const from = document.getElementById(field_id + '_from');
|
||||||
const to = document.getElementById(field_id + '_to');
|
const to = document.getElementById(field_id + '_to');
|
||||||
// Active if at least one item is selected
|
// Disabled if no items are selected.
|
||||||
document.getElementById(field_id + '_add_link').classList.toggle('active', SelectFilter.any_selected(from));
|
document.getElementById(field_id + '_add').disabled = !SelectFilter.any_selected(from);
|
||||||
document.getElementById(field_id + '_remove_link').classList.toggle('active', SelectFilter.any_selected(to));
|
document.getElementById(field_id + '_remove').disabled = !SelectFilter.any_selected(to);
|
||||||
// Active if the corresponding box isn't empty
|
// Disabled if the corresponding box is empty.
|
||||||
document.getElementById(field_id + '_add_all_link').classList.toggle('active', from.querySelector('option'));
|
document.getElementById(field_id + '_add_all').disabled = !from.querySelector('option');
|
||||||
document.getElementById(field_id + '_remove_all_link').classList.toggle('active', to.querySelector('option'));
|
document.getElementById(field_id + '_remove_all').disabled = !to.querySelector('option');
|
||||||
},
|
},
|
||||||
filter_key_press: function(event, field_id) {
|
filter_key_press: function(event, field_id, source, target) {
|
||||||
const from = document.getElementById(field_id + '_from');
|
const source_box = document.getElementById(field_id + source);
|
||||||
// don't submit form if user pressed Enter
|
// don't submit form if user pressed Enter
|
||||||
if ((event.which && event.which === 13) || (event.keyCode && event.keyCode === 13)) {
|
if ((event.which && event.which === 13) || (event.keyCode && event.keyCode === 13)) {
|
||||||
from.selectedIndex = 0;
|
source_box.selectedIndex = 0;
|
||||||
SelectBox.move(field_id + '_from', field_id + '_to');
|
SelectBox.move(field_id + source, field_id + target);
|
||||||
from.selectedIndex = 0;
|
source_box.selectedIndex = 0;
|
||||||
event.preventDefault();
|
event.preventDefault();
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
filter_key_up: function(event, field_id) {
|
filter_key_up: function(event, field_id, source, filter_input) {
|
||||||
const from = document.getElementById(field_id + '_from');
|
const input = filter_input || '_input';
|
||||||
const temp = from.selectedIndex;
|
const source_box = document.getElementById(field_id + source);
|
||||||
SelectBox.filter(field_id + '_from', document.getElementById(field_id + '_input').value);
|
const temp = source_box.selectedIndex;
|
||||||
from.selectedIndex = temp;
|
SelectBox.filter(field_id + source, document.getElementById(field_id + input).value);
|
||||||
|
source_box.selectedIndex = temp;
|
||||||
|
SelectFilter.refresh_filtered_warning(field_id);
|
||||||
|
SelectFilter.refresh_icons(field_id);
|
||||||
},
|
},
|
||||||
filter_key_down: function(event, field_id) {
|
filter_key_down: function(event, field_id, source, target) {
|
||||||
const from = document.getElementById(field_id + '_from');
|
const source_box = document.getElementById(field_id + source);
|
||||||
|
// right key (39) or left key (37)
|
||||||
|
const direction = source === '_from' ? 39 : 37;
|
||||||
// right arrow -- move across
|
// right arrow -- move across
|
||||||
if ((event.which && event.which === 39) || (event.keyCode && event.keyCode === 39)) {
|
if ((event.which && event.which === direction) || (event.keyCode && event.keyCode === direction)) {
|
||||||
const old_index = from.selectedIndex;
|
const old_index = source_box.selectedIndex;
|
||||||
SelectBox.move(field_id + '_from', field_id + '_to');
|
SelectBox.move(field_id + source, field_id + target);
|
||||||
from.selectedIndex = (old_index === from.length) ? from.length - 1 : old_index;
|
SelectFilter.refresh_filtered_selects(field_id);
|
||||||
|
SelectFilter.refresh_filtered_warning(field_id);
|
||||||
|
source_box.selectedIndex = (old_index === source_box.length) ? source_box.length - 1 : old_index;
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
// down arrow -- wrap around
|
// down arrow -- wrap around
|
||||||
if ((event.which && event.which === 40) || (event.keyCode && event.keyCode === 40)) {
|
if ((event.which && event.which === 40) || (event.keyCode && event.keyCode === 40)) {
|
||||||
from.selectedIndex = (from.length === from.selectedIndex + 1) ? 0 : from.selectedIndex + 1;
|
source_box.selectedIndex = (source_box.length === source_box.selectedIndex + 1) ? 0 : source_box.selectedIndex + 1;
|
||||||
}
|
}
|
||||||
// up arrow -- wrap around
|
// up arrow -- wrap around
|
||||||
if ((event.which && event.which === 38) || (event.keyCode && event.keyCode === 38)) {
|
if ((event.which && event.which === 38) || (event.keyCode && event.keyCode === 38)) {
|
||||||
from.selectedIndex = (from.selectedIndex === 0) ? from.length - 1 : from.selectedIndex - 1;
|
source_box.selectedIndex = (source_box.selectedIndex === 0) ? source_box.length - 1 : source_box.selectedIndex - 1;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
/*global gettext, interpolate, ngettext*/
|
/*global gettext, interpolate, ngettext, Actions*/
|
||||||
'use strict';
|
'use strict';
|
||||||
{
|
{
|
||||||
function show(selector) {
|
function show(selector) {
|
||||||
@@ -179,6 +179,9 @@
|
|||||||
}
|
}
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
// Sync counter when navigating to the page, such as through the back
|
||||||
|
// button.
|
||||||
|
window.addEventListener('pageshow', (event) => updateCounter(actionCheckboxes, options));
|
||||||
};
|
};
|
||||||
|
|
||||||
// Call function fn when the DOM is loaded and ready. If it is already
|
// Call function fn when the DOM is loaded and ready. If it is already
|
||||||
|
|||||||
@@ -90,10 +90,9 @@
|
|||||||
}
|
}
|
||||||
message = interpolate(message, [timezoneOffset]);
|
message = interpolate(message, [timezoneOffset]);
|
||||||
|
|
||||||
const warning = document.createElement('span');
|
const warning = document.createElement('div');
|
||||||
warning.className = warningClass;
|
warning.classList.add('help', warningClass);
|
||||||
warning.textContent = message;
|
warning.textContent = message;
|
||||||
inp.parentNode.appendChild(document.createElement('br'));
|
|
||||||
inp.parentNode.appendChild(warning);
|
inp.parentNode.appendChild(warning);
|
||||||
},
|
},
|
||||||
// Add clock widget to a given field
|
// Add clock widget to a given field
|
||||||
@@ -388,13 +387,7 @@
|
|||||||
DateTimeShortcuts.calendars[num].drawNextMonth();
|
DateTimeShortcuts.calendars[num].drawNextMonth();
|
||||||
},
|
},
|
||||||
handleCalendarCallback: function(num) {
|
handleCalendarCallback: function(num) {
|
||||||
let format = get_format('DATE_INPUT_FORMATS')[0];
|
const format = get_format('DATE_INPUT_FORMATS')[0];
|
||||||
// the format needs to be escaped a little
|
|
||||||
format = format.replace('\\', '\\\\')
|
|
||||||
.replace('\r', '\\r')
|
|
||||||
.replace('\n', '\\n')
|
|
||||||
.replace('\t', '\\t')
|
|
||||||
.replace("'", "\\'");
|
|
||||||
return function(y, m, d) {
|
return function(y, m, d) {
|
||||||
DateTimeShortcuts.calendarInputs[num].value = new Date(y, m - 1, d).strftime(format);
|
DateTimeShortcuts.calendarInputs[num].value = new Date(y, m - 1, d).strftime(format);
|
||||||
DateTimeShortcuts.calendarInputs[num].focus();
|
DateTimeShortcuts.calendarInputs[num].focus();
|
||||||
|
|||||||
@@ -4,14 +4,43 @@
|
|||||||
'use strict';
|
'use strict';
|
||||||
{
|
{
|
||||||
const $ = django.jQuery;
|
const $ = django.jQuery;
|
||||||
|
let popupIndex = 0;
|
||||||
|
const relatedWindows = [];
|
||||||
|
|
||||||
|
function dismissChildPopups() {
|
||||||
|
relatedWindows.forEach(function(win) {
|
||||||
|
if(!win.closed) {
|
||||||
|
win.dismissChildPopups();
|
||||||
|
win.close();
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
function setPopupIndex() {
|
||||||
|
if(document.getElementsByName("_popup").length > 0) {
|
||||||
|
const index = window.name.lastIndexOf("__") + 2;
|
||||||
|
popupIndex = parseInt(window.name.substring(index));
|
||||||
|
} else {
|
||||||
|
popupIndex = 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
function addPopupIndex(name) {
|
||||||
|
return name + "__" + (popupIndex + 1);
|
||||||
|
}
|
||||||
|
|
||||||
|
function removePopupIndex(name) {
|
||||||
|
return name.replace(new RegExp("__" + (popupIndex + 1) + "$"), '');
|
||||||
|
}
|
||||||
|
|
||||||
function showAdminPopup(triggeringLink, name_regexp, add_popup) {
|
function showAdminPopup(triggeringLink, name_regexp, add_popup) {
|
||||||
const name = triggeringLink.id.replace(name_regexp, '');
|
const name = addPopupIndex(triggeringLink.id.replace(name_regexp, ''));
|
||||||
const href = new URL(triggeringLink.href);
|
const href = new URL(triggeringLink.href);
|
||||||
if (add_popup) {
|
if (add_popup) {
|
||||||
href.searchParams.set('_popup', 1);
|
href.searchParams.set('_popup', 1);
|
||||||
}
|
}
|
||||||
const win = window.open(href, name, 'height=500,width=800,resizable=yes,scrollbars=yes');
|
const win = window.open(href, name, 'height=500,width=800,resizable=yes,scrollbars=yes');
|
||||||
|
relatedWindows.push(win);
|
||||||
win.focus();
|
win.focus();
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
@@ -21,12 +50,17 @@
|
|||||||
}
|
}
|
||||||
|
|
||||||
function dismissRelatedLookupPopup(win, chosenId) {
|
function dismissRelatedLookupPopup(win, chosenId) {
|
||||||
const name = win.name;
|
const name = removePopupIndex(win.name);
|
||||||
const elem = document.getElementById(name);
|
const elem = document.getElementById(name);
|
||||||
if (elem.classList.contains('vManyToManyRawIdAdminField') && elem.value) {
|
if (elem.classList.contains('vManyToManyRawIdAdminField') && elem.value) {
|
||||||
elem.value += ',' + chosenId;
|
elem.value += ',' + chosenId;
|
||||||
} else {
|
} else {
|
||||||
document.getElementById(name).value = chosenId;
|
elem.value = chosenId;
|
||||||
|
}
|
||||||
|
$(elem).trigger('change');
|
||||||
|
const index = relatedWindows.indexOf(win);
|
||||||
|
if (index > -1) {
|
||||||
|
relatedWindows.splice(index, 1);
|
||||||
}
|
}
|
||||||
win.close();
|
win.close();
|
||||||
}
|
}
|
||||||
@@ -46,19 +80,57 @@
|
|||||||
siblings.each(function() {
|
siblings.each(function() {
|
||||||
const elm = $(this);
|
const elm = $(this);
|
||||||
elm.attr('href', elm.attr('data-href-template').replace('__fk__', value));
|
elm.attr('href', elm.attr('data-href-template').replace('__fk__', value));
|
||||||
|
elm.removeAttr('aria-disabled');
|
||||||
});
|
});
|
||||||
} else {
|
} else {
|
||||||
siblings.removeAttr('href');
|
siblings.removeAttr('href');
|
||||||
|
siblings.attr('aria-disabled', true);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function updateRelatedSelectsOptions(currentSelect, win, objId, newRepr, newId, skipIds = []) {
|
||||||
|
// After create/edit a model from the options next to the current
|
||||||
|
// select (+ or :pencil:) update ForeignKey PK of the rest of selects
|
||||||
|
// in the page.
|
||||||
|
|
||||||
|
const path = win.location.pathname;
|
||||||
|
// Extract the model from the popup url '.../<model>/add/' or
|
||||||
|
// '.../<model>/<id>/change/' depending the action (add or change).
|
||||||
|
const modelName = path.split('/')[path.split('/').length - (objId ? 4 : 3)];
|
||||||
|
// Select elements with a specific model reference and context of "available-source".
|
||||||
|
const selectsRelated = document.querySelectorAll(`[data-model-ref="${modelName}"] [data-context="available-source"]`);
|
||||||
|
|
||||||
|
selectsRelated.forEach(function(select) {
|
||||||
|
if (currentSelect === select || skipIds && skipIds.includes(select.id)) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
let option = select.querySelector(`option[value="${objId}"]`);
|
||||||
|
|
||||||
|
if (!option) {
|
||||||
|
option = new Option(newRepr, newId);
|
||||||
|
select.options.add(option);
|
||||||
|
// Update SelectBox cache for related fields.
|
||||||
|
if (window.SelectBox !== undefined && !SelectBox.cache[currentSelect.id]) {
|
||||||
|
SelectBox.add_to_cache(select.id, option);
|
||||||
|
SelectBox.redisplay(select.id);
|
||||||
|
}
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
option.textContent = newRepr;
|
||||||
|
option.value = newId;
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
function dismissAddRelatedObjectPopup(win, newId, newRepr) {
|
function dismissAddRelatedObjectPopup(win, newId, newRepr) {
|
||||||
const name = win.name;
|
const name = removePopupIndex(win.name);
|
||||||
const elem = document.getElementById(name);
|
const elem = document.getElementById(name);
|
||||||
if (elem) {
|
if (elem) {
|
||||||
const elemName = elem.nodeName.toUpperCase();
|
const elemName = elem.nodeName.toUpperCase();
|
||||||
if (elemName === 'SELECT') {
|
if (elemName === 'SELECT') {
|
||||||
elem.options[elem.options.length] = new Option(newRepr, newId, true, true);
|
elem.options[elem.options.length] = new Option(newRepr, newId, true, true);
|
||||||
|
updateRelatedSelectsOptions(elem, win, null, newRepr, newId);
|
||||||
} else if (elemName === 'INPUT') {
|
} else if (elemName === 'INPUT') {
|
||||||
if (elem.classList.contains('vManyToManyRawIdAdminField') && elem.value) {
|
if (elem.classList.contains('vManyToManyRawIdAdminField') && elem.value) {
|
||||||
elem.value += ',' + newId;
|
elem.value += ',' + newId;
|
||||||
@@ -70,15 +142,24 @@
|
|||||||
$(elem).trigger('change');
|
$(elem).trigger('change');
|
||||||
} else {
|
} else {
|
||||||
const toId = name + "_to";
|
const toId = name + "_to";
|
||||||
|
const toElem = document.getElementById(toId);
|
||||||
const o = new Option(newRepr, newId);
|
const o = new Option(newRepr, newId);
|
||||||
SelectBox.add_to_cache(toId, o);
|
SelectBox.add_to_cache(toId, o);
|
||||||
SelectBox.redisplay(toId);
|
SelectBox.redisplay(toId);
|
||||||
|
if (toElem && toElem.nodeName.toUpperCase() === 'SELECT') {
|
||||||
|
const skipIds = [name + "_from"];
|
||||||
|
updateRelatedSelectsOptions(toElem, win, null, newRepr, newId, skipIds);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
const index = relatedWindows.indexOf(win);
|
||||||
|
if (index > -1) {
|
||||||
|
relatedWindows.splice(index, 1);
|
||||||
}
|
}
|
||||||
win.close();
|
win.close();
|
||||||
}
|
}
|
||||||
|
|
||||||
function dismissChangeRelatedObjectPopup(win, objId, newRepr, newId) {
|
function dismissChangeRelatedObjectPopup(win, objId, newRepr, newId) {
|
||||||
const id = win.name.replace(/^edit_/, '');
|
const id = removePopupIndex(win.name.replace(/^edit_/, ''));
|
||||||
const selectsSelector = interpolate('#%s, #%s_from, #%s_to', [id, id, id]);
|
const selectsSelector = interpolate('#%s, #%s_from, #%s_to', [id, id, id]);
|
||||||
const selects = $(selectsSelector);
|
const selects = $(selectsSelector);
|
||||||
selects.find('option').each(function() {
|
selects.find('option').each(function() {
|
||||||
@@ -86,18 +167,23 @@
|
|||||||
this.textContent = newRepr;
|
this.textContent = newRepr;
|
||||||
this.value = newId;
|
this.value = newId;
|
||||||
}
|
}
|
||||||
});
|
}).trigger('change');
|
||||||
|
updateRelatedSelectsOptions(selects[0], win, objId, newRepr, newId);
|
||||||
selects.next().find('.select2-selection__rendered').each(function() {
|
selects.next().find('.select2-selection__rendered').each(function() {
|
||||||
// The element can have a clear button as a child.
|
// The element can have a clear button as a child.
|
||||||
// Use the lastChild to modify only the displayed value.
|
// Use the lastChild to modify only the displayed value.
|
||||||
this.lastChild.textContent = newRepr;
|
this.lastChild.textContent = newRepr;
|
||||||
this.title = newRepr;
|
this.title = newRepr;
|
||||||
});
|
});
|
||||||
|
const index = relatedWindows.indexOf(win);
|
||||||
|
if (index > -1) {
|
||||||
|
relatedWindows.splice(index, 1);
|
||||||
|
}
|
||||||
win.close();
|
win.close();
|
||||||
}
|
}
|
||||||
|
|
||||||
function dismissDeleteRelatedObjectPopup(win, objId) {
|
function dismissDeleteRelatedObjectPopup(win, objId) {
|
||||||
const id = win.name.replace(/^delete_/, '');
|
const id = removePopupIndex(win.name.replace(/^delete_/, ''));
|
||||||
const selectsSelector = interpolate('#%s, #%s_from, #%s_to', [id, id, id]);
|
const selectsSelector = interpolate('#%s, #%s_from, #%s_to', [id, id, id]);
|
||||||
const selects = $(selectsSelector);
|
const selects = $(selectsSelector);
|
||||||
selects.find('option').each(function() {
|
selects.find('option').each(function() {
|
||||||
@@ -105,6 +191,10 @@
|
|||||||
$(this).remove();
|
$(this).remove();
|
||||||
}
|
}
|
||||||
}).trigger('change');
|
}).trigger('change');
|
||||||
|
const index = relatedWindows.indexOf(win);
|
||||||
|
if (index > -1) {
|
||||||
|
relatedWindows.splice(index, 1);
|
||||||
|
}
|
||||||
win.close();
|
win.close();
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -115,17 +205,24 @@
|
|||||||
window.dismissAddRelatedObjectPopup = dismissAddRelatedObjectPopup;
|
window.dismissAddRelatedObjectPopup = dismissAddRelatedObjectPopup;
|
||||||
window.dismissChangeRelatedObjectPopup = dismissChangeRelatedObjectPopup;
|
window.dismissChangeRelatedObjectPopup = dismissChangeRelatedObjectPopup;
|
||||||
window.dismissDeleteRelatedObjectPopup = dismissDeleteRelatedObjectPopup;
|
window.dismissDeleteRelatedObjectPopup = dismissDeleteRelatedObjectPopup;
|
||||||
|
window.dismissChildPopups = dismissChildPopups;
|
||||||
|
window.relatedWindows = relatedWindows;
|
||||||
|
|
||||||
// Kept for backward compatibility
|
// Kept for backward compatibility
|
||||||
window.showAddAnotherPopup = showRelatedObjectPopup;
|
window.showAddAnotherPopup = showRelatedObjectPopup;
|
||||||
window.dismissAddAnotherPopup = dismissAddRelatedObjectPopup;
|
window.dismissAddAnotherPopup = dismissAddRelatedObjectPopup;
|
||||||
|
|
||||||
|
window.addEventListener('unload', function(evt) {
|
||||||
|
window.dismissChildPopups();
|
||||||
|
});
|
||||||
|
|
||||||
$(document).ready(function() {
|
$(document).ready(function() {
|
||||||
|
setPopupIndex();
|
||||||
$("a[data-popup-opener]").on('click', function(event) {
|
$("a[data-popup-opener]").on('click', function(event) {
|
||||||
event.preventDefault();
|
event.preventDefault();
|
||||||
opener.dismissRelatedLookupPopup(window, $(this).data("popup-opener"));
|
opener.dismissRelatedLookupPopup(window, $(this).data("popup-opener"));
|
||||||
});
|
});
|
||||||
$('body').on('click', '.related-widget-wrapper-link', function(e) {
|
$('body').on('click', '.related-widget-wrapper-link[data-popup="yes"]', function(e) {
|
||||||
e.preventDefault();
|
e.preventDefault();
|
||||||
if (this.href) {
|
if (this.href) {
|
||||||
const event = $.Event('django:show-related', {href: this.href});
|
const event = $.Event('django:show-related', {href: this.href});
|
||||||
|
|||||||
@@ -27,9 +27,7 @@
|
|||||||
$('.admin-autocomplete').not('[name*=__prefix__]').djangoAdminSelect2();
|
$('.admin-autocomplete').not('[name*=__prefix__]').djangoAdminSelect2();
|
||||||
});
|
});
|
||||||
|
|
||||||
$(document).on('formset:added', (function() {
|
document.addEventListener('formset:added', (event) => {
|
||||||
return function(event, $newFormset) {
|
$(event.target).find('.admin-autocomplete').djangoAdminSelect2();
|
||||||
return $newFormset.find('.admin-autocomplete').djangoAdminSelect2();
|
});
|
||||||
};
|
|
||||||
})(this));
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -36,6 +36,24 @@ depends on core.js for utility functions like removeChildren or quickElement
|
|||||||
pgettext('abbrev. month December', 'Dec')
|
pgettext('abbrev. month December', 'Dec')
|
||||||
],
|
],
|
||||||
daysOfWeek: [
|
daysOfWeek: [
|
||||||
|
gettext('Sunday'),
|
||||||
|
gettext('Monday'),
|
||||||
|
gettext('Tuesday'),
|
||||||
|
gettext('Wednesday'),
|
||||||
|
gettext('Thursday'),
|
||||||
|
gettext('Friday'),
|
||||||
|
gettext('Saturday')
|
||||||
|
],
|
||||||
|
daysOfWeekAbbrev: [
|
||||||
|
pgettext('abbrev. day Sunday', 'Sun'),
|
||||||
|
pgettext('abbrev. day Monday', 'Mon'),
|
||||||
|
pgettext('abbrev. day Tuesday', 'Tue'),
|
||||||
|
pgettext('abbrev. day Wednesday', 'Wed'),
|
||||||
|
pgettext('abbrev. day Thursday', 'Thur'),
|
||||||
|
pgettext('abbrev. day Friday', 'Fri'),
|
||||||
|
pgettext('abbrev. day Saturday', 'Sat')
|
||||||
|
],
|
||||||
|
daysOfWeekInitial: [
|
||||||
pgettext('one letter Sunday', 'S'),
|
pgettext('one letter Sunday', 'S'),
|
||||||
pgettext('one letter Monday', 'M'),
|
pgettext('one letter Monday', 'M'),
|
||||||
pgettext('one letter Tuesday', 'T'),
|
pgettext('one letter Tuesday', 'T'),
|
||||||
@@ -98,7 +116,7 @@ depends on core.js for utility functions like removeChildren or quickElement
|
|||||||
// Draw days-of-week header
|
// Draw days-of-week header
|
||||||
let tableRow = quickElement('tr', tableBody);
|
let tableRow = quickElement('tr', tableBody);
|
||||||
for (let i = 0; i < 7; i++) {
|
for (let i = 0; i < 7; i++) {
|
||||||
quickElement('th', tableRow, CalendarNamespace.daysOfWeek[(i + CalendarNamespace.firstDayOfWeek) % 7]);
|
quickElement('th', tableRow, CalendarNamespace.daysOfWeekInitial[(i + CalendarNamespace.firstDayOfWeek) % 7]);
|
||||||
}
|
}
|
||||||
|
|
||||||
const startingPos = new Date(year, month - 1, 1 - CalendarNamespace.firstDayOfWeek).getDay();
|
const startingPos = new Date(year, month - 1, 1 - CalendarNamespace.firstDayOfWeek).getDay();
|
||||||
|
|||||||
@@ -1,43 +0,0 @@
|
|||||||
/*global gettext*/
|
|
||||||
'use strict';
|
|
||||||
{
|
|
||||||
window.addEventListener('load', function() {
|
|
||||||
// Add anchor tag for Show/Hide link
|
|
||||||
const fieldsets = document.querySelectorAll('fieldset.collapse');
|
|
||||||
for (const [i, elem] of fieldsets.entries()) {
|
|
||||||
// Don't hide if fields in this fieldset have errors
|
|
||||||
if (elem.querySelectorAll('div.errors, ul.errorlist').length === 0) {
|
|
||||||
elem.classList.add('collapsed');
|
|
||||||
const h2 = elem.querySelector('h2');
|
|
||||||
const link = document.createElement('a');
|
|
||||||
link.id = 'fieldsetcollapser' + i;
|
|
||||||
link.className = 'collapse-toggle';
|
|
||||||
link.href = '#';
|
|
||||||
link.textContent = gettext('Show');
|
|
||||||
h2.appendChild(document.createTextNode(' ('));
|
|
||||||
h2.appendChild(link);
|
|
||||||
h2.appendChild(document.createTextNode(')'));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
// Add toggle to hide/show anchor tag
|
|
||||||
const toggleFunc = function(ev) {
|
|
||||||
if (ev.target.matches('.collapse-toggle')) {
|
|
||||||
ev.preventDefault();
|
|
||||||
ev.stopPropagation();
|
|
||||||
const fieldset = ev.target.closest('fieldset');
|
|
||||||
if (fieldset.classList.contains('collapsed')) {
|
|
||||||
// Show
|
|
||||||
ev.target.textContent = gettext('Hide');
|
|
||||||
fieldset.classList.remove('collapsed');
|
|
||||||
} else {
|
|
||||||
// Hide
|
|
||||||
ev.target.textContent = gettext('Show');
|
|
||||||
fieldset.classList.add('collapsed');
|
|
||||||
}
|
|
||||||
}
|
|
||||||
};
|
|
||||||
document.querySelectorAll('fieldset.module').forEach(function(el) {
|
|
||||||
el.addEventListener('click', toggleFunc);
|
|
||||||
});
|
|
||||||
});
|
|
||||||
}
|
|
||||||
@@ -85,6 +85,18 @@ function findPosY(obj) {
|
|||||||
return (this.getSeconds() < 10) ? '0' + this.getSeconds() : this.getSeconds();
|
return (this.getSeconds() < 10) ? '0' + this.getSeconds() : this.getSeconds();
|
||||||
};
|
};
|
||||||
|
|
||||||
|
Date.prototype.getAbbrevDayName = function() {
|
||||||
|
return typeof window.CalendarNamespace === "undefined"
|
||||||
|
? '0' + this.getDay()
|
||||||
|
: window.CalendarNamespace.daysOfWeekAbbrev[this.getDay()];
|
||||||
|
};
|
||||||
|
|
||||||
|
Date.prototype.getFullDayName = function() {
|
||||||
|
return typeof window.CalendarNamespace === "undefined"
|
||||||
|
? '0' + this.getDay()
|
||||||
|
: window.CalendarNamespace.daysOfWeek[this.getDay()];
|
||||||
|
};
|
||||||
|
|
||||||
Date.prototype.getAbbrevMonthName = function() {
|
Date.prototype.getAbbrevMonthName = function() {
|
||||||
return typeof window.CalendarNamespace === "undefined"
|
return typeof window.CalendarNamespace === "undefined"
|
||||||
? this.getTwoDigitMonth()
|
? this.getTwoDigitMonth()
|
||||||
@@ -99,6 +111,8 @@ function findPosY(obj) {
|
|||||||
|
|
||||||
Date.prototype.strftime = function(format) {
|
Date.prototype.strftime = function(format) {
|
||||||
const fields = {
|
const fields = {
|
||||||
|
a: this.getAbbrevDayName(),
|
||||||
|
A: this.getFullDayName(),
|
||||||
b: this.getAbbrevMonthName(),
|
b: this.getAbbrevMonthName(),
|
||||||
B: this.getFullMonthName(),
|
B: this.getFullMonthName(),
|
||||||
c: this.toString(),
|
c: this.toString(),
|
||||||
@@ -119,11 +133,11 @@ function findPosY(obj) {
|
|||||||
let result = '', i = 0;
|
let result = '', i = 0;
|
||||||
while (i < format.length) {
|
while (i < format.length) {
|
||||||
if (format.charAt(i) === '%') {
|
if (format.charAt(i) === '%') {
|
||||||
result = result + fields[format.charAt(i + 1)];
|
result += fields[format.charAt(i + 1)];
|
||||||
++i;
|
++i;
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
result = result + format.charAt(i);
|
result += format.charAt(i);
|
||||||
}
|
}
|
||||||
++i;
|
++i;
|
||||||
}
|
}
|
||||||
|
|||||||
30
assets/admin/js/filters.js
Normal file
@@ -0,0 +1,30 @@
|
|||||||
|
/**
|
||||||
|
* Persist changelist filters state (collapsed/expanded).
|
||||||
|
*/
|
||||||
|
'use strict';
|
||||||
|
{
|
||||||
|
// Init filters.
|
||||||
|
let filters = JSON.parse(sessionStorage.getItem('django.admin.filtersState'));
|
||||||
|
|
||||||
|
if (!filters) {
|
||||||
|
filters = {};
|
||||||
|
}
|
||||||
|
|
||||||
|
Object.entries(filters).forEach(([key, value]) => {
|
||||||
|
const detailElement = document.querySelector(`[data-filter-title='${CSS.escape(key)}']`);
|
||||||
|
|
||||||
|
// Check if the filter is present, it could be from other view.
|
||||||
|
if (detailElement) {
|
||||||
|
value ? detailElement.setAttribute('open', '') : detailElement.removeAttribute('open');
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
// Save filter state when clicks.
|
||||||
|
const details = document.querySelectorAll('details');
|
||||||
|
details.forEach(detail => {
|
||||||
|
detail.addEventListener('toggle', event => {
|
||||||
|
filters[`${event.target.dataset.filterTitle}`] = detail.open;
|
||||||
|
sessionStorage.setItem('django.admin.filtersState', JSON.stringify(filters));
|
||||||
|
});
|
||||||
|
});
|
||||||
|
}
|
||||||
@@ -50,11 +50,11 @@
|
|||||||
// If forms are laid out as table rows, insert the
|
// If forms are laid out as table rows, insert the
|
||||||
// "add" button in a new table row:
|
// "add" button in a new table row:
|
||||||
const numCols = $this.eq(-1).children().length;
|
const numCols = $this.eq(-1).children().length;
|
||||||
$parent.append('<tr class="' + options.addCssClass + '"><td colspan="' + numCols + '"><a href="#">' + options.addText + "</a></tr>");
|
$parent.append('<tr class="' + options.addCssClass + '"><td colspan="' + numCols + '"><a role="button" class="addlink" href="#">' + options.addText + "</a></tr>");
|
||||||
addButton = $parent.find("tr:last a");
|
addButton = $parent.find("tr:last a");
|
||||||
} else {
|
} else {
|
||||||
// Otherwise, insert it immediately after the last form:
|
// Otherwise, insert it immediately after the last form:
|
||||||
$this.filter(":last").after('<div class="' + options.addCssClass + '"><a href="#">' + options.addText + "</a></div>");
|
$this.filter(":last").after('<div class="' + options.addCssClass + '"><a role="button" class="addlink" href="#">' + options.addText + "</a></div>");
|
||||||
addButton = $this.filter(":last").next().find("a");
|
addButton = $this.filter(":last").next().find("a");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -88,7 +88,12 @@
|
|||||||
if (options.added) {
|
if (options.added) {
|
||||||
options.added(row);
|
options.added(row);
|
||||||
}
|
}
|
||||||
$(document).trigger('formset:added', [row, options.prefix]);
|
row.get(0).dispatchEvent(new CustomEvent("formset:added", {
|
||||||
|
bubbles: true,
|
||||||
|
detail: {
|
||||||
|
formsetName: options.prefix
|
||||||
|
}
|
||||||
|
}));
|
||||||
};
|
};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -99,15 +104,15 @@
|
|||||||
if (row.is("tr")) {
|
if (row.is("tr")) {
|
||||||
// If the forms are laid out in table rows, insert
|
// If the forms are laid out in table rows, insert
|
||||||
// the remove button into the last table cell:
|
// the remove button into the last table cell:
|
||||||
row.children(":last").append('<div><a class="' + options.deleteCssClass + '" href="#">' + options.deleteText + "</a></div>");
|
row.children(":last").append('<div><a role="button" class="' + options.deleteCssClass + '" href="#">' + options.deleteText + "</a></div>");
|
||||||
} else if (row.is("ul") || row.is("ol")) {
|
} else if (row.is("ul") || row.is("ol")) {
|
||||||
// If they're laid out as an ordered/unordered list,
|
// If they're laid out as an ordered/unordered list,
|
||||||
// insert an <li> after the last list item:
|
// insert an <li> after the last list item:
|
||||||
row.append('<li><a class="' + options.deleteCssClass + '" href="#">' + options.deleteText + "</a></li>");
|
row.append('<li><a role="button" class="' + options.deleteCssClass + '" href="#">' + options.deleteText + "</a></li>");
|
||||||
} else {
|
} else {
|
||||||
// Otherwise, just insert the remove button as the
|
// Otherwise, just insert the remove button as the
|
||||||
// last child element of the form's container:
|
// last child element of the form's container:
|
||||||
row.children(":first").append('<span><a class="' + options.deleteCssClass + '" href="#">' + options.deleteText + "</a></span>");
|
row.children(":first").append('<span><a role="button" class="' + options.deleteCssClass + '" href="#">' + options.deleteText + "</a></span>");
|
||||||
}
|
}
|
||||||
// Add delete handler for each row.
|
// Add delete handler for each row.
|
||||||
row.find("a." + options.deleteCssClass).on('click', inlineDeleteHandler.bind(this));
|
row.find("a." + options.deleteCssClass).on('click', inlineDeleteHandler.bind(this));
|
||||||
@@ -130,7 +135,11 @@
|
|||||||
if (options.removed) {
|
if (options.removed) {
|
||||||
options.removed(row);
|
options.removed(row);
|
||||||
}
|
}
|
||||||
$(document).trigger('formset:removed', [row, options.prefix]);
|
document.dispatchEvent(new CustomEvent("formset:removed", {
|
||||||
|
detail: {
|
||||||
|
formsetName: options.prefix
|
||||||
|
}
|
||||||
|
}));
|
||||||
// Update the TOTAL_FORMS form count.
|
// Update the TOTAL_FORMS form count.
|
||||||
const forms = $("." + options.formCssClass);
|
const forms = $("." + options.formCssClass);
|
||||||
$("#id_" + options.prefix + "-TOTAL_FORMS").val(forms.length);
|
$("#id_" + options.prefix + "-TOTAL_FORMS").val(forms.length);
|
||||||
@@ -296,7 +305,13 @@
|
|||||||
dependency_list = input.data('dependency_list') || [],
|
dependency_list = input.data('dependency_list') || [],
|
||||||
dependencies = [];
|
dependencies = [];
|
||||||
$.each(dependency_list, function(i, field_name) {
|
$.each(dependency_list, function(i, field_name) {
|
||||||
dependencies.push('#' + row.find('.form-row .field-' + field_name).find('input, select, textarea').attr('id'));
|
// Dependency in a fieldset.
|
||||||
|
let field_element = row.find('.form-row .field-' + field_name);
|
||||||
|
// Dependency without a fieldset.
|
||||||
|
if (!field_element.length) {
|
||||||
|
field_element = row.find('.form-row.field-' + field_name);
|
||||||
|
}
|
||||||
|
dependencies.push('#' + field_element.find('input, select, textarea').attr('id'));
|
||||||
});
|
});
|
||||||
if (dependencies.length) {
|
if (dependencies.length) {
|
||||||
input.prepopulate(dependencies, input.attr('maxlength'));
|
input.prepopulate(dependencies, input.attr('maxlength'));
|
||||||
|
|||||||
@@ -2,47 +2,24 @@
|
|||||||
{
|
{
|
||||||
const toggleNavSidebar = document.getElementById('toggle-nav-sidebar');
|
const toggleNavSidebar = document.getElementById('toggle-nav-sidebar');
|
||||||
if (toggleNavSidebar !== null) {
|
if (toggleNavSidebar !== null) {
|
||||||
const navLinks = document.querySelectorAll('#nav-sidebar a');
|
const navSidebar = document.getElementById('nav-sidebar');
|
||||||
function disableNavLinkTabbing() {
|
|
||||||
for (const navLink of navLinks) {
|
|
||||||
navLink.tabIndex = -1;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
function enableNavLinkTabbing() {
|
|
||||||
for (const navLink of navLinks) {
|
|
||||||
navLink.tabIndex = 0;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
function disableNavFilterTabbing() {
|
|
||||||
document.getElementById('nav-filter').tabIndex = -1;
|
|
||||||
}
|
|
||||||
function enableNavFilterTabbing() {
|
|
||||||
document.getElementById('nav-filter').tabIndex = 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
const main = document.getElementById('main');
|
const main = document.getElementById('main');
|
||||||
let navSidebarIsOpen = localStorage.getItem('django.admin.navSidebarIsOpen');
|
let navSidebarIsOpen = localStorage.getItem('django.admin.navSidebarIsOpen');
|
||||||
if (navSidebarIsOpen === null) {
|
if (navSidebarIsOpen === null) {
|
||||||
navSidebarIsOpen = 'true';
|
navSidebarIsOpen = 'true';
|
||||||
}
|
}
|
||||||
if (navSidebarIsOpen === 'false') {
|
|
||||||
disableNavLinkTabbing();
|
|
||||||
disableNavFilterTabbing();
|
|
||||||
}
|
|
||||||
main.classList.toggle('shifted', navSidebarIsOpen === 'true');
|
main.classList.toggle('shifted', navSidebarIsOpen === 'true');
|
||||||
|
navSidebar.setAttribute('aria-expanded', navSidebarIsOpen);
|
||||||
|
|
||||||
toggleNavSidebar.addEventListener('click', function() {
|
toggleNavSidebar.addEventListener('click', function() {
|
||||||
if (navSidebarIsOpen === 'true') {
|
if (navSidebarIsOpen === 'true') {
|
||||||
navSidebarIsOpen = 'false';
|
navSidebarIsOpen = 'false';
|
||||||
disableNavLinkTabbing();
|
|
||||||
disableNavFilterTabbing();
|
|
||||||
} else {
|
} else {
|
||||||
navSidebarIsOpen = 'true';
|
navSidebarIsOpen = 'true';
|
||||||
enableNavLinkTabbing();
|
|
||||||
enableNavFilterTabbing();
|
|
||||||
}
|
}
|
||||||
localStorage.setItem('django.admin.navSidebarIsOpen', navSidebarIsOpen);
|
localStorage.setItem('django.admin.navSidebarIsOpen', navSidebarIsOpen);
|
||||||
main.classList.toggle('shifted');
|
main.classList.toggle('shifted');
|
||||||
|
navSidebar.setAttribute('aria-expanded', navSidebarIsOpen);
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -1,4 +1,3 @@
|
|||||||
/*global opener */
|
|
||||||
'use strict';
|
'use strict';
|
||||||
{
|
{
|
||||||
const initData = JSON.parse(document.getElementById('django-admin-popup-response-constants').dataset.popupResponse);
|
const initData = JSON.parse(document.getElementById('django-admin-popup-response-constants').dataset.popupResponse);
|
||||||
|
|||||||
@@ -3,7 +3,11 @@
|
|||||||
const $ = django.jQuery;
|
const $ = django.jQuery;
|
||||||
const fields = $('#django-admin-prepopulated-fields-constants').data('prepopulatedFields');
|
const fields = $('#django-admin-prepopulated-fields-constants').data('prepopulatedFields');
|
||||||
$.each(fields, function(index, field) {
|
$.each(fields, function(index, field) {
|
||||||
$('.empty-form .form-row .field-' + field.name + ', .empty-form.form-row .field-' + field.name).addClass('prepopulated_field');
|
$(
|
||||||
|
'.empty-form .form-row .field-' + field.name +
|
||||||
|
', .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.id).data('dependency_list', field.dependency_list).prepopulate(
|
||||||
field.dependency_ids, field.maxLength, field.allowUnicode
|
field.dependency_ids, field.maxLength, field.allowUnicode
|
||||||
);
|
);
|
||||||
|
|||||||
51
assets/admin/js/theme.js
Normal file
@@ -0,0 +1,51 @@
|
|||||||
|
'use strict';
|
||||||
|
{
|
||||||
|
function setTheme(mode) {
|
||||||
|
if (mode !== "light" && mode !== "dark" && mode !== "auto") {
|
||||||
|
console.error(`Got invalid theme mode: ${mode}. Resetting to auto.`);
|
||||||
|
mode = "auto";
|
||||||
|
}
|
||||||
|
document.documentElement.dataset.theme = mode;
|
||||||
|
localStorage.setItem("theme", mode);
|
||||||
|
}
|
||||||
|
|
||||||
|
function cycleTheme() {
|
||||||
|
const currentTheme = localStorage.getItem("theme") || "auto";
|
||||||
|
const prefersDark = window.matchMedia("(prefers-color-scheme: dark)").matches;
|
||||||
|
|
||||||
|
if (prefersDark) {
|
||||||
|
// Auto (dark) -> Light -> Dark
|
||||||
|
if (currentTheme === "auto") {
|
||||||
|
setTheme("light");
|
||||||
|
} else if (currentTheme === "light") {
|
||||||
|
setTheme("dark");
|
||||||
|
} else {
|
||||||
|
setTheme("auto");
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
// Auto (light) -> Dark -> Light
|
||||||
|
if (currentTheme === "auto") {
|
||||||
|
setTheme("dark");
|
||||||
|
} else if (currentTheme === "dark") {
|
||||||
|
setTheme("light");
|
||||||
|
} else {
|
||||||
|
setTheme("auto");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
function initTheme() {
|
||||||
|
// set theme defined in localStorage if there is one, or fallback to auto mode
|
||||||
|
const currentTheme = localStorage.getItem("theme");
|
||||||
|
currentTheme ? setTheme(currentTheme) : setTheme("auto");
|
||||||
|
}
|
||||||
|
|
||||||
|
window.addEventListener('load', function(_) {
|
||||||
|
const buttons = document.getElementsByClassName("theme-toggle");
|
||||||
|
Array.from(buttons).forEach((btn) => {
|
||||||
|
btn.addEventListener("click", cycleTheme);
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
|
initTheme();
|
||||||
|
}
|
||||||
29
assets/admin/js/unusable_password_field.js
Normal file
@@ -0,0 +1,29 @@
|
|||||||
|
"use strict";
|
||||||
|
// Fallback JS for browsers which do not support :has selector used in
|
||||||
|
// admin/css/unusable_password_fields.css
|
||||||
|
// Remove file once all supported browsers support :has selector
|
||||||
|
try {
|
||||||
|
// If browser does not support :has selector this will raise an error
|
||||||
|
document.querySelector("form:has(input)");
|
||||||
|
} catch (error) {
|
||||||
|
console.log("Defaulting to javascript for usable password form management: " + error);
|
||||||
|
// JS replacement for unsupported :has selector
|
||||||
|
document.querySelectorAll('input[name="usable_password"]').forEach(option => {
|
||||||
|
option.addEventListener('change', function() {
|
||||||
|
const usablePassword = (this.value === "true" ? this.checked : !this.checked);
|
||||||
|
const submit1 = document.querySelector('input[type="submit"].set-password');
|
||||||
|
const submit2 = document.querySelector('input[type="submit"].unset-password');
|
||||||
|
const messages = document.querySelector('#id_unusable_warning');
|
||||||
|
document.getElementById('id_password1').closest('.form-row').hidden = !usablePassword;
|
||||||
|
document.getElementById('id_password2').closest('.form-row').hidden = !usablePassword;
|
||||||
|
if (messages) {
|
||||||
|
messages.hidden = usablePassword;
|
||||||
|
}
|
||||||
|
if (submit1 && submit2) {
|
||||||
|
submit1.hidden = !usablePassword;
|
||||||
|
submit2.hidden = usablePassword;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
option.dispatchEvent(new Event('change'));
|
||||||
|
});
|
||||||
|
}
|
||||||
@@ -163,8 +163,7 @@
|
|||||||
s = s.replace(/^\s+|\s+$/g, ''); // trim leading/trailing spaces
|
s = s.replace(/^\s+|\s+$/g, ''); // trim leading/trailing spaces
|
||||||
s = s.replace(/[-\s]+/g, '-'); // convert spaces to hyphens
|
s = s.replace(/[-\s]+/g, '-'); // convert spaces to hyphens
|
||||||
s = s.substring(0, num_chars); // trim to first num_chars chars
|
s = s.substring(0, num_chars); // trim to first num_chars chars
|
||||||
s = s.replace(/-+$/g, ''); // trim any trailing hyphens
|
return s.replace(/-+$/g, ''); // trim any trailing hyphens
|
||||||
return s;
|
|
||||||
}
|
}
|
||||||
window.URLify = URLify;
|
window.URLify = URLify;
|
||||||
}
|
}
|
||||||
|
|||||||
2103
assets/admin/js/vendor/jquery/jquery.js
vendored
4
assets/admin/js/vendor/jquery/jquery.min.js
vendored
2
assets/admin/js/vendor/xregexp/LICENSE.txt
vendored
@@ -1,6 +1,6 @@
|
|||||||
The MIT License
|
The MIT License
|
||||||
|
|
||||||
Copyright (c) 2007-2017 Steven Levithan <http://xregexp.com/>
|
Copyright (c) 2007-present Steven Levithan <http://xregexp.com/>
|
||||||
|
|
||||||
Permission is hereby granted, free of charge, to any person obtaining a copy
|
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||||
of this software and associated documentation files (the "Software"), to deal
|
of this software and associated documentation files (the "Software"), to deal
|
||||||
|
|||||||
9160
assets/admin/js/vendor/xregexp/xregexp.js
vendored
177
assets/admin/js/vendor/xregexp/xregexp.min.js
vendored
@@ -24,7 +24,7 @@
|
|||||||
|
|
||||||
function initialiseCKEditor() {
|
function initialiseCKEditor() {
|
||||||
var textareas = Array.prototype.slice.call(
|
var textareas = Array.prototype.slice.call(
|
||||||
document.querySelectorAll("textarea[data-type=ckeditortype]")
|
document.querySelectorAll("textarea[data-type=ckeditortype]"),
|
||||||
)
|
)
|
||||||
for (var i = 0; i < textareas.length; ++i) {
|
for (var i = 0; i < textareas.length; ++i) {
|
||||||
var t = textareas[i]
|
var t = textareas[i]
|
||||||
|
|||||||
19
assets/ckeditor/ckeditor.css
Normal file
@@ -0,0 +1,19 @@
|
|||||||
|
/* Fix for Django dark theme background */
|
||||||
|
/* See https://github.com/django-ckeditor/django-ckeditor/issues/670 */
|
||||||
|
.cke_reset_all tr:nth-child(even),
|
||||||
|
.cke_reset_all tr:nth-child(odd),
|
||||||
|
.cke_reset_all .row-form-errors,
|
||||||
|
.cke_reset_all tr:nth-child(even) .errorlist,
|
||||||
|
.cke_reset_all tr:nth-child(odd) + .row-form-errors,
|
||||||
|
.cke_reset_all tr:nth-child(odd) + .row-form-errors .errorlist,
|
||||||
|
.cke_reset_all input[type="text"],
|
||||||
|
.cke_reset_all input[type="password"] {
|
||||||
|
background: inherit;
|
||||||
|
color: inherit;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Fix for CKEditor source editor with Django dark theme */
|
||||||
|
/* See https://github.com/django-ckeditor/django-ckeditor/issues/741 */
|
||||||
|
textarea.cke_source {
|
||||||
|
color: revert;
|
||||||
|
}
|
||||||