Compare commits
333 Commits
patrick-cr
...
6d5694a153
| Author | SHA1 | Date | |
|---|---|---|---|
| 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
|
|
||||||
@@ -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
|
||||||
|
|
||||||
|
|||||||
14
Readme.md
@@ -59,3 +59,17 @@ python3 fet2020/manage.py collectstatic
|
|||||||
<code>
|
<code>
|
||||||
python3 fet2020/manage.py check --deploy
|
python3 fet2020/manage.py check --deploy
|
||||||
</code>
|
</code>
|
||||||
|
|
||||||
|
Code Formatting (zuerst isort und danach black anwenden):
|
||||||
|
```bash
|
||||||
|
isort **/*.py
|
||||||
|
```
|
||||||
|
```bash
|
||||||
|
black **/*.py
|
||||||
|
```
|
||||||
|
```bash
|
||||||
|
isort **/templatetags/*.py
|
||||||
|
```
|
||||||
|
```bash
|
||||||
|
black **/templatetags/*.py
|
||||||
|
```
|
||||||
|
|||||||
2883
assets/Gallery-3.3.0/package-lock.json
generated
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/
|
||||||
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"}
|
||||||
|
Before Width: | Height: | Size: 163 B After Width: | Height: | Size: 163 B |
|
Before Width: | Height: | Size: 258 B After Width: | Height: | Size: 258 B |
|
Before Width: | Height: | Size: 1.0 KiB After Width: | Height: | Size: 1.0 KiB |
|
Before Width: | Height: | Size: 394 B After Width: | Height: | Size: 394 B |
|
Before Width: | Height: | Size: 3.7 KiB After Width: | Height: | Size: 3.7 KiB |
|
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 |
|
Before Width: | Height: | Size: 194 B After Width: | Height: | Size: 194 B |
|
Before Width: | Height: | Size: 432 B After Width: | Height: | Size: 432 B |
|
Before Width: | Height: | Size: 434 B After Width: | Height: | Size: 434 B |
|
Before Width: | Height: | Size: 170 B After Width: | Height: | Size: 170 B |
|
Before Width: | Height: | Size: 194 B After Width: | Height: | Size: 194 B |
|
Before Width: | Height: | Size: 993 B After Width: | Height: | Size: 993 B |
|
Before Width: | Height: | Size: 271 B After Width: | Height: | Size: 271 B |
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
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,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"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": [
|
||||||
@@ -33,16 +33,17 @@
|
|||||||
},
|
},
|
||||||
"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",
|
||||||
|
"jquery": "1",
|
||||||
"prettier": "2",
|
"prettier": "2",
|
||||||
"stylelint": "13",
|
"stylelint": "13",
|
||||||
"stylelint-config-prettier": "8",
|
"stylelint-config-prettier": "8",
|
||||||
"stylelint-config-recommended": "3",
|
"stylelint-config-recommended": "5",
|
||||||
"uglify-js": "3"
|
"uglify-js": "3"
|
||||||
},
|
},
|
||||||
"stylelint": {
|
"stylelint": {
|
||||||
@@ -77,6 +78,7 @@
|
|||||||
},
|
},
|
||||||
"scripts": {
|
"scripts": {
|
||||||
"test": "stylelint '**/*.css' && eslint .",
|
"test": "stylelint '**/*.css' && eslint .",
|
||||||
|
"prebuild": "bin/sync-vendor-libs.sh",
|
||||||
"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: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: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",
|
"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",
|
||||||
"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:css": "cd css && cleancss -c ie7 --source-map -o blueimp-gallery.min.css blueimp-gallery.css blueimp-gallery-indicator.css blueimp-gallery-video.css",
|
||||||
BIN
assets/Vorlage.pdf
Normal file
@@ -2,93 +2,90 @@
|
|||||||
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-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);
|
|
||||||
|
|
||||||
--link-fg: #447e9b;
|
|
||||||
--link-hover-color: #036;
|
|
||||||
--link-selected-fg: #5b80b2;
|
|
||||||
|
|
||||||
--hairline-color: #e8e8e8;
|
|
||||||
--border-color: #ccc;
|
|
||||||
|
|
||||||
--error-fg: #ba2121;
|
|
||||||
|
|
||||||
--message-success-bg: #dfd;
|
|
||||||
--message-warning-bg: #ffc;
|
|
||||||
--message-error-bg: #ffefef;
|
|
||||||
|
|
||||||
--darkened-bg: #f8f8f8; /* A bit darker than --body-bg */
|
|
||||||
--selected-bg: #e4e4e4; /* E.g. selected table cells */
|
|
||||||
--selected-row: #ffc;
|
|
||||||
|
|
||||||
--button-fg: #fff;
|
|
||||||
--button-bg: var(--primary);
|
|
||||||
--button-hover-bg: #609ab6;
|
|
||||||
--default-button-bg: var(--secondary);
|
|
||||||
--default-button-hover-bg: #205067;
|
|
||||||
--close-button-bg: #888; /* Previously #bbb, contrast 1.92 */
|
|
||||||
--close-button-hover-bg: #747474;
|
|
||||||
--delete-button-bg: #ba2121;
|
|
||||||
--delete-button-hover-bg: #a41515;
|
|
||||||
|
|
||||||
--object-tools-fg: var(--button-fg);
|
|
||||||
--object-tools-bg: var(--close-button-bg);
|
|
||||||
--object-tools-hover-bg: var(--close-button-hover-bg);
|
|
||||||
}
|
|
||||||
|
|
||||||
@media (prefers-color-scheme: dark) {
|
|
||||||
:root {
|
|
||||||
--primary: #264b5d;
|
|
||||||
--primary-fg: #eee;
|
|
||||||
|
|
||||||
--body-fg: #eeeeee;
|
|
||||||
--body-bg: #121212;
|
|
||||||
--body-quiet-color: #e0e0e0;
|
|
||||||
--body-loud-color: #ffffff;
|
|
||||||
|
|
||||||
--breadcrumbs-link-fg: #e0e0e0;
|
|
||||||
--breadcrumbs-bg: var(--primary);
|
--breadcrumbs-bg: var(--primary);
|
||||||
|
|
||||||
--link-fg: #81d4fa;
|
--link-fg: #417893;
|
||||||
--link-hover-color: #4ac1f7;
|
--link-hover-color: #036;
|
||||||
--link-selected-fg: #6f94c6;
|
--link-selected-fg: #5b80b2;
|
||||||
|
|
||||||
--hairline-color: #272727;
|
--hairline-color: #e8e8e8;
|
||||||
--border-color: #353535;
|
--border-color: #ccc;
|
||||||
|
|
||||||
--error-fg: #e35f5f;
|
--error-fg: #ba2121;
|
||||||
--message-success-bg: #006b1b;
|
|
||||||
--message-warning-bg: #583305;
|
|
||||||
--message-error-bg: #570808;
|
|
||||||
|
|
||||||
--darkened-bg: #212121;
|
--message-success-bg: #dfd;
|
||||||
--selected-bg: #1b1b1b;
|
--message-warning-bg: #ffc;
|
||||||
--selected-row: #00363a;
|
--message-error-bg: #ffefef;
|
||||||
|
|
||||||
--close-button-bg: #333333;
|
--darkened-bg: #f8f8f8; /* A bit darker than --body-bg */
|
||||||
--close-button-hover-bg: #666666;
|
--selected-bg: #e4e4e4; /* E.g. selected table cells */
|
||||||
}
|
--selected-row: #ffc;
|
||||||
|
|
||||||
|
--button-fg: #fff;
|
||||||
|
--button-bg: var(--primary);
|
||||||
|
--button-hover-bg: #609ab6;
|
||||||
|
--default-button-bg: var(--secondary);
|
||||||
|
--default-button-hover-bg: #205067;
|
||||||
|
--close-button-bg: #747474;
|
||||||
|
--close-button-hover-bg: #333;
|
||||||
|
--delete-button-bg: #ba2121;
|
||||||
|
--delete-button-hover-bg: #a41515;
|
||||||
|
|
||||||
|
--object-tools-fg: var(--button-fg);
|
||||||
|
--object-tools-bg: var(--close-button-bg);
|
||||||
|
--object-tools-hover-bg: var(--close-button-hover-bg);
|
||||||
|
|
||||||
|
--font-family-primary:
|
||||||
|
-apple-system,
|
||||||
|
BlinkMacSystemFont,
|
||||||
|
"Segoe UI",
|
||||||
|
system-ui,
|
||||||
|
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";
|
||||||
}
|
}
|
||||||
|
|
||||||
html, body {
|
html, body {
|
||||||
@@ -98,8 +95,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 +148,12 @@ 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);
|
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,20 @@ 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-quiet-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;
|
||||||
}
|
}
|
||||||
|
|
||||||
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 +193,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 {
|
||||||
@@ -223,7 +220,7 @@ fieldset {
|
|||||||
}
|
}
|
||||||
|
|
||||||
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 +228,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 +252,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 +296,7 @@ p img, h1 img, h2 img, h3 img, h4 img, td img {
|
|||||||
}
|
}
|
||||||
|
|
||||||
.hidden {
|
.hidden {
|
||||||
display: none;
|
display: none !important;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* TABLES */
|
/* TABLES */
|
||||||
@@ -311,8 +307,8 @@ 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;
|
||||||
@@ -327,7 +323,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);
|
||||||
@@ -437,7 +433,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 +472,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;
|
||||||
@@ -505,7 +501,7 @@ textarea:focus, select:focus, .vTextField:focus {
|
|||||||
}
|
}
|
||||||
|
|
||||||
select {
|
select {
|
||||||
height: 30px;
|
height: 1.875rem;
|
||||||
}
|
}
|
||||||
|
|
||||||
select[multiple] {
|
select[multiple] {
|
||||||
@@ -541,7 +537,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,7 +584,7 @@ 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(--primary);
|
||||||
color: var(--header-link-color);
|
color: var(--header-link-color);
|
||||||
@@ -597,7 +592,7 @@ input[type=button][disabled].default {
|
|||||||
|
|
||||||
.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 +611,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 +631,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 +652,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 +693,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;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -753,7 +749,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 +761,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 +775,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 +804,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 {
|
||||||
@@ -842,6 +845,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;
|
||||||
}
|
}
|
||||||
@@ -905,7 +922,7 @@ table#change-history tbody th {
|
|||||||
overflow: hidden;
|
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);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -914,24 +931,25 @@ table#change-history tbody th {
|
|||||||
}
|
}
|
||||||
|
|
||||||
#branding {
|
#branding {
|
||||||
float: left;
|
display: flex;
|
||||||
}
|
}
|
||||||
|
|
||||||
#branding h1 {
|
#branding h1 {
|
||||||
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 {
|
#branding h1 a:link, #branding h1 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 +959,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 +1015,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 +1039,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 +1059,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 +1086,60 @@ 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%;
|
||||||
|
}
|
||||||
|
|
||||||
|
.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;
|
||||||
|
}
|
||||||
|
|||||||
@@ -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;
|
||||||
@@ -140,7 +140,7 @@
|
|||||||
}
|
}
|
||||||
|
|
||||||
#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 +148,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 +196,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 {
|
||||||
@@ -194,83 +216,34 @@
|
|||||||
}
|
}
|
||||||
|
|
||||||
#changelist-filter #changelist-filter-clear a {
|
#changelist-filter #changelist-filter-clear a {
|
||||||
font-size: 13px;
|
font-size: 0.8125rem;
|
||||||
padding-bottom: 10px;
|
padding-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,7 +255,13 @@
|
|||||||
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);
|
||||||
|
}
|
||||||
|
|
||||||
|
#changelist tbody tr:has(.action-select:checked) {
|
||||||
background-color: var(--selected-row);
|
background-color: var(--selected-row);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -291,22 +270,16 @@
|
|||||||
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 +289,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 +306,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;
|
||||||
|
|||||||
137
assets/admin/css/dark_mode.css
Normal file
@@ -0,0 +1,137 @@
|
|||||||
|
@media (prefers-color-scheme: dark) {
|
||||||
|
:root {
|
||||||
|
--primary: #264b5d;
|
||||||
|
--primary-fg: #f7f7f7;
|
||||||
|
|
||||||
|
--body-fg: #eeeeee;
|
||||||
|
--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[data-theme="dark"] {
|
||||||
|
--primary: #264b5d;
|
||||||
|
--primary-fg: #f7f7f7;
|
||||||
|
|
||||||
|
--body-fg: #eeeeee;
|
||||||
|
--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;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* 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: 1rem;
|
||||||
|
width: 1rem;
|
||||||
|
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;
|
||||||
|
}
|
||||||
|
|
||||||
|
.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);
|
||||||
|
}
|
||||||
@@ -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%;
|
||||||
|
|||||||
@@ -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,12 +22,24 @@ 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 {
|
||||||
@@ -69,7 +81,7 @@ form ul.inline li {
|
|||||||
.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;
|
line-height: 1;
|
||||||
@@ -79,14 +91,14 @@ form ul.inline li {
|
|||||||
content: '';
|
content: '';
|
||||||
display: inline-block;
|
display: inline-block;
|
||||||
vertical-align: middle;
|
vertical-align: middle;
|
||||||
height: 26px;
|
height: 1.625rem;
|
||||||
}
|
}
|
||||||
|
|
||||||
.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 +129,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,
|
||||||
@@ -171,14 +184,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;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -189,6 +195,7 @@ fieldset .fieldBox {
|
|||||||
}
|
}
|
||||||
|
|
||||||
form .wide p,
|
form .wide p,
|
||||||
|
form .wide ul.errorlist,
|
||||||
form .wide input + p.help,
|
form .wide input + p.help,
|
||||||
form .wide input + div.help {
|
form .wide input + div.help {
|
||||||
margin-left: 200px;
|
margin-left: 200px;
|
||||||
@@ -196,7 +203,7 @@ form .wide input + div.help {
|
|||||||
|
|
||||||
form .wide p.help,
|
form .wide p.help,
|
||||||
form .wide div.help {
|
form .wide div.help {
|
||||||
padding-left: 38px;
|
padding-left: 50px;
|
||||||
}
|
}
|
||||||
|
|
||||||
form div.help ul {
|
form div.help ul {
|
||||||
@@ -242,19 +249,21 @@ fieldset.collapsed .collapse-toggle {
|
|||||||
/* 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 +271,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 +302,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 +311,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 +360,6 @@ body.popup .submit-row {
|
|||||||
width: 2.2em;
|
width: 2.2em;
|
||||||
}
|
}
|
||||||
|
|
||||||
.vTextField, .vUUIDField {
|
|
||||||
width: 20em;
|
|
||||||
}
|
|
||||||
|
|
||||||
.vIntegerField {
|
.vIntegerField {
|
||||||
width: 5em;
|
width: 5em;
|
||||||
}
|
}
|
||||||
@@ -369,6 +372,10 @@ body.popup .submit-row {
|
|||||||
width: 5em;
|
width: 5em;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.vTextField, .vUUIDField {
|
||||||
|
width: 20em;
|
||||||
|
}
|
||||||
|
|
||||||
/* INLINES */
|
/* INLINES */
|
||||||
|
|
||||||
.inline-group {
|
.inline-group {
|
||||||
@@ -392,7 +399,7 @@ body.popup .submit-row {
|
|||||||
margin: 0;
|
margin: 0;
|
||||||
color: var(--body-quiet-color);
|
color: var(--body-quiet-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-top: 1px solid var(--hairline-color);
|
||||||
border-bottom: 1px solid var(--hairline-color);
|
border-bottom: 1px solid var(--hairline-color);
|
||||||
@@ -404,7 +411,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 {
|
||||||
@@ -417,7 +424,7 @@ body.popup .submit-row {
|
|||||||
.inline-related fieldset.module h3 {
|
.inline-related fieldset.module h3 {
|
||||||
margin: 0;
|
margin: 0;
|
||||||
padding: 2px 5px 3px 5px;
|
padding: 2px 5px 3px 5px;
|
||||||
font-size: 11px;
|
font-size: 0.6875rem;
|
||||||
text-align: left;
|
text-align: left;
|
||||||
font-weight: bold;
|
font-weight: bold;
|
||||||
background: #bcd;
|
background: #bcd;
|
||||||
@@ -458,7 +465,7 @@ 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;
|
||||||
@@ -493,7 +500,7 @@ body.popup .submit-row {
|
|||||||
.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;
|
background: url(../img/icon-addlink.svg) 0 1px no-repeat;
|
||||||
padding-left: 16px;
|
padding-left: 16px;
|
||||||
font-size: 12px;
|
font-size: 0.75rem;
|
||||||
}
|
}
|
||||||
|
|
||||||
.empty-form {
|
.empty-form {
|
||||||
@@ -511,8 +518,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;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -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 {
|
||||||
|
|||||||
@@ -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 {
|
||||||
@@ -45,7 +45,6 @@ input[type="submit"], button {
|
|||||||
|
|
||||||
#branding h1 {
|
#branding h1 {
|
||||||
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,7 +171,7 @@ input[type="submit"], button {
|
|||||||
/* Forms */
|
/* Forms */
|
||||||
|
|
||||||
label {
|
label {
|
||||||
font-size: 14px;
|
font-size: 0.875rem;
|
||||||
}
|
}
|
||||||
|
|
||||||
.form-row input[type=text],
|
.form-row input[type=text],
|
||||||
@@ -191,12 +186,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: 0.875rem;
|
||||||
}
|
}
|
||||||
|
|
||||||
.form-row select {
|
.form-row select {
|
||||||
height: 36px;
|
height: 2.25rem;
|
||||||
}
|
}
|
||||||
|
|
||||||
.form-row select[multiple] {
|
.form-row select[multiple] {
|
||||||
@@ -204,12 +199,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,6 +225,18 @@ input[type="submit"], button {
|
|||||||
margin-left: 2px;
|
margin-left: 2px;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.submit-row {
|
||||||
|
padding: 8px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.submit-row a.deletelink {
|
||||||
|
padding: 10px 7px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.button, input[type=submit], input[type=button], .submit-row input, a.button {
|
||||||
|
padding: 7px;
|
||||||
|
}
|
||||||
|
|
||||||
/* Related widget */
|
/* Related widget */
|
||||||
|
|
||||||
.related-widget-wrapper {
|
.related-widget-wrapper {
|
||||||
@@ -383,22 +384,18 @@ input[type="submit"], button {
|
|||||||
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);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -496,7 +493,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 +554,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 +561,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;
|
||||||
}
|
}
|
||||||
@@ -585,6 +588,7 @@ input[type="submit"], button {
|
|||||||
|
|
||||||
.aligned label {
|
.aligned label {
|
||||||
width: 100%;
|
width: 100%;
|
||||||
|
min-width: auto;
|
||||||
padding: 0 0 10px;
|
padding: 0 0 10px;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -599,10 +603,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 +621,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 +629,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 +644,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;
|
||||||
}
|
}
|
||||||
@@ -812,28 +812,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 +902,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 +949,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 +982,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 +993,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;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -69,7 +69,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 +78,7 @@
|
|||||||
margin-left: 0;
|
margin-left: 0;
|
||||||
margin-right: 0;
|
margin-right: 0;
|
||||||
}
|
}
|
||||||
|
[dir="rtl"] .aligned .vCheckboxLabel {
|
||||||
|
padding: 1px 5px 0 0;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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,39 @@ 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-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 div.help {
|
||||||
|
padding-left: 0;
|
||||||
|
padding-right: 50px;
|
||||||
|
}
|
||||||
|
|
||||||
|
form .wide p,
|
||||||
|
form .wide ul.errorlist,
|
||||||
|
form .wide input + p.help,
|
||||||
|
form .wide input + div.help {
|
||||||
|
margin-right: 200px;
|
||||||
|
margin-left: 0px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.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 +202,24 @@ fieldset .fieldBox {
|
|||||||
top: 0;
|
top: 0;
|
||||||
left: auto;
|
left: auto;
|
||||||
right: 10px;
|
right: 10px;
|
||||||
|
background: url(../img/calendar-icons.svg) 0 -30px no-repeat;
|
||||||
|
}
|
||||||
|
|
||||||
|
.calendarbox .calendarnav-previous:focus,
|
||||||
|
.calendarbox .calendarnav-previous:hover {
|
||||||
|
background-position: 0 -45px;
|
||||||
}
|
}
|
||||||
|
|
||||||
.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;
|
||||||
|
}
|
||||||
|
|
||||||
|
.calendarbox .calendarnav-next:focus,
|
||||||
|
.calendarbox .calendarnav-next:hover {
|
||||||
|
background-position: 0 -15px;
|
||||||
}
|
}
|
||||||
|
|
||||||
.calendar caption, .calendarbox h2 {
|
.calendar caption, .calendarbox h2 {
|
||||||
@@ -195,6 +234,38 @@ fieldset .fieldBox {
|
|||||||
text-align: right;
|
text-align: right;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.selector-add {
|
||||||
|
background: url(../img/selector-icons.svg) 0 -64px no-repeat;
|
||||||
|
}
|
||||||
|
|
||||||
|
.active.selector-add:focus, .active.selector-add:hover {
|
||||||
|
background-position: 0 -80px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.selector-remove {
|
||||||
|
background: url(../img/selector-icons.svg) 0 -96px no-repeat;
|
||||||
|
}
|
||||||
|
|
||||||
|
.active.selector-remove:focus, .active.selector-remove:hover {
|
||||||
|
background-position: 0 -112px;
|
||||||
|
}
|
||||||
|
|
||||||
|
a.selector-chooseall {
|
||||||
|
background: url(../img/selector-icons.svg) right -128px no-repeat;
|
||||||
|
}
|
||||||
|
|
||||||
|
a.active.selector-chooseall:focus, a.active.selector-chooseall:hover {
|
||||||
|
background-position: 100% -144px;
|
||||||
|
}
|
||||||
|
|
||||||
|
a.selector-clearall {
|
||||||
|
background: url(../img/selector-icons.svg) 0 -160px no-repeat;
|
||||||
|
}
|
||||||
|
|
||||||
|
a.active.selector-clearall:focus, a.active.selector-clearall:hover {
|
||||||
|
background-position: 0 -176px;
|
||||||
|
}
|
||||||
|
|
||||||
.inline-deletelink {
|
.inline-deletelink {
|
||||||
float: left;
|
float: left;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -3,22 +3,21 @@
|
|||||||
.selector {
|
.selector {
|
||||||
width: 800px;
|
width: 800px;
|
||||||
float: left;
|
float: left;
|
||||||
|
display: flex;
|
||||||
}
|
}
|
||||||
|
|
||||||
.selector select {
|
.selector select {
|
||||||
width: 380px;
|
width: 380px;
|
||||||
height: 17.2em;
|
height: 17.2em;
|
||||||
|
flex: 1 0 auto;
|
||||||
}
|
}
|
||||||
|
|
||||||
.selector-available, .selector-chosen {
|
.selector-available, .selector-chosen {
|
||||||
float: left;
|
|
||||||
width: 380px;
|
width: 380px;
|
||||||
text-align: center;
|
text-align: center;
|
||||||
margin-bottom: 5px;
|
margin-bottom: 5px;
|
||||||
}
|
display: flex;
|
||||||
|
flex-direction: column;
|
||||||
.selector-chosen select {
|
|
||||||
border-top: none;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
.selector-available h2, .selector-chosen h2 {
|
.selector-available h2, .selector-chosen h2 {
|
||||||
@@ -26,6 +25,21 @@
|
|||||||
border-radius: 4px 4px 0 0;
|
border-radius: 4px 4px 0 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.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 h2 {
|
.selector-chosen h2 {
|
||||||
background: var(--primary);
|
background: var(--primary);
|
||||||
color: var(--header-link-color);
|
color: var(--header-link-color);
|
||||||
@@ -41,7 +55,7 @@
|
|||||||
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;
|
||||||
}
|
}
|
||||||
@@ -55,20 +69,23 @@
|
|||||||
padding: 0;
|
padding: 0;
|
||||||
overflow: hidden;
|
overflow: hidden;
|
||||||
line-height: 1;
|
line-height: 1;
|
||||||
|
min-width: auto;
|
||||||
}
|
}
|
||||||
|
|
||||||
.selector .selector-available input {
|
.selector .selector-available input,
|
||||||
|
.selector .selector-chosen input {
|
||||||
width: 320px;
|
width: 320px;
|
||||||
margin-left: 8px;
|
margin-left: 8px;
|
||||||
}
|
}
|
||||||
|
|
||||||
.selector ul.selector-chooser {
|
.selector ul.selector-chooser {
|
||||||
float: left;
|
align-self: center;
|
||||||
width: 22px;
|
width: 22px;
|
||||||
background-color: var(--selected-bg);
|
background-color: var(--selected-bg);
|
||||||
border-radius: 10px;
|
border-radius: 10px;
|
||||||
margin: 10em 5px 0 5px;
|
margin: 0 5px;
|
||||||
padding: 0;
|
padding: 0;
|
||||||
|
transform: translateY(-17px);
|
||||||
}
|
}
|
||||||
|
|
||||||
.selector-chooser li {
|
.selector-chooser li {
|
||||||
@@ -82,6 +99,15 @@
|
|||||||
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: 16px;
|
||||||
@@ -168,6 +194,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 {
|
||||||
@@ -193,6 +220,7 @@ a.active.selector-clearall:focus, a.active.selector-clearall:hover {
|
|||||||
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 {
|
||||||
@@ -250,8 +278,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 +295,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 +305,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;
|
||||||
}
|
}
|
||||||
@@ -311,7 +339,7 @@ table p.datetime {
|
|||||||
}
|
}
|
||||||
|
|
||||||
.timezonewarning {
|
.timezonewarning {
|
||||||
font-size: 11px;
|
font-size: 0.6875rem;
|
||||||
color: var(--body-quiet-color);
|
color: var(--body-quiet-color);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -322,7 +350,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 +365,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 +379,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 +388,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 +422,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 +432,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);
|
||||||
@@ -455,7 +479,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 +494,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;
|
||||||
}
|
}
|
||||||
@@ -509,7 +533,7 @@ span.clearable-file-input label {
|
|||||||
.calendar-cancel {
|
.calendar-cancel {
|
||||||
margin: 0;
|
margin: 0;
|
||||||
padding: 4px 0;
|
padding: 4px 0;
|
||||||
font-size: 12px;
|
font-size: 0.75rem;
|
||||||
background: #eee;
|
background: #eee;
|
||||||
border-top: 1px solid var(--border-color);
|
border-top: 1px solid var(--border-color);
|
||||||
color: var(--body-fg);
|
color: var(--body-fg);
|
||||||
@@ -572,3 +596,9 @@ select + .related-widget-wrapper-link,
|
|||||||
.related-widget-wrapper-link + .related-widget-wrapper-link {
|
.related-widget-wrapper-link + .related-widget-wrapper-link {
|
||||||
margin-left: 7px;
|
margin-left: 7px;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* GIS MAPS */
|
||||||
|
.dj_map {
|
||||||
|
width: 600px;
|
||||||
|
height: 400px;
|
||||||
|
}
|
||||||
|
|||||||
@@ -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];
|
||||||
|
|||||||
@@ -78,7 +78,7 @@ Requires core.js and SelectBox.js.
|
|||||||
remove_link.className = 'selector-remove';
|
remove_link.className = 'selector-remove';
|
||||||
|
|
||||||
// <div class="selector-chosen">
|
// <div class="selector-chosen">
|
||||||
const selector_chosen = quickElement('div', selector_div);
|
const selector_chosen = quickElement('div', selector_div, '', 'id', field_id + '_selector_chosen');
|
||||||
selector_chosen.className = 'selector-chosen';
|
selector_chosen.className = 'selector-chosen';
|
||||||
const title_chosen = quickElement('h2', selector_chosen, interpolate(gettext('Chosen %s') + ' ', [field_name]));
|
const title_chosen = quickElement('h2', selector_chosen, interpolate(gettext('Chosen %s') + ' ', [field_name]));
|
||||||
quickElement(
|
quickElement(
|
||||||
@@ -93,9 +93,30 @@ Requires core.js and SelectBox.js.
|
|||||||
[field_name]
|
[field_name]
|
||||||
)
|
)
|
||||||
);
|
);
|
||||||
|
|
||||||
|
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',
|
||||||
|
'title', 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';
|
||||||
|
|
||||||
const to_box = quickElement('select', selector_chosen, '', 'id', field_id + '_to', 'multiple', '', 'size', from_box.size, 'name', from_box.name);
|
const to_box = quickElement('select', selector_chosen, '', 'id', field_id + '_to', 'multiple', '', 'size', from_box.size, 'name', from_box.name);
|
||||||
to_box.className = 'filtered';
|
to_box.className = '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, ' (click to clear)', 'class', 'list-footer-display__clear');
|
||||||
|
|
||||||
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');
|
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');
|
||||||
clear_all.className = 'selector-clearall';
|
clear_all.className = 'selector-clearall';
|
||||||
|
|
||||||
@@ -106,6 +127,8 @@ Requires core.js and SelectBox.js.
|
|||||||
if (elem.classList.contains('active')) {
|
if (elem.classList.contains('active')) {
|
||||||
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();
|
||||||
};
|
};
|
||||||
@@ -121,14 +144,29 @@ Requires core.js and SelectBox.js.
|
|||||||
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 +184,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 +192,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,6 +202,24 @@ 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');
|
||||||
@@ -190,39 +229,47 @@ Requires core.js and SelectBox.js.
|
|||||||
// Active if the corresponding box isn't empty
|
// Active if the corresponding box isn't empty
|
||||||
document.getElementById(field_id + '_add_all_link').classList.toggle('active', from.querySelector('option'));
|
document.getElementById(field_id + '_add_all_link').classList.toggle('active', from.querySelector('option'));
|
||||||
document.getElementById(field_id + '_remove_all_link').classList.toggle('active', to.querySelector('option'));
|
document.getElementById(field_id + '_remove_all_link').classList.toggle('active', to.querySelector('option'));
|
||||||
|
SelectFilter.refresh_filtered_warning(field_id);
|
||||||
},
|
},
|
||||||
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;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -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,13 +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;
|
document.getElementById(name).value = chosenId;
|
||||||
}
|
}
|
||||||
|
const index = relatedWindows.indexOf(win);
|
||||||
|
if (index > -1) {
|
||||||
|
relatedWindows.splice(index, 1);
|
||||||
|
}
|
||||||
win.close();
|
win.close();
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -52,13 +85,44 @@
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function updateRelatedSelectsOptions(currentSelect, win, objId, newRepr, newId) {
|
||||||
|
// 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)];
|
||||||
|
// Exclude autocomplete selects.
|
||||||
|
const selectsRelated = document.querySelectorAll(`[data-model-ref="${modelName}"] select:not(.admin-autocomplete)`);
|
||||||
|
|
||||||
|
selectsRelated.forEach(function(select) {
|
||||||
|
if (currentSelect === select) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
let option = select.querySelector(`option[value="${objId}"]`);
|
||||||
|
|
||||||
|
if (!option) {
|
||||||
|
option = new Option(newRepr, newId);
|
||||||
|
select.options.add(option);
|
||||||
|
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;
|
||||||
@@ -74,11 +138,15 @@
|
|||||||
SelectBox.add_to_cache(toId, o);
|
SelectBox.add_to_cache(toId, o);
|
||||||
SelectBox.redisplay(toId);
|
SelectBox.redisplay(toId);
|
||||||
}
|
}
|
||||||
|
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 +154,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 +178,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 +192,23 @@
|
|||||||
window.dismissAddRelatedObjectPopup = dismissAddRelatedObjectPopup;
|
window.dismissAddRelatedObjectPopup = dismissAddRelatedObjectPopup;
|
||||||
window.dismissChangeRelatedObjectPopup = dismissChangeRelatedObjectPopup;
|
window.dismissChangeRelatedObjectPopup = dismissChangeRelatedObjectPopup;
|
||||||
window.dismissDeleteRelatedObjectPopup = dismissDeleteRelatedObjectPopup;
|
window.dismissDeleteRelatedObjectPopup = dismissDeleteRelatedObjectPopup;
|
||||||
|
window.dismissChildPopups = dismissChildPopups;
|
||||||
|
|
||||||
// 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));
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -119,11 +119,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));
|
||||||
|
});
|
||||||
|
});
|
||||||
|
}
|
||||||
@@ -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
|
||||||
|
}
|
||||||
|
}));
|
||||||
};
|
};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -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);
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -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
|
||||||
);
|
);
|
||||||
|
|||||||
56
assets/admin/js/theme.js
Normal file
@@ -0,0 +1,56 @@
|
|||||||
|
'use strict';
|
||||||
|
{
|
||||||
|
window.addEventListener('load', function(e) {
|
||||||
|
|
||||||
|
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");
|
||||||
|
}
|
||||||
|
|
||||||
|
function setupTheme() {
|
||||||
|
// Attach event handlers for toggling themes
|
||||||
|
const buttons = document.getElementsByClassName("theme-toggle");
|
||||||
|
Array.from(buttons).forEach((btn) => {
|
||||||
|
btn.addEventListener("click", cycleTheme);
|
||||||
|
});
|
||||||
|
initTheme();
|
||||||
|
}
|
||||||
|
|
||||||
|
setupTheme();
|
||||||
|
});
|
||||||
|
}
|
||||||
@@ -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;
|
||||||
}
|
}
|
||||||
|
|||||||
284
assets/admin/js/vendor/jquery/jquery.js
vendored
@@ -1,5 +1,5 @@
|
|||||||
/*!
|
/*!
|
||||||
* jQuery JavaScript Library v3.6.0
|
* jQuery JavaScript Library v3.6.4
|
||||||
* https://jquery.com/
|
* https://jquery.com/
|
||||||
*
|
*
|
||||||
* Includes Sizzle.js
|
* Includes Sizzle.js
|
||||||
@@ -9,7 +9,7 @@
|
|||||||
* Released under the MIT license
|
* Released under the MIT license
|
||||||
* https://jquery.org/license
|
* https://jquery.org/license
|
||||||
*
|
*
|
||||||
* Date: 2021-03-02T17:08Z
|
* Date: 2023-03-08T15:28Z
|
||||||
*/
|
*/
|
||||||
( function( global, factory ) {
|
( function( global, factory ) {
|
||||||
|
|
||||||
@@ -23,7 +23,7 @@
|
|||||||
// (such as Node.js), expose a factory as module.exports.
|
// (such as Node.js), expose a factory as module.exports.
|
||||||
// This accentuates the need for the creation of a real `window`.
|
// This accentuates the need for the creation of a real `window`.
|
||||||
// e.g. var jQuery = require("jquery")(window);
|
// e.g. var jQuery = require("jquery")(window);
|
||||||
// See ticket #14549 for more info.
|
// See ticket trac-14549 for more info.
|
||||||
module.exports = global.document ?
|
module.exports = global.document ?
|
||||||
factory( global, true ) :
|
factory( global, true ) :
|
||||||
function( w ) {
|
function( w ) {
|
||||||
@@ -151,7 +151,7 @@ function toType( obj ) {
|
|||||||
|
|
||||||
|
|
||||||
var
|
var
|
||||||
version = "3.6.0",
|
version = "3.6.4",
|
||||||
|
|
||||||
// Define a local copy of jQuery
|
// Define a local copy of jQuery
|
||||||
jQuery = function( selector, context ) {
|
jQuery = function( selector, context ) {
|
||||||
@@ -522,14 +522,14 @@ function isArrayLike( obj ) {
|
|||||||
}
|
}
|
||||||
var Sizzle =
|
var Sizzle =
|
||||||
/*!
|
/*!
|
||||||
* Sizzle CSS Selector Engine v2.3.6
|
* Sizzle CSS Selector Engine v2.3.10
|
||||||
* https://sizzlejs.com/
|
* https://sizzlejs.com/
|
||||||
*
|
*
|
||||||
* Copyright JS Foundation and other contributors
|
* Copyright JS Foundation and other contributors
|
||||||
* Released under the MIT license
|
* Released under the MIT license
|
||||||
* https://js.foundation/
|
* https://js.foundation/
|
||||||
*
|
*
|
||||||
* Date: 2021-02-16
|
* Date: 2023-02-14
|
||||||
*/
|
*/
|
||||||
( function( window ) {
|
( function( window ) {
|
||||||
var i,
|
var i,
|
||||||
@@ -633,7 +633,7 @@ var i,
|
|||||||
whitespace + "+$", "g" ),
|
whitespace + "+$", "g" ),
|
||||||
|
|
||||||
rcomma = new RegExp( "^" + whitespace + "*," + whitespace + "*" ),
|
rcomma = new RegExp( "^" + whitespace + "*," + whitespace + "*" ),
|
||||||
rcombinators = new RegExp( "^" + whitespace + "*([>+~]|" + whitespace + ")" + whitespace +
|
rleadingCombinator = new RegExp( "^" + whitespace + "*([>+~]|" + whitespace + ")" + whitespace +
|
||||||
"*" ),
|
"*" ),
|
||||||
rdescend = new RegExp( whitespace + "|>" ),
|
rdescend = new RegExp( whitespace + "|>" ),
|
||||||
|
|
||||||
@@ -850,7 +850,7 @@ function Sizzle( selector, context, results, seed ) {
|
|||||||
// as such selectors are not recognized by querySelectorAll.
|
// as such selectors are not recognized by querySelectorAll.
|
||||||
// Thanks to Andrew Dupont for this technique.
|
// Thanks to Andrew Dupont for this technique.
|
||||||
if ( nodeType === 1 &&
|
if ( nodeType === 1 &&
|
||||||
( rdescend.test( selector ) || rcombinators.test( selector ) ) ) {
|
( rdescend.test( selector ) || rleadingCombinator.test( selector ) ) ) {
|
||||||
|
|
||||||
// Expand context for sibling selectors
|
// Expand context for sibling selectors
|
||||||
newContext = rsibling.test( selector ) && testContext( context.parentNode ) ||
|
newContext = rsibling.test( selector ) && testContext( context.parentNode ) ||
|
||||||
@@ -1174,6 +1174,24 @@ setDocument = Sizzle.setDocument = function( node ) {
|
|||||||
!el.querySelectorAll( ":scope fieldset div" ).length;
|
!el.querySelectorAll( ":scope fieldset div" ).length;
|
||||||
} );
|
} );
|
||||||
|
|
||||||
|
// Support: Chrome 105 - 110+, Safari 15.4 - 16.3+
|
||||||
|
// Make sure the the `:has()` argument is parsed unforgivingly.
|
||||||
|
// We include `*` in the test to detect buggy implementations that are
|
||||||
|
// _selectively_ forgiving (specifically when the list includes at least
|
||||||
|
// one valid selector).
|
||||||
|
// Note that we treat complete lack of support for `:has()` as if it were
|
||||||
|
// spec-compliant support, which is fine because use of `:has()` in such
|
||||||
|
// environments will fail in the qSA path and fall back to jQuery traversal
|
||||||
|
// anyway.
|
||||||
|
support.cssHas = assert( function() {
|
||||||
|
try {
|
||||||
|
document.querySelector( ":has(*,:jqfake)" );
|
||||||
|
return false;
|
||||||
|
} catch ( e ) {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
} );
|
||||||
|
|
||||||
/* Attributes
|
/* Attributes
|
||||||
---------------------------------------------------------------------- */
|
---------------------------------------------------------------------- */
|
||||||
|
|
||||||
@@ -1440,6 +1458,17 @@ setDocument = Sizzle.setDocument = function( node ) {
|
|||||||
} );
|
} );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if ( !support.cssHas ) {
|
||||||
|
|
||||||
|
// Support: Chrome 105 - 110+, Safari 15.4 - 16.3+
|
||||||
|
// Our regular `try-catch` mechanism fails to detect natively-unsupported
|
||||||
|
// pseudo-classes inside `:has()` (such as `:has(:contains("Foo"))`)
|
||||||
|
// in browsers that parse the `:has()` argument as a forgiving selector list.
|
||||||
|
// https://drafts.csswg.org/selectors/#relational now requires the argument
|
||||||
|
// to be parsed unforgivingly, but browsers have not yet fully adjusted.
|
||||||
|
rbuggyQSA.push( ":has" );
|
||||||
|
}
|
||||||
|
|
||||||
rbuggyQSA = rbuggyQSA.length && new RegExp( rbuggyQSA.join( "|" ) );
|
rbuggyQSA = rbuggyQSA.length && new RegExp( rbuggyQSA.join( "|" ) );
|
||||||
rbuggyMatches = rbuggyMatches.length && new RegExp( rbuggyMatches.join( "|" ) );
|
rbuggyMatches = rbuggyMatches.length && new RegExp( rbuggyMatches.join( "|" ) );
|
||||||
|
|
||||||
@@ -1452,7 +1481,14 @@ setDocument = Sizzle.setDocument = function( node ) {
|
|||||||
// As in, an element does not contain itself
|
// As in, an element does not contain itself
|
||||||
contains = hasCompare || rnative.test( docElem.contains ) ?
|
contains = hasCompare || rnative.test( docElem.contains ) ?
|
||||||
function( a, b ) {
|
function( a, b ) {
|
||||||
var adown = a.nodeType === 9 ? a.documentElement : a,
|
|
||||||
|
// Support: IE <9 only
|
||||||
|
// IE doesn't have `contains` on `document` so we need to check for
|
||||||
|
// `documentElement` presence.
|
||||||
|
// We need to fall back to `a` when `documentElement` is missing
|
||||||
|
// as `ownerDocument` of elements within `<template/>` may have
|
||||||
|
// a null one - a default behavior of all modern browsers.
|
||||||
|
var adown = a.nodeType === 9 && a.documentElement || a,
|
||||||
bup = b && b.parentNode;
|
bup = b && b.parentNode;
|
||||||
return a === bup || !!( bup && bup.nodeType === 1 && (
|
return a === bup || !!( bup && bup.nodeType === 1 && (
|
||||||
adown.contains ?
|
adown.contains ?
|
||||||
@@ -2242,7 +2278,7 @@ Expr = Sizzle.selectors = {
|
|||||||
return elem.nodeName.toLowerCase() === "input" &&
|
return elem.nodeName.toLowerCase() === "input" &&
|
||||||
elem.type === "text" &&
|
elem.type === "text" &&
|
||||||
|
|
||||||
// Support: IE<8
|
// Support: IE <10 only
|
||||||
// New HTML5 attribute values (e.g., "search") appear with elem.type === "text"
|
// New HTML5 attribute values (e.g., "search") appear with elem.type === "text"
|
||||||
( ( attr = elem.getAttribute( "type" ) ) == null ||
|
( ( attr = elem.getAttribute( "type" ) ) == null ||
|
||||||
attr.toLowerCase() === "text" );
|
attr.toLowerCase() === "text" );
|
||||||
@@ -2342,7 +2378,7 @@ tokenize = Sizzle.tokenize = function( selector, parseOnly ) {
|
|||||||
matched = false;
|
matched = false;
|
||||||
|
|
||||||
// Combinators
|
// Combinators
|
||||||
if ( ( match = rcombinators.exec( soFar ) ) ) {
|
if ( ( match = rleadingCombinator.exec( soFar ) ) ) {
|
||||||
matched = match.shift();
|
matched = match.shift();
|
||||||
tokens.push( {
|
tokens.push( {
|
||||||
value: matched,
|
value: matched,
|
||||||
@@ -3129,8 +3165,8 @@ jQuery.fn.extend( {
|
|||||||
var rootjQuery,
|
var rootjQuery,
|
||||||
|
|
||||||
// A simple way to check for HTML strings
|
// A simple way to check for HTML strings
|
||||||
// Prioritize #id over <tag> to avoid XSS via location.hash (#9521)
|
// Prioritize #id over <tag> to avoid XSS via location.hash (trac-9521)
|
||||||
// Strict HTML recognition (#11290: must start with <)
|
// Strict HTML recognition (trac-11290: must start with <)
|
||||||
// Shortcut simple #id case for speed
|
// Shortcut simple #id case for speed
|
||||||
rquickExpr = /^(?:\s*(<[\w\W]+>)[^>]*|#([\w-]+))$/,
|
rquickExpr = /^(?:\s*(<[\w\W]+>)[^>]*|#([\w-]+))$/,
|
||||||
|
|
||||||
@@ -4087,7 +4123,7 @@ jQuery.extend( {
|
|||||||
isReady: false,
|
isReady: false,
|
||||||
|
|
||||||
// A counter to track how many items to wait for before
|
// A counter to track how many items to wait for before
|
||||||
// the ready event fires. See #6781
|
// the ready event fires. See trac-6781
|
||||||
readyWait: 1,
|
readyWait: 1,
|
||||||
|
|
||||||
// Handle when the DOM is ready
|
// Handle when the DOM is ready
|
||||||
@@ -4215,7 +4251,7 @@ function fcamelCase( _all, letter ) {
|
|||||||
|
|
||||||
// Convert dashed to camelCase; used by the css and data modules
|
// Convert dashed to camelCase; used by the css and data modules
|
||||||
// Support: IE <=9 - 11, Edge 12 - 15
|
// Support: IE <=9 - 11, Edge 12 - 15
|
||||||
// Microsoft forgot to hump their vendor prefix (#9572)
|
// Microsoft forgot to hump their vendor prefix (trac-9572)
|
||||||
function camelCase( string ) {
|
function camelCase( string ) {
|
||||||
return string.replace( rmsPrefix, "ms-" ).replace( rdashAlpha, fcamelCase );
|
return string.replace( rmsPrefix, "ms-" ).replace( rdashAlpha, fcamelCase );
|
||||||
}
|
}
|
||||||
@@ -4251,7 +4287,7 @@ Data.prototype = {
|
|||||||
value = {};
|
value = {};
|
||||||
|
|
||||||
// We can accept data for non-element nodes in modern browsers,
|
// We can accept data for non-element nodes in modern browsers,
|
||||||
// but we should not, see #8335.
|
// but we should not, see trac-8335.
|
||||||
// Always return an empty object.
|
// Always return an empty object.
|
||||||
if ( acceptData( owner ) ) {
|
if ( acceptData( owner ) ) {
|
||||||
|
|
||||||
@@ -4490,7 +4526,7 @@ jQuery.fn.extend( {
|
|||||||
while ( i-- ) {
|
while ( i-- ) {
|
||||||
|
|
||||||
// Support: IE 11 only
|
// Support: IE 11 only
|
||||||
// The attrs elements can be null (#14894)
|
// The attrs elements can be null (trac-14894)
|
||||||
if ( attrs[ i ] ) {
|
if ( attrs[ i ] ) {
|
||||||
name = attrs[ i ].name;
|
name = attrs[ i ].name;
|
||||||
if ( name.indexOf( "data-" ) === 0 ) {
|
if ( name.indexOf( "data-" ) === 0 ) {
|
||||||
@@ -4913,9 +4949,9 @@ var rscriptType = ( /^$|^module$|\/(?:java|ecma)script/i );
|
|||||||
input = document.createElement( "input" );
|
input = document.createElement( "input" );
|
||||||
|
|
||||||
// Support: Android 4.0 - 4.3 only
|
// Support: Android 4.0 - 4.3 only
|
||||||
// Check state lost if the name is set (#11217)
|
// Check state lost if the name is set (trac-11217)
|
||||||
// Support: Windows Web Apps (WWA)
|
// Support: Windows Web Apps (WWA)
|
||||||
// `name` and `type` must use .setAttribute for WWA (#14901)
|
// `name` and `type` must use .setAttribute for WWA (trac-14901)
|
||||||
input.setAttribute( "type", "radio" );
|
input.setAttribute( "type", "radio" );
|
||||||
input.setAttribute( "checked", "checked" );
|
input.setAttribute( "checked", "checked" );
|
||||||
input.setAttribute( "name", "t" );
|
input.setAttribute( "name", "t" );
|
||||||
@@ -4939,7 +4975,7 @@ var rscriptType = ( /^$|^module$|\/(?:java|ecma)script/i );
|
|||||||
} )();
|
} )();
|
||||||
|
|
||||||
|
|
||||||
// We have to close these tags to support XHTML (#13200)
|
// We have to close these tags to support XHTML (trac-13200)
|
||||||
var wrapMap = {
|
var wrapMap = {
|
||||||
|
|
||||||
// XHTML parsers do not magically insert elements in the
|
// XHTML parsers do not magically insert elements in the
|
||||||
@@ -4965,7 +5001,7 @@ if ( !support.option ) {
|
|||||||
function getAll( context, tag ) {
|
function getAll( context, tag ) {
|
||||||
|
|
||||||
// Support: IE <=9 - 11 only
|
// Support: IE <=9 - 11 only
|
||||||
// Use typeof to avoid zero-argument method invocation on host objects (#15151)
|
// Use typeof to avoid zero-argument method invocation on host objects (trac-15151)
|
||||||
var ret;
|
var ret;
|
||||||
|
|
||||||
if ( typeof context.getElementsByTagName !== "undefined" ) {
|
if ( typeof context.getElementsByTagName !== "undefined" ) {
|
||||||
@@ -5048,7 +5084,7 @@ function buildFragment( elems, context, scripts, selection, ignored ) {
|
|||||||
// Remember the top-level container
|
// Remember the top-level container
|
||||||
tmp = fragment.firstChild;
|
tmp = fragment.firstChild;
|
||||||
|
|
||||||
// Ensure the created nodes are orphaned (#12392)
|
// Ensure the created nodes are orphaned (trac-12392)
|
||||||
tmp.textContent = "";
|
tmp.textContent = "";
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -5469,15 +5505,15 @@ jQuery.event = {
|
|||||||
|
|
||||||
for ( ; cur !== this; cur = cur.parentNode || this ) {
|
for ( ; cur !== this; cur = cur.parentNode || this ) {
|
||||||
|
|
||||||
// Don't check non-elements (#13208)
|
// Don't check non-elements (trac-13208)
|
||||||
// Don't process clicks on disabled elements (#6911, #8165, #11382, #11764)
|
// Don't process clicks on disabled elements (trac-6911, trac-8165, trac-11382, trac-11764)
|
||||||
if ( cur.nodeType === 1 && !( event.type === "click" && cur.disabled === true ) ) {
|
if ( cur.nodeType === 1 && !( event.type === "click" && cur.disabled === true ) ) {
|
||||||
matchedHandlers = [];
|
matchedHandlers = [];
|
||||||
matchedSelectors = {};
|
matchedSelectors = {};
|
||||||
for ( i = 0; i < delegateCount; i++ ) {
|
for ( i = 0; i < delegateCount; i++ ) {
|
||||||
handleObj = handlers[ i ];
|
handleObj = handlers[ i ];
|
||||||
|
|
||||||
// Don't conflict with Object.prototype properties (#13203)
|
// Don't conflict with Object.prototype properties (trac-13203)
|
||||||
sel = handleObj.selector + " ";
|
sel = handleObj.selector + " ";
|
||||||
|
|
||||||
if ( matchedSelectors[ sel ] === undefined ) {
|
if ( matchedSelectors[ sel ] === undefined ) {
|
||||||
@@ -5731,7 +5767,7 @@ jQuery.Event = function( src, props ) {
|
|||||||
|
|
||||||
// Create target properties
|
// Create target properties
|
||||||
// Support: Safari <=6 - 7 only
|
// Support: Safari <=6 - 7 only
|
||||||
// Target should not be a text node (#504, #13143)
|
// Target should not be a text node (trac-504, trac-13143)
|
||||||
this.target = ( src.target && src.target.nodeType === 3 ) ?
|
this.target = ( src.target && src.target.nodeType === 3 ) ?
|
||||||
src.target.parentNode :
|
src.target.parentNode :
|
||||||
src.target;
|
src.target;
|
||||||
@@ -5854,10 +5890,10 @@ jQuery.each( { focus: "focusin", blur: "focusout" }, function( type, delegateTyp
|
|||||||
return true;
|
return true;
|
||||||
},
|
},
|
||||||
|
|
||||||
// Suppress native focus or blur as it's already being fired
|
// Suppress native focus or blur if we're currently inside
|
||||||
// in leverageNative.
|
// a leveraged native-event stack
|
||||||
_default: function() {
|
_default: function( event ) {
|
||||||
return true;
|
return dataPriv.get( event.target, type );
|
||||||
},
|
},
|
||||||
|
|
||||||
delegateType: delegateType
|
delegateType: delegateType
|
||||||
@@ -5956,7 +5992,8 @@ var
|
|||||||
|
|
||||||
// checked="checked" or checked
|
// checked="checked" or checked
|
||||||
rchecked = /checked\s*(?:[^=]|=\s*.checked.)/i,
|
rchecked = /checked\s*(?:[^=]|=\s*.checked.)/i,
|
||||||
rcleanScript = /^\s*<!(?:\[CDATA\[|--)|(?:\]\]|--)>\s*$/g;
|
|
||||||
|
rcleanScript = /^\s*<!\[CDATA\[|\]\]>\s*$/g;
|
||||||
|
|
||||||
// Prefer a tbody over its parent table for containing new rows
|
// Prefer a tbody over its parent table for containing new rows
|
||||||
function manipulationTarget( elem, content ) {
|
function manipulationTarget( elem, content ) {
|
||||||
@@ -6070,7 +6107,7 @@ function domManip( collection, args, callback, ignored ) {
|
|||||||
|
|
||||||
// Use the original fragment for the last item
|
// Use the original fragment for the last item
|
||||||
// instead of the first because it can end up
|
// instead of the first because it can end up
|
||||||
// being emptied incorrectly in certain situations (#8070).
|
// being emptied incorrectly in certain situations (trac-8070).
|
||||||
for ( ; i < l; i++ ) {
|
for ( ; i < l; i++ ) {
|
||||||
node = fragment;
|
node = fragment;
|
||||||
|
|
||||||
@@ -6111,6 +6148,12 @@ function domManip( collection, args, callback, ignored ) {
|
|||||||
}, doc );
|
}, doc );
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
|
|
||||||
|
// Unwrap a CDATA section containing script contents. This shouldn't be
|
||||||
|
// needed as in XML documents they're already not visible when
|
||||||
|
// inspecting element contents and in HTML documents they have no
|
||||||
|
// meaning but we're preserving that logic for backwards compatibility.
|
||||||
|
// This will be removed completely in 4.0. See gh-4904.
|
||||||
DOMEval( node.textContent.replace( rcleanScript, "" ), node, doc );
|
DOMEval( node.textContent.replace( rcleanScript, "" ), node, doc );
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -6393,9 +6436,12 @@ jQuery.each( {
|
|||||||
} );
|
} );
|
||||||
var rnumnonpx = new RegExp( "^(" + pnum + ")(?!px)[a-z%]+$", "i" );
|
var rnumnonpx = new RegExp( "^(" + pnum + ")(?!px)[a-z%]+$", "i" );
|
||||||
|
|
||||||
|
var rcustomProp = /^--/;
|
||||||
|
|
||||||
|
|
||||||
var getStyles = function( elem ) {
|
var getStyles = function( elem ) {
|
||||||
|
|
||||||
// Support: IE <=11 only, Firefox <=30 (#15098, #14150)
|
// Support: IE <=11 only, Firefox <=30 (trac-15098, trac-14150)
|
||||||
// IE throws on elements created in popups
|
// IE throws on elements created in popups
|
||||||
// FF meanwhile throws on frame elements through "defaultView.getComputedStyle"
|
// FF meanwhile throws on frame elements through "defaultView.getComputedStyle"
|
||||||
var view = elem.ownerDocument.defaultView;
|
var view = elem.ownerDocument.defaultView;
|
||||||
@@ -6430,6 +6476,15 @@ var swap = function( elem, options, callback ) {
|
|||||||
|
|
||||||
var rboxStyle = new RegExp( cssExpand.join( "|" ), "i" );
|
var rboxStyle = new RegExp( cssExpand.join( "|" ), "i" );
|
||||||
|
|
||||||
|
var whitespace = "[\\x20\\t\\r\\n\\f]";
|
||||||
|
|
||||||
|
|
||||||
|
var rtrimCSS = new RegExp(
|
||||||
|
"^" + whitespace + "+|((?:^|[^\\\\])(?:\\\\.)*)" + whitespace + "+$",
|
||||||
|
"g"
|
||||||
|
);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
( function() {
|
( function() {
|
||||||
@@ -6495,7 +6550,7 @@ var rboxStyle = new RegExp( cssExpand.join( "|" ), "i" );
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Support: IE <=9 - 11 only
|
// Support: IE <=9 - 11 only
|
||||||
// Style of cloned element affects source element cloned (#8908)
|
// Style of cloned element affects source element cloned (trac-8908)
|
||||||
div.style.backgroundClip = "content-box";
|
div.style.backgroundClip = "content-box";
|
||||||
div.cloneNode( true ).style.backgroundClip = "";
|
div.cloneNode( true ).style.backgroundClip = "";
|
||||||
support.clearCloneStyle = div.style.backgroundClip === "content-box";
|
support.clearCloneStyle = div.style.backgroundClip === "content-box";
|
||||||
@@ -6575,6 +6630,7 @@ var rboxStyle = new RegExp( cssExpand.join( "|" ), "i" );
|
|||||||
|
|
||||||
function curCSS( elem, name, computed ) {
|
function curCSS( elem, name, computed ) {
|
||||||
var width, minWidth, maxWidth, ret,
|
var width, minWidth, maxWidth, ret,
|
||||||
|
isCustomProp = rcustomProp.test( name ),
|
||||||
|
|
||||||
// Support: Firefox 51+
|
// Support: Firefox 51+
|
||||||
// Retrieving style before computed somehow
|
// Retrieving style before computed somehow
|
||||||
@@ -6585,11 +6641,42 @@ function curCSS( elem, name, computed ) {
|
|||||||
computed = computed || getStyles( elem );
|
computed = computed || getStyles( elem );
|
||||||
|
|
||||||
// getPropertyValue is needed for:
|
// getPropertyValue is needed for:
|
||||||
// .css('filter') (IE 9 only, #12537)
|
// .css('filter') (IE 9 only, trac-12537)
|
||||||
// .css('--customProperty) (#3144)
|
// .css('--customProperty) (gh-3144)
|
||||||
if ( computed ) {
|
if ( computed ) {
|
||||||
|
|
||||||
|
// Support: IE <=9 - 11+
|
||||||
|
// IE only supports `"float"` in `getPropertyValue`; in computed styles
|
||||||
|
// it's only available as `"cssFloat"`. We no longer modify properties
|
||||||
|
// sent to `.css()` apart from camelCasing, so we need to check both.
|
||||||
|
// Normally, this would create difference in behavior: if
|
||||||
|
// `getPropertyValue` returns an empty string, the value returned
|
||||||
|
// by `.css()` would be `undefined`. This is usually the case for
|
||||||
|
// disconnected elements. However, in IE even disconnected elements
|
||||||
|
// with no styles return `"none"` for `getPropertyValue( "float" )`
|
||||||
ret = computed.getPropertyValue( name ) || computed[ name ];
|
ret = computed.getPropertyValue( name ) || computed[ name ];
|
||||||
|
|
||||||
|
if ( isCustomProp && ret ) {
|
||||||
|
|
||||||
|
// Support: Firefox 105+, Chrome <=105+
|
||||||
|
// Spec requires trimming whitespace for custom properties (gh-4926).
|
||||||
|
// Firefox only trims leading whitespace. Chrome just collapses
|
||||||
|
// both leading & trailing whitespace to a single space.
|
||||||
|
//
|
||||||
|
// Fall back to `undefined` if empty string returned.
|
||||||
|
// This collapses a missing definition with property defined
|
||||||
|
// and set to an empty string but there's no standard API
|
||||||
|
// allowing us to differentiate them without a performance penalty
|
||||||
|
// and returning `undefined` aligns with older jQuery.
|
||||||
|
//
|
||||||
|
// rtrimCSS treats U+000D CARRIAGE RETURN and U+000C FORM FEED
|
||||||
|
// as whitespace while CSS does not, but this is not a problem
|
||||||
|
// because CSS preprocessing replaces them with U+000A LINE FEED
|
||||||
|
// (which *is* CSS whitespace)
|
||||||
|
// https://www.w3.org/TR/css-syntax-3/#input-preprocessing
|
||||||
|
ret = ret.replace( rtrimCSS, "$1" ) || undefined;
|
||||||
|
}
|
||||||
|
|
||||||
if ( ret === "" && !isAttached( elem ) ) {
|
if ( ret === "" && !isAttached( elem ) ) {
|
||||||
ret = jQuery.style( elem, name );
|
ret = jQuery.style( elem, name );
|
||||||
}
|
}
|
||||||
@@ -6685,7 +6772,6 @@ var
|
|||||||
// except "table", "table-cell", or "table-caption"
|
// except "table", "table-cell", or "table-caption"
|
||||||
// See here for display values: https://developer.mozilla.org/en-US/docs/CSS/display
|
// See here for display values: https://developer.mozilla.org/en-US/docs/CSS/display
|
||||||
rdisplayswap = /^(none|table(?!-c[ea]).+)/,
|
rdisplayswap = /^(none|table(?!-c[ea]).+)/,
|
||||||
rcustomProp = /^--/,
|
|
||||||
cssShow = { position: "absolute", visibility: "hidden", display: "block" },
|
cssShow = { position: "absolute", visibility: "hidden", display: "block" },
|
||||||
cssNormalTransform = {
|
cssNormalTransform = {
|
||||||
letterSpacing: "0",
|
letterSpacing: "0",
|
||||||
@@ -6921,15 +7007,15 @@ jQuery.extend( {
|
|||||||
if ( value !== undefined ) {
|
if ( value !== undefined ) {
|
||||||
type = typeof value;
|
type = typeof value;
|
||||||
|
|
||||||
// Convert "+=" or "-=" to relative numbers (#7345)
|
// Convert "+=" or "-=" to relative numbers (trac-7345)
|
||||||
if ( type === "string" && ( ret = rcssNum.exec( value ) ) && ret[ 1 ] ) {
|
if ( type === "string" && ( ret = rcssNum.exec( value ) ) && ret[ 1 ] ) {
|
||||||
value = adjustCSS( elem, name, ret );
|
value = adjustCSS( elem, name, ret );
|
||||||
|
|
||||||
// Fixes bug #9237
|
// Fixes bug trac-9237
|
||||||
type = "number";
|
type = "number";
|
||||||
}
|
}
|
||||||
|
|
||||||
// Make sure that null and NaN values aren't set (#7116)
|
// Make sure that null and NaN values aren't set (trac-7116)
|
||||||
if ( value == null || value !== value ) {
|
if ( value == null || value !== value ) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
@@ -7553,7 +7639,7 @@ function Animation( elem, properties, options ) {
|
|||||||
remaining = Math.max( 0, animation.startTime + animation.duration - currentTime ),
|
remaining = Math.max( 0, animation.startTime + animation.duration - currentTime ),
|
||||||
|
|
||||||
// Support: Android 2.3 only
|
// Support: Android 2.3 only
|
||||||
// Archaic crash bug won't allow us to use `1 - ( 0.5 || 0 )` (#12497)
|
// Archaic crash bug won't allow us to use `1 - ( 0.5 || 0 )` (trac-12497)
|
||||||
temp = remaining / animation.duration || 0,
|
temp = remaining / animation.duration || 0,
|
||||||
percent = 1 - temp,
|
percent = 1 - temp,
|
||||||
index = 0,
|
index = 0,
|
||||||
@@ -7943,7 +8029,6 @@ jQuery.fx.speeds = {
|
|||||||
|
|
||||||
|
|
||||||
// Based off of the plugin by Clint Helfers, with permission.
|
// Based off of the plugin by Clint Helfers, with permission.
|
||||||
// https://web.archive.org/web/20100324014747/http://blindsignals.com/index.php/2009/07/jquery-delay/
|
|
||||||
jQuery.fn.delay = function( time, type ) {
|
jQuery.fn.delay = function( time, type ) {
|
||||||
time = jQuery.fx ? jQuery.fx.speeds[ time ] || time : time;
|
time = jQuery.fx ? jQuery.fx.speeds[ time ] || time : time;
|
||||||
type = type || "fx";
|
type = type || "fx";
|
||||||
@@ -8168,8 +8253,7 @@ jQuery.extend( {
|
|||||||
// Support: IE <=9 - 11 only
|
// Support: IE <=9 - 11 only
|
||||||
// elem.tabIndex doesn't always return the
|
// elem.tabIndex doesn't always return the
|
||||||
// correct value when it hasn't been explicitly set
|
// correct value when it hasn't been explicitly set
|
||||||
// https://web.archive.org/web/20141116233347/http://fluidproject.org/blog/2008/01/09/getting-setting-and-removing-tabindex-values-with-javascript/
|
// Use proper attribute retrieval (trac-12072)
|
||||||
// Use proper attribute retrieval(#12072)
|
|
||||||
var tabindex = jQuery.find.attr( elem, "tabindex" );
|
var tabindex = jQuery.find.attr( elem, "tabindex" );
|
||||||
|
|
||||||
if ( tabindex ) {
|
if ( tabindex ) {
|
||||||
@@ -8273,8 +8357,7 @@ function classesToArray( value ) {
|
|||||||
|
|
||||||
jQuery.fn.extend( {
|
jQuery.fn.extend( {
|
||||||
addClass: function( value ) {
|
addClass: function( value ) {
|
||||||
var classes, elem, cur, curValue, clazz, j, finalValue,
|
var classNames, cur, curValue, className, i, finalValue;
|
||||||
i = 0;
|
|
||||||
|
|
||||||
if ( isFunction( value ) ) {
|
if ( isFunction( value ) ) {
|
||||||
return this.each( function( j ) {
|
return this.each( function( j ) {
|
||||||
@@ -8282,36 +8365,35 @@ jQuery.fn.extend( {
|
|||||||
} );
|
} );
|
||||||
}
|
}
|
||||||
|
|
||||||
classes = classesToArray( value );
|
classNames = classesToArray( value );
|
||||||
|
|
||||||
if ( classes.length ) {
|
if ( classNames.length ) {
|
||||||
while ( ( elem = this[ i++ ] ) ) {
|
return this.each( function() {
|
||||||
curValue = getClass( elem );
|
curValue = getClass( this );
|
||||||
cur = elem.nodeType === 1 && ( " " + stripAndCollapse( curValue ) + " " );
|
cur = this.nodeType === 1 && ( " " + stripAndCollapse( curValue ) + " " );
|
||||||
|
|
||||||
if ( cur ) {
|
if ( cur ) {
|
||||||
j = 0;
|
for ( i = 0; i < classNames.length; i++ ) {
|
||||||
while ( ( clazz = classes[ j++ ] ) ) {
|
className = classNames[ i ];
|
||||||
if ( cur.indexOf( " " + clazz + " " ) < 0 ) {
|
if ( cur.indexOf( " " + className + " " ) < 0 ) {
|
||||||
cur += clazz + " ";
|
cur += className + " ";
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// Only assign if different to avoid unneeded rendering.
|
// Only assign if different to avoid unneeded rendering.
|
||||||
finalValue = stripAndCollapse( cur );
|
finalValue = stripAndCollapse( cur );
|
||||||
if ( curValue !== finalValue ) {
|
if ( curValue !== finalValue ) {
|
||||||
elem.setAttribute( "class", finalValue );
|
this.setAttribute( "class", finalValue );
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
} );
|
||||||
}
|
}
|
||||||
|
|
||||||
return this;
|
return this;
|
||||||
},
|
},
|
||||||
|
|
||||||
removeClass: function( value ) {
|
removeClass: function( value ) {
|
||||||
var classes, elem, cur, curValue, clazz, j, finalValue,
|
var classNames, cur, curValue, className, i, finalValue;
|
||||||
i = 0;
|
|
||||||
|
|
||||||
if ( isFunction( value ) ) {
|
if ( isFunction( value ) ) {
|
||||||
return this.each( function( j ) {
|
return this.each( function( j ) {
|
||||||
@@ -8323,45 +8405,42 @@ jQuery.fn.extend( {
|
|||||||
return this.attr( "class", "" );
|
return this.attr( "class", "" );
|
||||||
}
|
}
|
||||||
|
|
||||||
classes = classesToArray( value );
|
classNames = classesToArray( value );
|
||||||
|
|
||||||
if ( classes.length ) {
|
if ( classNames.length ) {
|
||||||
while ( ( elem = this[ i++ ] ) ) {
|
return this.each( function() {
|
||||||
curValue = getClass( elem );
|
curValue = getClass( this );
|
||||||
|
|
||||||
// This expression is here for better compressibility (see addClass)
|
// This expression is here for better compressibility (see addClass)
|
||||||
cur = elem.nodeType === 1 && ( " " + stripAndCollapse( curValue ) + " " );
|
cur = this.nodeType === 1 && ( " " + stripAndCollapse( curValue ) + " " );
|
||||||
|
|
||||||
if ( cur ) {
|
if ( cur ) {
|
||||||
j = 0;
|
for ( i = 0; i < classNames.length; i++ ) {
|
||||||
while ( ( clazz = classes[ j++ ] ) ) {
|
className = classNames[ i ];
|
||||||
|
|
||||||
// Remove *all* instances
|
// Remove *all* instances
|
||||||
while ( cur.indexOf( " " + clazz + " " ) > -1 ) {
|
while ( cur.indexOf( " " + className + " " ) > -1 ) {
|
||||||
cur = cur.replace( " " + clazz + " ", " " );
|
cur = cur.replace( " " + className + " ", " " );
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// Only assign if different to avoid unneeded rendering.
|
// Only assign if different to avoid unneeded rendering.
|
||||||
finalValue = stripAndCollapse( cur );
|
finalValue = stripAndCollapse( cur );
|
||||||
if ( curValue !== finalValue ) {
|
if ( curValue !== finalValue ) {
|
||||||
elem.setAttribute( "class", finalValue );
|
this.setAttribute( "class", finalValue );
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
} );
|
||||||
}
|
}
|
||||||
|
|
||||||
return this;
|
return this;
|
||||||
},
|
},
|
||||||
|
|
||||||
toggleClass: function( value, stateVal ) {
|
toggleClass: function( value, stateVal ) {
|
||||||
var type = typeof value,
|
var classNames, className, i, self,
|
||||||
|
type = typeof value,
|
||||||
isValidValue = type === "string" || Array.isArray( value );
|
isValidValue = type === "string" || Array.isArray( value );
|
||||||
|
|
||||||
if ( typeof stateVal === "boolean" && isValidValue ) {
|
|
||||||
return stateVal ? this.addClass( value ) : this.removeClass( value );
|
|
||||||
}
|
|
||||||
|
|
||||||
if ( isFunction( value ) ) {
|
if ( isFunction( value ) ) {
|
||||||
return this.each( function( i ) {
|
return this.each( function( i ) {
|
||||||
jQuery( this ).toggleClass(
|
jQuery( this ).toggleClass(
|
||||||
@@ -8371,17 +8450,20 @@ jQuery.fn.extend( {
|
|||||||
} );
|
} );
|
||||||
}
|
}
|
||||||
|
|
||||||
return this.each( function() {
|
if ( typeof stateVal === "boolean" && isValidValue ) {
|
||||||
var className, i, self, classNames;
|
return stateVal ? this.addClass( value ) : this.removeClass( value );
|
||||||
|
}
|
||||||
|
|
||||||
|
classNames = classesToArray( value );
|
||||||
|
|
||||||
|
return this.each( function() {
|
||||||
if ( isValidValue ) {
|
if ( isValidValue ) {
|
||||||
|
|
||||||
// Toggle individual class names
|
// Toggle individual class names
|
||||||
i = 0;
|
|
||||||
self = jQuery( this );
|
self = jQuery( this );
|
||||||
classNames = classesToArray( value );
|
|
||||||
|
|
||||||
while ( ( className = classNames[ i++ ] ) ) {
|
for ( i = 0; i < classNames.length; i++ ) {
|
||||||
|
className = classNames[ i ];
|
||||||
|
|
||||||
// Check each className given, space separated list
|
// Check each className given, space separated list
|
||||||
if ( self.hasClass( className ) ) {
|
if ( self.hasClass( className ) ) {
|
||||||
@@ -8515,7 +8597,7 @@ jQuery.extend( {
|
|||||||
val :
|
val :
|
||||||
|
|
||||||
// Support: IE <=10 - 11 only
|
// Support: IE <=10 - 11 only
|
||||||
// option.text throws exceptions (#14686, #14858)
|
// option.text throws exceptions (trac-14686, trac-14858)
|
||||||
// Strip and collapse whitespace
|
// Strip and collapse whitespace
|
||||||
// https://html.spec.whatwg.org/#strip-and-collapse-whitespace
|
// https://html.spec.whatwg.org/#strip-and-collapse-whitespace
|
||||||
stripAndCollapse( jQuery.text( elem ) );
|
stripAndCollapse( jQuery.text( elem ) );
|
||||||
@@ -8542,7 +8624,7 @@ jQuery.extend( {
|
|||||||
option = options[ i ];
|
option = options[ i ];
|
||||||
|
|
||||||
// Support: IE <=9 only
|
// Support: IE <=9 only
|
||||||
// IE8-9 doesn't update selected after form reset (#2551)
|
// IE8-9 doesn't update selected after form reset (trac-2551)
|
||||||
if ( ( option.selected || i === index ) &&
|
if ( ( option.selected || i === index ) &&
|
||||||
|
|
||||||
// Don't return options that are disabled or in a disabled optgroup
|
// Don't return options that are disabled or in a disabled optgroup
|
||||||
@@ -8685,8 +8767,8 @@ jQuery.extend( jQuery.event, {
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Determine event propagation path in advance, per W3C events spec (#9951)
|
// Determine event propagation path in advance, per W3C events spec (trac-9951)
|
||||||
// Bubble up to document, then to window; watch for a global ownerDocument var (#9724)
|
// Bubble up to document, then to window; watch for a global ownerDocument var (trac-9724)
|
||||||
if ( !onlyHandlers && !special.noBubble && !isWindow( elem ) ) {
|
if ( !onlyHandlers && !special.noBubble && !isWindow( elem ) ) {
|
||||||
|
|
||||||
bubbleType = special.delegateType || type;
|
bubbleType = special.delegateType || type;
|
||||||
@@ -8738,7 +8820,7 @@ jQuery.extend( jQuery.event, {
|
|||||||
acceptData( elem ) ) {
|
acceptData( elem ) ) {
|
||||||
|
|
||||||
// Call a native DOM method on the target with the same name as the event.
|
// Call a native DOM method on the target with the same name as the event.
|
||||||
// Don't do default actions on window, that's where global variables be (#6170)
|
// Don't do default actions on window, that's where global variables be (trac-6170)
|
||||||
if ( ontype && isFunction( elem[ type ] ) && !isWindow( elem ) ) {
|
if ( ontype && isFunction( elem[ type ] ) && !isWindow( elem ) ) {
|
||||||
|
|
||||||
// Don't re-trigger an onFOO event when we call its FOO() method
|
// Don't re-trigger an onFOO event when we call its FOO() method
|
||||||
@@ -9012,7 +9094,7 @@ var
|
|||||||
rantiCache = /([?&])_=[^&]*/,
|
rantiCache = /([?&])_=[^&]*/,
|
||||||
rheaders = /^(.*?):[ \t]*([^\r\n]*)$/mg,
|
rheaders = /^(.*?):[ \t]*([^\r\n]*)$/mg,
|
||||||
|
|
||||||
// #7653, #8125, #8152: local protocol detection
|
// trac-7653, trac-8125, trac-8152: local protocol detection
|
||||||
rlocalProtocol = /^(?:about|app|app-storage|.+-extension|file|res|widget):$/,
|
rlocalProtocol = /^(?:about|app|app-storage|.+-extension|file|res|widget):$/,
|
||||||
rnoContent = /^(?:GET|HEAD)$/,
|
rnoContent = /^(?:GET|HEAD)$/,
|
||||||
rprotocol = /^\/\//,
|
rprotocol = /^\/\//,
|
||||||
@@ -9035,7 +9117,7 @@ var
|
|||||||
*/
|
*/
|
||||||
transports = {},
|
transports = {},
|
||||||
|
|
||||||
// Avoid comment-prolog char sequence (#10098); must appease lint and evade compression
|
// Avoid comment-prolog char sequence (trac-10098); must appease lint and evade compression
|
||||||
allTypes = "*/".concat( "*" ),
|
allTypes = "*/".concat( "*" ),
|
||||||
|
|
||||||
// Anchor tag for parsing the document origin
|
// Anchor tag for parsing the document origin
|
||||||
@@ -9106,7 +9188,7 @@ function inspectPrefiltersOrTransports( structure, options, originalOptions, jqX
|
|||||||
|
|
||||||
// A special extend for ajax options
|
// A special extend for ajax options
|
||||||
// that takes "flat" options (not to be deep extended)
|
// that takes "flat" options (not to be deep extended)
|
||||||
// Fixes #9887
|
// Fixes trac-9887
|
||||||
function ajaxExtend( target, src ) {
|
function ajaxExtend( target, src ) {
|
||||||
var key, deep,
|
var key, deep,
|
||||||
flatOptions = jQuery.ajaxSettings.flatOptions || {};
|
flatOptions = jQuery.ajaxSettings.flatOptions || {};
|
||||||
@@ -9517,12 +9599,12 @@ jQuery.extend( {
|
|||||||
deferred.promise( jqXHR );
|
deferred.promise( jqXHR );
|
||||||
|
|
||||||
// Add protocol if not provided (prefilters might expect it)
|
// Add protocol if not provided (prefilters might expect it)
|
||||||
// Handle falsy url in the settings object (#10093: consistency with old signature)
|
// Handle falsy url in the settings object (trac-10093: consistency with old signature)
|
||||||
// We also use the url parameter if available
|
// We also use the url parameter if available
|
||||||
s.url = ( ( url || s.url || location.href ) + "" )
|
s.url = ( ( url || s.url || location.href ) + "" )
|
||||||
.replace( rprotocol, location.protocol + "//" );
|
.replace( rprotocol, location.protocol + "//" );
|
||||||
|
|
||||||
// Alias method option to type as per ticket #12004
|
// Alias method option to type as per ticket trac-12004
|
||||||
s.type = options.method || options.type || s.method || s.type;
|
s.type = options.method || options.type || s.method || s.type;
|
||||||
|
|
||||||
// Extract dataTypes list
|
// Extract dataTypes list
|
||||||
@@ -9565,7 +9647,7 @@ jQuery.extend( {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// We can fire global events as of now if asked to
|
// We can fire global events as of now if asked to
|
||||||
// Don't fire events if jQuery.event is undefined in an AMD-usage scenario (#15118)
|
// Don't fire events if jQuery.event is undefined in an AMD-usage scenario (trac-15118)
|
||||||
fireGlobals = jQuery.event && s.global;
|
fireGlobals = jQuery.event && s.global;
|
||||||
|
|
||||||
// Watch for a new set of requests
|
// Watch for a new set of requests
|
||||||
@@ -9594,7 +9676,7 @@ jQuery.extend( {
|
|||||||
if ( s.data && ( s.processData || typeof s.data === "string" ) ) {
|
if ( s.data && ( s.processData || typeof s.data === "string" ) ) {
|
||||||
cacheURL += ( rquery.test( cacheURL ) ? "&" : "?" ) + s.data;
|
cacheURL += ( rquery.test( cacheURL ) ? "&" : "?" ) + s.data;
|
||||||
|
|
||||||
// #9682: remove data so that it's not used in an eventual retry
|
// trac-9682: remove data so that it's not used in an eventual retry
|
||||||
delete s.data;
|
delete s.data;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -9867,7 +9949,7 @@ jQuery._evalUrl = function( url, options, doc ) {
|
|||||||
return jQuery.ajax( {
|
return jQuery.ajax( {
|
||||||
url: url,
|
url: url,
|
||||||
|
|
||||||
// Make this explicit, since user can override this through ajaxSetup (#11264)
|
// Make this explicit, since user can override this through ajaxSetup (trac-11264)
|
||||||
type: "GET",
|
type: "GET",
|
||||||
dataType: "script",
|
dataType: "script",
|
||||||
cache: true,
|
cache: true,
|
||||||
@@ -9976,7 +10058,7 @@ var xhrSuccessStatus = {
|
|||||||
0: 200,
|
0: 200,
|
||||||
|
|
||||||
// Support: IE <=9 only
|
// Support: IE <=9 only
|
||||||
// #1450: sometimes IE returns 1223 when it should be 204
|
// trac-1450: sometimes IE returns 1223 when it should be 204
|
||||||
1223: 204
|
1223: 204
|
||||||
},
|
},
|
||||||
xhrSupported = jQuery.ajaxSettings.xhr();
|
xhrSupported = jQuery.ajaxSettings.xhr();
|
||||||
@@ -10048,7 +10130,7 @@ jQuery.ajaxTransport( function( options ) {
|
|||||||
} else {
|
} else {
|
||||||
complete(
|
complete(
|
||||||
|
|
||||||
// File: protocol always yields status 0; see #8605, #14207
|
// File: protocol always yields status 0; see trac-8605, trac-14207
|
||||||
xhr.status,
|
xhr.status,
|
||||||
xhr.statusText
|
xhr.statusText
|
||||||
);
|
);
|
||||||
@@ -10109,7 +10191,7 @@ jQuery.ajaxTransport( function( options ) {
|
|||||||
xhr.send( options.hasContent && options.data || null );
|
xhr.send( options.hasContent && options.data || null );
|
||||||
} catch ( e ) {
|
} catch ( e ) {
|
||||||
|
|
||||||
// #14683: Only rethrow if this hasn't been notified as an error yet
|
// trac-14683: Only rethrow if this hasn't been notified as an error yet
|
||||||
if ( callback ) {
|
if ( callback ) {
|
||||||
throw e;
|
throw e;
|
||||||
}
|
}
|
||||||
@@ -10753,7 +10835,9 @@ jQuery.each(
|
|||||||
|
|
||||||
// Support: Android <=4.0 only
|
// Support: Android <=4.0 only
|
||||||
// Make sure we trim BOM and NBSP
|
// Make sure we trim BOM and NBSP
|
||||||
var rtrim = /^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g;
|
// Require that the "whitespace run" starts from a non-whitespace
|
||||||
|
// to avoid O(N^2) behavior when the engine would try matching "\s+$" at each space position.
|
||||||
|
var rtrim = /^[\s\uFEFF\xA0]+|([^\s\uFEFF\xA0])[\s\uFEFF\xA0]+$/g;
|
||||||
|
|
||||||
// Bind a function to a context, optionally partially applying any
|
// Bind a function to a context, optionally partially applying any
|
||||||
// arguments.
|
// arguments.
|
||||||
@@ -10820,7 +10904,7 @@ jQuery.isNumeric = function( obj ) {
|
|||||||
jQuery.trim = function( text ) {
|
jQuery.trim = function( text ) {
|
||||||
return text == null ?
|
return text == null ?
|
||||||
"" :
|
"" :
|
||||||
( text + "" ).replace( rtrim, "" );
|
( text + "" ).replace( rtrim, "$1" );
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
@@ -10868,8 +10952,8 @@ jQuery.noConflict = function( deep ) {
|
|||||||
};
|
};
|
||||||
|
|
||||||
// Expose jQuery and $ identifiers, even in AMD
|
// Expose jQuery and $ identifiers, even in AMD
|
||||||
// (#7102#comment:10, https://github.com/jquery/jquery/pull/557)
|
// (trac-7102#comment:10, https://github.com/jquery/jquery/pull/557)
|
||||||
// and CommonJS for browser emulators (#13566)
|
// and CommonJS for browser emulators (trac-13566)
|
||||||
if ( typeof noGlobal === "undefined" ) {
|
if ( typeof noGlobal === "undefined" ) {
|
||||||
window.jQuery = window.$ = jQuery;
|
window.jQuery = window.$ = jQuery;
|
||||||
}
|
}
|
||||||
|
|||||||
4
assets/admin/js/vendor/jquery/jquery.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;
|
||||||
|
}
|
||||||
@@ -1,5 +1,162 @@
|
|||||||
CKEditor 4 Changelog
|
⚠️️️ **CKEditor 4 (the open source edition) is no longer maintained.** ⚠️
|
||||||
====================
|
|
||||||
|
If you would like to keep access to future CKEditor 4 security patches, check the [Extended Support Model](https://ckeditor.com/ckeditor-4-support/), which guarantees **security updates and critical bug fixes until December 2026**. Alternatively, [upgrade to CKEditor 5](https://ckeditor.com/docs/ckeditor5/latest/updating/ckeditor4/migration-from-ckeditor-4.html).
|
||||||
|
|
||||||
|
## CKEditor 4.22.0 / 4.22.1
|
||||||
|
|
||||||
|
⚠️ This is the last open source release of CKEditor 4. As announced in 2018, CKEditor 4 has reached its End of Life in June 2023.
|
||||||
|
|
||||||
|
|
||||||
|
New Features:
|
||||||
|
|
||||||
|
* [#5316](https://github.com/ckeditor/ckeditor4/issues/5316): Added vertical margins support for list elements in the [Paste from Word](https://ckeditor.com/cke4/addon/pastefromword) plugin.
|
||||||
|
* [#5410](https://github.com/ckeditor/ckeditor4/issues/5410): Added the ability to indicate the language of styles in the [Styles Combo](https://ckeditor.com/cke4/addon/stylescombo) plugin via the [`config.styleSet`](https://ckeditor.com/docs/ckeditor4/latest/api/CKEDITOR_config.html#cfg-stylesSet) configuration option.
|
||||||
|
* [#5510](https://github.com/ckeditor/ckeditor4/issues/5510): Added notification system to the editor informing users that the editor version is up-to-date and secure. See [`config.versionCheck`](https://ckeditor.com/docs/ckeditor4/latest/api/CKEDITOR_config.html#cfg-versionCheck) configuration option to learn more.
|
||||||
|
|
||||||
|
Fixed Issues:
|
||||||
|
|
||||||
|
* [#5437](https://github.com/ckeditor/ckeditor4/issues/5437): Fixed: Incorrect indication of selected items in combo boxes. The selected item was unmarked upon each opening of the combo box.
|
||||||
|
* [#5495](https://github.com/ckeditor/ckeditor4/issues/5495): Fixed: Insufficient color ratio for links inside [Notifications](https://ckeditor.com/cke4/addon/notification).
|
||||||
|
|
||||||
|
Other Changes:
|
||||||
|
|
||||||
|
* [#5412](https://github.com/ckeditor/ckeditor4/issues/5412): Prevent using `document.domain` in Firefox in the [Preview](https://ckeditor.com/cke4/addon/preview) plugin.
|
||||||
|
|
||||||
|
Note: CKEditor 4.22.1 has been released immediately after 4.22.0 to fix the README issues on [npm](https://www.npmjs.com/) and contains no changes vs 4.22.0.
|
||||||
|
|
||||||
|
## CKEditor 4.21.0
|
||||||
|
|
||||||
|
**Security Updates:**
|
||||||
|
|
||||||
|
A cross-site scripting vulnerability has been discovered affecting [Iframe Dialog](https://ckeditor.com/cke4/addon/iframe) and [Media Embed](https://ckeditor.com/cke4/addon/embed) plugins.
|
||||||
|
|
||||||
|
This vulnerability might affect a small percentage of integrators that depend on dynamic editor initialization/destroy mechanism. See [GitHub advisory](https://github.com/ckeditor/ckeditor4/security/advisories/GHSA-vh5c-xwqv-cv9g) for more details.
|
||||||
|
|
||||||
|
**Potential breaking changes**
|
||||||
|
|
||||||
|
In some rare cases, a security release may introduce a breaking change to your application. We have provided configuration options that will help you mitigate any potential issues with the upgrade:
|
||||||
|
|
||||||
|
- Starting from version 4.21, the [Iframe Dialog](https://ckeditor.com/cke4/addon/iframe) plugin applies the `sandbox` attribute by default, which restricts JavaScript code execution in the iframe element. To change this behavior, configure the [`config.iframe_attributes`](https://ckeditor.com/docs/ckeditor4/latest/api/CKEDITOR_config.html#cfg-iframe_attributes) option.
|
||||||
|
- Starting from version 4.21, the [Media Embed](https://ckeditor.com/cke4/addon/embed) plugin regenerates the entire content of the embed widget by default. To change this behavior, configure the [`config.embed_keepOriginalContent`](https://ckeditor.com/docs/ckeditor4/latest/api/CKEDITOR_config.html#cfg-embed_keepOriginalContent) option.
|
||||||
|
|
||||||
|
If you choose to change either of the above options, make sure to properly configure [Content Security Policy](https://developer.mozilla.org/en-US/docs/Web/HTTP/CSP) to avoid any potential security issues that may arise from embedding iframe elements on your web page.
|
||||||
|
|
||||||
|
You can read more details in the relevant security advisory and [contact us](security@cksource.com) if you have more questions.
|
||||||
|
|
||||||
|
**An upgrade is highly recommended!**
|
||||||
|
|
||||||
|
New Features:
|
||||||
|
|
||||||
|
* [#4400](https://github.com/ckeditor/ckeditor4/issues/4400): Added the [`config.uploadImage_supportedTypes`](https://ckeditor.com/docs/ckeditor4/latest/api/CKEDITOR_config.html#cfg-uploadImage_supportedTypes) configuration option allowing to change the image formats accepted by the [Upload Image](https://ckeditor.com/cke4/addon/uploadimage) plugin. Thanks to [SilverYoCha](https://github.com/SilverYoCha)!
|
||||||
|
|
||||||
|
Fixed Issues:
|
||||||
|
|
||||||
|
* [#5431](https://github.com/ckeditor/ckeditor4/issues/5431): Fixed: No notification is shown when pasting or dropping unsupported image types into the editor.
|
||||||
|
|
||||||
|
## CKEditor 4.20.2
|
||||||
|
|
||||||
|
Fixed Issues:
|
||||||
|
|
||||||
|
* [#439](https://github.com/ckeditor/ckeditor4/issues/439): Fixed: Incorrect <kbd>Tab</kbd> and <kbd>Shift</kbd>+<kbd>Tab</kbd> navigation for radio buttons inside the dialog.
|
||||||
|
* [#4829](https://github.com/ckeditor/ckeditor4/issues/4829): Fixed: Undo reversed entire table content instead of a single cell. Thanks to that fix, multiple changes in a table can be undone one by one.
|
||||||
|
* [#5396](https://github.com/ckeditor/ckeditor4/issues/5396): Fixed: Event listeners for `popstate` and `hashchange` events on the `window`, added by the [Maximize](https://ckeditor.com/cke4/addon/maximize) plugin, were not removed when destroying the editor instance.
|
||||||
|
* [#5414](https://github.com/ckeditor/ckeditor4/issues/5414): Fixed: File and image uploaders based on the [Upload Widget plugin](https://ckeditor.com/cke4/addon/uploadwidget) and [Easy Image plugin ](https://ckeditor.com/cke4/addon/easyimage) didn't fire the [`change` event](https://ckeditor.com/docs/ckeditor4/latest/api/CKEDITOR_editor.html#event-change) upon finishing upload, resulting in passing incorrect data in form controls for integration frameworks, like [Reactive forms in Angular](https://angular.io/guide/reactive-forms).
|
||||||
|
* [#698](https://github.com/ckeditor/ckeditor4/issues/698): Fixed: An error was thrown after applying formatting to the widget with inline editable and switching to the source mode. Thanks to [Glen](https://github.com/glen-84)!
|
||||||
|
|
||||||
|
API changes:
|
||||||
|
|
||||||
|
* [#3540](https://github.com/ckeditor/ckeditor4/issues/3540): The [startup data](https://ckeditor.com/docs/ckeditor4/latest/api/CKEDITOR_plugins_widget.html) passed to the widget's command is now used to also populate the widget's template.
|
||||||
|
* [#5352](https://github.com/ckeditor/ckeditor4/issues/5352): Added the [`colorButton_contentsCss`](https://ckeditor.com/docs/ckeditor4/latest/api/CKEDITOR_config.html#cfg-colorButton_contentsCss) configuration option allowing to add custom CSS to the [Color Button](https://ckeditor.com/cke4/addon/colorbutton) menu content. Thanks to [mihilion](https://github.com/mihilion)!
|
||||||
|
|
||||||
|
## CKEditor 4.20.1
|
||||||
|
|
||||||
|
Fixed Issues:
|
||||||
|
|
||||||
|
* [#5333](https://github.com/ckeditor/ckeditor4/issues/5333): Fixed: The original name of the uploaded image is not preserved by the [Upload Image](https://ckeditor.com/cke4/addon/uploadimage) plugin if the [Clipboard](https://ckeditor.com/cke4/addon/clipboard) plugin has enabled image handling.
|
||||||
|
* [#2881](https://github.com/ckeditor/ckeditor4/issues/2881): Fixed: Changing table headers from "Both" to "First column" in the [Table](https://ckeditor.com/cke4/addon/table) dialog does not change the first column cell correctly.
|
||||||
|
* [#2996](https://github.com/ckeditor/ckeditor4/issues/2996): Fixed: Table header "scope" attribute is incorrect for the "Headers: both" option in the [Table](https://ckeditor.com/cke4/addon/table) dialog.
|
||||||
|
* [#4802](https://github.com/ckeditor/ckeditor4/issues/4802): Fixed: [Tableselection](https://ckeditor.com/cke4/addon/tableselection) caret moves to the previous cell after tabbing into the next cell and then removing its content.
|
||||||
|
* [#5365](https://github.com/ckeditor/ckeditor4/issues/5365): Fixed: The value of the [`config.baseFloatZIndex`](https://ckeditor.com/docs/ckeditor4/latest/api/CKEDITOR_config.html#cfg-baseFloatZIndex) config variable is incorrectly applied to parent dialog when the child dialog is closed resulting in the dialog overlay covering up the dialog. Thanks to [JenoDK](https://github.com/JenoDK)!
|
||||||
|
* [#5305](https://github.com/ckeditor/ckeditor4/issues/5305): Fixed: Anchor name can invalidly include spaces.
|
||||||
|
|
||||||
|
## CKEditor 4.20
|
||||||
|
|
||||||
|
New Features:
|
||||||
|
|
||||||
|
* [#5084](https://github.com/ckeditor/ckeditor4/issues/5084): Added the [`config.tabletools_scopedHeaders`](https://ckeditor.com/docs/ckeditor4/latest/api/CKEDITOR_config.html#cfg-tabletools_scopedHeaders) configuration option controlling the behaviour of table headers with and without the `[scope]` attribute.
|
||||||
|
* [#5219](https://github.com/ckeditor/ckeditor4/issues/5219): Added the [`config.image2_defaultLockRatio`](https://ckeditor.com/docs/ckeditor4/latest/api/CKEDITOR_config.html#cfg-image2_defaultLockRatio) configuration option allowing to set the default value of the "Lock ratio" option in the [Enhanced Image](https://ckeditor.com/cke4/addon/image2) dialog.
|
||||||
|
* [#2008](https://github.com/ckeditor/ckeditor-dev/pull/2008): Extended the [Mentions](https://ckeditor.com/cke4/addon/mentions) and [Emoji](https://ckeditor.com/cke4/addon/emoji) plugins with a feature option that adds a space after an accepted autocompletion match. See:
|
||||||
|
* [`configDefinition.followingSpace`](https://ckeditor.com/docs/ckeditor4/latest/api/CKEDITOR_plugins_mentions_configDefinition.html#property-followingSpace) option for the mentions plugin, and
|
||||||
|
* [`config.emoji_followingSpace`](https://ckeditor.com/docs/ckeditor4/latest/api/CKEDITOR_config.html#cfg-emoji_followingSpace) option for the emoji plugin.
|
||||||
|
* [#5215](https://github.com/ckeditor/ckeditor4/issues/5215): Added the [`config.coreStyles_toggleSubSup`](https://ckeditor.com/docs/ckeditor4/latest/api/CKEDITOR_config.html#cfg-coreStyles_toggleSubSup) configuration option which disallows setting the subscript and superscript on the same element simultaneously using UI buttons. This option is turned off by default.
|
||||||
|
|
||||||
|
Fixed Issues:
|
||||||
|
|
||||||
|
* [#4889](https://github.com/ckeditor/ckeditor4/issues/4889): Fixed: Incorrect position of the [Table Resize](https://ckeditor.com/cke4/addon/tableresize) cursor after scrolling the editor horizontally.
|
||||||
|
* [#5319](https://github.com/ckeditor/ckeditor4/issues/5319): Fixed: [Autolink](https://ckeditor.com/cke4/addon/autolink) [`config.autolink_urlRegex`](https://ckeditor.com/docs/ckeditor4/latest/api/CKEDITOR_config.html#cfg-autolink_urlRegex) option produced invalid links when configured directly using the editor instance config. Thanks to [Aigars Zeiza](https://github.com/Zuzon)!
|
||||||
|
* [#4941](https://github.com/ckeditor/ckeditor4/issues/4941): Fixed: Some entities got wrongly encoded when using [`entities_processNumerical = true`](https://ckeditor.com/docs/ckeditor4/latest/api/CKEDITOR_config.html#cfg-entities_processNumerical) configuration option.
|
||||||
|
* [#4931](https://github.com/ckeditor/ckeditor4/issues/4931): Fixed: Selecting the whole editor content when there is only a list with an empty element at the end inside and deleting it did not delete all list items.
|
||||||
|
|
||||||
|
|
||||||
|
API changes:
|
||||||
|
|
||||||
|
* [#5122](https://github.com/ckeditor/ckeditor4/issues/5122): Added the ability to provide a list of buttons as an array to the [`config.removeButtons`](https://ckeditor.com/docs/ckeditor4/latest/api/CKEDITOR_config.html#cfg-removeButtons) config variable.
|
||||||
|
* [#2008](https://github.com/ckeditor/ckeditor-dev/pull/2008): Added [Autocomplete](https://ckeditor.com/cke4/addon/autocomplete) [`followingSpace`](https://ckeditor.com/docs/ckeditor4/latest/api/CKEDITOR_plugins_autocomplete_configDefinition.html#property-followingSpace) option that finishes an accepted match with a space.
|
||||||
|
|
||||||
|
## CKEditor 4.19.1
|
||||||
|
|
||||||
|
Fixed Issues:
|
||||||
|
|
||||||
|
* [#5125](https://github.com/ckeditor/ckeditor4/issues/5125): Fixed: Deleting a widget with disabled [autoParagraph](https://ckeditor.com/docs/ckeditor4/latest/api/CKEDITOR_config.html#cfg-autoParagraph) by the keyboard `backspace` key removes the editor editable area and crashes the editor.
|
||||||
|
* [#5135](https://github.com/ckeditor/ckeditor4/issues/5135): Fixed: The [`checkbox.setValue`](https://ckeditor.com/docs/ckeditor4/latest/api/CKEDITOR_ui_dialog_checkbox.html#method-setValue) and [`radio.setValue`](https://ckeditor.com/docs/ckeditor4/latest/api/CKEDITOR_ui_dialog_radio.html#method-setValue) methods are not chainable as stated in the documentation. Thanks to [Jordan Bradford](https://github.com/LordPachelbel)!
|
||||||
|
* [#5085](https://github.com/ckeditor/ckeditor4/issues/5085): Fixed: The [Language](https://ckeditor.com/cke4/addon/language) plugin removes the element marking the text in foreign language if said element does not have an information about the text direction.
|
||||||
|
* [#4284](https://github.com/ckeditor/ckeditor4/issues/4284): Fixed: [Tableselection](https://ckeditor.com/cke4/addon/tableselection) Merging cells with a rowspan throws an unexpected error and does not create an undo step.
|
||||||
|
* [#5184](https://github.com/ckeditor/ckeditor4/issues/5184): Fixed: The [Editor Placeholder](https://ckeditor.com/cke4/addon/wysiwygarea) plugin degrades typing performance.
|
||||||
|
* [#5158](https://github.com/ckeditor/ckeditor4/issues/5158): Fixed: [`CKEDITOR.tools#convertToPx()`](https://ckeditor.com/docs/ckeditor4/latest/api/CKEDITOR_tools.html#method-convertToPx) gives invalid results if the helper calculator element was deleted from the DOM.
|
||||||
|
* [#5234](https://github.com/ckeditor/ckeditor4/issues/5234): Fixed: [Easy Image](https://ckeditor.com/cke4/addon/easyimage) doesn't allow to upload images files using toolbar button.
|
||||||
|
* [#438](https://github.com/ckeditor/ckeditor4/issues/438): Fixed: It is impossible to navigate to the [elementspath](https://ckeditor.com/cke4/addon/elementspath) from the [toolbar](https://ckeditor.com/cke4/addon/toolbar) by keyboard and vice versa.
|
||||||
|
* [#4449](https://github.com/ckeditor/ckeditor4/issues/4449): Fixed: [`dialog.validate#functions`](https://ckeditor.com/docs/ckeditor4/latest/api/CKEDITOR_dialog_validate.html#method-functions) incorrectly composes functions that return an optional error message, like e.g. [`dialog.validate.number`](https://ckeditor.com/docs/ckeditor4/latest/api/CKEDITOR_dialog_validate.html#method-number) due to unnecessary return type coercion.
|
||||||
|
* [#4473](https://github.com/ckeditor/ckeditor4/issues/4473): Fixed: The [dialog.validate](https://ckeditor.com/docs/ckeditor4/latest/api/CKEDITOR_dialog_validate.html) method does not accept parameter value. The issue originated in [dialog.validate.functions](https://ckeditor.com/docs/ckeditor4/latest/api/CKEDITOR_dialog_validate.html#method-functions) method that did not properly propagate parameter value to validator. Affected validators:
|
||||||
|
* [`functions`](https://ckeditor.com/docs/ckeditor4/latest/api/CKEDITOR_dialog_validate.html#method-functions)
|
||||||
|
* [`equals`](https://ckeditor.com/docs/ckeditor4/latest/api/CKEDITOR_dialog_validate.html#method-equals)
|
||||||
|
* [`notEqual`](https://ckeditor.com/docs/ckeditor4/latest/api/CKEDITOR_dialog_validate.html#method-notEqual)
|
||||||
|
* [`cssLength`](https://ckeditor.com/docs/ckeditor4/latest/api/CKEDITOR_dialog_validate.html#method-cssLength)
|
||||||
|
* [`htmlLength`](https://ckeditor.com/docs/ckeditor4/latest/api/CKEDITOR_dialog_validate.html#method-htmlLength)
|
||||||
|
* [`inlineStyle`](https://ckeditor.com/docs/ckeditor4/latest/api/CKEDITOR_dialog_validate.html#method-inlineStyle)
|
||||||
|
* [#5147](https://github.com/ckeditor/ckeditor4/issues/5147): Fixed: The [Accessibility Help](https://ckeditor.com/cke4/addon/a11yhelp) dialog does not contain info about focus being moved back to the editing area upon leaving dialogs.
|
||||||
|
* [#5144](https://github.com/ckeditor/ckeditor4/issues/5144): Fixed: [Menu buttons](https://ckeditor.com/cke4/addon/menubutton) and [panel buttons](https://ckeditor.com/cke4/addon/panelbutton) incorrectly indicate the open status of their associated pop-up menus in the browser's accessibility tree.
|
||||||
|
* [#5022](https://github.com/ckeditor/ckeditor4/issues/5022): Fixed: [Find and Replace](https://ckeditor.com/cke4/addon/find) does not respond to the `Enter` key.
|
||||||
|
|
||||||
|
API changes:
|
||||||
|
|
||||||
|
* [#5184](https://github.com/ckeditor/ckeditor4/issues/5184): Added the [`config.editorplaceholder_delay`](https://ckeditor.com/docs/ckeditor4/latest/api/CKEDITOR_config.html#cfg-editorplaceholder_delay) configuration option allowing to delay placeholder before it is toggled when changing editor content.
|
||||||
|
* [#5184](https://github.com/ckeditor/ckeditor4/issues/5184): Added the [`CKEDITOR.tools#debounce()`](https://ckeditor.com/docs/ckeditor4/latest/api/CKEDITOR_tools.html#method-debounce) function allowing to postpone a passed function execution until the given milliseconds have elapsed since the last time it was invoked.
|
||||||
|
|
||||||
|
## CKEditor 4.19.0
|
||||||
|
|
||||||
|
New features:
|
||||||
|
|
||||||
|
* [#2444](https://github.com/ckeditor/ckeditor4/issues/2444): Togglable toolbar buttons are now exposed as toggle buttons in the browser's accessibility tree.
|
||||||
|
* [#4641](https://github.com/ckeditor/ckeditor4/issues/4641): Added an option allowing to cancel the [Delayed Editor Creation](https://ckeditor.com/docs/ckeditor4/latest/features/delayed_creation.html) feature as a function handle for editor creators ([`CKEDITOR.replace`](https://ckeditor.com/docs/ckeditor4/latest/api/CKEDITOR.html#method-replace), [`CKEDITOR.inline`](https://ckeditor.com/docs/ckeditor4/latest/api/CKEDITOR.html#method-inline), [`CKEDITOR.appendTo`](https://ckeditor.com/docs/ckeditor4/latest/api/CKEDITOR.html#method-appendTo)).
|
||||||
|
* [#4986](https://github.com/ckeditor/ckeditor4/issues/4986): Added [`config.shiftLineBreaks`](https://ckeditor.com/docs/ckeditor4/latest/api/CKEDITOR_config.html#cfg-shiftLineBreaks) allowing to preserve inline elements formatting when the `shift`+`enter` keystroke is used.
|
||||||
|
* [#2445](https://github.com/ckeditor/ckeditor4/issues/2445): Added [`config.applicationTitle`](https://ckeditor.com/docs/ckeditor4/latest/api/CKEDITOR_config.html#cfg-applicationTitle) configuration option allowing to customize or disable the editor's application region label. This option, combined with [`config.title`](https://ckeditor.com/docs/ckeditor4/latest/api/CKEDITOR_config.html#cfg-title), gives much better control over the editor's labels read by screen readers.
|
||||||
|
|
||||||
|
Fixed Issues:
|
||||||
|
|
||||||
|
* [#4543](https://github.com/ckeditor/ckeditor4/issues/4543): Fixed: Toolbar buttons toggle state is not correctly announced by screen readers lacking the information whether the feature is on or off.
|
||||||
|
* [#4052](https://github.com/ckeditor/ckeditor4/issues/4052): Fixed: Editor labels are read incorrectly by screen readers due to invalid editor control type for the [Iframe Editing Area](https://ckeditor.com/cke4/addon/wysiwygarea) editors.
|
||||||
|
* [#1904](https://github.com/ckeditor/ckeditor4/issues/1904): Fixed: Screen readers are not announcing the read-only editor state.
|
||||||
|
* [#4904](https://github.com/ckeditor/ckeditor4/issues/4904): Fixed: Table cell selection and navigation with the `tab` key behavior is inconsistent after adding a new row.
|
||||||
|
* [#3394](https://github.com/ckeditor/ckeditor4/issues/3394): Fixed: [Enhanced image](https://ckeditor.com/cke4/addon/image2) plugin dialog is not supporting URL with query string parameters. Thanks to [Simon Urli](https://github.com/surli)!
|
||||||
|
* [#5049](https://github.com/ckeditor/ckeditor4/issues/5049): Fixed: The editor fails in strict mode due to not following the `use strict` directives in a core editor module.
|
||||||
|
* [#5095](https://github.com/ckeditor/ckeditor4/issues/5095): Fixed: The [clipboard](https://ckeditor.com/cke4/addon/clipboard) plugin shows notification about unsupported file format when the file type is different than `jpg`, `gif`, `png`, not respecting [supported types](https://ckeditor.com/docs/ckeditor4/latest/api/CKEDITOR_fileTools_uploadWidgetDefinition.html#property-supportedTypes) by the [Upload Widget](https://ckeditor.com/cke4/addon/uploadwidget) plugin.
|
||||||
|
* [#4855](https://github.com/ckeditor/ckeditor4/issues/4855): [iOS] Fixed: Focusing toolbar buttons with an enabled VoiceOver screen reader moves the browser focus into an editable area and interrupts button functionality.
|
||||||
|
|
||||||
|
API changes:
|
||||||
|
|
||||||
|
* [#4641](https://github.com/ckeditor/ckeditor4/issues/4641): The [`CKEDITOR.replace`](https://ckeditor.com/docs/ckeditor4/latest/api/CKEDITOR.html#method-replace), [`CKEDITOR.inline`](https://ckeditor.com/docs/ckeditor4/latest/api/CKEDITOR.html#method-inline), [`CKEDITOR.appendTo`](https://ckeditor.com/docs/ckeditor4/latest/api/CKEDITOR.html#method-appendTo) functions are now returning a handle function allowing to cancel the [Delayed Editor Creation](https://ckeditor.com/docs/ckeditor4/latest/features/delayed_creation.html) feature.
|
||||||
|
* [#5095](https://github.com/ckeditor/ckeditor4/issues/5095): Added the [CKEDITOR.plugins.clipboard.addFileMatcher](https://ckeditor.com/docs/ckeditor4/latest/api/CKEDITOR_plugins_clipboard.html#method-addFileMatcher) function allowing to define file formats supported by the [clipboard](https://ckeditor.com/cke4/addon/clipboard) plugin. Trying to paste unsupported files will result in a notification that a file cannot be dropped or pasted into the editor.
|
||||||
|
* [#2445](https://github.com/ckeditor/ckeditor4/issues/2445): Added [`config.applicationTitle`](https://ckeditor.com/docs/ckeditor4/latest/api/CKEDITOR_config.html#cfg-applicationTitle) alongside [`CKEDITOR.editor#applicationTitle`](https://ckeditor.com/docs/ckeditor4/latest/api/CKEDITOR_editor.html#property-applicationTitle) to allow customizing editor's application region label.
|
||||||
|
|
||||||
## CKEditor 4.18.0
|
## CKEditor 4.18.0
|
||||||
|
|
||||||
|
|||||||
@@ -1,8 +1,16 @@
|
|||||||
Software License Agreement
|
Software License Agreement for CKEditor 4 LTS (4.23.0 and above)
|
||||||
==========================
|
================================================================
|
||||||
|
|
||||||
CKEditor - The text editor for Internet - https://ckeditor.com/
|
CKEditor - The text editor for Internet - https://ckeditor.com/ <br>
|
||||||
Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved.
|
Copyright (c) 2003-2023, CKSource Holding sp. z o.o. All rights reserved.
|
||||||
|
|
||||||
|
CKEditor 4 LTS ("Long Term Support") is available under exclusive terms of the [Extended Support Model](https://ckeditor.com/ckeditor-4-support/). [Contact us](https://ckeditor.com/contact/) to obtain a commercial license.
|
||||||
|
|
||||||
|
Software License Agreement for CKEditor 4.22.* and below
|
||||||
|
========================================================
|
||||||
|
|
||||||
|
CKEditor - The text editor for Internet - https://ckeditor.com/ <br>
|
||||||
|
Copyright (c) 2003-2023, CKSource Holding sp. z o.o. All rights reserved.
|
||||||
|
|
||||||
Licensed under the terms of any of the following licenses at your
|
Licensed under the terms of any of the following licenses at your
|
||||||
choice:
|
choice:
|
||||||
@@ -37,7 +45,7 @@ done by developers outside of CKSource with their express permission.
|
|||||||
|
|
||||||
The following libraries are included in CKEditor under the MIT license (see Appendix D):
|
The following libraries are included in CKEditor under the MIT license (see Appendix D):
|
||||||
|
|
||||||
* CKSource Samples Framework (included in the samples) - Copyright (c) 2014-2022, CKSource Holding sp. z o.o.
|
* CKSource Samples Framework (included in the samples) - Copyright (c) 2014-2023, CKSource Holding sp. z o.o.
|
||||||
* PicoModal (included in `samples/js/sf.js`) - Copyright (c) 2012 James Frasca.
|
* PicoModal (included in `samples/js/sf.js`) - Copyright (c) 2012 James Frasca.
|
||||||
* CodeMirror (included in the samples) - Copyright (C) 2014 by Marijn Haverbeke <marijnh@gmail.com> and others.
|
* CodeMirror (included in the samples) - Copyright (C) 2014 by Marijn Haverbeke <marijnh@gmail.com> and others.
|
||||||
* ES6Promise - Copyright (c) 2014 Yehuda Katz, Tom Dale, Stefan Penner and contributors.
|
* ES6Promise - Copyright (c) 2014 Yehuda Katz, Tom Dale, Stefan Penner and contributors.
|
||||||
|
|||||||
@@ -1,8 +1,8 @@
|
|||||||
CKEditor 4
|
CKEditor 4
|
||||||
==========
|
==========
|
||||||
|
|
||||||
Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved.
|
Copyright (c) 2003-2023, CKSource Holding sp. z o.o. All rights reserved.
|
||||||
https://ckeditor.com - See LICENSE.md for license information.
|
https://ckeditor.com - See https://ckeditor.com/legal/ckeditor-oss-license for license information.
|
||||||
|
|
||||||
CKEditor 4 is a text editor to be used inside web pages. It's not a replacement
|
CKEditor 4 is a text editor to be used inside web pages. It's not a replacement
|
||||||
for desktop text editors like Word or OpenOffice, but a component to be used as
|
for desktop text editors like Word or OpenOffice, but a component to be used as
|
||||||
|
|||||||
2
assets/ckeditor/ckeditor/adapters/jquery.js
vendored
@@ -1,5 +1,5 @@
|
|||||||
/*
|
/*
|
||||||
Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved.
|
Copyright (c) 2003-2023, CKSource Holding sp. z o.o. All rights reserved.
|
||||||
For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license
|
For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license
|
||||||
*/
|
*/
|
||||||
(function(a){if("undefined"==typeof a)throw Error("jQuery should be loaded before CKEditor jQuery adapter.");if("undefined"==typeof CKEDITOR)throw Error("CKEditor should be loaded before CKEditor jQuery adapter.");CKEDITOR.config.jqueryOverrideVal="undefined"==typeof CKEDITOR.config.jqueryOverrideVal?!0:CKEDITOR.config.jqueryOverrideVal;a.extend(a.fn,{ckeditorGet:function(){var a=this.eq(0).data("ckeditorInstance");if(!a)throw"CKEditor is not initialized yet, use ckeditor() with a callback.";return a},
|
(function(a){if("undefined"==typeof a)throw Error("jQuery should be loaded before CKEditor jQuery adapter.");if("undefined"==typeof CKEDITOR)throw Error("CKEditor should be loaded before CKEditor jQuery adapter.");CKEDITOR.config.jqueryOverrideVal="undefined"==typeof CKEDITOR.config.jqueryOverrideVal?!0:CKEDITOR.config.jqueryOverrideVal;a.extend(a.fn,{ckeditorGet:function(){var a=this.eq(0).data("ckeditorInstance");if(!a)throw"CKEditor is not initialized yet, use ckeditor() with a callback.";return a},
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
/**
|
/**
|
||||||
* @license Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved.
|
* @license Copyright (c) 2003-2023, CKSource Holding sp. z o.o. All rights reserved.
|
||||||
* For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license/
|
* For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license/
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
|||||||
1296
assets/ckeditor/ckeditor/ckeditor.js
vendored
@@ -1,5 +1,5 @@
|
|||||||
/**
|
/**
|
||||||
* @license Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved.
|
* @license Copyright (c) 2003-2023, CKSource Holding sp. z o.o. All rights reserved.
|
||||||
* For licensing, see https://ckeditor.com/legal/ckeditor-oss-license
|
* For licensing, see https://ckeditor.com/legal/ckeditor-oss-license
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
/*
|
/*
|
||||||
Copyright (c) 2003-2022, CKSource Holding sp. z o.o. All rights reserved.
|
Copyright (c) 2003-2023, CKSource Holding sp. z o.o. All rights reserved.
|
||||||
For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license
|
For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
|||||||