Compare commits
76 commits
| Author | SHA1 | Date | |
|---|---|---|---|
| 1c5e9c87af | |||
| d0de8db029 | |||
| b535d1c8f9 | |||
| 0100daf8b9 | |||
| 6e2dd6b555 | |||
| a80010c0bc | |||
| fdb9ce6033 | |||
| fcac609728 | |||
| 6c6aef8309 | |||
| 4a6460f129 | |||
| 3eb05bef6d | |||
| 9ee1a3bd49 | |||
| d488b565d9 | |||
| aecedc6c90 | |||
| f77619708e | |||
| 3422a87410 | |||
| cbecab344b | |||
| ffddf5b7d1 | |||
| 5fcdeb60d5 | |||
| c9cbcc9d55 | |||
| 88098f5b25 | |||
| aeced67121 | |||
| 096a8cbd0b | |||
| e2c6e291e2 | |||
| 392ff8e459 | |||
| 5e4ce6713b | |||
| 82d5292b05 | |||
| 099e8ef11b | |||
| 55c1dc2f75 | |||
| 1a0f4b17e1 | |||
| 73e2890409 | |||
| c397e94f38 | |||
| eeb6e1b397 | |||
| 3b5fcafd3f | |||
| f784a61cc7 | |||
| 28546434dc | |||
| 1dc1c2601d | |||
| 5376d1c611 | |||
| 569948b7bb | |||
| 9c4c223390 | |||
| aebf065449 | |||
| a54ebfd749 | |||
| f20e757777 | |||
| 7cbbbc0a3a | |||
| 9c465422b6 | |||
| 3f36b0899b | |||
| 292f3d0513 | |||
| 61af03b342 | |||
| 8e5761e62a | |||
| b4e73d50c6 | |||
| 8c1cfcfc11 | |||
| b003bbcc52 | |||
| 2beebb9c9f | |||
| a0d4ed2497 | |||
| 07de15c795 | |||
| 96639c4d4b | |||
| d4f765c400 | |||
| 920348637e | |||
| fbc6c215ae | |||
| 691863b78e | |||
| 31fe762077 | |||
| 748000afd9 | |||
| 4379e9fb89 | |||
| 8874fe4298 | |||
| e77a17b82f | |||
| 63c17a6cdf | |||
| 39ba7e5f21 | |||
| d6653400c6 | |||
| 17bf42c895 | |||
| fc4532e89b | |||
| d4d3884d7c | |||
| 619a20394e | |||
| 7fdd70022b | |||
| 3c9102167d | |||
| fdaf8a18a2 | |||
| e4c50ca785 |
428 changed files with 13648 additions and 641 deletions
|
|
@ -1,2 +1,5 @@
|
||||||
.git
|
.git
|
||||||
.env
|
.env
|
||||||
|
*.pyc
|
||||||
|
__pycache__
|
||||||
|
dynamicweb/settings/dynamic.py
|
||||||
|
|
|
||||||
60
.env.docker
Normal file
60
.env.docker
Normal file
|
|
@ -0,0 +1,60 @@
|
||||||
|
# Dev defaults for docker compose. Override any value in a local ".env" file.
|
||||||
|
# DEBUG=True makes settings load local.py (ALLOWED_HOSTS=*, console email).
|
||||||
|
DEBUG=True
|
||||||
|
ENABLE_LOGGING=False
|
||||||
|
LOG_LEVEL=DEBUG
|
||||||
|
|
||||||
|
# Leave empty: the entrypoint generates and persists one in the "appdata" volume
|
||||||
|
DJANGO_SECRET_KEY=
|
||||||
|
|
||||||
|
POSTGRES_DB=app
|
||||||
|
POSTGRES_USER=app
|
||||||
|
POSTGRES_PASSWORD=app
|
||||||
|
POSTGRES_HOST=db
|
||||||
|
|
||||||
|
CELERY_BROKER_URL=redis://redis:6379/0
|
||||||
|
CELERY_RESULT_BACKEND=redis://redis:6379/0
|
||||||
|
CACHE_URL=redis://redis:6379/1
|
||||||
|
|
||||||
|
# Host -> urlconf. Add the VPS IP / domain here if you access it that way.
|
||||||
|
UNGLEICH_SITE_CONFIGS={"ungleich.ch":{"MULTISITE_CMS_URL":"dynamicweb.urls"},"blog.ungleich.ch":{"MULTISITE_CMS_URL":"dynamicweb.urls"},"comic.ungleich.ch":{"MULTISITE_CMS_URL":"dynamicweb.urls"},"digitalglarus.ch":{"MULTISITE_CMS_URL":"dynamicweb.urls"},"datacenterlight.ch":{"MULTISITE_CMS_URL":"dynamicweb.urls"},"rails-hosting.ch":{"MULTISITE_CMS_URL":"dynamicweb.urls"},"django-hosting.ch":{"MULTISITE_CMS_URL":"dynamicweb.urls"},"node-hosting.ch":{"MULTISITE_CMS_URL":"dynamicweb.urls"},"devuanhosting.ch":{"MULTISITE_CMS_URL":"dynamicweb.urls"},"devuanhosting.com":{"MULTISITE_CMS_URL":"dynamicweb.urls"},"ipv6onlyhosting.com":{"MULTISITE_CMS_URL":"dynamicweb.urls"},"digitalezukunft.ch":{"MULTISITE_CMS_URL":"dynamicweb.urls"},"hack4glarus.ch":{"MULTISITE_CMS_URL":"dynamicweb.urls"},"xn--nglarus-n2a.ch":{"MULTISITE_CMS_URL":"dynamicweb.urls"},"localhost:8000":{"MULTISITE_CMS_URL":"dynamicweb.urls"},"127.0.0.1:8000":{"MULTISITE_CMS_URL":"dynamicweb.urls"}}
|
||||||
|
UNGLEICH_BLOG_SITE_ID=1
|
||||||
|
MULTISITE_CMS_FALLBACK=
|
||||||
|
|
||||||
|
EMAIL_HOST=localhost
|
||||||
|
DCL_ERROR_EMAILS_TO=dev@example.com
|
||||||
|
ADMIN_EMAIL=dev@example.com
|
||||||
|
DCL_SUPPORT_FROM_ADDRESS=dev@example.com
|
||||||
|
WEBHOOK_SECRET=dev
|
||||||
|
RECAPTCHA_PUBLIC_KEY=dev
|
||||||
|
RECAPTCHA_PRIVATE_KEY=dev
|
||||||
|
STRIPE_API_PRIVATE_KEY=
|
||||||
|
STRIPE_API_PUBLIC_KEY=
|
||||||
|
STRIPE_API_PRIVATE_KEY_TEST=
|
||||||
|
|
||||||
|
# Values the settings require; the app has no defaults for them
|
||||||
|
LDAP_CUSTOMER_GROUP_ID=0
|
||||||
|
LDAP_DEFAULT_START_UID=10000
|
||||||
|
PRE_EU_VAT_RATE=0
|
||||||
|
VM_BASE_PRICE=0
|
||||||
|
|
||||||
|
# OpenNebula / LDAP are not available in the test env
|
||||||
|
OPENNEBULA_USERNAME=oneadmin
|
||||||
|
OPENNEBULA_PASSWORD=opennebula
|
||||||
|
OPENNEBULA_PROTOCOL=http
|
||||||
|
# "test_domain" skips the import-time VMTemplate query (tables do not exist before migrate)
|
||||||
|
OPENNEBULA_DOMAIN=test_domain
|
||||||
|
OPENNEBULA_PORT=2633
|
||||||
|
OPENNEBULA_ENDPOINT=/RPC2
|
||||||
|
|
||||||
|
# Create sample pages/users on start, only into a database without page content
|
||||||
|
# (idempotent). Set to False to turn off;
|
||||||
|
# remove existing dummy data with: docker compose exec web python manage.py seed_dummy_data --purge
|
||||||
|
SEED_DUMMY_DATA=True
|
||||||
|
# Fixed dev login: dummy-admin@example.com / this password
|
||||||
|
DUMMY_ADMIN_PASSWORD=dummy-admin
|
||||||
|
# Integer settings (silence "failed to get env value" log lines)
|
||||||
|
EMAIL_PORT=25
|
||||||
|
CELERY_MAX_RETRIES=5
|
||||||
|
FIRST_VM_ID_AFTER_EU_VAT=0
|
||||||
|
MAX_TIME_TO_WAIT_FOR_VM_TERMINATE=15
|
||||||
7
.gitignore
vendored
7
.gitignore
vendored
|
|
@ -47,3 +47,10 @@ secret-key
|
||||||
2024-*
|
2024-*
|
||||||
2025-*
|
2025-*
|
||||||
2023-*
|
2023-*
|
||||||
|
|
||||||
|
.env
|
||||||
|
dynamicweb/settings/dynamic.py
|
||||||
|
|
||||||
|
# database dumps are kept out of git (personal data)
|
||||||
|
db-init/*.sql
|
||||||
|
db-init/*.sql.gz
|
||||||
|
|
|
||||||
121
DOCKER.md
Normal file
121
DOCKER.md
Normal file
|
|
@ -0,0 +1,121 @@
|
||||||
|
# Running dynamicweb with Docker Compose
|
||||||
|
|
||||||
|
Postgres 18, Redis, the web app (Django 6.1, Python 3.12) and a Celery worker in one stack. Only Docker is needed.
|
||||||
|
|
||||||
|
## Quick start (VPS or local)
|
||||||
|
|
||||||
|
```sh
|
||||||
|
git clone <this repo> && cd dynamicweb
|
||||||
|
docker compose up -d --build
|
||||||
|
docker compose logs -f web # ready when it prints "Listening at"
|
||||||
|
```
|
||||||
|
|
||||||
|
The first start takes a few minutes (image build, migrations, secret key, sample data).
|
||||||
|
`docker compose ps` shows "Up" about 1.5 minutes before the site answers, so wait for the log line.
|
||||||
|
Open port **8000** in the server firewall, then in your browser go to:
|
||||||
|
|
||||||
|
- **VPS:** `http://185.203.114.159:8000/dev-sites/`
|
||||||
|
- **Local machine:** `http://localhost:8000/dev-sites/`
|
||||||
|
|
||||||
|
That page lists all 14 sites as links. Each opens as its own site, so you can keep several
|
||||||
|
open in different tabs. (On a VPS the links look like `http://<domain>.<ip>.sslip.io:8000/`;
|
||||||
|
sslip.io is public wildcard DNS, so your *browser* needs internet, the server doesn't.)
|
||||||
|
|
||||||
|
Admin login: `dummy-admin@example.com` / `dummy-admin` at `/en-us/admin/login/`
|
||||||
|
(on any site address).
|
||||||
|
|
||||||
|
## What you will see
|
||||||
|
|
||||||
|
- Every site has sample pages (Home, About, Services, Pricing, Contact) with realistic text.
|
||||||
|
- ungleich.ch (and blog, comic), datacenterlight.ch and digitalglarus.ch use their own
|
||||||
|
design. **The templates of the other 9 sites are not known**, so they show the plain
|
||||||
|
Digital Glarus page. That is a test-data limit, not a bug: in production every site's
|
||||||
|
pages and template come from the CMS database.
|
||||||
|
- OpenNebula (VM creation), LDAP accounts and Stripe payments are placeholders and will not
|
||||||
|
work (logins use plain Django authentication when no LDAP server is set). Email is printed in the web log.
|
||||||
|
|
||||||
|
## Deploying with your own Postgres (production-like)
|
||||||
|
|
||||||
|
Create `.env` next to `docker-compose.yml`; values there override `.env.docker`:
|
||||||
|
|
||||||
|
```
|
||||||
|
POSTGRES_HOST=<host> # PostgreSQL 14 or newer
|
||||||
|
POSTGRES_PORT=5432
|
||||||
|
POSTGRES_DB=<db>
|
||||||
|
POSTGRES_USER=<user>
|
||||||
|
POSTGRES_PASSWORD=<password>
|
||||||
|
SEED_DUMMY_DATA=False
|
||||||
|
DEBUG=False
|
||||||
|
UNGLEICH_SITE_CONFIGS=<your real JSON>
|
||||||
|
```
|
||||||
|
|
||||||
|
plus your real OpenNebula, LDAP, Stripe, email and reCAPTCHA values. Then:
|
||||||
|
|
||||||
|
```sh
|
||||||
|
docker compose up -d --build --no-deps web celery redis
|
||||||
|
```
|
||||||
|
|
||||||
|
Checklist:
|
||||||
|
|
||||||
|
- The database already holds the pages, sites and templates (they are stored in the
|
||||||
|
CMS; nothing is created for you). Sample data is skipped anyway when it finds page content.
|
||||||
|
- `DEBUG=False` loads the production settings and turns off the `/dev-sites/` switcher,
|
||||||
|
so reach each site by its real domain name.
|
||||||
|
- The web container runs gunicorn (static files via WhiteNoise); put a TLS-terminating proxy in
|
||||||
|
front. Behind one that sets `X-Forwarded-Proto`, set `BEHIND_TLS_PROXY=True`.
|
||||||
|
|
||||||
|
## Image and Kubernetes
|
||||||
|
|
||||||
|
One image, `dynamicweb:latest`, serves every role; the `ROLE` variable picks it (compose sets
|
||||||
|
`ROLE=celery` on the worker):
|
||||||
|
|
||||||
|
- `web` (default): migrations, then gunicorn on port 8000
|
||||||
|
- `celery`: the Celery worker
|
||||||
|
- `migrate`: run the migrations and exit
|
||||||
|
|
||||||
|
The entrypoint only picks the role, creates a secret key if `DJANGO_SECRET_KEY` is empty and waits for
|
||||||
|
Postgres. The settings read `POSTGRES_*` directly, so you can also override `command:` (for example
|
||||||
|
`python manage.py migrate` in an init container); then set `DJANGO_SECRET_KEY` yourself.
|
||||||
|
`migrate` is the project's own: it also copes with a restored old database and creates the sites
|
||||||
|
from `UNGLEICH_SITE_CONFIGS`.
|
||||||
|
See [K8S.md](K8S.md) for the Kubernetes deployment.
|
||||||
|
|
||||||
|
## Configuration
|
||||||
|
|
||||||
|
- `.env.docker`: committed dev defaults. `.env`: your overrides (git-ignored).
|
||||||
|
- Add a site: add it to `UNGLEICH_SITE_CONFIGS` (a `Site` row is created on start).
|
||||||
|
- Web server tuning: `GUNICORN_WORKERS` (3), `GUNICORN_TIMEOUT` (120). `RUN_MIGRATIONS=False`
|
||||||
|
skips the start-up migrations.
|
||||||
|
- Sample data off: `SEED_DUMMY_DATA=False`. Remove it later:
|
||||||
|
`docker compose exec web python manage.py seed_dummy_data --purge`.
|
||||||
|
- Restore a real dump: put a `.sql` or `.sql.gz` file in `db-init/`, then
|
||||||
|
`docker compose down -v` and start again (dumps are git-ignored).
|
||||||
|
|
||||||
|
## Checking that everything works
|
||||||
|
|
||||||
|
```sh
|
||||||
|
docker compose exec web python smoke_test.py
|
||||||
|
```
|
||||||
|
|
||||||
|
Opens all sites, their pages and the admin login, and exits non-zero on any failure.
|
||||||
|
|
||||||
|
## Useful commands
|
||||||
|
|
||||||
|
```sh
|
||||||
|
docker compose ps # what is running
|
||||||
|
docker compose logs -f web celery # logs
|
||||||
|
docker compose up -d --build # after code changes (code is baked into the image)
|
||||||
|
docker compose down # stop, keep data (-v wipes it)
|
||||||
|
```
|
||||||
|
|
||||||
|
## Troubleshooting
|
||||||
|
|
||||||
|
- **The build fails at `apk add` with "temporary error (try again later)"**, or hangs there:
|
||||||
|
the server's DNS is IPv6-only, which containers on Docker's default network cannot use.
|
||||||
|
Give Docker IPv4 resolvers and rebuild:
|
||||||
|
|
||||||
|
```sh
|
||||||
|
echo '{"dns": ["1.1.1.1", "9.9.9.9"]}' > /etc/docker/daemon.json # merge if the file exists
|
||||||
|
systemctl restart docker
|
||||||
|
docker compose up -d --build
|
||||||
|
```
|
||||||
13
Dockerfile
13
Dockerfile
|
|
@ -1,26 +1,19 @@
|
||||||
# FROM python:3.10.0-alpine3.15
|
FROM python:3.12-alpine3.20
|
||||||
FROM python:3.5-alpine3.12
|
|
||||||
|
|
||||||
WORKDIR /usr/src/app
|
WORKDIR /usr/src/app
|
||||||
|
|
||||||
RUN apk add --update --no-cache \
|
RUN apk add --update --no-cache \
|
||||||
git \
|
git \
|
||||||
build-base \
|
build-base \
|
||||||
openldap-dev \
|
|
||||||
python3-dev \
|
python3-dev \
|
||||||
postgresql-dev \
|
libpq-dev \
|
||||||
jpeg-dev \
|
jpeg-dev \
|
||||||
libxml2-dev \
|
libxml2-dev \
|
||||||
libxslt-dev \
|
libxslt-dev \
|
||||||
libmemcached-dev \
|
|
||||||
zlib-dev \
|
zlib-dev \
|
||||||
|
libffi-dev \
|
||||||
&& rm -rf /var/cache/apk/*
|
&& rm -rf /var/cache/apk/*
|
||||||
|
|
||||||
## For alpine 3.15 replace postgresql-dev with libpq-dev
|
|
||||||
|
|
||||||
# FIX https://github.com/python-ldap/python-ldap/issues/432
|
|
||||||
RUN echo 'INPUT ( libldap.so )' > /usr/lib/libldap_r.so
|
|
||||||
|
|
||||||
COPY requirements.txt ./
|
COPY requirements.txt ./
|
||||||
|
|
||||||
# Pillow seems to need LIBRARY_PATH set as follows: (see: https://github.com/python-pillow/Pillow/issues/1763#issuecomment-222383534)
|
# Pillow seems to need LIBRARY_PATH set as follows: (see: https://github.com/python-pillow/Pillow/issues/1763#issuecomment-222383534)
|
||||||
|
|
|
||||||
54
K8S.md
Normal file
54
K8S.md
Normal file
|
|
@ -0,0 +1,54 @@
|
||||||
|
# Deploying dynamicweb on Kubernetes
|
||||||
|
|
||||||
|
The Helm chart in [charts/dynamicweb/](charts/dynamicweb/) runs the web app, a Celery worker,
|
||||||
|
Redis, a volume for uploaded media and an Ingress, and runs the database migrations as a Job
|
||||||
|
before each install or upgrade. PostgreSQL 18 is **not** in the chart: create it and point the app at it.
|
||||||
|
|
||||||
|
> Tested on a local `kind` cluster with a scratch Postgres.
|
||||||
|
|
||||||
|
## Steps
|
||||||
|
|
||||||
|
1. **Push the image** (built once from the repo):
|
||||||
|
```sh
|
||||||
|
docker compose build
|
||||||
|
docker tag dynamicweb:latest <registry>/dynamicweb:<version>
|
||||||
|
docker push <registry>/dynamicweb:<version>
|
||||||
|
```
|
||||||
|
2. **Database.** Create an empty database and user. To keep old data, restore the dump into it now
|
||||||
|
(`psql -h <host> -U <user> <db> < dump.sql`). The Job in step 5 migrates it to the new schema.
|
||||||
|
3. **Env file and Secret.** Copy `.env.docker`, set your real values, then store it:
|
||||||
|
```
|
||||||
|
DEBUG=False
|
||||||
|
SEED_DUMMY_DATA=False
|
||||||
|
DJANGO_SECRET_KEY=<a long random string>
|
||||||
|
POSTGRES_HOST=<host> POSTGRES_PORT=5432 POSTGRES_DB / POSTGRES_USER / POSTGRES_PASSWORD
|
||||||
|
BEHIND_TLS_PROXY=True # TLS ends at the ingress
|
||||||
|
UNGLEICH_SITE_CONFIGS=<your real JSON>
|
||||||
|
```
|
||||||
|
plus your OpenNebula, LDAP, Stripe, email and reCAPTCHA values. Leave the Redis URLs alone.
|
||||||
|
```sh
|
||||||
|
kubectl create secret generic dynamicweb --from-env-file=<your env file>
|
||||||
|
```
|
||||||
|
4. **Values.** Edit `image.repository`, `image.tag` and `ingress.hosts` (one per domain, with `www.`
|
||||||
|
variants) in [charts/dynamicweb/values.yaml](charts/dynamicweb/values.yaml), or pass them with `--set`.
|
||||||
|
5. **Install.** Helm starts the pods and runs the migrate Job (on upgrades, before the rollout). The site answers once the Job completes:
|
||||||
|
```sh
|
||||||
|
helm install dynamicweb charts/dynamicweb
|
||||||
|
kubectl logs -f job/dynamicweb-migrate # a few minutes
|
||||||
|
kubectl logs -f deploy/dynamicweb-web # ready at "Listening at"
|
||||||
|
```
|
||||||
|
6. **Check:** `curl -I -H 'Host: ungleich.ch' http://<ingress-address>/en-us/` returns 200. Admin is
|
||||||
|
at `/en-us/admin/login/` on any site's address.
|
||||||
|
|
||||||
|
## Good to know
|
||||||
|
|
||||||
|
- **Update:** push a new tag, then `helm upgrade dynamicweb charts/dynamicweb --set image.tag=<new>`.
|
||||||
|
The migrate Job runs again first.
|
||||||
|
- **Scale web:** `--set web.replicas=2 --set media.accessMode=ReadWriteMany` (every pod must see the
|
||||||
|
same uploads, so the storage class has to support it).
|
||||||
|
- **Keep the original `Host` header** at the ingress (the default). The site is chosen from the host,
|
||||||
|
and every domain must be in `UNGLEICH_SITE_CONFIGS` and `ALLOWED_HOSTS` (`dynamicweb/settings/prod.py`).
|
||||||
|
- **The Secret must exist before `helm install`** (the Job reads it).
|
||||||
|
- **Logs:** `kubectl logs deploy/dynamicweb-web`, `deploy/dynamicweb-celery`.
|
||||||
|
- **Why a database Service named `postgres` is safe:** the pods set `enableServiceLinks: false`;
|
||||||
|
otherwise Kubernetes injects `POSTGRES_PORT=tcp://...` and the app crashes.
|
||||||
|
|
@ -18,3 +18,4 @@ Website for ungleich GmbH
|
||||||
- /hosting/nodejs/
|
- /hosting/nodejs/
|
||||||
--
|
--
|
||||||
|
|
||||||
|
|
||||||
|
|
|
||||||
7
VENDORED.md
Normal file
7
VENDORED.md
Normal file
|
|
@ -0,0 +1,7 @@
|
||||||
|
# Vendored packages
|
||||||
|
|
||||||
|
Copied into the repo because upstream is abandoned (last release 2016) and does not
|
||||||
|
run on Django 2+. Only compatibility edits were made; tables and migrations are unchanged.
|
||||||
|
|
||||||
|
- `cmsplugin_filer_*` (cmsplugin-filer 1.1.3, BSD, license in each folder)
|
||||||
|
- `stored_messages` (django-stored-messages, BSD, license in folder)
|
||||||
|
|
@ -1,4 +1,4 @@
|
||||||
{% load staticfiles i18n%}
|
{% load static i18n%}
|
||||||
<!DOCTYPE html>
|
<!DOCTYPE html>
|
||||||
<html lang={{language}}>
|
<html lang={{language}}>
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -1,4 +1,4 @@
|
||||||
{% load staticfiles i18n%}
|
{% load static i18n%}
|
||||||
|
|
||||||
<!DOCTYPE html>
|
<!DOCTYPE html>
|
||||||
<html lang="en">
|
<html lang="en">
|
||||||
|
|
|
||||||
|
|
@ -1,12 +1,14 @@
|
||||||
from django.conf.urls import url
|
from django.urls import re_path
|
||||||
|
|
||||||
from .views import IndexView, LoginView, ContactView
|
from .views import IndexView, LoginView, ContactView
|
||||||
|
|
||||||
|
|
||||||
|
app_name = 'alplora'
|
||||||
|
|
||||||
urlpatterns = [
|
urlpatterns = [
|
||||||
url(r'^$', IndexView.as_view(), name='index'),
|
re_path(r'^$', IndexView.as_view(), name='index'),
|
||||||
url(r'login/', LoginView.as_view(), name='login'),
|
re_path(r'login/', LoginView.as_view(), name='login'),
|
||||||
url(r'contact', ContactView.as_view(), name='contact'),
|
re_path(r'contact', ContactView.as_view(), name='contact'),
|
||||||
# url(r'^/beta-program/?$', BetaProgramView.as_view(), name='beta'),
|
# re_path(r'^/beta-program/?$', BetaProgramView.as_view(), name='beta'),
|
||||||
# url(r'^/landing/?$', LandingProgramView.as_view(), name='landing'),
|
# re_path(r'^/landing/?$', LandingProgramView.as_view(), name='landing'),
|
||||||
]
|
]
|
||||||
|
|
|
||||||
|
|
@ -1,7 +1,7 @@
|
||||||
from django.views.generic import TemplateView
|
from django.views.generic import TemplateView
|
||||||
|
|
||||||
from django.utils.translation import get_language, get_language_info
|
from django.utils.translation import get_language, get_language_info
|
||||||
from django.utils.translation import ugettext_lazy as _
|
from django.utils.translation import gettext_lazy as _
|
||||||
from django.views.generic.edit import FormView
|
from django.views.generic.edit import FormView
|
||||||
from django.contrib import messages
|
from django.contrib import messages
|
||||||
from django.shortcuts import render
|
from django.shortcuts import render
|
||||||
|
|
|
||||||
6
charts/dynamicweb/Chart.yaml
Normal file
6
charts/dynamicweb/Chart.yaml
Normal file
|
|
@ -0,0 +1,6 @@
|
||||||
|
apiVersion: v2
|
||||||
|
name: dynamicweb
|
||||||
|
description: ungleich dynamicweb (Django CMS) with a Celery worker and Redis
|
||||||
|
type: application
|
||||||
|
version: 0.1.0
|
||||||
|
appVersion: "latest"
|
||||||
4
charts/dynamicweb/templates/_helpers.tpl
Normal file
4
charts/dynamicweb/templates/_helpers.tpl
Normal file
|
|
@ -0,0 +1,4 @@
|
||||||
|
{{- define "dw.image" -}}{{ .Values.image.repository }}:{{ .Values.image.tag }}{{- end -}}
|
||||||
|
{{- define "dw.pod" -}}
|
||||||
|
enableServiceLinks: false # else a Service named "postgres" injects POSTGRES_PORT=tcp://...
|
||||||
|
{{- end -}}
|
||||||
16
charts/dynamicweb/templates/celery.yaml
Normal file
16
charts/dynamicweb/templates/celery.yaml
Normal file
|
|
@ -0,0 +1,16 @@
|
||||||
|
apiVersion: apps/v1
|
||||||
|
kind: Deployment
|
||||||
|
metadata: {name: {{ .Release.Name }}-celery}
|
||||||
|
spec:
|
||||||
|
replicas: {{ .Values.celery.replicas }}
|
||||||
|
selector: {matchLabels: {app: {{ .Release.Name }}-celery}}
|
||||||
|
template:
|
||||||
|
metadata: {labels: {app: {{ .Release.Name }}-celery}}
|
||||||
|
spec:
|
||||||
|
{{- include "dw.pod" . | nindent 6 }}
|
||||||
|
containers:
|
||||||
|
- name: celery
|
||||||
|
image: {{ include "dw.image" . }}
|
||||||
|
imagePullPolicy: {{ .Values.image.pullPolicy }}
|
||||||
|
env: [{name: ROLE, value: celery}]
|
||||||
|
envFrom: [{secretRef: {name: {{ .Values.existingSecret }}}}]
|
||||||
15
charts/dynamicweb/templates/ingress.yaml
Normal file
15
charts/dynamicweb/templates/ingress.yaml
Normal file
|
|
@ -0,0 +1,15 @@
|
||||||
|
apiVersion: networking.k8s.io/v1
|
||||||
|
kind: Ingress
|
||||||
|
metadata: {name: {{ .Release.Name }}}
|
||||||
|
spec:
|
||||||
|
ingressClassName: {{ .Values.ingress.className }}
|
||||||
|
{{- with .Values.ingress.tlsSecret }}
|
||||||
|
tls: [{secretName: {{ . }}, hosts: {{ $.Values.ingress.hosts | toJson }}}]
|
||||||
|
{{- end }}
|
||||||
|
rules:
|
||||||
|
{{- range .Values.ingress.hosts }}
|
||||||
|
- host: {{ . }}
|
||||||
|
http:
|
||||||
|
paths:
|
||||||
|
- {path: /, pathType: Prefix, backend: {service: {name: {{ $.Release.Name }}-web, port: {number: 80}}}}
|
||||||
|
{{- end }}
|
||||||
25
charts/dynamicweb/templates/migrate-job.yaml
Normal file
25
charts/dynamicweb/templates/migrate-job.yaml
Normal file
|
|
@ -0,0 +1,25 @@
|
||||||
|
# Runs after the first install and before each upgrade. Web pods don't migrate.
|
||||||
|
# (After install it needs Redis, which the app uses while loading, so it waits for it.)
|
||||||
|
apiVersion: batch/v1
|
||||||
|
kind: Job
|
||||||
|
metadata:
|
||||||
|
name: {{ .Release.Name }}-migrate
|
||||||
|
annotations:
|
||||||
|
"helm.sh/hook": post-install,pre-upgrade
|
||||||
|
"helm.sh/hook-delete-policy": before-hook-creation
|
||||||
|
spec:
|
||||||
|
backoffLimit: 2
|
||||||
|
template:
|
||||||
|
spec:
|
||||||
|
{{- include "dw.pod" . | nindent 6 }}
|
||||||
|
restartPolicy: Never
|
||||||
|
initContainers:
|
||||||
|
- name: wait-for-redis
|
||||||
|
image: redis:6-alpine
|
||||||
|
command: [sh, -c, "until redis-cli -h redis ping; do sleep 2; done"]
|
||||||
|
containers:
|
||||||
|
- name: migrate
|
||||||
|
image: {{ include "dw.image" . }}
|
||||||
|
imagePullPolicy: {{ .Values.image.pullPolicy }}
|
||||||
|
env: [{name: ROLE, value: migrate}]
|
||||||
|
envFrom: [{secretRef: {name: {{ .Values.existingSecret }}}}]
|
||||||
21
charts/dynamicweb/templates/redis.yaml
Normal file
21
charts/dynamicweb/templates/redis.yaml
Normal file
|
|
@ -0,0 +1,21 @@
|
||||||
|
# The app's env points at a Service called "redis" (CELERY_BROKER_URL=redis://redis:6379/0)
|
||||||
|
apiVersion: apps/v1
|
||||||
|
kind: Deployment
|
||||||
|
metadata: {name: redis}
|
||||||
|
spec:
|
||||||
|
replicas: 1
|
||||||
|
selector: {matchLabels: {app: redis}}
|
||||||
|
template:
|
||||||
|
metadata: {labels: {app: redis}}
|
||||||
|
spec:
|
||||||
|
containers:
|
||||||
|
- name: redis
|
||||||
|
image: redis:6-alpine
|
||||||
|
ports: [{containerPort: 6379}]
|
||||||
|
---
|
||||||
|
apiVersion: v1
|
||||||
|
kind: Service
|
||||||
|
metadata: {name: redis}
|
||||||
|
spec:
|
||||||
|
selector: {app: redis}
|
||||||
|
ports: [{port: 6379}]
|
||||||
39
charts/dynamicweb/templates/web.yaml
Normal file
39
charts/dynamicweb/templates/web.yaml
Normal file
|
|
@ -0,0 +1,39 @@
|
||||||
|
apiVersion: apps/v1
|
||||||
|
kind: Deployment
|
||||||
|
metadata: {name: {{ .Release.Name }}-web}
|
||||||
|
spec:
|
||||||
|
replicas: {{ .Values.web.replicas }}
|
||||||
|
selector: {matchLabels: {app: {{ .Release.Name }}-web}}
|
||||||
|
template:
|
||||||
|
metadata: {labels: {app: {{ .Release.Name }}-web}}
|
||||||
|
spec:
|
||||||
|
{{- include "dw.pod" . | nindent 6 }}
|
||||||
|
containers:
|
||||||
|
- name: web
|
||||||
|
image: {{ include "dw.image" . }}
|
||||||
|
imagePullPolicy: {{ .Values.image.pullPolicy }}
|
||||||
|
env: [{name: RUN_MIGRATIONS, value: "False"}] # the migrate Job does it
|
||||||
|
envFrom: [{secretRef: {name: {{ .Values.existingSecret }}}}]
|
||||||
|
ports: [{containerPort: 8000}]
|
||||||
|
readinessProbe: {tcpSocket: {port: 8000}, periodSeconds: 10}
|
||||||
|
volumeMounts: [{name: media, mountPath: /usr/src/app/media}]
|
||||||
|
volumes:
|
||||||
|
- name: media
|
||||||
|
persistentVolumeClaim: {claimName: {{ .Release.Name }}-media}
|
||||||
|
---
|
||||||
|
apiVersion: v1
|
||||||
|
kind: Service
|
||||||
|
metadata: {name: {{ .Release.Name }}-web}
|
||||||
|
spec:
|
||||||
|
selector: {app: {{ .Release.Name }}-web}
|
||||||
|
ports: [{port: 80, targetPort: 8000}]
|
||||||
|
---
|
||||||
|
apiVersion: v1
|
||||||
|
kind: PersistentVolumeClaim
|
||||||
|
metadata: {name: {{ .Release.Name }}-media}
|
||||||
|
spec:
|
||||||
|
accessModes: [{{ .Values.media.accessMode }}]
|
||||||
|
{{- with .Values.media.storageClass }}
|
||||||
|
storageClassName: {{ . }}
|
||||||
|
{{- end }}
|
||||||
|
resources: {requests: {storage: {{ .Values.media.size }}}}
|
||||||
24
charts/dynamicweb/values.yaml
Normal file
24
charts/dynamicweb/values.yaml
Normal file
|
|
@ -0,0 +1,24 @@
|
||||||
|
image:
|
||||||
|
repository: REGISTRY/dynamicweb
|
||||||
|
tag: VERSION
|
||||||
|
pullPolicy: IfNotPresent
|
||||||
|
|
||||||
|
# Secret holding the app's environment (kubectl create secret generic ... --from-env-file=...)
|
||||||
|
# It must exist before the install. See K8S.md.
|
||||||
|
existingSecret: dynamicweb
|
||||||
|
|
||||||
|
# One host per domain in UNGLEICH_SITE_CONFIGS (add the www. variants)
|
||||||
|
ingress:
|
||||||
|
className: nginx
|
||||||
|
hosts: [ungleich.ch, www.ungleich.ch]
|
||||||
|
tlsSecret: "" # set to enable TLS for the hosts above
|
||||||
|
|
||||||
|
web:
|
||||||
|
replicas: 1
|
||||||
|
celery:
|
||||||
|
replicas: 1
|
||||||
|
|
||||||
|
media:
|
||||||
|
size: 5Gi
|
||||||
|
accessMode: ReadWriteOnce # ReadWriteMany if web.replicas > 1
|
||||||
|
storageClass: ""
|
||||||
|
|
@ -1,4 +1,4 @@
|
||||||
{% load cms_tags staticfiles %}
|
{% load cms_tags static %}
|
||||||
{% load i18n %}
|
{% load i18n %}
|
||||||
<!-- Page Header -->
|
<!-- Page Header -->
|
||||||
<!-- Set your background image for this header on the line below. -->
|
<!-- Set your background image for this header on the line below. -->
|
||||||
|
|
|
||||||
|
|
@ -2,7 +2,7 @@
|
||||||
|
|
||||||
{% block meta %}
|
{% block meta %}
|
||||||
{% if meta %}
|
{% if meta %}
|
||||||
{% include "meta_mixin/meta.html" %}
|
{% include "meta/meta.html" %}
|
||||||
{% endif %}
|
{% endif %}
|
||||||
{% endblock meta %}
|
{% endblock meta %}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -1,5 +1,5 @@
|
||||||
{% extends "base_glarus.html" %}
|
{% extends "base_glarus.html" %}
|
||||||
{% load staticfiles cms_tags %}
|
{% load static cms_tags %}
|
||||||
|
|
||||||
{% block content %}
|
{% block content %}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -1,5 +1,5 @@
|
||||||
{% extends "base_glarus.html" %}
|
{% extends "base_glarus.html" %}
|
||||||
{% load staticfiles cms_tags %}
|
{% load static cms_tags %}
|
||||||
{% block title %}crowdfunding{% endblock %}
|
{% block title %}crowdfunding{% endblock %}
|
||||||
|
|
||||||
{% block content %}
|
{% block content %}
|
||||||
|
|
|
||||||
|
|
@ -1,5 +1,5 @@
|
||||||
{% extends "base_glarus.html" %}
|
{% extends "base_glarus.html" %}
|
||||||
{% load staticfiles cms_tags %}
|
{% load static cms_tags %}
|
||||||
{% block title %}About{% endblock %}
|
{% block title %}About{% endblock %}
|
||||||
|
|
||||||
{% block content %}
|
{% block content %}
|
||||||
|
|
|
||||||
|
|
@ -1,5 +1,5 @@
|
||||||
{% extends "base_glarus.html" %}
|
{% extends "base_glarus.html" %}
|
||||||
{% load staticfiles cms_tags %}
|
{% load static cms_tags %}
|
||||||
{% block title %}About{% endblock %}
|
{% block title %}About{% endblock %}
|
||||||
|
|
||||||
{% block content %}
|
{% block content %}
|
||||||
|
|
|
||||||
24
cmsplugin_filer_file/LICENSE
Normal file
24
cmsplugin_filer_file/LICENSE
Normal file
|
|
@ -0,0 +1,24 @@
|
||||||
|
Copyright (c) 2012, Stefan Foulis and contributors
|
||||||
|
All rights reserved.
|
||||||
|
|
||||||
|
Redistribution and use in source and binary forms, with or without
|
||||||
|
modification, are permitted provided that the following conditions are met:
|
||||||
|
* Redistributions of source code must retain the above copyright
|
||||||
|
notice, this list of conditions and the following disclaimer.
|
||||||
|
* Redistributions in binary form must reproduce the above copyright
|
||||||
|
notice, this list of conditions and the following disclaimer in the
|
||||||
|
documentation and/or other materials provided with the distribution.
|
||||||
|
* Neither the name of the authors nor the
|
||||||
|
names of its contributors may be used to endorse or promote products
|
||||||
|
derived from this software without specific prior written permission.
|
||||||
|
|
||||||
|
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
|
||||||
|
ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
||||||
|
WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
||||||
|
DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS BE LIABLE FOR ANY
|
||||||
|
DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
|
||||||
|
(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
|
||||||
|
LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
|
||||||
|
ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
||||||
|
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
||||||
|
SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||||
1
cmsplugin_filer_file/__init__.py
Normal file
1
cmsplugin_filer_file/__init__.py
Normal file
|
|
@ -0,0 +1 @@
|
||||||
|
__version__ = "1.1.3"
|
||||||
61
cmsplugin_filer_file/cms_plugins.py
Normal file
61
cmsplugin_filer_file/cms_plugins.py
Normal file
|
|
@ -0,0 +1,61 @@
|
||||||
|
# -*- coding: utf-8 -*-
|
||||||
|
from __future__ import unicode_literals
|
||||||
|
|
||||||
|
from django.template.loader import select_template
|
||||||
|
from django.templatetags.static import static
|
||||||
|
from django.utils.translation import gettext_lazy as _
|
||||||
|
|
||||||
|
from cms.plugin_pool import plugin_pool
|
||||||
|
from cms.plugin_base import CMSPluginBase
|
||||||
|
|
||||||
|
from .conf import settings
|
||||||
|
from .forms import FilerFileForm
|
||||||
|
from .models import FilerFile
|
||||||
|
|
||||||
|
|
||||||
|
class FilerFilePlugin(CMSPluginBase):
|
||||||
|
form = FilerFileForm
|
||||||
|
module = 'Filer'
|
||||||
|
model = FilerFile
|
||||||
|
name = _("File")
|
||||||
|
TEMPLATE_NAME = 'cmsplugin_filer_file/plugins/file/%s.html'
|
||||||
|
render_template = TEMPLATE_NAME % 'default'
|
||||||
|
text_enabled = True
|
||||||
|
|
||||||
|
fieldsets = (
|
||||||
|
(None, {
|
||||||
|
'fields': [
|
||||||
|
'title', 'file', 'target_blank'
|
||||||
|
]
|
||||||
|
}),
|
||||||
|
(_('Advanced'), {
|
||||||
|
'classes': ['collapse', ],
|
||||||
|
'fields': [
|
||||||
|
'link_attributes',
|
||||||
|
]
|
||||||
|
})
|
||||||
|
)
|
||||||
|
|
||||||
|
if settings.CMSPLUGIN_FILER_FILE_STYLE_CHOICES:
|
||||||
|
fieldsets[0][1]['fields'].append('style')
|
||||||
|
|
||||||
|
def render(self, context, instance, placeholder):
|
||||||
|
context['object'] = instance
|
||||||
|
return super(FilerFilePlugin, self).render(context, instance, placeholder)
|
||||||
|
|
||||||
|
def get_render_template(self, context, instance, placeholder):
|
||||||
|
template = select_template((
|
||||||
|
'cmsplugin_filer_file/plugins/file.html', # backwards compatibility. deprecated!
|
||||||
|
self.TEMPLATE_NAME % instance.style,
|
||||||
|
self.TEMPLATE_NAME % 'default',
|
||||||
|
))
|
||||||
|
return template
|
||||||
|
|
||||||
|
def icon_src(self, instance):
|
||||||
|
file_icon = instance.get_icon_url()
|
||||||
|
|
||||||
|
if file_icon:
|
||||||
|
return file_icon
|
||||||
|
return static("filer/icons/file_%sx%s.png" % (32, 32,))
|
||||||
|
|
||||||
|
plugin_pool.register_plugin(FilerFilePlugin)
|
||||||
16
cmsplugin_filer_file/conf.py
Normal file
16
cmsplugin_filer_file/conf.py
Normal file
|
|
@ -0,0 +1,16 @@
|
||||||
|
# -*- coding: utf-8 -*-
|
||||||
|
from django.conf import settings # NOQA
|
||||||
|
from appconf import AppConf
|
||||||
|
|
||||||
|
|
||||||
|
class CmspluginFilerFolderAppConf(AppConf):
|
||||||
|
STYLE_CHOICES = (
|
||||||
|
# ('default', _('Default')), # define your styles here.
|
||||||
|
)
|
||||||
|
DEFAULT_STYLE = ''
|
||||||
|
|
||||||
|
def configure(self):
|
||||||
|
# set DEFAULT_STYLE to '' if it is not in STYLE_CHOICES
|
||||||
|
if not self.configured_data['DEFAULT_STYLE'] in [s for s, l in self.configured_data['STYLE_CHOICES']]:
|
||||||
|
self.configured_data['DEFAULT_STYLE'] = ''
|
||||||
|
return self.configured_data
|
||||||
20
cmsplugin_filer_file/forms.py
Normal file
20
cmsplugin_filer_file/forms.py
Normal file
|
|
@ -0,0 +1,20 @@
|
||||||
|
# -*- coding: utf-8 -*-
|
||||||
|
|
||||||
|
from __future__ import unicode_literals
|
||||||
|
|
||||||
|
from django import forms
|
||||||
|
|
||||||
|
from djangocms_attributes_field.widgets import AttributesWidget
|
||||||
|
|
||||||
|
from .models import FilerFile
|
||||||
|
|
||||||
|
|
||||||
|
class FilerFileForm(forms.ModelForm):
|
||||||
|
|
||||||
|
class Meta:
|
||||||
|
model = FilerFile
|
||||||
|
exclude = []
|
||||||
|
|
||||||
|
def __init__(self, *args, **kwargs):
|
||||||
|
super(FilerFileForm, self).__init__(*args, **kwargs)
|
||||||
|
self.fields['link_attributes'].widget = AttributesWidget()
|
||||||
47
cmsplugin_filer_file/locale/ca/LC_MESSAGES/django.po
Normal file
47
cmsplugin_filer_file/locale/ca/LC_MESSAGES/django.po
Normal file
|
|
@ -0,0 +1,47 @@
|
||||||
|
# SOME DESCRIPTIVE TITLE.
|
||||||
|
# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
|
||||||
|
# This file is distributed under the same license as the PACKAGE package.
|
||||||
|
#
|
||||||
|
# Translators:
|
||||||
|
# Roger Pons <rogerpons@gmail.com>, 2015
|
||||||
|
msgid ""
|
||||||
|
msgstr ""
|
||||||
|
"Project-Id-Version: django Filer Plugins\n"
|
||||||
|
"Report-Msgid-Bugs-To: \n"
|
||||||
|
"POT-Creation-Date: 2016-08-23 10:26-0400\n"
|
||||||
|
"PO-Revision-Date: 2016-06-22 17:49+0000\n"
|
||||||
|
"Last-Translator: Martin Koistinen <mkoistinen@gmail.com>\n"
|
||||||
|
"Language-Team: Catalan (http://www.transifex.com/divio/cmsplugin-filer/language/ca/)\n"
|
||||||
|
"MIME-Version: 1.0\n"
|
||||||
|
"Content-Type: text/plain; charset=UTF-8\n"
|
||||||
|
"Content-Transfer-Encoding: 8bit\n"
|
||||||
|
"Language: ca\n"
|
||||||
|
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
|
||||||
|
|
||||||
|
#: cms_plugins.py:20
|
||||||
|
msgid "File"
|
||||||
|
msgstr "Fitxer"
|
||||||
|
|
||||||
|
#: cms_plugins.py:31
|
||||||
|
msgid "Advanced"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: models.py:34
|
||||||
|
msgid "title"
|
||||||
|
msgstr "títol"
|
||||||
|
|
||||||
|
#: models.py:36
|
||||||
|
msgid "file"
|
||||||
|
msgstr "fitxer"
|
||||||
|
|
||||||
|
#: models.py:40
|
||||||
|
msgid "Open link in new window"
|
||||||
|
msgstr "Obre l'enllaç en una nova finestra"
|
||||||
|
|
||||||
|
#: models.py:42
|
||||||
|
msgid "Style"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: models.py:44
|
||||||
|
msgid "Optional. Adds HTML attributes to the rendered link."
|
||||||
|
msgstr ""
|
||||||
47
cmsplugin_filer_file/locale/de/LC_MESSAGES/django.po
Normal file
47
cmsplugin_filer_file/locale/de/LC_MESSAGES/django.po
Normal file
|
|
@ -0,0 +1,47 @@
|
||||||
|
# SOME DESCRIPTIVE TITLE.
|
||||||
|
# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
|
||||||
|
# This file is distributed under the same license as the PACKAGE package.
|
||||||
|
#
|
||||||
|
# Translators:
|
||||||
|
# Jannik V. <me@exploide.net>, 2016
|
||||||
|
msgid ""
|
||||||
|
msgstr ""
|
||||||
|
"Project-Id-Version: django Filer Plugins\n"
|
||||||
|
"Report-Msgid-Bugs-To: \n"
|
||||||
|
"POT-Creation-Date: 2016-08-23 10:26-0400\n"
|
||||||
|
"PO-Revision-Date: 2016-06-22 17:49+0000\n"
|
||||||
|
"Last-Translator: Martin Koistinen <mkoistinen@gmail.com>\n"
|
||||||
|
"Language-Team: German (http://www.transifex.com/divio/cmsplugin-filer/language/de/)\n"
|
||||||
|
"MIME-Version: 1.0\n"
|
||||||
|
"Content-Type: text/plain; charset=UTF-8\n"
|
||||||
|
"Content-Transfer-Encoding: 8bit\n"
|
||||||
|
"Language: de\n"
|
||||||
|
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
|
||||||
|
|
||||||
|
#: cms_plugins.py:20
|
||||||
|
msgid "File"
|
||||||
|
msgstr "Datei"
|
||||||
|
|
||||||
|
#: cms_plugins.py:31
|
||||||
|
msgid "Advanced"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: models.py:34
|
||||||
|
msgid "title"
|
||||||
|
msgstr "Titel"
|
||||||
|
|
||||||
|
#: models.py:36
|
||||||
|
msgid "file"
|
||||||
|
msgstr "Datei"
|
||||||
|
|
||||||
|
#: models.py:40
|
||||||
|
msgid "Open link in new window"
|
||||||
|
msgstr "Link in neuem Fenster öffnen"
|
||||||
|
|
||||||
|
#: models.py:42
|
||||||
|
msgid "Style"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: models.py:44
|
||||||
|
msgid "Optional. Adds HTML attributes to the rendered link."
|
||||||
|
msgstr ""
|
||||||
46
cmsplugin_filer_file/locale/en/LC_MESSAGES/django.po
Normal file
46
cmsplugin_filer_file/locale/en/LC_MESSAGES/django.po
Normal file
|
|
@ -0,0 +1,46 @@
|
||||||
|
# SOME DESCRIPTIVE TITLE.
|
||||||
|
# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
|
||||||
|
# This file is distributed under the same license as the PACKAGE package.
|
||||||
|
# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
|
||||||
|
#
|
||||||
|
#, fuzzy
|
||||||
|
msgid ""
|
||||||
|
msgstr ""
|
||||||
|
"Project-Id-Version: PACKAGE VERSION\n"
|
||||||
|
"Report-Msgid-Bugs-To: \n"
|
||||||
|
"POT-Creation-Date: 2016-08-23 10:26-0400\n"
|
||||||
|
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
|
||||||
|
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
|
||||||
|
"Language-Team: LANGUAGE <LL@li.org>\n"
|
||||||
|
"Language: \n"
|
||||||
|
"MIME-Version: 1.0\n"
|
||||||
|
"Content-Type: text/plain; charset=UTF-8\n"
|
||||||
|
"Content-Transfer-Encoding: 8bit\n"
|
||||||
|
|
||||||
|
#: cms_plugins.py:20
|
||||||
|
msgid "File"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: cms_plugins.py:31
|
||||||
|
msgid "Advanced"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: models.py:34
|
||||||
|
msgid "title"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: models.py:36
|
||||||
|
msgid "file"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: models.py:40
|
||||||
|
msgid "Open link in new window"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: models.py:42
|
||||||
|
msgid "Style"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: models.py:44
|
||||||
|
msgid "Optional. Adds HTML attributes to the rendered link."
|
||||||
|
msgstr ""
|
||||||
47
cmsplugin_filer_file/locale/es/LC_MESSAGES/django.po
Normal file
47
cmsplugin_filer_file/locale/es/LC_MESSAGES/django.po
Normal file
|
|
@ -0,0 +1,47 @@
|
||||||
|
# SOME DESCRIPTIVE TITLE.
|
||||||
|
# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
|
||||||
|
# This file is distributed under the same license as the PACKAGE package.
|
||||||
|
#
|
||||||
|
# Translators:
|
||||||
|
# Javier Sánchez <javier@crea.me>, 2015
|
||||||
|
msgid ""
|
||||||
|
msgstr ""
|
||||||
|
"Project-Id-Version: django Filer Plugins\n"
|
||||||
|
"Report-Msgid-Bugs-To: \n"
|
||||||
|
"POT-Creation-Date: 2016-08-23 10:26-0400\n"
|
||||||
|
"PO-Revision-Date: 2016-06-22 17:49+0000\n"
|
||||||
|
"Last-Translator: Martin Koistinen <mkoistinen@gmail.com>\n"
|
||||||
|
"Language-Team: Spanish (http://www.transifex.com/divio/cmsplugin-filer/language/es/)\n"
|
||||||
|
"MIME-Version: 1.0\n"
|
||||||
|
"Content-Type: text/plain; charset=UTF-8\n"
|
||||||
|
"Content-Transfer-Encoding: 8bit\n"
|
||||||
|
"Language: es\n"
|
||||||
|
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
|
||||||
|
|
||||||
|
#: cms_plugins.py:20
|
||||||
|
msgid "File"
|
||||||
|
msgstr "Archivo"
|
||||||
|
|
||||||
|
#: cms_plugins.py:31
|
||||||
|
msgid "Advanced"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: models.py:34
|
||||||
|
msgid "title"
|
||||||
|
msgstr "título"
|
||||||
|
|
||||||
|
#: models.py:36
|
||||||
|
msgid "file"
|
||||||
|
msgstr "archivo"
|
||||||
|
|
||||||
|
#: models.py:40
|
||||||
|
msgid "Open link in new window"
|
||||||
|
msgstr "Abrir el enlace en una nueva ventana"
|
||||||
|
|
||||||
|
#: models.py:42
|
||||||
|
msgid "Style"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: models.py:44
|
||||||
|
msgid "Optional. Adds HTML attributes to the rendered link."
|
||||||
|
msgstr ""
|
||||||
47
cmsplugin_filer_file/locale/et/LC_MESSAGES/django.po
Normal file
47
cmsplugin_filer_file/locale/et/LC_MESSAGES/django.po
Normal file
|
|
@ -0,0 +1,47 @@
|
||||||
|
# SOME DESCRIPTIVE TITLE.
|
||||||
|
# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
|
||||||
|
# This file is distributed under the same license as the PACKAGE package.
|
||||||
|
#
|
||||||
|
# Translators:
|
||||||
|
# Rivo Zängov <eraser@eraser.ee>, 2012-2013
|
||||||
|
msgid ""
|
||||||
|
msgstr ""
|
||||||
|
"Project-Id-Version: django Filer Plugins\n"
|
||||||
|
"Report-Msgid-Bugs-To: \n"
|
||||||
|
"POT-Creation-Date: 2016-08-23 10:26-0400\n"
|
||||||
|
"PO-Revision-Date: 2016-06-22 17:49+0000\n"
|
||||||
|
"Last-Translator: Martin Koistinen <mkoistinen@gmail.com>\n"
|
||||||
|
"Language-Team: Estonian (http://www.transifex.com/divio/cmsplugin-filer/language/et/)\n"
|
||||||
|
"MIME-Version: 1.0\n"
|
||||||
|
"Content-Type: text/plain; charset=UTF-8\n"
|
||||||
|
"Content-Transfer-Encoding: 8bit\n"
|
||||||
|
"Language: et\n"
|
||||||
|
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
|
||||||
|
|
||||||
|
#: cms_plugins.py:20
|
||||||
|
msgid "File"
|
||||||
|
msgstr "Fail"
|
||||||
|
|
||||||
|
#: cms_plugins.py:31
|
||||||
|
msgid "Advanced"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: models.py:34
|
||||||
|
msgid "title"
|
||||||
|
msgstr "pealkiri"
|
||||||
|
|
||||||
|
#: models.py:36
|
||||||
|
msgid "file"
|
||||||
|
msgstr "fail"
|
||||||
|
|
||||||
|
#: models.py:40
|
||||||
|
msgid "Open link in new window"
|
||||||
|
msgstr "Ava link uues aknas"
|
||||||
|
|
||||||
|
#: models.py:42
|
||||||
|
msgid "Style"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: models.py:44
|
||||||
|
msgid "Optional. Adds HTML attributes to the rendered link."
|
||||||
|
msgstr ""
|
||||||
46
cmsplugin_filer_file/locale/eu/LC_MESSAGES/django.po
Normal file
46
cmsplugin_filer_file/locale/eu/LC_MESSAGES/django.po
Normal file
|
|
@ -0,0 +1,46 @@
|
||||||
|
# SOME DESCRIPTIVE TITLE.
|
||||||
|
# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
|
||||||
|
# This file is distributed under the same license as the PACKAGE package.
|
||||||
|
#
|
||||||
|
# Translators:
|
||||||
|
msgid ""
|
||||||
|
msgstr ""
|
||||||
|
"Project-Id-Version: django Filer Plugins\n"
|
||||||
|
"Report-Msgid-Bugs-To: \n"
|
||||||
|
"POT-Creation-Date: 2016-08-23 10:26-0400\n"
|
||||||
|
"PO-Revision-Date: 2016-06-22 17:49+0000\n"
|
||||||
|
"Last-Translator: Martin Koistinen <mkoistinen@gmail.com>\n"
|
||||||
|
"Language-Team: Basque (http://www.transifex.com/divio/cmsplugin-filer/language/eu/)\n"
|
||||||
|
"MIME-Version: 1.0\n"
|
||||||
|
"Content-Type: text/plain; charset=UTF-8\n"
|
||||||
|
"Content-Transfer-Encoding: 8bit\n"
|
||||||
|
"Language: eu\n"
|
||||||
|
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
|
||||||
|
|
||||||
|
#: cms_plugins.py:20
|
||||||
|
msgid "File"
|
||||||
|
msgstr "Fitxategia"
|
||||||
|
|
||||||
|
#: cms_plugins.py:31
|
||||||
|
msgid "Advanced"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: models.py:34
|
||||||
|
msgid "title"
|
||||||
|
msgstr "izenburua"
|
||||||
|
|
||||||
|
#: models.py:36
|
||||||
|
msgid "file"
|
||||||
|
msgstr "fitxategia"
|
||||||
|
|
||||||
|
#: models.py:40
|
||||||
|
msgid "Open link in new window"
|
||||||
|
msgstr "Ireki esteka leiho berrian"
|
||||||
|
|
||||||
|
#: models.py:42
|
||||||
|
msgid "Style"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: models.py:44
|
||||||
|
msgid "Optional. Adds HTML attributes to the rendered link."
|
||||||
|
msgstr ""
|
||||||
47
cmsplugin_filer_file/locale/fi/LC_MESSAGES/django.po
Normal file
47
cmsplugin_filer_file/locale/fi/LC_MESSAGES/django.po
Normal file
|
|
@ -0,0 +1,47 @@
|
||||||
|
# SOME DESCRIPTIVE TITLE.
|
||||||
|
# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
|
||||||
|
# This file is distributed under the same license as the PACKAGE package.
|
||||||
|
#
|
||||||
|
# Translators:
|
||||||
|
# Klaus Dahlén <klaus.dahlen@gmail.com>, 2012
|
||||||
|
msgid ""
|
||||||
|
msgstr ""
|
||||||
|
"Project-Id-Version: django Filer Plugins\n"
|
||||||
|
"Report-Msgid-Bugs-To: \n"
|
||||||
|
"POT-Creation-Date: 2016-08-23 10:26-0400\n"
|
||||||
|
"PO-Revision-Date: 2016-06-22 17:49+0000\n"
|
||||||
|
"Last-Translator: Martin Koistinen <mkoistinen@gmail.com>\n"
|
||||||
|
"Language-Team: Finnish (http://www.transifex.com/divio/cmsplugin-filer/language/fi/)\n"
|
||||||
|
"MIME-Version: 1.0\n"
|
||||||
|
"Content-Type: text/plain; charset=UTF-8\n"
|
||||||
|
"Content-Transfer-Encoding: 8bit\n"
|
||||||
|
"Language: fi\n"
|
||||||
|
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
|
||||||
|
|
||||||
|
#: cms_plugins.py:20
|
||||||
|
msgid "File"
|
||||||
|
msgstr "Tiedosto"
|
||||||
|
|
||||||
|
#: cms_plugins.py:31
|
||||||
|
msgid "Advanced"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: models.py:34
|
||||||
|
msgid "title"
|
||||||
|
msgstr "otsikko"
|
||||||
|
|
||||||
|
#: models.py:36
|
||||||
|
msgid "file"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: models.py:40
|
||||||
|
msgid "Open link in new window"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: models.py:42
|
||||||
|
msgid "Style"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: models.py:44
|
||||||
|
msgid "Optional. Adds HTML attributes to the rendered link."
|
||||||
|
msgstr ""
|
||||||
49
cmsplugin_filer_file/locale/fr/LC_MESSAGES/django.po
Normal file
49
cmsplugin_filer_file/locale/fr/LC_MESSAGES/django.po
Normal file
|
|
@ -0,0 +1,49 @@
|
||||||
|
# SOME DESCRIPTIVE TITLE.
|
||||||
|
# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
|
||||||
|
# This file is distributed under the same license as the PACKAGE package.
|
||||||
|
#
|
||||||
|
# Translators:
|
||||||
|
# Bertrand Bordage <bordage.bertrand@gmail.com>, 2012
|
||||||
|
# Frigory33 <chironsylvain@orange.fr>, 2016
|
||||||
|
# Dylann CORDEL <cordel.d@free.fr>, 2014
|
||||||
|
msgid ""
|
||||||
|
msgstr ""
|
||||||
|
"Project-Id-Version: django Filer Plugins\n"
|
||||||
|
"Report-Msgid-Bugs-To: \n"
|
||||||
|
"POT-Creation-Date: 2016-08-23 10:26-0400\n"
|
||||||
|
"PO-Revision-Date: 2016-07-06 18:33+0000\n"
|
||||||
|
"Last-Translator: Frigory33 <chironsylvain@orange.fr>\n"
|
||||||
|
"Language-Team: French (http://www.transifex.com/divio/cmsplugin-filer/language/fr/)\n"
|
||||||
|
"MIME-Version: 1.0\n"
|
||||||
|
"Content-Type: text/plain; charset=UTF-8\n"
|
||||||
|
"Content-Transfer-Encoding: 8bit\n"
|
||||||
|
"Language: fr\n"
|
||||||
|
"Plural-Forms: nplurals=2; plural=(n > 1);\n"
|
||||||
|
|
||||||
|
#: cms_plugins.py:20
|
||||||
|
msgid "File"
|
||||||
|
msgstr "Fichier"
|
||||||
|
|
||||||
|
#: cms_plugins.py:31
|
||||||
|
msgid "Advanced"
|
||||||
|
msgstr "Avancé"
|
||||||
|
|
||||||
|
#: models.py:34
|
||||||
|
msgid "title"
|
||||||
|
msgstr "titre"
|
||||||
|
|
||||||
|
#: models.py:36
|
||||||
|
msgid "file"
|
||||||
|
msgstr "fichier"
|
||||||
|
|
||||||
|
#: models.py:40
|
||||||
|
msgid "Open link in new window"
|
||||||
|
msgstr "Ouvrir le lien dans une nouvelle fenêtre"
|
||||||
|
|
||||||
|
#: models.py:42
|
||||||
|
msgid "Style"
|
||||||
|
msgstr "Style"
|
||||||
|
|
||||||
|
#: models.py:44
|
||||||
|
msgid "Optional. Adds HTML attributes to the rendered link."
|
||||||
|
msgstr "Facultatif. Ajoute des attributs HTML au lien généré."
|
||||||
48
cmsplugin_filer_file/locale/it/LC_MESSAGES/django.po
Normal file
48
cmsplugin_filer_file/locale/it/LC_MESSAGES/django.po
Normal file
|
|
@ -0,0 +1,48 @@
|
||||||
|
# SOME DESCRIPTIVE TITLE.
|
||||||
|
# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
|
||||||
|
# This file is distributed under the same license as the PACKAGE package.
|
||||||
|
#
|
||||||
|
# Translators:
|
||||||
|
# yakky <i.spalletti@nephila.it>, 2012
|
||||||
|
# yakky <i.spalletti@nephila.it>, 2013,2016
|
||||||
|
msgid ""
|
||||||
|
msgstr ""
|
||||||
|
"Project-Id-Version: django Filer Plugins\n"
|
||||||
|
"Report-Msgid-Bugs-To: \n"
|
||||||
|
"POT-Creation-Date: 2016-08-23 10:26-0400\n"
|
||||||
|
"PO-Revision-Date: 2016-07-13 08:28+0000\n"
|
||||||
|
"Last-Translator: yakky <i.spalletti@nephila.it>\n"
|
||||||
|
"Language-Team: Italian (http://www.transifex.com/divio/cmsplugin-filer/language/it/)\n"
|
||||||
|
"MIME-Version: 1.0\n"
|
||||||
|
"Content-Type: text/plain; charset=UTF-8\n"
|
||||||
|
"Content-Transfer-Encoding: 8bit\n"
|
||||||
|
"Language: it\n"
|
||||||
|
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
|
||||||
|
|
||||||
|
#: cms_plugins.py:20
|
||||||
|
msgid "File"
|
||||||
|
msgstr "File"
|
||||||
|
|
||||||
|
#: cms_plugins.py:31
|
||||||
|
msgid "Advanced"
|
||||||
|
msgstr "Avanzate"
|
||||||
|
|
||||||
|
#: models.py:34
|
||||||
|
msgid "title"
|
||||||
|
msgstr "titolo"
|
||||||
|
|
||||||
|
#: models.py:36
|
||||||
|
msgid "file"
|
||||||
|
msgstr "file"
|
||||||
|
|
||||||
|
#: models.py:40
|
||||||
|
msgid "Open link in new window"
|
||||||
|
msgstr "Apri collegamento in una nuova finestra"
|
||||||
|
|
||||||
|
#: models.py:42
|
||||||
|
msgid "Style"
|
||||||
|
msgstr "Stile"
|
||||||
|
|
||||||
|
#: models.py:44
|
||||||
|
msgid "Optional. Adds HTML attributes to the rendered link."
|
||||||
|
msgstr "Opzionale. Aggiungi attributi HTML al link"
|
||||||
46
cmsplugin_filer_file/locale/it_IT/LC_MESSAGES/django.po
Normal file
46
cmsplugin_filer_file/locale/it_IT/LC_MESSAGES/django.po
Normal file
|
|
@ -0,0 +1,46 @@
|
||||||
|
# SOME DESCRIPTIVE TITLE.
|
||||||
|
# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
|
||||||
|
# This file is distributed under the same license as the PACKAGE package.
|
||||||
|
#
|
||||||
|
# Translators:
|
||||||
|
msgid ""
|
||||||
|
msgstr ""
|
||||||
|
"Project-Id-Version: django Filer Plugins\n"
|
||||||
|
"Report-Msgid-Bugs-To: \n"
|
||||||
|
"POT-Creation-Date: 2016-08-23 10:26-0400\n"
|
||||||
|
"PO-Revision-Date: 2016-06-22 17:49+0000\n"
|
||||||
|
"Last-Translator: Martin Koistinen <mkoistinen@gmail.com>\n"
|
||||||
|
"Language-Team: Italian (Italy) (http://www.transifex.com/divio/cmsplugin-filer/language/it_IT/)\n"
|
||||||
|
"MIME-Version: 1.0\n"
|
||||||
|
"Content-Type: text/plain; charset=UTF-8\n"
|
||||||
|
"Content-Transfer-Encoding: 8bit\n"
|
||||||
|
"Language: it_IT\n"
|
||||||
|
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
|
||||||
|
|
||||||
|
#: cms_plugins.py:20
|
||||||
|
msgid "File"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: cms_plugins.py:31
|
||||||
|
msgid "Advanced"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: models.py:34
|
||||||
|
msgid "title"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: models.py:36
|
||||||
|
msgid "file"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: models.py:40
|
||||||
|
msgid "Open link in new window"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: models.py:42
|
||||||
|
msgid "Style"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: models.py:44
|
||||||
|
msgid "Optional. Adds HTML attributes to the rendered link."
|
||||||
|
msgstr ""
|
||||||
48
cmsplugin_filer_file/locale/lt/LC_MESSAGES/django.po
Normal file
48
cmsplugin_filer_file/locale/lt/LC_MESSAGES/django.po
Normal file
|
|
@ -0,0 +1,48 @@
|
||||||
|
# SOME DESCRIPTIVE TITLE.
|
||||||
|
# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
|
||||||
|
# This file is distributed under the same license as the PACKAGE package.
|
||||||
|
#
|
||||||
|
# Translators:
|
||||||
|
# Matas Dailyda, 2015
|
||||||
|
# Matas Dailyda <matas@dailyda.com>, 2016
|
||||||
|
msgid ""
|
||||||
|
msgstr ""
|
||||||
|
"Project-Id-Version: django Filer Plugins\n"
|
||||||
|
"Report-Msgid-Bugs-To: \n"
|
||||||
|
"POT-Creation-Date: 2016-08-23 10:26-0400\n"
|
||||||
|
"PO-Revision-Date: 2016-07-18 09:19+0000\n"
|
||||||
|
"Last-Translator: Matas Dailyda <matas@dailyda.com>\n"
|
||||||
|
"Language-Team: Lithuanian (http://www.transifex.com/divio/cmsplugin-filer/language/lt/)\n"
|
||||||
|
"MIME-Version: 1.0\n"
|
||||||
|
"Content-Type: text/plain; charset=UTF-8\n"
|
||||||
|
"Content-Transfer-Encoding: 8bit\n"
|
||||||
|
"Language: lt\n"
|
||||||
|
"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && (n%100<10 || n%100>=20) ? 1 : 2);\n"
|
||||||
|
|
||||||
|
#: cms_plugins.py:20
|
||||||
|
msgid "File"
|
||||||
|
msgstr "Byla"
|
||||||
|
|
||||||
|
#: cms_plugins.py:31
|
||||||
|
msgid "Advanced"
|
||||||
|
msgstr "Išplėstiniai"
|
||||||
|
|
||||||
|
#: models.py:34
|
||||||
|
msgid "title"
|
||||||
|
msgstr "pavadinimas"
|
||||||
|
|
||||||
|
#: models.py:36
|
||||||
|
msgid "file"
|
||||||
|
msgstr "byla"
|
||||||
|
|
||||||
|
#: models.py:40
|
||||||
|
msgid "Open link in new window"
|
||||||
|
msgstr "Atverti nuorodą naujame lange"
|
||||||
|
|
||||||
|
#: models.py:42
|
||||||
|
msgid "Style"
|
||||||
|
msgstr "Stilius"
|
||||||
|
|
||||||
|
#: models.py:44
|
||||||
|
msgid "Optional. Adds HTML attributes to the rendered link."
|
||||||
|
msgstr "Nebūtina. Prideda HTML atributus prie atvaizduojamos nuorodos."
|
||||||
46
cmsplugin_filer_file/locale/lt_LT/LC_MESSAGES/django.po
Normal file
46
cmsplugin_filer_file/locale/lt_LT/LC_MESSAGES/django.po
Normal file
|
|
@ -0,0 +1,46 @@
|
||||||
|
# SOME DESCRIPTIVE TITLE.
|
||||||
|
# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
|
||||||
|
# This file is distributed under the same license as the PACKAGE package.
|
||||||
|
#
|
||||||
|
# Translators:
|
||||||
|
msgid ""
|
||||||
|
msgstr ""
|
||||||
|
"Project-Id-Version: django Filer Plugins\n"
|
||||||
|
"Report-Msgid-Bugs-To: \n"
|
||||||
|
"POT-Creation-Date: 2016-08-23 10:26-0400\n"
|
||||||
|
"PO-Revision-Date: 2016-06-22 17:49+0000\n"
|
||||||
|
"Last-Translator: Martin Koistinen <mkoistinen@gmail.com>\n"
|
||||||
|
"Language-Team: Lithuanian (Lithuania) (http://www.transifex.com/divio/cmsplugin-filer/language/lt_LT/)\n"
|
||||||
|
"MIME-Version: 1.0\n"
|
||||||
|
"Content-Type: text/plain; charset=UTF-8\n"
|
||||||
|
"Content-Transfer-Encoding: 8bit\n"
|
||||||
|
"Language: lt_LT\n"
|
||||||
|
"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && (n%100<10 || n%100>=20) ? 1 : 2);\n"
|
||||||
|
|
||||||
|
#: cms_plugins.py:20
|
||||||
|
msgid "File"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: cms_plugins.py:31
|
||||||
|
msgid "Advanced"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: models.py:34
|
||||||
|
msgid "title"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: models.py:36
|
||||||
|
msgid "file"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: models.py:40
|
||||||
|
msgid "Open link in new window"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: models.py:42
|
||||||
|
msgid "Style"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: models.py:44
|
||||||
|
msgid "Optional. Adds HTML attributes to the rendered link."
|
||||||
|
msgstr ""
|
||||||
46
cmsplugin_filer_file/locale/nb/LC_MESSAGES/django.po
Normal file
46
cmsplugin_filer_file/locale/nb/LC_MESSAGES/django.po
Normal file
|
|
@ -0,0 +1,46 @@
|
||||||
|
# SOME DESCRIPTIVE TITLE.
|
||||||
|
# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
|
||||||
|
# This file is distributed under the same license as the PACKAGE package.
|
||||||
|
#
|
||||||
|
# Translators:
|
||||||
|
msgid ""
|
||||||
|
msgstr ""
|
||||||
|
"Project-Id-Version: django Filer Plugins\n"
|
||||||
|
"Report-Msgid-Bugs-To: \n"
|
||||||
|
"POT-Creation-Date: 2016-08-23 10:26-0400\n"
|
||||||
|
"PO-Revision-Date: 2016-06-22 17:49+0000\n"
|
||||||
|
"Last-Translator: Martin Koistinen <mkoistinen@gmail.com>\n"
|
||||||
|
"Language-Team: Norwegian Bokmål (http://www.transifex.com/divio/cmsplugin-filer/language/nb/)\n"
|
||||||
|
"MIME-Version: 1.0\n"
|
||||||
|
"Content-Type: text/plain; charset=UTF-8\n"
|
||||||
|
"Content-Transfer-Encoding: 8bit\n"
|
||||||
|
"Language: nb\n"
|
||||||
|
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
|
||||||
|
|
||||||
|
#: cms_plugins.py:20
|
||||||
|
msgid "File"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: cms_plugins.py:31
|
||||||
|
msgid "Advanced"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: models.py:34
|
||||||
|
msgid "title"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: models.py:36
|
||||||
|
msgid "file"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: models.py:40
|
||||||
|
msgid "Open link in new window"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: models.py:42
|
||||||
|
msgid "Style"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: models.py:44
|
||||||
|
msgid "Optional. Adds HTML attributes to the rendered link."
|
||||||
|
msgstr ""
|
||||||
48
cmsplugin_filer_file/locale/nl/LC_MESSAGES/django.po
Normal file
48
cmsplugin_filer_file/locale/nl/LC_MESSAGES/django.po
Normal file
|
|
@ -0,0 +1,48 @@
|
||||||
|
# SOME DESCRIPTIVE TITLE.
|
||||||
|
# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
|
||||||
|
# This file is distributed under the same license as the PACKAGE package.
|
||||||
|
#
|
||||||
|
# Translators:
|
||||||
|
# Maikel Wever, 2013
|
||||||
|
# kurdyma <transifex.com@kurdyenviolien.nl>, 2016
|
||||||
|
msgid ""
|
||||||
|
msgstr ""
|
||||||
|
"Project-Id-Version: django Filer Plugins\n"
|
||||||
|
"Report-Msgid-Bugs-To: \n"
|
||||||
|
"POT-Creation-Date: 2016-08-23 10:26-0400\n"
|
||||||
|
"PO-Revision-Date: 2016-06-27 20:23+0000\n"
|
||||||
|
"Last-Translator: kurdyma <transifex.com@kurdyenviolien.nl>\n"
|
||||||
|
"Language-Team: Dutch (http://www.transifex.com/divio/cmsplugin-filer/language/nl/)\n"
|
||||||
|
"MIME-Version: 1.0\n"
|
||||||
|
"Content-Type: text/plain; charset=UTF-8\n"
|
||||||
|
"Content-Transfer-Encoding: 8bit\n"
|
||||||
|
"Language: nl\n"
|
||||||
|
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
|
||||||
|
|
||||||
|
#: cms_plugins.py:20
|
||||||
|
msgid "File"
|
||||||
|
msgstr "Bestand"
|
||||||
|
|
||||||
|
#: cms_plugins.py:31
|
||||||
|
msgid "Advanced"
|
||||||
|
msgstr "Geavanveerd"
|
||||||
|
|
||||||
|
#: models.py:34
|
||||||
|
msgid "title"
|
||||||
|
msgstr "titel"
|
||||||
|
|
||||||
|
#: models.py:36
|
||||||
|
msgid "file"
|
||||||
|
msgstr "bestand"
|
||||||
|
|
||||||
|
#: models.py:40
|
||||||
|
msgid "Open link in new window"
|
||||||
|
msgstr "Open link in nieuw venster"
|
||||||
|
|
||||||
|
#: models.py:42
|
||||||
|
msgid "Style"
|
||||||
|
msgstr "Stijl"
|
||||||
|
|
||||||
|
#: models.py:44
|
||||||
|
msgid "Optional. Adds HTML attributes to the rendered link."
|
||||||
|
msgstr "Optioneel. Voegt HTML attributen toe aan de gerenderde link."
|
||||||
46
cmsplugin_filer_file/locale/nn/LC_MESSAGES/django.po
Normal file
46
cmsplugin_filer_file/locale/nn/LC_MESSAGES/django.po
Normal file
|
|
@ -0,0 +1,46 @@
|
||||||
|
# SOME DESCRIPTIVE TITLE.
|
||||||
|
# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
|
||||||
|
# This file is distributed under the same license as the PACKAGE package.
|
||||||
|
#
|
||||||
|
# Translators:
|
||||||
|
msgid ""
|
||||||
|
msgstr ""
|
||||||
|
"Project-Id-Version: django Filer Plugins\n"
|
||||||
|
"Report-Msgid-Bugs-To: \n"
|
||||||
|
"POT-Creation-Date: 2016-08-23 10:26-0400\n"
|
||||||
|
"PO-Revision-Date: 2016-06-22 17:49+0000\n"
|
||||||
|
"Last-Translator: Martin Koistinen <mkoistinen@gmail.com>\n"
|
||||||
|
"Language-Team: Norwegian Nynorsk (http://www.transifex.com/divio/cmsplugin-filer/language/nn/)\n"
|
||||||
|
"MIME-Version: 1.0\n"
|
||||||
|
"Content-Type: text/plain; charset=UTF-8\n"
|
||||||
|
"Content-Transfer-Encoding: 8bit\n"
|
||||||
|
"Language: nn\n"
|
||||||
|
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
|
||||||
|
|
||||||
|
#: cms_plugins.py:20
|
||||||
|
msgid "File"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: cms_plugins.py:31
|
||||||
|
msgid "Advanced"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: models.py:34
|
||||||
|
msgid "title"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: models.py:36
|
||||||
|
msgid "file"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: models.py:40
|
||||||
|
msgid "Open link in new window"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: models.py:42
|
||||||
|
msgid "Style"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: models.py:44
|
||||||
|
msgid "Optional. Adds HTML attributes to the rendered link."
|
||||||
|
msgstr ""
|
||||||
48
cmsplugin_filer_file/locale/pl_PL/LC_MESSAGES/django.po
Normal file
48
cmsplugin_filer_file/locale/pl_PL/LC_MESSAGES/django.po
Normal file
|
|
@ -0,0 +1,48 @@
|
||||||
|
# SOME DESCRIPTIVE TITLE.
|
||||||
|
# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
|
||||||
|
# This file is distributed under the same license as the PACKAGE package.
|
||||||
|
#
|
||||||
|
# Translators:
|
||||||
|
# Mateusz Marzantowicz <mmarzantowicz@osdf.com.pl>, 2013
|
||||||
|
# Michal Bielicki <michal.bielicki@roamingengineer.com>, 2013
|
||||||
|
msgid ""
|
||||||
|
msgstr ""
|
||||||
|
"Project-Id-Version: django Filer Plugins\n"
|
||||||
|
"Report-Msgid-Bugs-To: \n"
|
||||||
|
"POT-Creation-Date: 2016-08-23 10:26-0400\n"
|
||||||
|
"PO-Revision-Date: 2016-06-22 17:49+0000\n"
|
||||||
|
"Last-Translator: Martin Koistinen <mkoistinen@gmail.com>\n"
|
||||||
|
"Language-Team: Polish (Poland) (http://www.transifex.com/divio/cmsplugin-filer/language/pl_PL/)\n"
|
||||||
|
"MIME-Version: 1.0\n"
|
||||||
|
"Content-Type: text/plain; charset=UTF-8\n"
|
||||||
|
"Content-Transfer-Encoding: 8bit\n"
|
||||||
|
"Language: pl_PL\n"
|
||||||
|
"Plural-Forms: nplurals=3; plural=(n==1 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n"
|
||||||
|
|
||||||
|
#: cms_plugins.py:20
|
||||||
|
msgid "File"
|
||||||
|
msgstr "Plik"
|
||||||
|
|
||||||
|
#: cms_plugins.py:31
|
||||||
|
msgid "Advanced"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: models.py:34
|
||||||
|
msgid "title"
|
||||||
|
msgstr "tytuł"
|
||||||
|
|
||||||
|
#: models.py:36
|
||||||
|
msgid "file"
|
||||||
|
msgstr "plik"
|
||||||
|
|
||||||
|
#: models.py:40
|
||||||
|
msgid "Open link in new window"
|
||||||
|
msgstr "Otwórz odnośnik w nowym oknie"
|
||||||
|
|
||||||
|
#: models.py:42
|
||||||
|
msgid "Style"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: models.py:44
|
||||||
|
msgid "Optional. Adds HTML attributes to the rendered link."
|
||||||
|
msgstr ""
|
||||||
47
cmsplugin_filer_file/locale/pt_BR/LC_MESSAGES/django.po
Normal file
47
cmsplugin_filer_file/locale/pt_BR/LC_MESSAGES/django.po
Normal file
|
|
@ -0,0 +1,47 @@
|
||||||
|
# SOME DESCRIPTIVE TITLE.
|
||||||
|
# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
|
||||||
|
# This file is distributed under the same license as the PACKAGE package.
|
||||||
|
#
|
||||||
|
# Translators:
|
||||||
|
# Rodrigo <rprior@infranology.com.br>, 2013
|
||||||
|
msgid ""
|
||||||
|
msgstr ""
|
||||||
|
"Project-Id-Version: django Filer Plugins\n"
|
||||||
|
"Report-Msgid-Bugs-To: \n"
|
||||||
|
"POT-Creation-Date: 2016-08-23 10:26-0400\n"
|
||||||
|
"PO-Revision-Date: 2016-06-22 17:49+0000\n"
|
||||||
|
"Last-Translator: Martin Koistinen <mkoistinen@gmail.com>\n"
|
||||||
|
"Language-Team: Portuguese (Brazil) (http://www.transifex.com/divio/cmsplugin-filer/language/pt_BR/)\n"
|
||||||
|
"MIME-Version: 1.0\n"
|
||||||
|
"Content-Type: text/plain; charset=UTF-8\n"
|
||||||
|
"Content-Transfer-Encoding: 8bit\n"
|
||||||
|
"Language: pt_BR\n"
|
||||||
|
"Plural-Forms: nplurals=2; plural=(n > 1);\n"
|
||||||
|
|
||||||
|
#: cms_plugins.py:20
|
||||||
|
msgid "File"
|
||||||
|
msgstr "Arquivo"
|
||||||
|
|
||||||
|
#: cms_plugins.py:31
|
||||||
|
msgid "Advanced"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: models.py:34
|
||||||
|
msgid "title"
|
||||||
|
msgstr "título"
|
||||||
|
|
||||||
|
#: models.py:36
|
||||||
|
msgid "file"
|
||||||
|
msgstr "arquivo"
|
||||||
|
|
||||||
|
#: models.py:40
|
||||||
|
msgid "Open link in new window"
|
||||||
|
msgstr "Abrir link em uma nova janela"
|
||||||
|
|
||||||
|
#: models.py:42
|
||||||
|
msgid "Style"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: models.py:44
|
||||||
|
msgid "Optional. Adds HTML attributes to the rendered link."
|
||||||
|
msgstr ""
|
||||||
48
cmsplugin_filer_file/locale/ru/LC_MESSAGES/django.po
Normal file
48
cmsplugin_filer_file/locale/ru/LC_MESSAGES/django.po
Normal file
|
|
@ -0,0 +1,48 @@
|
||||||
|
# SOME DESCRIPTIVE TITLE.
|
||||||
|
# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
|
||||||
|
# This file is distributed under the same license as the PACKAGE package.
|
||||||
|
#
|
||||||
|
# Translators:
|
||||||
|
# Pavel <neoascetic@gmail.com>, 2012
|
||||||
|
# Pavel <neoascetic@gmail.com>, 2013
|
||||||
|
msgid ""
|
||||||
|
msgstr ""
|
||||||
|
"Project-Id-Version: django Filer Plugins\n"
|
||||||
|
"Report-Msgid-Bugs-To: \n"
|
||||||
|
"POT-Creation-Date: 2016-08-23 10:26-0400\n"
|
||||||
|
"PO-Revision-Date: 2016-06-22 17:49+0000\n"
|
||||||
|
"Last-Translator: Martin Koistinen <mkoistinen@gmail.com>\n"
|
||||||
|
"Language-Team: Russian (http://www.transifex.com/divio/cmsplugin-filer/language/ru/)\n"
|
||||||
|
"MIME-Version: 1.0\n"
|
||||||
|
"Content-Type: text/plain; charset=UTF-8\n"
|
||||||
|
"Content-Transfer-Encoding: 8bit\n"
|
||||||
|
"Language: ru\n"
|
||||||
|
"Plural-Forms: nplurals=4; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<12 || n%100>14) ? 1 : n%10==0 || (n%10>=5 && n%10<=9) || (n%100>=11 && n%100<=14)? 2 : 3);\n"
|
||||||
|
|
||||||
|
#: cms_plugins.py:20
|
||||||
|
msgid "File"
|
||||||
|
msgstr "Файл"
|
||||||
|
|
||||||
|
#: cms_plugins.py:31
|
||||||
|
msgid "Advanced"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: models.py:34
|
||||||
|
msgid "title"
|
||||||
|
msgstr "заголовок"
|
||||||
|
|
||||||
|
#: models.py:36
|
||||||
|
msgid "file"
|
||||||
|
msgstr "файл"
|
||||||
|
|
||||||
|
#: models.py:40
|
||||||
|
msgid "Open link in new window"
|
||||||
|
msgstr "Открыть ссылку в новом окне"
|
||||||
|
|
||||||
|
#: models.py:42
|
||||||
|
msgid "Style"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: models.py:44
|
||||||
|
msgid "Optional. Adds HTML attributes to the rendered link."
|
||||||
|
msgstr ""
|
||||||
47
cmsplugin_filer_file/locale/zh_CN/LC_MESSAGES/django.po
Normal file
47
cmsplugin_filer_file/locale/zh_CN/LC_MESSAGES/django.po
Normal file
|
|
@ -0,0 +1,47 @@
|
||||||
|
# SOME DESCRIPTIVE TITLE.
|
||||||
|
# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
|
||||||
|
# This file is distributed under the same license as the PACKAGE package.
|
||||||
|
#
|
||||||
|
# Translators:
|
||||||
|
# Calvin-He <xhe.com@gmail.com>, 2015
|
||||||
|
msgid ""
|
||||||
|
msgstr ""
|
||||||
|
"Project-Id-Version: django Filer Plugins\n"
|
||||||
|
"Report-Msgid-Bugs-To: \n"
|
||||||
|
"POT-Creation-Date: 2016-08-23 10:26-0400\n"
|
||||||
|
"PO-Revision-Date: 2016-06-22 17:49+0000\n"
|
||||||
|
"Last-Translator: Martin Koistinen <mkoistinen@gmail.com>\n"
|
||||||
|
"Language-Team: Chinese (China) (http://www.transifex.com/divio/cmsplugin-filer/language/zh_CN/)\n"
|
||||||
|
"MIME-Version: 1.0\n"
|
||||||
|
"Content-Type: text/plain; charset=UTF-8\n"
|
||||||
|
"Content-Transfer-Encoding: 8bit\n"
|
||||||
|
"Language: zh_CN\n"
|
||||||
|
"Plural-Forms: nplurals=1; plural=0;\n"
|
||||||
|
|
||||||
|
#: cms_plugins.py:20
|
||||||
|
msgid "File"
|
||||||
|
msgstr "文件"
|
||||||
|
|
||||||
|
#: cms_plugins.py:31
|
||||||
|
msgid "Advanced"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: models.py:34
|
||||||
|
msgid "title"
|
||||||
|
msgstr "标题"
|
||||||
|
|
||||||
|
#: models.py:36
|
||||||
|
msgid "file"
|
||||||
|
msgstr "文件"
|
||||||
|
|
||||||
|
#: models.py:40
|
||||||
|
msgid "Open link in new window"
|
||||||
|
msgstr "在新窗口打开链接"
|
||||||
|
|
||||||
|
#: models.py:42
|
||||||
|
msgid "Style"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: models.py:44
|
||||||
|
msgid "Optional. Adds HTML attributes to the rendered link."
|
||||||
|
msgstr ""
|
||||||
31
cmsplugin_filer_file/migrations/0001_initial.py
Normal file
31
cmsplugin_filer_file/migrations/0001_initial.py
Normal file
|
|
@ -0,0 +1,31 @@
|
||||||
|
# -*- coding: utf-8 -*-
|
||||||
|
from __future__ import unicode_literals
|
||||||
|
|
||||||
|
from django.db import models, migrations
|
||||||
|
from django.conf import settings
|
||||||
|
import filer.fields.file
|
||||||
|
|
||||||
|
|
||||||
|
class Migration(migrations.Migration):
|
||||||
|
|
||||||
|
dependencies = [
|
||||||
|
('cms', '0003_auto_20140926_2347'),
|
||||||
|
('filer', '0001_initial'),
|
||||||
|
]
|
||||||
|
|
||||||
|
operations = [
|
||||||
|
migrations.CreateModel(
|
||||||
|
name='FilerFile',
|
||||||
|
fields=[
|
||||||
|
('cmsplugin_ptr', models.OneToOneField(parent_link=True, auto_created=True, primary_key=True, serialize=False, to='cms.CMSPlugin', on_delete=models.CASCADE)),
|
||||||
|
('title', models.CharField(max_length=255, null=True, verbose_name='title', blank=True)),
|
||||||
|
('target_blank', models.BooleanField(default=False, verbose_name='Open link in new window')),
|
||||||
|
('style', models.CharField(default=settings.CMSPLUGIN_FILER_FILE_DEFAULT_STYLE, choices=settings.CMSPLUGIN_FILER_FILE_STYLE_CHOICES, verbose_name='Style', blank=True, max_length=255)),
|
||||||
|
('file', filer.fields.file.FilerFileField(verbose_name='file', to='filer.File', on_delete=models.CASCADE)),
|
||||||
|
],
|
||||||
|
options={
|
||||||
|
'abstract': False,
|
||||||
|
},
|
||||||
|
bases=('cms.cmsplugin',),
|
||||||
|
),
|
||||||
|
]
|
||||||
21
cmsplugin_filer_file/migrations/0002_auto_20160112_1617.py
Normal file
21
cmsplugin_filer_file/migrations/0002_auto_20160112_1617.py
Normal file
|
|
@ -0,0 +1,21 @@
|
||||||
|
# -*- coding: utf-8 -*-
|
||||||
|
from __future__ import unicode_literals
|
||||||
|
|
||||||
|
from django.db import migrations, models
|
||||||
|
import filer.fields.file
|
||||||
|
import django.db.models.deletion
|
||||||
|
|
||||||
|
|
||||||
|
class Migration(migrations.Migration):
|
||||||
|
|
||||||
|
dependencies = [
|
||||||
|
('cmsplugin_filer_file', '0001_initial'),
|
||||||
|
]
|
||||||
|
|
||||||
|
operations = [
|
||||||
|
migrations.AlterField(
|
||||||
|
model_name='filerfile',
|
||||||
|
name='file',
|
||||||
|
field=filer.fields.file.FilerFileField(on_delete=django.db.models.deletion.SET_NULL, verbose_name='file', to='filer.File', null=True),
|
||||||
|
),
|
||||||
|
]
|
||||||
|
|
@ -0,0 +1,21 @@
|
||||||
|
# -*- coding: utf-8 -*-
|
||||||
|
# Generated by Django 1.9.6 on 2016-06-16 21:56
|
||||||
|
from __future__ import unicode_literals
|
||||||
|
|
||||||
|
from django.db import migrations
|
||||||
|
import djangocms_attributes_field.fields
|
||||||
|
|
||||||
|
|
||||||
|
class Migration(migrations.Migration):
|
||||||
|
|
||||||
|
dependencies = [
|
||||||
|
('cmsplugin_filer_file', '0002_auto_20160112_1617'),
|
||||||
|
]
|
||||||
|
|
||||||
|
operations = [
|
||||||
|
migrations.AddField(
|
||||||
|
model_name='filerfile',
|
||||||
|
name='link_attributes',
|
||||||
|
field=djangocms_attributes_field.fields.AttributesField(default=dict, help_text='Optional. Adds HTML attributes to the rendered link.'),
|
||||||
|
),
|
||||||
|
]
|
||||||
21
cmsplugin_filer_file/migrations/0004_auto_20160705_1334.py
Normal file
21
cmsplugin_filer_file/migrations/0004_auto_20160705_1334.py
Normal file
|
|
@ -0,0 +1,21 @@
|
||||||
|
# -*- coding: utf-8 -*-
|
||||||
|
# Generated by Django 1.9.7 on 2016-07-05 17:34
|
||||||
|
from __future__ import unicode_literals
|
||||||
|
|
||||||
|
from django.db import migrations
|
||||||
|
import djangocms_attributes_field.fields
|
||||||
|
|
||||||
|
|
||||||
|
class Migration(migrations.Migration):
|
||||||
|
|
||||||
|
dependencies = [
|
||||||
|
('cmsplugin_filer_file', '0003_filerfile_link_attributes'),
|
||||||
|
]
|
||||||
|
|
||||||
|
operations = [
|
||||||
|
migrations.AlterField(
|
||||||
|
model_name='filerfile',
|
||||||
|
name='link_attributes',
|
||||||
|
field=djangocms_attributes_field.fields.AttributesField(blank=True, default=dict, help_text='Optional. Adds HTML attributes to the rendered link.'),
|
||||||
|
),
|
||||||
|
]
|
||||||
19
cmsplugin_filer_file/migrations/0005_auto_20160713_1853.py
Normal file
19
cmsplugin_filer_file/migrations/0005_auto_20160713_1853.py
Normal file
|
|
@ -0,0 +1,19 @@
|
||||||
|
# -*- coding: utf-8 -*-
|
||||||
|
from __future__ import unicode_literals
|
||||||
|
|
||||||
|
from django.db import migrations, models
|
||||||
|
|
||||||
|
|
||||||
|
class Migration(migrations.Migration):
|
||||||
|
|
||||||
|
dependencies = [
|
||||||
|
('cmsplugin_filer_file', '0004_auto_20160705_1334'),
|
||||||
|
]
|
||||||
|
|
||||||
|
operations = [
|
||||||
|
migrations.AlterField(
|
||||||
|
model_name='filerfile',
|
||||||
|
name='cmsplugin_ptr',
|
||||||
|
field=models.OneToOneField(parent_link=True, related_name='cmsplugin_filer_file_filerfile', primary_key=True, serialize=False, to='cms.CMSPlugin', on_delete=models.CASCADE),
|
||||||
|
),
|
||||||
|
]
|
||||||
0
cmsplugin_filer_file/migrations/__init__.py
Normal file
0
cmsplugin_filer_file/migrations/__init__.py
Normal file
83
cmsplugin_filer_file/models.py
Normal file
83
cmsplugin_filer_file/models.py
Normal file
|
|
@ -0,0 +1,83 @@
|
||||||
|
# -*- coding: utf-8 -*-
|
||||||
|
from __future__ import unicode_literals
|
||||||
|
|
||||||
|
from django.db import models
|
||||||
|
from django.utils.translation import gettext_lazy as _
|
||||||
|
|
||||||
|
from cms.models import CMSPlugin
|
||||||
|
|
||||||
|
from filer.fields.file import FilerFileField
|
||||||
|
|
||||||
|
from cmsplugin_filer_utils import FilerPluginManager
|
||||||
|
from djangocms_attributes_field.fields import AttributesField
|
||||||
|
|
||||||
|
from .conf import settings
|
||||||
|
|
||||||
|
|
||||||
|
class FilerFile(CMSPlugin):
|
||||||
|
"""
|
||||||
|
Plugin for storing any type of file.
|
||||||
|
|
||||||
|
Default template displays download link with icon (if available) and file size.
|
||||||
|
|
||||||
|
This could be updated to use the mimetypes library to determine the type of file rather than
|
||||||
|
storing a separate icon for each different extension.
|
||||||
|
|
||||||
|
The icon search is currently performed within get_icon_url; this is probably a performance concern.
|
||||||
|
"""
|
||||||
|
STYLE_CHOICES = settings.CMSPLUGIN_FILER_FILE_STYLE_CHOICES
|
||||||
|
DEFAULT_STYLE = settings.CMSPLUGIN_FILER_FILE_DEFAULT_STYLE
|
||||||
|
EXCLUDED_KEYS = ['href', 'target', ]
|
||||||
|
|
||||||
|
title = models.CharField(_("title"), max_length=255, null=True, blank=True)
|
||||||
|
file = FilerFileField(
|
||||||
|
verbose_name=_('file'),
|
||||||
|
null=True,
|
||||||
|
on_delete=models.SET_NULL,
|
||||||
|
)
|
||||||
|
target_blank = models.BooleanField(_('Open link in new window'), default=False)
|
||||||
|
style = models.CharField(
|
||||||
|
_('Style'), choices=STYLE_CHOICES, default=DEFAULT_STYLE, max_length=255, blank=True)
|
||||||
|
link_attributes = AttributesField(excluded_keys=EXCLUDED_KEYS, blank=True,
|
||||||
|
help_text=_('Optional. Adds HTML attributes to the rendered link.'))
|
||||||
|
cmsplugin_ptr = models.OneToOneField(
|
||||||
|
to=CMSPlugin,
|
||||||
|
related_name='%(app_label)s_%(class)s',
|
||||||
|
parent_link=True,
|
||||||
|
on_delete=models.CASCADE
|
||||||
|
)
|
||||||
|
|
||||||
|
objects = FilerPluginManager(select_related=('file',))
|
||||||
|
|
||||||
|
def get_icon_url(self):
|
||||||
|
if self.file_id:
|
||||||
|
return self.file.icons['32']
|
||||||
|
return ''
|
||||||
|
|
||||||
|
def file_exists(self):
|
||||||
|
if self.file_id:
|
||||||
|
return self.file.file.storage.exists(self.file.file.name)
|
||||||
|
return False
|
||||||
|
|
||||||
|
def get_file_name(self):
|
||||||
|
if not self.file_id:
|
||||||
|
return ''
|
||||||
|
|
||||||
|
if self.file.name in ('', None):
|
||||||
|
name = "%s" % (self.file.original_filename,)
|
||||||
|
else:
|
||||||
|
name = "%s" % (self.file.name,)
|
||||||
|
return name
|
||||||
|
|
||||||
|
def get_ext(self):
|
||||||
|
return self.file.extension
|
||||||
|
|
||||||
|
def __str__(self):
|
||||||
|
if self.title:
|
||||||
|
return self.title
|
||||||
|
elif self.file_id:
|
||||||
|
# added if, because it raised attribute error when file wasnt defined
|
||||||
|
return self.get_file_name()
|
||||||
|
return "<empty>"
|
||||||
|
|
||||||
|
search_fields = ('title',)
|
||||||
|
|
@ -0,0 +1,7 @@
|
||||||
|
{% if object.file.url %}
|
||||||
|
<span class="file">
|
||||||
|
<a href="{{ object.file.url }}"{% if object.target_blank %} target="_blank"{% endif %} {{ object.link_attributes_str }}>
|
||||||
|
{% if object.get_icon_url %}<img src="{{ object.get_icon_url }}" style="border: 0px" alt="Icon" />{% endif %}
|
||||||
|
{% if object.title %}{{ object.title }}{% else %}{{ object.get_file_name }}{% endif %} {% if object.file_exists %}<span class="filesize">({{ object.file.size|filesizeformat }})</span>{% else %}(file missing!){% endif %}</a>
|
||||||
|
</span>
|
||||||
|
{% endif %}
|
||||||
24
cmsplugin_filer_folder/LICENSE
Normal file
24
cmsplugin_filer_folder/LICENSE
Normal file
|
|
@ -0,0 +1,24 @@
|
||||||
|
Copyright (c) 2012, Stefan Foulis and contributors
|
||||||
|
All rights reserved.
|
||||||
|
|
||||||
|
Redistribution and use in source and binary forms, with or without
|
||||||
|
modification, are permitted provided that the following conditions are met:
|
||||||
|
* Redistributions of source code must retain the above copyright
|
||||||
|
notice, this list of conditions and the following disclaimer.
|
||||||
|
* Redistributions in binary form must reproduce the above copyright
|
||||||
|
notice, this list of conditions and the following disclaimer in the
|
||||||
|
documentation and/or other materials provided with the distribution.
|
||||||
|
* Neither the name of the authors nor the
|
||||||
|
names of its contributors may be used to endorse or promote products
|
||||||
|
derived from this software without specific prior written permission.
|
||||||
|
|
||||||
|
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
|
||||||
|
ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
||||||
|
WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
||||||
|
DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS BE LIABLE FOR ANY
|
||||||
|
DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
|
||||||
|
(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
|
||||||
|
LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
|
||||||
|
ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
||||||
|
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
||||||
|
SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||||
1
cmsplugin_filer_folder/__init__.py
Normal file
1
cmsplugin_filer_folder/__init__.py
Normal file
|
|
@ -0,0 +1 @@
|
||||||
|
from cmsplugin_filer_file import __version__ # NOQA
|
||||||
0
cmsplugin_filer_folder/admin.py
Normal file
0
cmsplugin_filer_folder/admin.py
Normal file
75
cmsplugin_filer_folder/cms_plugins.py
Normal file
75
cmsplugin_filer_folder/cms_plugins.py
Normal file
|
|
@ -0,0 +1,75 @@
|
||||||
|
from cms.plugin_pool import plugin_pool
|
||||||
|
from cms.plugin_base import CMSPluginBase
|
||||||
|
from django.template.loader import select_template
|
||||||
|
from django.utils.translation import gettext_lazy as _
|
||||||
|
from . import models
|
||||||
|
from .conf import settings
|
||||||
|
|
||||||
|
from filer.models.filemodels import File
|
||||||
|
from filer.models.foldermodels import Folder
|
||||||
|
from filer.models.abstract import BaseImage
|
||||||
|
|
||||||
|
|
||||||
|
class FilerFolderPlugin(CMSPluginBase):
|
||||||
|
module = 'Filer'
|
||||||
|
model = models.FilerFolder
|
||||||
|
name = _("Folder")
|
||||||
|
TEMPLATE_NAME = 'cmsplugin_filer_folder/plugins/folder/%s.html'
|
||||||
|
render_template = TEMPLATE_NAME % 'default'
|
||||||
|
text_enabled = False
|
||||||
|
admin_preview = False
|
||||||
|
|
||||||
|
fieldsets = (
|
||||||
|
(None, {'fields': ['title', 'folder']}),
|
||||||
|
)
|
||||||
|
if settings.CMSPLUGIN_FILER_FOLDER_STYLE_CHOICES:
|
||||||
|
fieldsets[0][1]['fields'].append('style')
|
||||||
|
|
||||||
|
def get_folder_files(self, folder, user):
|
||||||
|
qs_files = folder.files.not_instance_of(BaseImage)
|
||||||
|
if user.is_staff:
|
||||||
|
return qs_files
|
||||||
|
else:
|
||||||
|
return qs_files.filter(is_public=True)
|
||||||
|
|
||||||
|
def get_folder_images(self, folder, user):
|
||||||
|
qs_files = folder.files.instance_of(BaseImage)
|
||||||
|
if user.is_staff:
|
||||||
|
return qs_files
|
||||||
|
else:
|
||||||
|
return qs_files.filter(is_public=True)
|
||||||
|
|
||||||
|
def get_children(self, folder):
|
||||||
|
return folder.get_children()
|
||||||
|
|
||||||
|
def render(self, context, instance, placeholder):
|
||||||
|
user = context['request'].user
|
||||||
|
|
||||||
|
if instance.folder_id:
|
||||||
|
folder_files = self.get_folder_files(instance.folder, user)
|
||||||
|
folder_images = self.get_folder_images(instance.folder, user)
|
||||||
|
folder_folders = self.get_children(instance.folder)
|
||||||
|
else:
|
||||||
|
folder_files = File.objects.none()
|
||||||
|
folder_images = BaseImage.objects.none()
|
||||||
|
folder_folders = Folder.objects.none()
|
||||||
|
|
||||||
|
context.update({
|
||||||
|
'object': instance,
|
||||||
|
'folder_files': sorted(folder_files),
|
||||||
|
'folder_images': sorted(folder_images),
|
||||||
|
'folder_folders': folder_folders,
|
||||||
|
'placeholder': placeholder
|
||||||
|
})
|
||||||
|
return context
|
||||||
|
|
||||||
|
def get_render_template(self, context, instance, placeholder):
|
||||||
|
template = select_template((
|
||||||
|
'cmsplugin_filer_folder/folder.html', # backwards compatibility. deprecated!
|
||||||
|
self.TEMPLATE_NAME % instance.style,
|
||||||
|
self.TEMPLATE_NAME % 'default',
|
||||||
|
))
|
||||||
|
return template
|
||||||
|
|
||||||
|
|
||||||
|
plugin_pool.register_plugin(FilerFolderPlugin)
|
||||||
18
cmsplugin_filer_folder/conf.py
Normal file
18
cmsplugin_filer_folder/conf.py
Normal file
|
|
@ -0,0 +1,18 @@
|
||||||
|
# -*- coding: utf-8 -*-
|
||||||
|
from django.conf import settings # NOQA
|
||||||
|
from django.utils.translation import gettext_lazy as _
|
||||||
|
from appconf import AppConf
|
||||||
|
|
||||||
|
|
||||||
|
class CmspluginFilerFolderAppConf(AppConf):
|
||||||
|
STYLE_CHOICES = (
|
||||||
|
("list", _("List")),
|
||||||
|
("slideshow", _("Slideshow"))
|
||||||
|
)
|
||||||
|
DEFAULT_STYLE = 'list'
|
||||||
|
|
||||||
|
def configure(self):
|
||||||
|
# set DEFAULT_STYLE to '' if it is not in STYLE_CHOICES
|
||||||
|
if not self.configured_data['DEFAULT_STYLE'] in [s for s, l in self.configured_data['STYLE_CHOICES']]:
|
||||||
|
self.configured_data['DEFAULT_STYLE'] = ''
|
||||||
|
return self.configured_data
|
||||||
51
cmsplugin_filer_folder/locale/ca/LC_MESSAGES/django.po
Normal file
51
cmsplugin_filer_folder/locale/ca/LC_MESSAGES/django.po
Normal file
|
|
@ -0,0 +1,51 @@
|
||||||
|
# SOME DESCRIPTIVE TITLE.
|
||||||
|
# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
|
||||||
|
# This file is distributed under the same license as the PACKAGE package.
|
||||||
|
#
|
||||||
|
# Translators:
|
||||||
|
# Roger Pons <rogerpons@gmail.com>, 2015
|
||||||
|
msgid ""
|
||||||
|
msgstr ""
|
||||||
|
"Project-Id-Version: django Filer Plugins\n"
|
||||||
|
"Report-Msgid-Bugs-To: \n"
|
||||||
|
"POT-Creation-Date: 2016-08-23 10:26-0400\n"
|
||||||
|
"PO-Revision-Date: 2016-06-22 17:49+0000\n"
|
||||||
|
"Last-Translator: Martin Koistinen <mkoistinen@gmail.com>\n"
|
||||||
|
"Language-Team: Catalan (http://www.transifex.com/divio/cmsplugin-filer/language/ca/)\n"
|
||||||
|
"MIME-Version: 1.0\n"
|
||||||
|
"Content-Type: text/plain; charset=UTF-8\n"
|
||||||
|
"Content-Transfer-Encoding: 8bit\n"
|
||||||
|
"Language: ca\n"
|
||||||
|
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
|
||||||
|
|
||||||
|
#: cms_plugins.py:16
|
||||||
|
msgid "Folder"
|
||||||
|
msgstr "Carpeta"
|
||||||
|
|
||||||
|
#: conf.py:9
|
||||||
|
msgid "List"
|
||||||
|
msgstr "Llista"
|
||||||
|
|
||||||
|
#: conf.py:10
|
||||||
|
msgid "Slideshow"
|
||||||
|
msgstr "Projecció de diapositives"
|
||||||
|
|
||||||
|
#: models.py:22
|
||||||
|
msgid "title"
|
||||||
|
msgstr "títol"
|
||||||
|
|
||||||
|
#: models.py:25
|
||||||
|
msgid "Style"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: templates/cmsplugin_filer_folder/plugins/folder/default.html:23
|
||||||
|
msgid "Folders"
|
||||||
|
msgstr "Carpetes"
|
||||||
|
|
||||||
|
#: templates/cmsplugin_filer_folder/plugins/folder/default.html:31
|
||||||
|
msgid "Files"
|
||||||
|
msgstr "Fitxers"
|
||||||
|
|
||||||
|
#: templates/cmsplugin_filer_folder/plugins/folder/default.html:39
|
||||||
|
msgid "Images"
|
||||||
|
msgstr "Imatges"
|
||||||
51
cmsplugin_filer_folder/locale/de/LC_MESSAGES/django.po
Normal file
51
cmsplugin_filer_folder/locale/de/LC_MESSAGES/django.po
Normal file
|
|
@ -0,0 +1,51 @@
|
||||||
|
# SOME DESCRIPTIVE TITLE.
|
||||||
|
# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
|
||||||
|
# This file is distributed under the same license as the PACKAGE package.
|
||||||
|
#
|
||||||
|
# Translators:
|
||||||
|
# Jannik V. <me@exploide.net>, 2016
|
||||||
|
msgid ""
|
||||||
|
msgstr ""
|
||||||
|
"Project-Id-Version: django Filer Plugins\n"
|
||||||
|
"Report-Msgid-Bugs-To: \n"
|
||||||
|
"POT-Creation-Date: 2016-08-23 10:26-0400\n"
|
||||||
|
"PO-Revision-Date: 2016-06-22 17:49+0000\n"
|
||||||
|
"Last-Translator: Martin Koistinen <mkoistinen@gmail.com>\n"
|
||||||
|
"Language-Team: German (http://www.transifex.com/divio/cmsplugin-filer/language/de/)\n"
|
||||||
|
"MIME-Version: 1.0\n"
|
||||||
|
"Content-Type: text/plain; charset=UTF-8\n"
|
||||||
|
"Content-Transfer-Encoding: 8bit\n"
|
||||||
|
"Language: de\n"
|
||||||
|
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
|
||||||
|
|
||||||
|
#: cms_plugins.py:16
|
||||||
|
msgid "Folder"
|
||||||
|
msgstr "Ordner"
|
||||||
|
|
||||||
|
#: conf.py:9
|
||||||
|
msgid "List"
|
||||||
|
msgstr "Liste"
|
||||||
|
|
||||||
|
#: conf.py:10
|
||||||
|
msgid "Slideshow"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: models.py:22
|
||||||
|
msgid "title"
|
||||||
|
msgstr "Titel"
|
||||||
|
|
||||||
|
#: models.py:25
|
||||||
|
msgid "Style"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: templates/cmsplugin_filer_folder/plugins/folder/default.html:23
|
||||||
|
msgid "Folders"
|
||||||
|
msgstr "Ordner"
|
||||||
|
|
||||||
|
#: templates/cmsplugin_filer_folder/plugins/folder/default.html:31
|
||||||
|
msgid "Files"
|
||||||
|
msgstr "Dateien"
|
||||||
|
|
||||||
|
#: templates/cmsplugin_filer_folder/plugins/folder/default.html:39
|
||||||
|
msgid "Images"
|
||||||
|
msgstr "Bilder"
|
||||||
50
cmsplugin_filer_folder/locale/en/LC_MESSAGES/django.po
Normal file
50
cmsplugin_filer_folder/locale/en/LC_MESSAGES/django.po
Normal file
|
|
@ -0,0 +1,50 @@
|
||||||
|
# SOME DESCRIPTIVE TITLE.
|
||||||
|
# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
|
||||||
|
# This file is distributed under the same license as the PACKAGE package.
|
||||||
|
# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
|
||||||
|
#
|
||||||
|
#, fuzzy
|
||||||
|
msgid ""
|
||||||
|
msgstr ""
|
||||||
|
"Project-Id-Version: PACKAGE VERSION\n"
|
||||||
|
"Report-Msgid-Bugs-To: \n"
|
||||||
|
"POT-Creation-Date: 2016-08-23 10:26-0400\n"
|
||||||
|
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
|
||||||
|
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
|
||||||
|
"Language-Team: LANGUAGE <LL@li.org>\n"
|
||||||
|
"Language: \n"
|
||||||
|
"MIME-Version: 1.0\n"
|
||||||
|
"Content-Type: text/plain; charset=UTF-8\n"
|
||||||
|
"Content-Transfer-Encoding: 8bit\n"
|
||||||
|
|
||||||
|
#: cms_plugins.py:16
|
||||||
|
msgid "Folder"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: conf.py:9
|
||||||
|
msgid "List"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: conf.py:10
|
||||||
|
msgid "Slideshow"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: models.py:22
|
||||||
|
msgid "title"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: models.py:25
|
||||||
|
msgid "Style"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: templates/cmsplugin_filer_folder/plugins/folder/default.html:23
|
||||||
|
msgid "Folders"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: templates/cmsplugin_filer_folder/plugins/folder/default.html:31
|
||||||
|
msgid "Files"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: templates/cmsplugin_filer_folder/plugins/folder/default.html:39
|
||||||
|
msgid "Images"
|
||||||
|
msgstr ""
|
||||||
51
cmsplugin_filer_folder/locale/es/LC_MESSAGES/django.po
Normal file
51
cmsplugin_filer_folder/locale/es/LC_MESSAGES/django.po
Normal file
|
|
@ -0,0 +1,51 @@
|
||||||
|
# SOME DESCRIPTIVE TITLE.
|
||||||
|
# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
|
||||||
|
# This file is distributed under the same license as the PACKAGE package.
|
||||||
|
#
|
||||||
|
# Translators:
|
||||||
|
# Javier Sánchez <javier@crea.me>, 2015
|
||||||
|
msgid ""
|
||||||
|
msgstr ""
|
||||||
|
"Project-Id-Version: django Filer Plugins\n"
|
||||||
|
"Report-Msgid-Bugs-To: \n"
|
||||||
|
"POT-Creation-Date: 2016-08-23 10:26-0400\n"
|
||||||
|
"PO-Revision-Date: 2016-06-22 17:49+0000\n"
|
||||||
|
"Last-Translator: Martin Koistinen <mkoistinen@gmail.com>\n"
|
||||||
|
"Language-Team: Spanish (http://www.transifex.com/divio/cmsplugin-filer/language/es/)\n"
|
||||||
|
"MIME-Version: 1.0\n"
|
||||||
|
"Content-Type: text/plain; charset=UTF-8\n"
|
||||||
|
"Content-Transfer-Encoding: 8bit\n"
|
||||||
|
"Language: es\n"
|
||||||
|
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
|
||||||
|
|
||||||
|
#: cms_plugins.py:16
|
||||||
|
msgid "Folder"
|
||||||
|
msgstr "Directorio"
|
||||||
|
|
||||||
|
#: conf.py:9
|
||||||
|
msgid "List"
|
||||||
|
msgstr "Lista"
|
||||||
|
|
||||||
|
#: conf.py:10
|
||||||
|
msgid "Slideshow"
|
||||||
|
msgstr "Presentación de diapositivas"
|
||||||
|
|
||||||
|
#: models.py:22
|
||||||
|
msgid "title"
|
||||||
|
msgstr "título"
|
||||||
|
|
||||||
|
#: models.py:25
|
||||||
|
msgid "Style"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: templates/cmsplugin_filer_folder/plugins/folder/default.html:23
|
||||||
|
msgid "Folders"
|
||||||
|
msgstr "Directorios"
|
||||||
|
|
||||||
|
#: templates/cmsplugin_filer_folder/plugins/folder/default.html:31
|
||||||
|
msgid "Files"
|
||||||
|
msgstr "Archivos"
|
||||||
|
|
||||||
|
#: templates/cmsplugin_filer_folder/plugins/folder/default.html:39
|
||||||
|
msgid "Images"
|
||||||
|
msgstr "Imágenes"
|
||||||
51
cmsplugin_filer_folder/locale/et/LC_MESSAGES/django.po
Normal file
51
cmsplugin_filer_folder/locale/et/LC_MESSAGES/django.po
Normal file
|
|
@ -0,0 +1,51 @@
|
||||||
|
# SOME DESCRIPTIVE TITLE.
|
||||||
|
# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
|
||||||
|
# This file is distributed under the same license as the PACKAGE package.
|
||||||
|
#
|
||||||
|
# Translators:
|
||||||
|
# Rivo Zängov <eraser@eraser.ee>, 2012
|
||||||
|
msgid ""
|
||||||
|
msgstr ""
|
||||||
|
"Project-Id-Version: django Filer Plugins\n"
|
||||||
|
"Report-Msgid-Bugs-To: \n"
|
||||||
|
"POT-Creation-Date: 2016-08-23 10:26-0400\n"
|
||||||
|
"PO-Revision-Date: 2016-06-22 17:49+0000\n"
|
||||||
|
"Last-Translator: Martin Koistinen <mkoistinen@gmail.com>\n"
|
||||||
|
"Language-Team: Estonian (http://www.transifex.com/divio/cmsplugin-filer/language/et/)\n"
|
||||||
|
"MIME-Version: 1.0\n"
|
||||||
|
"Content-Type: text/plain; charset=UTF-8\n"
|
||||||
|
"Content-Transfer-Encoding: 8bit\n"
|
||||||
|
"Language: et\n"
|
||||||
|
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
|
||||||
|
|
||||||
|
#: cms_plugins.py:16
|
||||||
|
msgid "Folder"
|
||||||
|
msgstr "Kaust"
|
||||||
|
|
||||||
|
#: conf.py:9
|
||||||
|
msgid "List"
|
||||||
|
msgstr "Nimekiri"
|
||||||
|
|
||||||
|
#: conf.py:10
|
||||||
|
msgid "Slideshow"
|
||||||
|
msgstr "Slaidiseanss"
|
||||||
|
|
||||||
|
#: models.py:22
|
||||||
|
msgid "title"
|
||||||
|
msgstr "pealkiri"
|
||||||
|
|
||||||
|
#: models.py:25
|
||||||
|
msgid "Style"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: templates/cmsplugin_filer_folder/plugins/folder/default.html:23
|
||||||
|
msgid "Folders"
|
||||||
|
msgstr "Kaustad"
|
||||||
|
|
||||||
|
#: templates/cmsplugin_filer_folder/plugins/folder/default.html:31
|
||||||
|
msgid "Files"
|
||||||
|
msgstr "Failid"
|
||||||
|
|
||||||
|
#: templates/cmsplugin_filer_folder/plugins/folder/default.html:39
|
||||||
|
msgid "Images"
|
||||||
|
msgstr "Pildid"
|
||||||
50
cmsplugin_filer_folder/locale/eu/LC_MESSAGES/django.po
Normal file
50
cmsplugin_filer_folder/locale/eu/LC_MESSAGES/django.po
Normal file
|
|
@ -0,0 +1,50 @@
|
||||||
|
# SOME DESCRIPTIVE TITLE.
|
||||||
|
# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
|
||||||
|
# This file is distributed under the same license as the PACKAGE package.
|
||||||
|
#
|
||||||
|
# Translators:
|
||||||
|
msgid ""
|
||||||
|
msgstr ""
|
||||||
|
"Project-Id-Version: django Filer Plugins\n"
|
||||||
|
"Report-Msgid-Bugs-To: \n"
|
||||||
|
"POT-Creation-Date: 2016-08-23 10:26-0400\n"
|
||||||
|
"PO-Revision-Date: 2016-06-22 17:49+0000\n"
|
||||||
|
"Last-Translator: Martin Koistinen <mkoistinen@gmail.com>\n"
|
||||||
|
"Language-Team: Basque (http://www.transifex.com/divio/cmsplugin-filer/language/eu/)\n"
|
||||||
|
"MIME-Version: 1.0\n"
|
||||||
|
"Content-Type: text/plain; charset=UTF-8\n"
|
||||||
|
"Content-Transfer-Encoding: 8bit\n"
|
||||||
|
"Language: eu\n"
|
||||||
|
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
|
||||||
|
|
||||||
|
#: cms_plugins.py:16
|
||||||
|
msgid "Folder"
|
||||||
|
msgstr "Karpeta"
|
||||||
|
|
||||||
|
#: conf.py:9
|
||||||
|
msgid "List"
|
||||||
|
msgstr "Zerrenda"
|
||||||
|
|
||||||
|
#: conf.py:10
|
||||||
|
msgid "Slideshow"
|
||||||
|
msgstr "Diapositibak"
|
||||||
|
|
||||||
|
#: models.py:22
|
||||||
|
msgid "title"
|
||||||
|
msgstr "izenburua"
|
||||||
|
|
||||||
|
#: models.py:25
|
||||||
|
msgid "Style"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: templates/cmsplugin_filer_folder/plugins/folder/default.html:23
|
||||||
|
msgid "Folders"
|
||||||
|
msgstr "Karpetak"
|
||||||
|
|
||||||
|
#: templates/cmsplugin_filer_folder/plugins/folder/default.html:31
|
||||||
|
msgid "Files"
|
||||||
|
msgstr "Fitxategiak"
|
||||||
|
|
||||||
|
#: templates/cmsplugin_filer_folder/plugins/folder/default.html:39
|
||||||
|
msgid "Images"
|
||||||
|
msgstr "Irudiak"
|
||||||
51
cmsplugin_filer_folder/locale/fi/LC_MESSAGES/django.po
Normal file
51
cmsplugin_filer_folder/locale/fi/LC_MESSAGES/django.po
Normal file
|
|
@ -0,0 +1,51 @@
|
||||||
|
# SOME DESCRIPTIVE TITLE.
|
||||||
|
# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
|
||||||
|
# This file is distributed under the same license as the PACKAGE package.
|
||||||
|
#
|
||||||
|
# Translators:
|
||||||
|
# Klaus Dahlén <klaus.dahlen@gmail.com>, 2012
|
||||||
|
msgid ""
|
||||||
|
msgstr ""
|
||||||
|
"Project-Id-Version: django Filer Plugins\n"
|
||||||
|
"Report-Msgid-Bugs-To: \n"
|
||||||
|
"POT-Creation-Date: 2016-08-23 10:26-0400\n"
|
||||||
|
"PO-Revision-Date: 2016-06-22 17:49+0000\n"
|
||||||
|
"Last-Translator: Martin Koistinen <mkoistinen@gmail.com>\n"
|
||||||
|
"Language-Team: Finnish (http://www.transifex.com/divio/cmsplugin-filer/language/fi/)\n"
|
||||||
|
"MIME-Version: 1.0\n"
|
||||||
|
"Content-Type: text/plain; charset=UTF-8\n"
|
||||||
|
"Content-Transfer-Encoding: 8bit\n"
|
||||||
|
"Language: fi\n"
|
||||||
|
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
|
||||||
|
|
||||||
|
#: cms_plugins.py:16
|
||||||
|
msgid "Folder"
|
||||||
|
msgstr "Kansio"
|
||||||
|
|
||||||
|
#: conf.py:9
|
||||||
|
msgid "List"
|
||||||
|
msgstr "Lista"
|
||||||
|
|
||||||
|
#: conf.py:10
|
||||||
|
msgid "Slideshow"
|
||||||
|
msgstr "Diaesitys"
|
||||||
|
|
||||||
|
#: models.py:22
|
||||||
|
msgid "title"
|
||||||
|
msgstr "otsikko"
|
||||||
|
|
||||||
|
#: models.py:25
|
||||||
|
msgid "Style"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: templates/cmsplugin_filer_folder/plugins/folder/default.html:23
|
||||||
|
msgid "Folders"
|
||||||
|
msgstr "Kansiot"
|
||||||
|
|
||||||
|
#: templates/cmsplugin_filer_folder/plugins/folder/default.html:31
|
||||||
|
msgid "Files"
|
||||||
|
msgstr "Tiedostot"
|
||||||
|
|
||||||
|
#: templates/cmsplugin_filer_folder/plugins/folder/default.html:39
|
||||||
|
msgid "Images"
|
||||||
|
msgstr "Kuvat"
|
||||||
52
cmsplugin_filer_folder/locale/fr/LC_MESSAGES/django.po
Normal file
52
cmsplugin_filer_folder/locale/fr/LC_MESSAGES/django.po
Normal file
|
|
@ -0,0 +1,52 @@
|
||||||
|
# SOME DESCRIPTIVE TITLE.
|
||||||
|
# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
|
||||||
|
# This file is distributed under the same license as the PACKAGE package.
|
||||||
|
#
|
||||||
|
# Translators:
|
||||||
|
# Bertrand Bordage <bordage.bertrand@gmail.com>, 2012
|
||||||
|
# Frigory33 <chironsylvain@orange.fr>, 2016
|
||||||
|
msgid ""
|
||||||
|
msgstr ""
|
||||||
|
"Project-Id-Version: django Filer Plugins\n"
|
||||||
|
"Report-Msgid-Bugs-To: \n"
|
||||||
|
"POT-Creation-Date: 2016-08-23 10:26-0400\n"
|
||||||
|
"PO-Revision-Date: 2016-07-06 18:33+0000\n"
|
||||||
|
"Last-Translator: Frigory33 <chironsylvain@orange.fr>\n"
|
||||||
|
"Language-Team: French (http://www.transifex.com/divio/cmsplugin-filer/language/fr/)\n"
|
||||||
|
"MIME-Version: 1.0\n"
|
||||||
|
"Content-Type: text/plain; charset=UTF-8\n"
|
||||||
|
"Content-Transfer-Encoding: 8bit\n"
|
||||||
|
"Language: fr\n"
|
||||||
|
"Plural-Forms: nplurals=2; plural=(n > 1);\n"
|
||||||
|
|
||||||
|
#: cms_plugins.py:16
|
||||||
|
msgid "Folder"
|
||||||
|
msgstr "Dossier"
|
||||||
|
|
||||||
|
#: conf.py:9
|
||||||
|
msgid "List"
|
||||||
|
msgstr "Liste"
|
||||||
|
|
||||||
|
#: conf.py:10
|
||||||
|
msgid "Slideshow"
|
||||||
|
msgstr "Diaporama"
|
||||||
|
|
||||||
|
#: models.py:22
|
||||||
|
msgid "title"
|
||||||
|
msgstr "titre"
|
||||||
|
|
||||||
|
#: models.py:25
|
||||||
|
msgid "Style"
|
||||||
|
msgstr "Style"
|
||||||
|
|
||||||
|
#: templates/cmsplugin_filer_folder/plugins/folder/default.html:23
|
||||||
|
msgid "Folders"
|
||||||
|
msgstr "Dossiers"
|
||||||
|
|
||||||
|
#: templates/cmsplugin_filer_folder/plugins/folder/default.html:31
|
||||||
|
msgid "Files"
|
||||||
|
msgstr "Fichiers"
|
||||||
|
|
||||||
|
#: templates/cmsplugin_filer_folder/plugins/folder/default.html:39
|
||||||
|
msgid "Images"
|
||||||
|
msgstr "Images"
|
||||||
52
cmsplugin_filer_folder/locale/it/LC_MESSAGES/django.po
Normal file
52
cmsplugin_filer_folder/locale/it/LC_MESSAGES/django.po
Normal file
|
|
@ -0,0 +1,52 @@
|
||||||
|
# SOME DESCRIPTIVE TITLE.
|
||||||
|
# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
|
||||||
|
# This file is distributed under the same license as the PACKAGE package.
|
||||||
|
#
|
||||||
|
# Translators:
|
||||||
|
# yakky <i.spalletti@nephila.it>, 2012
|
||||||
|
# yakky <i.spalletti@nephila.it>, 2016
|
||||||
|
msgid ""
|
||||||
|
msgstr ""
|
||||||
|
"Project-Id-Version: django Filer Plugins\n"
|
||||||
|
"Report-Msgid-Bugs-To: \n"
|
||||||
|
"POT-Creation-Date: 2016-08-23 10:26-0400\n"
|
||||||
|
"PO-Revision-Date: 2016-07-13 08:28+0000\n"
|
||||||
|
"Last-Translator: yakky <i.spalletti@nephila.it>\n"
|
||||||
|
"Language-Team: Italian (http://www.transifex.com/divio/cmsplugin-filer/language/it/)\n"
|
||||||
|
"MIME-Version: 1.0\n"
|
||||||
|
"Content-Type: text/plain; charset=UTF-8\n"
|
||||||
|
"Content-Transfer-Encoding: 8bit\n"
|
||||||
|
"Language: it\n"
|
||||||
|
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
|
||||||
|
|
||||||
|
#: cms_plugins.py:16
|
||||||
|
msgid "Folder"
|
||||||
|
msgstr "Cartella"
|
||||||
|
|
||||||
|
#: conf.py:9
|
||||||
|
msgid "List"
|
||||||
|
msgstr "Lista"
|
||||||
|
|
||||||
|
#: conf.py:10
|
||||||
|
msgid "Slideshow"
|
||||||
|
msgstr "Slideshow"
|
||||||
|
|
||||||
|
#: models.py:22
|
||||||
|
msgid "title"
|
||||||
|
msgstr "titolo"
|
||||||
|
|
||||||
|
#: models.py:25
|
||||||
|
msgid "Style"
|
||||||
|
msgstr "Stile"
|
||||||
|
|
||||||
|
#: templates/cmsplugin_filer_folder/plugins/folder/default.html:23
|
||||||
|
msgid "Folders"
|
||||||
|
msgstr "Cartelle"
|
||||||
|
|
||||||
|
#: templates/cmsplugin_filer_folder/plugins/folder/default.html:31
|
||||||
|
msgid "Files"
|
||||||
|
msgstr "File"
|
||||||
|
|
||||||
|
#: templates/cmsplugin_filer_folder/plugins/folder/default.html:39
|
||||||
|
msgid "Images"
|
||||||
|
msgstr "Immagini"
|
||||||
50
cmsplugin_filer_folder/locale/it_IT/LC_MESSAGES/django.po
Normal file
50
cmsplugin_filer_folder/locale/it_IT/LC_MESSAGES/django.po
Normal file
|
|
@ -0,0 +1,50 @@
|
||||||
|
# SOME DESCRIPTIVE TITLE.
|
||||||
|
# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
|
||||||
|
# This file is distributed under the same license as the PACKAGE package.
|
||||||
|
#
|
||||||
|
# Translators:
|
||||||
|
msgid ""
|
||||||
|
msgstr ""
|
||||||
|
"Project-Id-Version: django Filer Plugins\n"
|
||||||
|
"Report-Msgid-Bugs-To: \n"
|
||||||
|
"POT-Creation-Date: 2016-08-23 10:26-0400\n"
|
||||||
|
"PO-Revision-Date: 2016-06-22 17:49+0000\n"
|
||||||
|
"Last-Translator: Martin Koistinen <mkoistinen@gmail.com>\n"
|
||||||
|
"Language-Team: Italian (Italy) (http://www.transifex.com/divio/cmsplugin-filer/language/it_IT/)\n"
|
||||||
|
"MIME-Version: 1.0\n"
|
||||||
|
"Content-Type: text/plain; charset=UTF-8\n"
|
||||||
|
"Content-Transfer-Encoding: 8bit\n"
|
||||||
|
"Language: it_IT\n"
|
||||||
|
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
|
||||||
|
|
||||||
|
#: cms_plugins.py:16
|
||||||
|
msgid "Folder"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: conf.py:9
|
||||||
|
msgid "List"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: conf.py:10
|
||||||
|
msgid "Slideshow"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: models.py:22
|
||||||
|
msgid "title"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: models.py:25
|
||||||
|
msgid "Style"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: templates/cmsplugin_filer_folder/plugins/folder/default.html:23
|
||||||
|
msgid "Folders"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: templates/cmsplugin_filer_folder/plugins/folder/default.html:31
|
||||||
|
msgid "Files"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: templates/cmsplugin_filer_folder/plugins/folder/default.html:39
|
||||||
|
msgid "Images"
|
||||||
|
msgstr ""
|
||||||
52
cmsplugin_filer_folder/locale/lt/LC_MESSAGES/django.po
Normal file
52
cmsplugin_filer_folder/locale/lt/LC_MESSAGES/django.po
Normal file
|
|
@ -0,0 +1,52 @@
|
||||||
|
# SOME DESCRIPTIVE TITLE.
|
||||||
|
# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
|
||||||
|
# This file is distributed under the same license as the PACKAGE package.
|
||||||
|
#
|
||||||
|
# Translators:
|
||||||
|
# Matas Dailyda, 2015
|
||||||
|
# Matas Dailyda <matas@dailyda.com>, 2016
|
||||||
|
msgid ""
|
||||||
|
msgstr ""
|
||||||
|
"Project-Id-Version: django Filer Plugins\n"
|
||||||
|
"Report-Msgid-Bugs-To: \n"
|
||||||
|
"POT-Creation-Date: 2016-08-23 10:26-0400\n"
|
||||||
|
"PO-Revision-Date: 2016-07-18 09:19+0000\n"
|
||||||
|
"Last-Translator: Matas Dailyda <matas@dailyda.com>\n"
|
||||||
|
"Language-Team: Lithuanian (http://www.transifex.com/divio/cmsplugin-filer/language/lt/)\n"
|
||||||
|
"MIME-Version: 1.0\n"
|
||||||
|
"Content-Type: text/plain; charset=UTF-8\n"
|
||||||
|
"Content-Transfer-Encoding: 8bit\n"
|
||||||
|
"Language: lt\n"
|
||||||
|
"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && (n%100<10 || n%100>=20) ? 1 : 2);\n"
|
||||||
|
|
||||||
|
#: cms_plugins.py:16
|
||||||
|
msgid "Folder"
|
||||||
|
msgstr "Aplankas"
|
||||||
|
|
||||||
|
#: conf.py:9
|
||||||
|
msgid "List"
|
||||||
|
msgstr "Sąrašas"
|
||||||
|
|
||||||
|
#: conf.py:10
|
||||||
|
msgid "Slideshow"
|
||||||
|
msgstr "Sąrašas su paveikslėliais"
|
||||||
|
|
||||||
|
#: models.py:22
|
||||||
|
msgid "title"
|
||||||
|
msgstr "pavadinimas"
|
||||||
|
|
||||||
|
#: models.py:25
|
||||||
|
msgid "Style"
|
||||||
|
msgstr "Stilius"
|
||||||
|
|
||||||
|
#: templates/cmsplugin_filer_folder/plugins/folder/default.html:23
|
||||||
|
msgid "Folders"
|
||||||
|
msgstr "Aplankai"
|
||||||
|
|
||||||
|
#: templates/cmsplugin_filer_folder/plugins/folder/default.html:31
|
||||||
|
msgid "Files"
|
||||||
|
msgstr "Bylos"
|
||||||
|
|
||||||
|
#: templates/cmsplugin_filer_folder/plugins/folder/default.html:39
|
||||||
|
msgid "Images"
|
||||||
|
msgstr "Paveikslėliai"
|
||||||
50
cmsplugin_filer_folder/locale/lt_LT/LC_MESSAGES/django.po
Normal file
50
cmsplugin_filer_folder/locale/lt_LT/LC_MESSAGES/django.po
Normal file
|
|
@ -0,0 +1,50 @@
|
||||||
|
# SOME DESCRIPTIVE TITLE.
|
||||||
|
# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
|
||||||
|
# This file is distributed under the same license as the PACKAGE package.
|
||||||
|
#
|
||||||
|
# Translators:
|
||||||
|
msgid ""
|
||||||
|
msgstr ""
|
||||||
|
"Project-Id-Version: django Filer Plugins\n"
|
||||||
|
"Report-Msgid-Bugs-To: \n"
|
||||||
|
"POT-Creation-Date: 2016-08-23 10:26-0400\n"
|
||||||
|
"PO-Revision-Date: 2016-06-22 17:49+0000\n"
|
||||||
|
"Last-Translator: Martin Koistinen <mkoistinen@gmail.com>\n"
|
||||||
|
"Language-Team: Lithuanian (Lithuania) (http://www.transifex.com/divio/cmsplugin-filer/language/lt_LT/)\n"
|
||||||
|
"MIME-Version: 1.0\n"
|
||||||
|
"Content-Type: text/plain; charset=UTF-8\n"
|
||||||
|
"Content-Transfer-Encoding: 8bit\n"
|
||||||
|
"Language: lt_LT\n"
|
||||||
|
"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && (n%100<10 || n%100>=20) ? 1 : 2);\n"
|
||||||
|
|
||||||
|
#: cms_plugins.py:16
|
||||||
|
msgid "Folder"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: conf.py:9
|
||||||
|
msgid "List"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: conf.py:10
|
||||||
|
msgid "Slideshow"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: models.py:22
|
||||||
|
msgid "title"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: models.py:25
|
||||||
|
msgid "Style"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: templates/cmsplugin_filer_folder/plugins/folder/default.html:23
|
||||||
|
msgid "Folders"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: templates/cmsplugin_filer_folder/plugins/folder/default.html:31
|
||||||
|
msgid "Files"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: templates/cmsplugin_filer_folder/plugins/folder/default.html:39
|
||||||
|
msgid "Images"
|
||||||
|
msgstr ""
|
||||||
50
cmsplugin_filer_folder/locale/nb/LC_MESSAGES/django.po
Normal file
50
cmsplugin_filer_folder/locale/nb/LC_MESSAGES/django.po
Normal file
|
|
@ -0,0 +1,50 @@
|
||||||
|
# SOME DESCRIPTIVE TITLE.
|
||||||
|
# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
|
||||||
|
# This file is distributed under the same license as the PACKAGE package.
|
||||||
|
#
|
||||||
|
# Translators:
|
||||||
|
msgid ""
|
||||||
|
msgstr ""
|
||||||
|
"Project-Id-Version: django Filer Plugins\n"
|
||||||
|
"Report-Msgid-Bugs-To: \n"
|
||||||
|
"POT-Creation-Date: 2016-08-23 10:26-0400\n"
|
||||||
|
"PO-Revision-Date: 2016-06-22 17:49+0000\n"
|
||||||
|
"Last-Translator: Martin Koistinen <mkoistinen@gmail.com>\n"
|
||||||
|
"Language-Team: Norwegian Bokmål (http://www.transifex.com/divio/cmsplugin-filer/language/nb/)\n"
|
||||||
|
"MIME-Version: 1.0\n"
|
||||||
|
"Content-Type: text/plain; charset=UTF-8\n"
|
||||||
|
"Content-Transfer-Encoding: 8bit\n"
|
||||||
|
"Language: nb\n"
|
||||||
|
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
|
||||||
|
|
||||||
|
#: cms_plugins.py:16
|
||||||
|
msgid "Folder"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: conf.py:9
|
||||||
|
msgid "List"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: conf.py:10
|
||||||
|
msgid "Slideshow"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: models.py:22
|
||||||
|
msgid "title"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: models.py:25
|
||||||
|
msgid "Style"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: templates/cmsplugin_filer_folder/plugins/folder/default.html:23
|
||||||
|
msgid "Folders"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: templates/cmsplugin_filer_folder/plugins/folder/default.html:31
|
||||||
|
msgid "Files"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: templates/cmsplugin_filer_folder/plugins/folder/default.html:39
|
||||||
|
msgid "Images"
|
||||||
|
msgstr ""
|
||||||
52
cmsplugin_filer_folder/locale/nl/LC_MESSAGES/django.po
Normal file
52
cmsplugin_filer_folder/locale/nl/LC_MESSAGES/django.po
Normal file
|
|
@ -0,0 +1,52 @@
|
||||||
|
# SOME DESCRIPTIVE TITLE.
|
||||||
|
# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
|
||||||
|
# This file is distributed under the same license as the PACKAGE package.
|
||||||
|
#
|
||||||
|
# Translators:
|
||||||
|
# Maikel Wever, 2013
|
||||||
|
# kurdyma <transifex.com@kurdyenviolien.nl>, 2016
|
||||||
|
msgid ""
|
||||||
|
msgstr ""
|
||||||
|
"Project-Id-Version: django Filer Plugins\n"
|
||||||
|
"Report-Msgid-Bugs-To: \n"
|
||||||
|
"POT-Creation-Date: 2016-08-23 10:26-0400\n"
|
||||||
|
"PO-Revision-Date: 2016-06-27 20:24+0000\n"
|
||||||
|
"Last-Translator: kurdyma <transifex.com@kurdyenviolien.nl>\n"
|
||||||
|
"Language-Team: Dutch (http://www.transifex.com/divio/cmsplugin-filer/language/nl/)\n"
|
||||||
|
"MIME-Version: 1.0\n"
|
||||||
|
"Content-Type: text/plain; charset=UTF-8\n"
|
||||||
|
"Content-Transfer-Encoding: 8bit\n"
|
||||||
|
"Language: nl\n"
|
||||||
|
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
|
||||||
|
|
||||||
|
#: cms_plugins.py:16
|
||||||
|
msgid "Folder"
|
||||||
|
msgstr "Map"
|
||||||
|
|
||||||
|
#: conf.py:9
|
||||||
|
msgid "List"
|
||||||
|
msgstr "Lijst"
|
||||||
|
|
||||||
|
#: conf.py:10
|
||||||
|
msgid "Slideshow"
|
||||||
|
msgstr "Slideshow"
|
||||||
|
|
||||||
|
#: models.py:22
|
||||||
|
msgid "title"
|
||||||
|
msgstr "titel"
|
||||||
|
|
||||||
|
#: models.py:25
|
||||||
|
msgid "Style"
|
||||||
|
msgstr "Stijl"
|
||||||
|
|
||||||
|
#: templates/cmsplugin_filer_folder/plugins/folder/default.html:23
|
||||||
|
msgid "Folders"
|
||||||
|
msgstr "Mappen"
|
||||||
|
|
||||||
|
#: templates/cmsplugin_filer_folder/plugins/folder/default.html:31
|
||||||
|
msgid "Files"
|
||||||
|
msgstr "Bestanden"
|
||||||
|
|
||||||
|
#: templates/cmsplugin_filer_folder/plugins/folder/default.html:39
|
||||||
|
msgid "Images"
|
||||||
|
msgstr "Afbeeldingen"
|
||||||
50
cmsplugin_filer_folder/locale/nn/LC_MESSAGES/django.po
Normal file
50
cmsplugin_filer_folder/locale/nn/LC_MESSAGES/django.po
Normal file
|
|
@ -0,0 +1,50 @@
|
||||||
|
# SOME DESCRIPTIVE TITLE.
|
||||||
|
# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
|
||||||
|
# This file is distributed under the same license as the PACKAGE package.
|
||||||
|
#
|
||||||
|
# Translators:
|
||||||
|
msgid ""
|
||||||
|
msgstr ""
|
||||||
|
"Project-Id-Version: django Filer Plugins\n"
|
||||||
|
"Report-Msgid-Bugs-To: \n"
|
||||||
|
"POT-Creation-Date: 2016-08-23 10:26-0400\n"
|
||||||
|
"PO-Revision-Date: 2016-06-22 17:49+0000\n"
|
||||||
|
"Last-Translator: Martin Koistinen <mkoistinen@gmail.com>\n"
|
||||||
|
"Language-Team: Norwegian Nynorsk (http://www.transifex.com/divio/cmsplugin-filer/language/nn/)\n"
|
||||||
|
"MIME-Version: 1.0\n"
|
||||||
|
"Content-Type: text/plain; charset=UTF-8\n"
|
||||||
|
"Content-Transfer-Encoding: 8bit\n"
|
||||||
|
"Language: nn\n"
|
||||||
|
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
|
||||||
|
|
||||||
|
#: cms_plugins.py:16
|
||||||
|
msgid "Folder"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: conf.py:9
|
||||||
|
msgid "List"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: conf.py:10
|
||||||
|
msgid "Slideshow"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: models.py:22
|
||||||
|
msgid "title"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: models.py:25
|
||||||
|
msgid "Style"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: templates/cmsplugin_filer_folder/plugins/folder/default.html:23
|
||||||
|
msgid "Folders"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: templates/cmsplugin_filer_folder/plugins/folder/default.html:31
|
||||||
|
msgid "Files"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: templates/cmsplugin_filer_folder/plugins/folder/default.html:39
|
||||||
|
msgid "Images"
|
||||||
|
msgstr ""
|
||||||
51
cmsplugin_filer_folder/locale/pl_PL/LC_MESSAGES/django.po
Normal file
51
cmsplugin_filer_folder/locale/pl_PL/LC_MESSAGES/django.po
Normal file
|
|
@ -0,0 +1,51 @@
|
||||||
|
# SOME DESCRIPTIVE TITLE.
|
||||||
|
# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
|
||||||
|
# This file is distributed under the same license as the PACKAGE package.
|
||||||
|
#
|
||||||
|
# Translators:
|
||||||
|
# Mateusz Marzantowicz <mmarzantowicz@osdf.com.pl>, 2013
|
||||||
|
msgid ""
|
||||||
|
msgstr ""
|
||||||
|
"Project-Id-Version: django Filer Plugins\n"
|
||||||
|
"Report-Msgid-Bugs-To: \n"
|
||||||
|
"POT-Creation-Date: 2016-08-23 10:26-0400\n"
|
||||||
|
"PO-Revision-Date: 2016-06-22 17:49+0000\n"
|
||||||
|
"Last-Translator: Martin Koistinen <mkoistinen@gmail.com>\n"
|
||||||
|
"Language-Team: Polish (Poland) (http://www.transifex.com/divio/cmsplugin-filer/language/pl_PL/)\n"
|
||||||
|
"MIME-Version: 1.0\n"
|
||||||
|
"Content-Type: text/plain; charset=UTF-8\n"
|
||||||
|
"Content-Transfer-Encoding: 8bit\n"
|
||||||
|
"Language: pl_PL\n"
|
||||||
|
"Plural-Forms: nplurals=3; plural=(n==1 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n"
|
||||||
|
|
||||||
|
#: cms_plugins.py:16
|
||||||
|
msgid "Folder"
|
||||||
|
msgstr "Katalog"
|
||||||
|
|
||||||
|
#: conf.py:9
|
||||||
|
msgid "List"
|
||||||
|
msgstr "Lista"
|
||||||
|
|
||||||
|
#: conf.py:10
|
||||||
|
msgid "Slideshow"
|
||||||
|
msgstr "Pokaz slajdów"
|
||||||
|
|
||||||
|
#: models.py:22
|
||||||
|
msgid "title"
|
||||||
|
msgstr "tytuł"
|
||||||
|
|
||||||
|
#: models.py:25
|
||||||
|
msgid "Style"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: templates/cmsplugin_filer_folder/plugins/folder/default.html:23
|
||||||
|
msgid "Folders"
|
||||||
|
msgstr "Katalogi"
|
||||||
|
|
||||||
|
#: templates/cmsplugin_filer_folder/plugins/folder/default.html:31
|
||||||
|
msgid "Files"
|
||||||
|
msgstr "Pliki"
|
||||||
|
|
||||||
|
#: templates/cmsplugin_filer_folder/plugins/folder/default.html:39
|
||||||
|
msgid "Images"
|
||||||
|
msgstr "Obrazy"
|
||||||
51
cmsplugin_filer_folder/locale/pt_BR/LC_MESSAGES/django.po
Normal file
51
cmsplugin_filer_folder/locale/pt_BR/LC_MESSAGES/django.po
Normal file
|
|
@ -0,0 +1,51 @@
|
||||||
|
# SOME DESCRIPTIVE TITLE.
|
||||||
|
# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
|
||||||
|
# This file is distributed under the same license as the PACKAGE package.
|
||||||
|
#
|
||||||
|
# Translators:
|
||||||
|
# Rodrigo <rprior@infranology.com.br>, 2013
|
||||||
|
msgid ""
|
||||||
|
msgstr ""
|
||||||
|
"Project-Id-Version: django Filer Plugins\n"
|
||||||
|
"Report-Msgid-Bugs-To: \n"
|
||||||
|
"POT-Creation-Date: 2016-08-23 10:26-0400\n"
|
||||||
|
"PO-Revision-Date: 2016-06-22 17:49+0000\n"
|
||||||
|
"Last-Translator: Martin Koistinen <mkoistinen@gmail.com>\n"
|
||||||
|
"Language-Team: Portuguese (Brazil) (http://www.transifex.com/divio/cmsplugin-filer/language/pt_BR/)\n"
|
||||||
|
"MIME-Version: 1.0\n"
|
||||||
|
"Content-Type: text/plain; charset=UTF-8\n"
|
||||||
|
"Content-Transfer-Encoding: 8bit\n"
|
||||||
|
"Language: pt_BR\n"
|
||||||
|
"Plural-Forms: nplurals=2; plural=(n > 1);\n"
|
||||||
|
|
||||||
|
#: cms_plugins.py:16
|
||||||
|
msgid "Folder"
|
||||||
|
msgstr "Pasta"
|
||||||
|
|
||||||
|
#: conf.py:9
|
||||||
|
msgid "List"
|
||||||
|
msgstr "Lista"
|
||||||
|
|
||||||
|
#: conf.py:10
|
||||||
|
msgid "Slideshow"
|
||||||
|
msgstr "Slideshow"
|
||||||
|
|
||||||
|
#: models.py:22
|
||||||
|
msgid "title"
|
||||||
|
msgstr "título"
|
||||||
|
|
||||||
|
#: models.py:25
|
||||||
|
msgid "Style"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: templates/cmsplugin_filer_folder/plugins/folder/default.html:23
|
||||||
|
msgid "Folders"
|
||||||
|
msgstr "Pastas"
|
||||||
|
|
||||||
|
#: templates/cmsplugin_filer_folder/plugins/folder/default.html:31
|
||||||
|
msgid "Files"
|
||||||
|
msgstr "Arquivos"
|
||||||
|
|
||||||
|
#: templates/cmsplugin_filer_folder/plugins/folder/default.html:39
|
||||||
|
msgid "Images"
|
||||||
|
msgstr "Imagens"
|
||||||
51
cmsplugin_filer_folder/locale/ru/LC_MESSAGES/django.po
Normal file
51
cmsplugin_filer_folder/locale/ru/LC_MESSAGES/django.po
Normal file
|
|
@ -0,0 +1,51 @@
|
||||||
|
# SOME DESCRIPTIVE TITLE.
|
||||||
|
# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
|
||||||
|
# This file is distributed under the same license as the PACKAGE package.
|
||||||
|
#
|
||||||
|
# Translators:
|
||||||
|
# Pavel <neoascetic@gmail.com>, 2012
|
||||||
|
msgid ""
|
||||||
|
msgstr ""
|
||||||
|
"Project-Id-Version: django Filer Plugins\n"
|
||||||
|
"Report-Msgid-Bugs-To: \n"
|
||||||
|
"POT-Creation-Date: 2016-08-23 10:26-0400\n"
|
||||||
|
"PO-Revision-Date: 2016-06-22 17:49+0000\n"
|
||||||
|
"Last-Translator: Martin Koistinen <mkoistinen@gmail.com>\n"
|
||||||
|
"Language-Team: Russian (http://www.transifex.com/divio/cmsplugin-filer/language/ru/)\n"
|
||||||
|
"MIME-Version: 1.0\n"
|
||||||
|
"Content-Type: text/plain; charset=UTF-8\n"
|
||||||
|
"Content-Transfer-Encoding: 8bit\n"
|
||||||
|
"Language: ru\n"
|
||||||
|
"Plural-Forms: nplurals=4; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<12 || n%100>14) ? 1 : n%10==0 || (n%10>=5 && n%10<=9) || (n%100>=11 && n%100<=14)? 2 : 3);\n"
|
||||||
|
|
||||||
|
#: cms_plugins.py:16
|
||||||
|
msgid "Folder"
|
||||||
|
msgstr "Папка"
|
||||||
|
|
||||||
|
#: conf.py:9
|
||||||
|
msgid "List"
|
||||||
|
msgstr "Список"
|
||||||
|
|
||||||
|
#: conf.py:10
|
||||||
|
msgid "Slideshow"
|
||||||
|
msgstr "Слайдшоу"
|
||||||
|
|
||||||
|
#: models.py:22
|
||||||
|
msgid "title"
|
||||||
|
msgstr "заголовок"
|
||||||
|
|
||||||
|
#: models.py:25
|
||||||
|
msgid "Style"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: templates/cmsplugin_filer_folder/plugins/folder/default.html:23
|
||||||
|
msgid "Folders"
|
||||||
|
msgstr "Папки"
|
||||||
|
|
||||||
|
#: templates/cmsplugin_filer_folder/plugins/folder/default.html:31
|
||||||
|
msgid "Files"
|
||||||
|
msgstr "Файлы"
|
||||||
|
|
||||||
|
#: templates/cmsplugin_filer_folder/plugins/folder/default.html:39
|
||||||
|
msgid "Images"
|
||||||
|
msgstr "Изображения"
|
||||||
51
cmsplugin_filer_folder/locale/zh_CN/LC_MESSAGES/django.po
Normal file
51
cmsplugin_filer_folder/locale/zh_CN/LC_MESSAGES/django.po
Normal file
|
|
@ -0,0 +1,51 @@
|
||||||
|
# SOME DESCRIPTIVE TITLE.
|
||||||
|
# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
|
||||||
|
# This file is distributed under the same license as the PACKAGE package.
|
||||||
|
#
|
||||||
|
# Translators:
|
||||||
|
# Calvin-He <xhe.com@gmail.com>, 2015
|
||||||
|
msgid ""
|
||||||
|
msgstr ""
|
||||||
|
"Project-Id-Version: django Filer Plugins\n"
|
||||||
|
"Report-Msgid-Bugs-To: \n"
|
||||||
|
"POT-Creation-Date: 2016-08-23 10:26-0400\n"
|
||||||
|
"PO-Revision-Date: 2016-06-22 17:49+0000\n"
|
||||||
|
"Last-Translator: Martin Koistinen <mkoistinen@gmail.com>\n"
|
||||||
|
"Language-Team: Chinese (China) (http://www.transifex.com/divio/cmsplugin-filer/language/zh_CN/)\n"
|
||||||
|
"MIME-Version: 1.0\n"
|
||||||
|
"Content-Type: text/plain; charset=UTF-8\n"
|
||||||
|
"Content-Transfer-Encoding: 8bit\n"
|
||||||
|
"Language: zh_CN\n"
|
||||||
|
"Plural-Forms: nplurals=1; plural=0;\n"
|
||||||
|
|
||||||
|
#: cms_plugins.py:16
|
||||||
|
msgid "Folder"
|
||||||
|
msgstr "文件夹"
|
||||||
|
|
||||||
|
#: conf.py:9
|
||||||
|
msgid "List"
|
||||||
|
msgstr "列表"
|
||||||
|
|
||||||
|
#: conf.py:10
|
||||||
|
msgid "Slideshow"
|
||||||
|
msgstr "幻灯片"
|
||||||
|
|
||||||
|
#: models.py:22
|
||||||
|
msgid "title"
|
||||||
|
msgstr "标题"
|
||||||
|
|
||||||
|
#: models.py:25
|
||||||
|
msgid "Style"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: templates/cmsplugin_filer_folder/plugins/folder/default.html:23
|
||||||
|
msgid "Folders"
|
||||||
|
msgstr "文件夹"
|
||||||
|
|
||||||
|
#: templates/cmsplugin_filer_folder/plugins/folder/default.html:31
|
||||||
|
msgid "Files"
|
||||||
|
msgstr "文件"
|
||||||
|
|
||||||
|
#: templates/cmsplugin_filer_folder/plugins/folder/default.html:39
|
||||||
|
msgid "Images"
|
||||||
|
msgstr "图片"
|
||||||
30
cmsplugin_filer_folder/migrations/0001_initial.py
Normal file
30
cmsplugin_filer_folder/migrations/0001_initial.py
Normal file
|
|
@ -0,0 +1,30 @@
|
||||||
|
# -*- coding: utf-8 -*-
|
||||||
|
from __future__ import unicode_literals
|
||||||
|
|
||||||
|
from django.db import models, migrations
|
||||||
|
from django.conf import settings
|
||||||
|
import filer.fields.folder
|
||||||
|
|
||||||
|
|
||||||
|
class Migration(migrations.Migration):
|
||||||
|
|
||||||
|
dependencies = [
|
||||||
|
('cms', '0003_auto_20140926_2347'),
|
||||||
|
('filer', '0001_initial'),
|
||||||
|
]
|
||||||
|
|
||||||
|
operations = [
|
||||||
|
migrations.CreateModel(
|
||||||
|
name='FilerFolder',
|
||||||
|
fields=[
|
||||||
|
('cmsplugin_ptr', models.OneToOneField(parent_link=True, auto_created=True, primary_key=True, serialize=False, to='cms.CMSPlugin', on_delete=models.CASCADE)),
|
||||||
|
('title', models.CharField(max_length=255, null=True, verbose_name='title', blank=True)),
|
||||||
|
('style', models.CharField(default=settings.CMSPLUGIN_FILER_FOLDER_DEFAULT_STYLE, max_length=50, verbose_name='Style', choices=settings.CMSPLUGIN_FILER_FOLDER_STYLE_CHOICES)),
|
||||||
|
('folder', filer.fields.folder.FilerFolderField(to='filer.Folder', on_delete=models.CASCADE)),
|
||||||
|
],
|
||||||
|
options={
|
||||||
|
'abstract': False,
|
||||||
|
},
|
||||||
|
bases=('cms.cmsplugin',),
|
||||||
|
),
|
||||||
|
]
|
||||||
21
cmsplugin_filer_folder/migrations/0002_auto_20160113_1318.py
Normal file
21
cmsplugin_filer_folder/migrations/0002_auto_20160113_1318.py
Normal file
|
|
@ -0,0 +1,21 @@
|
||||||
|
# -*- coding: utf-8 -*-
|
||||||
|
from __future__ import unicode_literals
|
||||||
|
|
||||||
|
from django.db import migrations, models
|
||||||
|
import filer.fields.folder
|
||||||
|
import django.db.models.deletion
|
||||||
|
|
||||||
|
|
||||||
|
class Migration(migrations.Migration):
|
||||||
|
|
||||||
|
dependencies = [
|
||||||
|
('cmsplugin_filer_folder', '0001_initial'),
|
||||||
|
]
|
||||||
|
|
||||||
|
operations = [
|
||||||
|
migrations.AlterField(
|
||||||
|
model_name='filerfolder',
|
||||||
|
name='folder',
|
||||||
|
field=filer.fields.folder.FilerFolderField(on_delete=django.db.models.deletion.SET_NULL, to='filer.Folder', null=True),
|
||||||
|
),
|
||||||
|
]
|
||||||
19
cmsplugin_filer_folder/migrations/0003_auto_20160713_1853.py
Normal file
19
cmsplugin_filer_folder/migrations/0003_auto_20160713_1853.py
Normal file
|
|
@ -0,0 +1,19 @@
|
||||||
|
# -*- coding: utf-8 -*-
|
||||||
|
from __future__ import unicode_literals
|
||||||
|
|
||||||
|
from django.db import migrations, models
|
||||||
|
|
||||||
|
|
||||||
|
class Migration(migrations.Migration):
|
||||||
|
|
||||||
|
dependencies = [
|
||||||
|
('cmsplugin_filer_folder', '0002_auto_20160113_1318'),
|
||||||
|
]
|
||||||
|
|
||||||
|
operations = [
|
||||||
|
migrations.AlterField(
|
||||||
|
model_name='filerfolder',
|
||||||
|
name='cmsplugin_ptr',
|
||||||
|
field=models.OneToOneField(parent_link=True, related_name='cmsplugin_filer_folder_filerfolder', primary_key=True, serialize=False, to='cms.CMSPlugin', on_delete=models.CASCADE),
|
||||||
|
),
|
||||||
|
]
|
||||||
0
cmsplugin_filer_folder/migrations/__init__.py
Normal file
0
cmsplugin_filer_folder/migrations/__init__.py
Normal file
49
cmsplugin_filer_folder/models.py
Normal file
49
cmsplugin_filer_folder/models.py
Normal file
|
|
@ -0,0 +1,49 @@
|
||||||
|
from __future__ import unicode_literals
|
||||||
|
|
||||||
|
import warnings
|
||||||
|
from django.db import models
|
||||||
|
from cms.models import CMSPlugin
|
||||||
|
from django.utils.translation import gettext_lazy as _
|
||||||
|
from filer.fields.folder import FilerFolderField
|
||||||
|
from .conf import settings
|
||||||
|
from cmsplugin_filer_utils import FilerPluginManager
|
||||||
|
|
||||||
|
|
||||||
|
class FilerFolder(CMSPlugin):
|
||||||
|
"""
|
||||||
|
Plugin for storing any type of Folder.
|
||||||
|
|
||||||
|
Default template displays files store inside this folder.
|
||||||
|
"""
|
||||||
|
STYLE_CHOICES = settings.CMSPLUGIN_FILER_FOLDER_STYLE_CHOICES
|
||||||
|
DEFAULT_STYLE = settings.CMSPLUGIN_FILER_FOLDER_DEFAULT_STYLE
|
||||||
|
title = models.CharField(_("title"), max_length=255, null=True, blank=True)
|
||||||
|
folder = FilerFolderField(null=True, on_delete=models.SET_NULL)
|
||||||
|
style = models.CharField(
|
||||||
|
_('Style'), choices=STYLE_CHOICES, default=DEFAULT_STYLE, max_length=50)
|
||||||
|
cmsplugin_ptr = models.OneToOneField(
|
||||||
|
to=CMSPlugin,
|
||||||
|
related_name='%(app_label)s_%(class)s',
|
||||||
|
parent_link=True,
|
||||||
|
on_delete=models.CASCADE
|
||||||
|
)
|
||||||
|
|
||||||
|
objects = FilerPluginManager(select_related=('folder',))
|
||||||
|
|
||||||
|
@property
|
||||||
|
def view_option(self):
|
||||||
|
warnings.warn("view_option on cmsplugin_filer_folder.FilderFolder is deprecated. Use .style instead.",
|
||||||
|
DeprecationWarning)
|
||||||
|
return self.style
|
||||||
|
|
||||||
|
def __str__(self):
|
||||||
|
return self.get_display_name()
|
||||||
|
|
||||||
|
def get_display_name(self):
|
||||||
|
if self.title:
|
||||||
|
return self.title
|
||||||
|
elif self.folder_id and self.folder.name:
|
||||||
|
return self.folder.name
|
||||||
|
return "<empty>"
|
||||||
|
|
||||||
|
search_fields = ('title',)
|
||||||
|
|
@ -0,0 +1,2 @@
|
||||||
|
.cmsplugin_filer_folder_slideshow { padding: 5px; }
|
||||||
|
.cmsplugin_filer_folder_slideshow img { padding: 15px; border: 1px solid #ccc; background-color: #eee; }
|
||||||
|
|
@ -0,0 +1,235 @@
|
||||||
|
/*!
|
||||||
|
* jQuery Cycle Lite Plugin
|
||||||
|
* http://malsup.com/jquery/cycle/lite/
|
||||||
|
* Copyright (c) 2008-2012 M. Alsup
|
||||||
|
* Version: 1.7 (20-FEB-2013)
|
||||||
|
* Dual licensed under the MIT and GPL licenses:
|
||||||
|
* http://www.opensource.org/licenses/mit-license.php
|
||||||
|
* http://www.gnu.org/licenses/gpl.html
|
||||||
|
* Requires: jQuery v1.3.2 or later
|
||||||
|
*/
|
||||||
|
;(function($) {
|
||||||
|
"use strict";
|
||||||
|
|
||||||
|
var ver = 'Lite-1.7';
|
||||||
|
var msie = /MSIE/.test(navigator.userAgent);
|
||||||
|
|
||||||
|
$.fn.cycle = function(options) {
|
||||||
|
return this.each(function() {
|
||||||
|
options = options || {};
|
||||||
|
|
||||||
|
if (this.cycleTimeout)
|
||||||
|
clearTimeout(this.cycleTimeout);
|
||||||
|
|
||||||
|
this.cycleTimeout = 0;
|
||||||
|
this.cyclePause = 0;
|
||||||
|
|
||||||
|
var $cont = $(this);
|
||||||
|
var $slides = options.slideExpr ? $(options.slideExpr, this) : $cont.children();
|
||||||
|
var els = $slides.get();
|
||||||
|
if (els.length < 2) {
|
||||||
|
if (window.console)
|
||||||
|
console.log('terminating; too few slides: ' + els.length);
|
||||||
|
return; // don't bother
|
||||||
|
}
|
||||||
|
|
||||||
|
// support metadata plugin (v1.0 and v2.0)
|
||||||
|
var opts = $.extend({}, $.fn.cycle.defaults, options || {}, $.metadata ? $cont.metadata() : $.meta ? $cont.data() : {});
|
||||||
|
var meta = $.isFunction($cont.data) ? $cont.data(opts.metaAttr) : null;
|
||||||
|
if (meta)
|
||||||
|
opts = $.extend(opts, meta);
|
||||||
|
|
||||||
|
opts.before = opts.before ? [opts.before] : [];
|
||||||
|
opts.after = opts.after ? [opts.after] : [];
|
||||||
|
opts.after.unshift(function(){ opts.busy=0; });
|
||||||
|
|
||||||
|
// allow shorthand overrides of width, height and timeout
|
||||||
|
var cls = this.className;
|
||||||
|
opts.width = parseInt((cls.match(/w:(\d+)/)||[])[1], 10) || opts.width;
|
||||||
|
opts.height = parseInt((cls.match(/h:(\d+)/)||[])[1], 10) || opts.height;
|
||||||
|
opts.timeout = parseInt((cls.match(/t:(\d+)/)||[])[1], 10) || opts.timeout;
|
||||||
|
|
||||||
|
if ($cont.css('position') == 'static')
|
||||||
|
$cont.css('position', 'relative');
|
||||||
|
if (opts.width)
|
||||||
|
$cont.width(opts.width);
|
||||||
|
if (opts.height && opts.height != 'auto')
|
||||||
|
$cont.height(opts.height);
|
||||||
|
|
||||||
|
var first = 0;
|
||||||
|
$slides.css({position: 'absolute', top:0}).each(function(i) {
|
||||||
|
$(this).css('z-index', els.length-i);
|
||||||
|
});
|
||||||
|
|
||||||
|
$(els[first]).css('opacity',1).show(); // opacity bit needed to handle reinit case
|
||||||
|
if (msie)
|
||||||
|
els[first].style.removeAttribute('filter');
|
||||||
|
|
||||||
|
if (opts.fit && opts.width)
|
||||||
|
$slides.width(opts.width);
|
||||||
|
if (opts.fit && opts.height && opts.height != 'auto')
|
||||||
|
$slides.height(opts.height);
|
||||||
|
if (opts.pause)
|
||||||
|
$cont.hover(function(){this.cyclePause=1;}, function(){this.cyclePause=0;});
|
||||||
|
|
||||||
|
var txFn = $.fn.cycle.transitions[opts.fx];
|
||||||
|
if (txFn)
|
||||||
|
txFn($cont, $slides, opts);
|
||||||
|
|
||||||
|
$slides.each(function() {
|
||||||
|
var $el = $(this);
|
||||||
|
this.cycleH = (opts.fit && opts.height) ? opts.height : $el.height();
|
||||||
|
this.cycleW = (opts.fit && opts.width) ? opts.width : $el.width();
|
||||||
|
});
|
||||||
|
|
||||||
|
if (opts.cssFirst)
|
||||||
|
$($slides[first]).css(opts.cssFirst);
|
||||||
|
|
||||||
|
if (opts.timeout) {
|
||||||
|
// ensure that timeout and speed settings are sane
|
||||||
|
if (opts.speed.constructor == String)
|
||||||
|
opts.speed = {slow: 600, fast: 200}[opts.speed] || 400;
|
||||||
|
if (!opts.sync)
|
||||||
|
opts.speed = opts.speed / 2;
|
||||||
|
while((opts.timeout - opts.speed) < 250)
|
||||||
|
opts.timeout += opts.speed;
|
||||||
|
}
|
||||||
|
opts.speedIn = opts.speed;
|
||||||
|
opts.speedOut = opts.speed;
|
||||||
|
|
||||||
|
opts.slideCount = els.length;
|
||||||
|
opts.currSlide = first;
|
||||||
|
opts.nextSlide = 1;
|
||||||
|
|
||||||
|
// fire artificial events
|
||||||
|
var e0 = $slides[first];
|
||||||
|
if (opts.before.length)
|
||||||
|
opts.before[0].apply(e0, [e0, e0, opts, true]);
|
||||||
|
if (opts.after.length > 1)
|
||||||
|
opts.after[1].apply(e0, [e0, e0, opts, true]);
|
||||||
|
|
||||||
|
if (opts.click && !opts.next)
|
||||||
|
opts.next = opts.click;
|
||||||
|
if (opts.next)
|
||||||
|
$(opts.next).unbind('click.cycle').bind('click.cycle', function(){return advance(els,opts,opts.rev?-1:1);});
|
||||||
|
if (opts.prev)
|
||||||
|
$(opts.prev).unbind('click.cycle').bind('click.cycle', function(){return advance(els,opts,opts.rev?1:-1);});
|
||||||
|
|
||||||
|
if (opts.timeout)
|
||||||
|
this.cycleTimeout = setTimeout(function() {
|
||||||
|
go(els,opts,0,!opts.rev);
|
||||||
|
}, opts.timeout + (opts.delay||0));
|
||||||
|
});
|
||||||
|
};
|
||||||
|
|
||||||
|
function go(els, opts, manual, fwd) {
|
||||||
|
if (opts.busy)
|
||||||
|
return;
|
||||||
|
var p = els[0].parentNode, curr = els[opts.currSlide], next = els[opts.nextSlide];
|
||||||
|
if (p.cycleTimeout === 0 && !manual)
|
||||||
|
return;
|
||||||
|
|
||||||
|
if (manual || !p.cyclePause) {
|
||||||
|
if (opts.before.length)
|
||||||
|
$.each(opts.before, function(i,o) { o.apply(next, [curr, next, opts, fwd]); });
|
||||||
|
var after = function() {
|
||||||
|
if (msie)
|
||||||
|
this.style.removeAttribute('filter');
|
||||||
|
$.each(opts.after, function(i,o) { o.apply(next, [curr, next, opts, fwd]); });
|
||||||
|
queueNext(opts);
|
||||||
|
};
|
||||||
|
|
||||||
|
if (opts.nextSlide != opts.currSlide) {
|
||||||
|
opts.busy = 1;
|
||||||
|
$.fn.cycle.custom(curr, next, opts, after);
|
||||||
|
}
|
||||||
|
var roll = (opts.nextSlide + 1) == els.length;
|
||||||
|
opts.nextSlide = roll ? 0 : opts.nextSlide+1;
|
||||||
|
opts.currSlide = roll ? els.length-1 : opts.nextSlide-1;
|
||||||
|
} else {
|
||||||
|
queueNext(opts);
|
||||||
|
}
|
||||||
|
|
||||||
|
function queueNext(opts) {
|
||||||
|
if (opts.timeout)
|
||||||
|
p.cycleTimeout = setTimeout(function() { go(els,opts,0,!opts.rev); }, opts.timeout);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// advance slide forward or back
|
||||||
|
function advance(els, opts, val) {
|
||||||
|
var p = els[0].parentNode, timeout = p.cycleTimeout;
|
||||||
|
if (timeout) {
|
||||||
|
clearTimeout(timeout);
|
||||||
|
p.cycleTimeout = 0;
|
||||||
|
}
|
||||||
|
opts.nextSlide = opts.currSlide + val;
|
||||||
|
if (opts.nextSlide < 0) {
|
||||||
|
opts.nextSlide = els.length - 1;
|
||||||
|
}
|
||||||
|
else if (opts.nextSlide >= els.length) {
|
||||||
|
opts.nextSlide = 0;
|
||||||
|
}
|
||||||
|
go(els, opts, 1, val>=0);
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
$.fn.cycle.custom = function(curr, next, opts, cb) {
|
||||||
|
var $l = $(curr), $n = $(next);
|
||||||
|
$n.css(opts.cssBefore);
|
||||||
|
var fn = function() {$n.animate(opts.animIn, opts.speedIn, opts.easeIn, cb);};
|
||||||
|
$l.animate(opts.animOut, opts.speedOut, opts.easeOut, function() {
|
||||||
|
$l.css(opts.cssAfter);
|
||||||
|
if (!opts.sync)
|
||||||
|
fn();
|
||||||
|
});
|
||||||
|
if (opts.sync)
|
||||||
|
fn();
|
||||||
|
};
|
||||||
|
|
||||||
|
$.fn.cycle.transitions = {
|
||||||
|
fade: function($cont, $slides, opts) {
|
||||||
|
$slides.not(':eq(0)').hide();
|
||||||
|
opts.cssBefore = { opacity: 0, display: 'block' };
|
||||||
|
opts.cssAfter = { display: 'none' };
|
||||||
|
opts.animOut = { opacity: 0 };
|
||||||
|
opts.animIn = { opacity: 1 };
|
||||||
|
},
|
||||||
|
fadeout: function($cont, $slides, opts) {
|
||||||
|
opts.before.push(function(curr,next,opts,fwd) {
|
||||||
|
$(curr).css('zIndex',opts.slideCount + (fwd === true ? 1 : 0));
|
||||||
|
$(next).css('zIndex',opts.slideCount + (fwd === true ? 0 : 1));
|
||||||
|
});
|
||||||
|
$slides.not(':eq(0)').hide();
|
||||||
|
opts.cssBefore = { opacity: 1, display: 'block', zIndex: 1 };
|
||||||
|
opts.cssAfter = { display: 'none', zIndex: 0 };
|
||||||
|
opts.animOut = { opacity: 0 };
|
||||||
|
opts.animIn = { opacity: 1 };
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
$.fn.cycle.ver = function() { return ver; };
|
||||||
|
|
||||||
|
// @see: http://malsup.com/jquery/cycle/lite/
|
||||||
|
$.fn.cycle.defaults = {
|
||||||
|
animIn: {},
|
||||||
|
animOut: {},
|
||||||
|
fx: 'fade',
|
||||||
|
after: null,
|
||||||
|
before: null,
|
||||||
|
cssBefore: {},
|
||||||
|
cssAfter: {},
|
||||||
|
delay: 0,
|
||||||
|
fit: 0,
|
||||||
|
height: 'auto',
|
||||||
|
metaAttr: 'cycle',
|
||||||
|
next: null,
|
||||||
|
pause: false,
|
||||||
|
prev: null,
|
||||||
|
speed: 1000,
|
||||||
|
slideExpr: null,
|
||||||
|
sync: true,
|
||||||
|
timeout: 4000
|
||||||
|
};
|
||||||
|
|
||||||
|
})(jQuery);
|
||||||
|
|
@ -0,0 +1,55 @@
|
||||||
|
{% load i18n thumbnail sekizai_tags static %}
|
||||||
|
{% addtoblock "css" %}<link rel="stylesheet" type="text/css" href="{% static 'cmsplugin_filer_folder/css/slideshow.css' %}" media="screen, projection" />{% endaddtoblock "css" %}
|
||||||
|
{% addtoblock "js" %}<script type="text/javascript" src="{% static 'cmsplugin_filer_folder/js/jquery.cycle.lite-1.7.js' %}"></script>{% endaddtoblock "js" %}
|
||||||
|
{% addtoblock "js" %}
|
||||||
|
<script type="text/javascript">
|
||||||
|
//<![CDATA[
|
||||||
|
jQuery(document).ready(function ($) {
|
||||||
|
$('.cmsplugin_filer_folder_slideshow').cycle({
|
||||||
|
fx: 'fade'
|
||||||
|
});
|
||||||
|
});
|
||||||
|
//]]>
|
||||||
|
</script>
|
||||||
|
{% endaddtoblock %}
|
||||||
|
|
||||||
|
|
||||||
|
{{ object.get_display_name }}
|
||||||
|
|
||||||
|
{% if object.view_option == "list" %}
|
||||||
|
<div class="cmsplugin_filer_folder_list" id="folder_{{ instance.id }}">
|
||||||
|
<!--The files should go there -->
|
||||||
|
{% if folder_folders %}
|
||||||
|
<p>{% trans "Folders" %}</p>
|
||||||
|
<ul>
|
||||||
|
{% for folder in folder_folders %}
|
||||||
|
<li>{{ folder }}</li>
|
||||||
|
{% endfor %}
|
||||||
|
</ul>
|
||||||
|
{% endif %}
|
||||||
|
{% if folder_files %}
|
||||||
|
<p>{% trans "Files" %}</p>
|
||||||
|
<ul>
|
||||||
|
{% for files in folder_files %}
|
||||||
|
<li>{{ files }}</li>
|
||||||
|
{% endfor %}
|
||||||
|
</ul>
|
||||||
|
{% endif %}
|
||||||
|
{% if folder_images %}
|
||||||
|
<p>{% trans "Images" %}</p>
|
||||||
|
<ul>
|
||||||
|
{% for image in folder_images %}
|
||||||
|
<li><img src="{% thumbnail image.file 32x32 crop="True" upscale="True" %}" width="32" height="32" alt="{{ image.label }}"></li>
|
||||||
|
{% endfor %}
|
||||||
|
</ul>
|
||||||
|
{% endif %}
|
||||||
|
</div>
|
||||||
|
{% else %}
|
||||||
|
<!-- start: slideshow -->
|
||||||
|
<div class="cmsplugin_filer_folder_slideshow" id="folder_{{ object.id }}">
|
||||||
|
{% for image in folder_images %}
|
||||||
|
<img src="{% thumbnail image.file 200x200 crop="True" upscale="True" %}">
|
||||||
|
{% endfor %}
|
||||||
|
</div>
|
||||||
|
<!-- end: gallery -->
|
||||||
|
{% endif %}
|
||||||
24
cmsplugin_filer_image/LICENSE
Normal file
24
cmsplugin_filer_image/LICENSE
Normal file
|
|
@ -0,0 +1,24 @@
|
||||||
|
Copyright (c) 2012, Stefan Foulis and contributors
|
||||||
|
All rights reserved.
|
||||||
|
|
||||||
|
Redistribution and use in source and binary forms, with or without
|
||||||
|
modification, are permitted provided that the following conditions are met:
|
||||||
|
* Redistributions of source code must retain the above copyright
|
||||||
|
notice, this list of conditions and the following disclaimer.
|
||||||
|
* Redistributions in binary form must reproduce the above copyright
|
||||||
|
notice, this list of conditions and the following disclaimer in the
|
||||||
|
documentation and/or other materials provided with the distribution.
|
||||||
|
* Neither the name of the authors nor the
|
||||||
|
names of its contributors may be used to endorse or promote products
|
||||||
|
derived from this software without specific prior written permission.
|
||||||
|
|
||||||
|
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
|
||||||
|
ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
||||||
|
WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
||||||
|
DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS BE LIABLE FOR ANY
|
||||||
|
DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
|
||||||
|
(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
|
||||||
|
LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
|
||||||
|
ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
||||||
|
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
||||||
|
SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||||
4
cmsplugin_filer_image/__init__.py
Normal file
4
cmsplugin_filer_image/__init__.py
Normal file
|
|
@ -0,0 +1,4 @@
|
||||||
|
from cmsplugin_filer_file import __version__ # NOQA
|
||||||
|
__authors__ = ["Stefan Foulis <stefan.foulis@gmail.com>", ]
|
||||||
|
|
||||||
|
default_app_config = 'cmsplugin_filer_image.apps.FilerImageConfig'
|
||||||
7
cmsplugin_filer_image/apps.py
Normal file
7
cmsplugin_filer_image/apps.py
Normal file
|
|
@ -0,0 +1,7 @@
|
||||||
|
from django.apps import AppConfig
|
||||||
|
from django.utils.translation import gettext_lazy as _
|
||||||
|
|
||||||
|
|
||||||
|
class FilerImageConfig(AppConfig):
|
||||||
|
name = 'cmsplugin_filer_image'
|
||||||
|
verbose_name = _('django filer image')
|
||||||
147
cmsplugin_filer_image/cms_plugins.py
Normal file
147
cmsplugin_filer_image/cms_plugins.py
Normal file
|
|
@ -0,0 +1,147 @@
|
||||||
|
# -*- coding: utf-8 -*-
|
||||||
|
from __future__ import unicode_literals
|
||||||
|
|
||||||
|
from django.template.loader import select_template
|
||||||
|
from django.templatetags.static import static
|
||||||
|
from django.utils.translation import gettext_lazy as _
|
||||||
|
|
||||||
|
from cms.plugin_base import CMSPluginBase
|
||||||
|
from cms.plugin_pool import plugin_pool
|
||||||
|
|
||||||
|
from .forms import FilerImageForm
|
||||||
|
from .models import FilerImage
|
||||||
|
from .conf import settings
|
||||||
|
|
||||||
|
|
||||||
|
class FilerImagePlugin(CMSPluginBase):
|
||||||
|
admin_preview = False
|
||||||
|
form = FilerImageForm
|
||||||
|
model = FilerImage
|
||||||
|
module = 'Filer'
|
||||||
|
name = _("Image")
|
||||||
|
raw_id_fields = ('image', 'page_link')
|
||||||
|
text_enabled = True
|
||||||
|
|
||||||
|
TEMPLATE_NAME = 'cmsplugin_filer_image/plugins/image/%s.html'
|
||||||
|
render_template = TEMPLATE_NAME % 'default'
|
||||||
|
|
||||||
|
fieldsets = (
|
||||||
|
(None, {
|
||||||
|
'fields': [
|
||||||
|
'caption_text',
|
||||||
|
'image',
|
||||||
|
'image_url',
|
||||||
|
'alt_text',
|
||||||
|
]
|
||||||
|
}),
|
||||||
|
(_('Image resizing options'), {
|
||||||
|
'fields': (
|
||||||
|
'use_original_image',
|
||||||
|
('width', 'height',),
|
||||||
|
('crop', 'upscale',),
|
||||||
|
'thumbnail_option',
|
||||||
|
'use_autoscale',
|
||||||
|
)
|
||||||
|
}),
|
||||||
|
(None, {
|
||||||
|
'fields': ('alignment',)
|
||||||
|
}),
|
||||||
|
(_('More'), {
|
||||||
|
'classes': ('collapse',),
|
||||||
|
'fields': (
|
||||||
|
'free_link',
|
||||||
|
'page_link',
|
||||||
|
'file_link',
|
||||||
|
('original_link', 'target_blank',),
|
||||||
|
'link_attributes',
|
||||||
|
'description',
|
||||||
|
),
|
||||||
|
}),
|
||||||
|
)
|
||||||
|
if settings.CMSPLUGIN_FILER_IMAGE_STYLE_CHOICES:
|
||||||
|
fieldsets[0][1]['fields'].append('style')
|
||||||
|
|
||||||
|
def _get_thumbnail_options(self, context, instance):
|
||||||
|
"""
|
||||||
|
Return the size and options of the thumbnail that should be inserted
|
||||||
|
"""
|
||||||
|
width, height = None, None
|
||||||
|
crop, upscale = False, False
|
||||||
|
subject_location = False
|
||||||
|
placeholder_width = context.get('width', None)
|
||||||
|
placeholder_height = context.get('height', None)
|
||||||
|
if instance.thumbnail_option:
|
||||||
|
# thumbnail option overrides everything else
|
||||||
|
if instance.thumbnail_option.width:
|
||||||
|
width = instance.thumbnail_option.width
|
||||||
|
if instance.thumbnail_option.height:
|
||||||
|
height = instance.thumbnail_option.height
|
||||||
|
crop = instance.thumbnail_option.crop
|
||||||
|
upscale = instance.thumbnail_option.upscale
|
||||||
|
else:
|
||||||
|
if instance.use_autoscale and placeholder_width:
|
||||||
|
# use the placeholder width as a hint for sizing
|
||||||
|
width = int(placeholder_width)
|
||||||
|
elif instance.width:
|
||||||
|
width = instance.width
|
||||||
|
if instance.use_autoscale and placeholder_height:
|
||||||
|
height = int(placeholder_height)
|
||||||
|
elif instance.height:
|
||||||
|
height = instance.height
|
||||||
|
crop = instance.crop
|
||||||
|
upscale = instance.upscale
|
||||||
|
if instance.image:
|
||||||
|
if instance.image.subject_location:
|
||||||
|
subject_location = instance.image.subject_location
|
||||||
|
if not height and width:
|
||||||
|
# height was not externally defined: use ratio to scale it by the width
|
||||||
|
height = int(float(width) * float(instance.image.height) / float(instance.image.width))
|
||||||
|
if not width and height:
|
||||||
|
# width was not externally defined: use ratio to scale it by the height
|
||||||
|
width = int(float(height) * float(instance.image.width) / float(instance.image.height))
|
||||||
|
if not width:
|
||||||
|
# width is still not defined. fallback the actual image width
|
||||||
|
width = instance.image.width
|
||||||
|
if not height:
|
||||||
|
# height is still not defined. fallback the actual image height
|
||||||
|
height = instance.image.height
|
||||||
|
return {'size': (width, height),
|
||||||
|
'crop': crop,
|
||||||
|
'upscale': upscale,
|
||||||
|
'subject_location': subject_location}
|
||||||
|
|
||||||
|
def get_thumbnail(self, context, instance):
|
||||||
|
if instance.image:
|
||||||
|
return instance.image.file.get_thumbnail(self._get_thumbnail_options(context, instance))
|
||||||
|
|
||||||
|
def render(self, context, instance, placeholder):
|
||||||
|
options = self._get_thumbnail_options(context, instance)
|
||||||
|
context.update({
|
||||||
|
'instance': instance,
|
||||||
|
'link': instance.link,
|
||||||
|
'opts': options,
|
||||||
|
'size': options.get('size', None),
|
||||||
|
'placeholder': placeholder
|
||||||
|
})
|
||||||
|
return context
|
||||||
|
|
||||||
|
def get_render_template(self, context, instance, placeholder):
|
||||||
|
template = select_template((
|
||||||
|
'cmsplugin_filer_image/plugins/image.html', # backwards compatibility. deprecated!
|
||||||
|
self.TEMPLATE_NAME % instance.style,
|
||||||
|
self.TEMPLATE_NAME % 'default',
|
||||||
|
))
|
||||||
|
return template
|
||||||
|
|
||||||
|
def icon_src(self, instance):
|
||||||
|
if instance.image:
|
||||||
|
if getattr(settings, 'FILER_IMAGE_USE_ICON', False) and '32' in instance.image.icons:
|
||||||
|
return instance.image.icons['32']
|
||||||
|
else:
|
||||||
|
# Fake the context with a reasonable width value because it is not
|
||||||
|
# available at this stage
|
||||||
|
thumbnail = self.get_thumbnail({'width': 200}, instance)
|
||||||
|
return thumbnail.url
|
||||||
|
else:
|
||||||
|
return static("filer/icons/missingfile_%sx%s.png" % (32, 32,))
|
||||||
|
plugin_pool.register_plugin(FilerImagePlugin)
|
||||||
16
cmsplugin_filer_image/conf.py
Normal file
16
cmsplugin_filer_image/conf.py
Normal file
|
|
@ -0,0 +1,16 @@
|
||||||
|
# -*- coding: utf-8 -*-
|
||||||
|
from django.conf import settings # NOQA
|
||||||
|
from appconf import AppConf
|
||||||
|
|
||||||
|
|
||||||
|
class CmspluginFilerImageAppConf(AppConf):
|
||||||
|
STYLE_CHOICES = (
|
||||||
|
# ('default', _('Default')), # define your styles here.
|
||||||
|
)
|
||||||
|
DEFAULT_STYLE = ''
|
||||||
|
|
||||||
|
def configure(self):
|
||||||
|
# set DEFAULT_STYLE to '' if it is not in STYLE_CHOICES
|
||||||
|
if not self.configured_data['DEFAULT_STYLE'] in [s for s, l in self.configured_data['STYLE_CHOICES']]:
|
||||||
|
self.configured_data['DEFAULT_STYLE'] = ''
|
||||||
|
return self.configured_data
|
||||||
20
cmsplugin_filer_image/forms.py
Normal file
20
cmsplugin_filer_image/forms.py
Normal file
|
|
@ -0,0 +1,20 @@
|
||||||
|
# -*- coding: utf-8 -*-
|
||||||
|
|
||||||
|
from __future__ import unicode_literals
|
||||||
|
|
||||||
|
from django import forms
|
||||||
|
|
||||||
|
from djangocms_attributes_field.widgets import AttributesWidget
|
||||||
|
|
||||||
|
from .models import FilerImage
|
||||||
|
|
||||||
|
|
||||||
|
class FilerImageForm(forms.ModelForm):
|
||||||
|
|
||||||
|
class Meta:
|
||||||
|
model = FilerImage
|
||||||
|
exclude = []
|
||||||
|
|
||||||
|
def __init__(self, *args, **kwargs):
|
||||||
|
super(FilerImageForm, self).__init__(*args, **kwargs)
|
||||||
|
self.fields['link_attributes'].widget = AttributesWidget()
|
||||||
1
cmsplugin_filer_image/integrations/__init__.py
Normal file
1
cmsplugin_filer_image/integrations/__init__.py
Normal file
|
|
@ -0,0 +1 @@
|
||||||
|
# -*- coding: utf-8 -*-
|
||||||
29
cmsplugin_filer_image/integrations/ckeditor.py
Normal file
29
cmsplugin_filer_image/integrations/ckeditor.py
Normal file
|
|
@ -0,0 +1,29 @@
|
||||||
|
# -*- coding: utf-8 -*-
|
||||||
|
from cms.models.pluginmodel import CMSPlugin
|
||||||
|
from django.core.files.uploadedfile import SimpleUploadedFile
|
||||||
|
|
||||||
|
|
||||||
|
def create_image_plugin(filename, image, parent_plugin, **kwargs):
|
||||||
|
"""
|
||||||
|
Used for drag-n-drop image insertion with djangocms-text-ckeditor.
|
||||||
|
Set TEXT_SAVE_IMAGE_FUNCTION='cmsplugin_filer_image.integrations.ckeditor.create_image_plugin' to enable.
|
||||||
|
"""
|
||||||
|
from cmsplugin_filer_image.models import FilerImage
|
||||||
|
from filer.models import Image
|
||||||
|
image_plugin = FilerImage()
|
||||||
|
image_plugin.placeholder = parent_plugin.placeholder
|
||||||
|
image_plugin.parent = CMSPlugin.objects.get(pk=parent_plugin.id)
|
||||||
|
image_plugin.position = CMSPlugin.objects.filter(parent=parent_plugin).count()
|
||||||
|
image_plugin.language = parent_plugin.language
|
||||||
|
image_plugin.plugin_type = 'FilerImagePlugin'
|
||||||
|
image.seek(0)
|
||||||
|
image_model = Image.objects.create(file=SimpleUploadedFile(name=filename, content=image.read()))
|
||||||
|
image_plugin.image = image_model
|
||||||
|
image_plugin.save()
|
||||||
|
return image_plugin
|
||||||
|
|
||||||
|
|
||||||
|
def update_image_plugin(plugin, width=None, height=None):
|
||||||
|
plugin.width = width
|
||||||
|
plugin.heigt = height
|
||||||
|
plugin.save()
|
||||||
162
cmsplugin_filer_image/locale/ca/LC_MESSAGES/django.po
Normal file
162
cmsplugin_filer_image/locale/ca/LC_MESSAGES/django.po
Normal file
|
|
@ -0,0 +1,162 @@
|
||||||
|
# SOME DESCRIPTIVE TITLE.
|
||||||
|
# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
|
||||||
|
# This file is distributed under the same license as the PACKAGE package.
|
||||||
|
#
|
||||||
|
# Translators:
|
||||||
|
# Roger Pons <rogerpons@gmail.com>, 2015
|
||||||
|
msgid ""
|
||||||
|
msgstr ""
|
||||||
|
"Project-Id-Version: django Filer Plugins\n"
|
||||||
|
"Report-Msgid-Bugs-To: \n"
|
||||||
|
"POT-Creation-Date: 2016-08-23 10:26-0400\n"
|
||||||
|
"PO-Revision-Date: 2016-06-22 17:49+0000\n"
|
||||||
|
"Last-Translator: Martin Koistinen <mkoistinen@gmail.com>\n"
|
||||||
|
"Language-Team: Catalan (http://www.transifex.com/divio/cmsplugin-filer/language/ca/)\n"
|
||||||
|
"MIME-Version: 1.0\n"
|
||||||
|
"Content-Type: text/plain; charset=UTF-8\n"
|
||||||
|
"Content-Transfer-Encoding: 8bit\n"
|
||||||
|
"Language: ca\n"
|
||||||
|
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
|
||||||
|
|
||||||
|
#: apps.py:7
|
||||||
|
msgid "django filer image"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: cms_plugins.py:21
|
||||||
|
msgid "Image"
|
||||||
|
msgstr "Imatge"
|
||||||
|
|
||||||
|
#: cms_plugins.py:37
|
||||||
|
msgid "Image resizing options"
|
||||||
|
msgstr "Opcions de redimensionat d'imatge"
|
||||||
|
|
||||||
|
#: cms_plugins.py:49
|
||||||
|
msgid "More"
|
||||||
|
msgstr "Més"
|
||||||
|
|
||||||
|
#: models.py:25
|
||||||
|
msgid "left"
|
||||||
|
msgstr "esquerra"
|
||||||
|
|
||||||
|
#: models.py:26
|
||||||
|
msgid "right"
|
||||||
|
msgstr "dreta"
|
||||||
|
|
||||||
|
#: models.py:27
|
||||||
|
msgid "center"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: models.py:34
|
||||||
|
msgid "Style"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: models.py:35
|
||||||
|
msgid "caption text"
|
||||||
|
msgstr "text de la llegenda"
|
||||||
|
|
||||||
|
#: models.py:40
|
||||||
|
msgid "image"
|
||||||
|
msgstr "imatge"
|
||||||
|
|
||||||
|
#: models.py:43
|
||||||
|
msgid "alternative image url"
|
||||||
|
msgstr "url alternativa de la imatge"
|
||||||
|
|
||||||
|
#: models.py:44
|
||||||
|
msgid "alt text"
|
||||||
|
msgstr "text alternatiu"
|
||||||
|
|
||||||
|
#: models.py:46
|
||||||
|
msgid "use the original image"
|
||||||
|
msgstr "utilitza la imatge original"
|
||||||
|
|
||||||
|
#: models.py:47
|
||||||
|
msgid "do not resize the image. use the original image instead."
|
||||||
|
msgstr "no redimensionar la imatge, utilitzar la imatge original."
|
||||||
|
|
||||||
|
#: models.py:49
|
||||||
|
msgid "thumbnail option"
|
||||||
|
msgstr "opció de miniatura"
|
||||||
|
|
||||||
|
#: models.py:50
|
||||||
|
msgid ""
|
||||||
|
"overrides width, height, crop and upscale with values from the selected "
|
||||||
|
"thumbnail option"
|
||||||
|
msgstr "sobreescriu l'amplada, l'alçada, el retall i l'augment d'escala amb els valors de l'opció de miniatura seleccionat"
|
||||||
|
|
||||||
|
#: models.py:51
|
||||||
|
msgid "use automatic scaling"
|
||||||
|
msgstr "utilitzar escalat automàtic"
|
||||||
|
|
||||||
|
#: models.py:52
|
||||||
|
msgid "tries to auto scale the image based on the placeholder context"
|
||||||
|
msgstr "intenta escalar automàticament la imatge segons el context del marcado de posició"
|
||||||
|
|
||||||
|
#: models.py:53
|
||||||
|
msgid "width"
|
||||||
|
msgstr "amplada"
|
||||||
|
|
||||||
|
#: models.py:54
|
||||||
|
msgid "height"
|
||||||
|
msgstr "alçada"
|
||||||
|
|
||||||
|
#: models.py:55
|
||||||
|
msgid "crop"
|
||||||
|
msgstr "retall"
|
||||||
|
|
||||||
|
#: models.py:56
|
||||||
|
msgid "upscale"
|
||||||
|
msgstr "augment d'escala"
|
||||||
|
|
||||||
|
#: models.py:57
|
||||||
|
msgid "image alignment"
|
||||||
|
msgstr "aliniació de la imatge"
|
||||||
|
|
||||||
|
#: models.py:59
|
||||||
|
msgid "link"
|
||||||
|
msgstr "enllaç"
|
||||||
|
|
||||||
|
#: models.py:60 models.py:62 models.py:69 models.py:74
|
||||||
|
msgid "if present image will be clickable"
|
||||||
|
msgstr "si la imatge està present es podrà fer clic"
|
||||||
|
|
||||||
|
#: models.py:63
|
||||||
|
msgid "page link"
|
||||||
|
msgstr "enllaç a pàgina"
|
||||||
|
|
||||||
|
#: models.py:68
|
||||||
|
msgid "file link"
|
||||||
|
msgstr "enllaç a fitxer"
|
||||||
|
|
||||||
|
#: models.py:73
|
||||||
|
msgid "link original image"
|
||||||
|
msgstr "enllaça a la imatge original"
|
||||||
|
|
||||||
|
#: models.py:75
|
||||||
|
msgid "description"
|
||||||
|
msgstr "descripció"
|
||||||
|
|
||||||
|
#: models.py:76
|
||||||
|
msgid "Open link in new window"
|
||||||
|
msgstr "Obre l'enllaç en una finestra nova"
|
||||||
|
|
||||||
|
#: models.py:78
|
||||||
|
msgid "Optional. Adds HTML attributes to the rendered link."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: models.py:86
|
||||||
|
msgid "filer image"
|
||||||
|
msgstr "imatge del filer"
|
||||||
|
|
||||||
|
#: models.py:87
|
||||||
|
msgid "filer images"
|
||||||
|
msgstr "imatges del filer"
|
||||||
|
|
||||||
|
#: models.py:93
|
||||||
|
msgid "Either an image or an image url must be selected."
|
||||||
|
msgstr "Cal seleccionar una imatge o l'url d'una imatge"
|
||||||
|
|
||||||
|
#: models.py:99
|
||||||
|
#, python-format
|
||||||
|
msgid "Image Publication %(caption)s"
|
||||||
|
msgstr "Publicació d'Imatge %(caption)s"
|
||||||
163
cmsplugin_filer_image/locale/de/LC_MESSAGES/django.po
Normal file
163
cmsplugin_filer_image/locale/de/LC_MESSAGES/django.po
Normal file
|
|
@ -0,0 +1,163 @@
|
||||||
|
# SOME DESCRIPTIVE TITLE.
|
||||||
|
# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
|
||||||
|
# This file is distributed under the same license as the PACKAGE package.
|
||||||
|
#
|
||||||
|
# Translators:
|
||||||
|
# Michal Bielicki <michal.bielicki@roamingengineer.com>, 2013
|
||||||
|
# Stefan Foulis <stefan.foulis@gmail.com>, 2013
|
||||||
|
msgid ""
|
||||||
|
msgstr ""
|
||||||
|
"Project-Id-Version: django Filer Plugins\n"
|
||||||
|
"Report-Msgid-Bugs-To: \n"
|
||||||
|
"POT-Creation-Date: 2016-08-23 10:26-0400\n"
|
||||||
|
"PO-Revision-Date: 2016-06-22 17:49+0000\n"
|
||||||
|
"Last-Translator: Martin Koistinen <mkoistinen@gmail.com>\n"
|
||||||
|
"Language-Team: German (http://www.transifex.com/divio/cmsplugin-filer/language/de/)\n"
|
||||||
|
"MIME-Version: 1.0\n"
|
||||||
|
"Content-Type: text/plain; charset=UTF-8\n"
|
||||||
|
"Content-Transfer-Encoding: 8bit\n"
|
||||||
|
"Language: de\n"
|
||||||
|
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
|
||||||
|
|
||||||
|
#: apps.py:7
|
||||||
|
msgid "django filer image"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: cms_plugins.py:21
|
||||||
|
msgid "Image"
|
||||||
|
msgstr "Bild"
|
||||||
|
|
||||||
|
#: cms_plugins.py:37
|
||||||
|
msgid "Image resizing options"
|
||||||
|
msgstr "Bildgrössenanpassungsoptionen"
|
||||||
|
|
||||||
|
#: cms_plugins.py:49
|
||||||
|
msgid "More"
|
||||||
|
msgstr "Mehr"
|
||||||
|
|
||||||
|
#: models.py:25
|
||||||
|
msgid "left"
|
||||||
|
msgstr "links"
|
||||||
|
|
||||||
|
#: models.py:26
|
||||||
|
msgid "right"
|
||||||
|
msgstr "rechts"
|
||||||
|
|
||||||
|
#: models.py:27
|
||||||
|
msgid "center"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: models.py:34
|
||||||
|
msgid "Style"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: models.py:35
|
||||||
|
msgid "caption text"
|
||||||
|
msgstr "Beschriftungstext"
|
||||||
|
|
||||||
|
#: models.py:40
|
||||||
|
msgid "image"
|
||||||
|
msgstr "Bild"
|
||||||
|
|
||||||
|
#: models.py:43
|
||||||
|
msgid "alternative image url"
|
||||||
|
msgstr "alternative Bild URL"
|
||||||
|
|
||||||
|
#: models.py:44
|
||||||
|
msgid "alt text"
|
||||||
|
msgstr "alt Text"
|
||||||
|
|
||||||
|
#: models.py:46
|
||||||
|
msgid "use the original image"
|
||||||
|
msgstr "Original-Bild verwenden"
|
||||||
|
|
||||||
|
#: models.py:47
|
||||||
|
msgid "do not resize the image. use the original image instead."
|
||||||
|
msgstr "Bildgrösse nicht anpassen, sondern das Original-Bild verwenden."
|
||||||
|
|
||||||
|
#: models.py:49
|
||||||
|
msgid "thumbnail option"
|
||||||
|
msgstr "Thumbnail Optionen"
|
||||||
|
|
||||||
|
#: models.py:50
|
||||||
|
msgid ""
|
||||||
|
"overrides width, height, crop and upscale with values from the selected "
|
||||||
|
"thumbnail option"
|
||||||
|
msgstr "Übersteuert Breite, Höhe, Zuschnitt und Vergrösserung mit Werten von der ausgewählten Thumbnail-Option."
|
||||||
|
|
||||||
|
#: models.py:51
|
||||||
|
msgid "use automatic scaling"
|
||||||
|
msgstr "automatisch skalieren"
|
||||||
|
|
||||||
|
#: models.py:52
|
||||||
|
msgid "tries to auto scale the image based on the placeholder context"
|
||||||
|
msgstr "versucht die benötigte Bildgröße automatisch an den Seiteninhalt anzupassen"
|
||||||
|
|
||||||
|
#: models.py:53
|
||||||
|
msgid "width"
|
||||||
|
msgstr "Breite"
|
||||||
|
|
||||||
|
#: models.py:54
|
||||||
|
msgid "height"
|
||||||
|
msgstr "Höhe"
|
||||||
|
|
||||||
|
#: models.py:55
|
||||||
|
msgid "crop"
|
||||||
|
msgstr "Zuschneiden"
|
||||||
|
|
||||||
|
#: models.py:56
|
||||||
|
msgid "upscale"
|
||||||
|
msgstr "Vergrößern"
|
||||||
|
|
||||||
|
#: models.py:57
|
||||||
|
msgid "image alignment"
|
||||||
|
msgstr "Bildausrichtung"
|
||||||
|
|
||||||
|
#: models.py:59
|
||||||
|
msgid "link"
|
||||||
|
msgstr "Link"
|
||||||
|
|
||||||
|
#: models.py:60 models.py:62 models.py:69 models.py:74
|
||||||
|
msgid "if present image will be clickable"
|
||||||
|
msgstr "wenn angegeben, wird das Bild verlinkt"
|
||||||
|
|
||||||
|
#: models.py:63
|
||||||
|
msgid "page link"
|
||||||
|
msgstr "Seitenlink"
|
||||||
|
|
||||||
|
#: models.py:68
|
||||||
|
msgid "file link"
|
||||||
|
msgstr "Datei-Link"
|
||||||
|
|
||||||
|
#: models.py:73
|
||||||
|
msgid "link original image"
|
||||||
|
msgstr "Original-Bild verlinken"
|
||||||
|
|
||||||
|
#: models.py:75
|
||||||
|
msgid "description"
|
||||||
|
msgstr "Beschreibung"
|
||||||
|
|
||||||
|
#: models.py:76
|
||||||
|
msgid "Open link in new window"
|
||||||
|
msgstr "Link in neuem Fenster öffnen"
|
||||||
|
|
||||||
|
#: models.py:78
|
||||||
|
msgid "Optional. Adds HTML attributes to the rendered link."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: models.py:86
|
||||||
|
msgid "filer image"
|
||||||
|
msgstr "Filer Bild"
|
||||||
|
|
||||||
|
#: models.py:87
|
||||||
|
msgid "filer images"
|
||||||
|
msgstr "Filer Bilder"
|
||||||
|
|
||||||
|
#: models.py:93
|
||||||
|
msgid "Either an image or an image url must be selected."
|
||||||
|
msgstr "Entweder muss ein Bild oder eine Bild-Url ausgewählt sein."
|
||||||
|
|
||||||
|
#: models.py:99
|
||||||
|
#, python-format
|
||||||
|
msgid "Image Publication %(caption)s"
|
||||||
|
msgstr "Bildveröffentlichung %(caption)s"
|
||||||
Some files were not shown because too many files have changed in this diff Show more
Loading…
Add table
Add a link
Reference in a new issue