`` to display the results:
+
+.. code-block:: html
+
+
+
+Finally, we'll use JQuery to make the asynchronous requests and handle the interactivity:
+
+.. code-block:: guess
+
+ $(function() {
+
+ // cache the elements
+ var searchBox = $('#json-search'),
+ resultsBox = $('#json-results');
+ // when there's something in the input box, make the query
+ searchBox.on('input', function() {
+ if( searchBox.val() == ''){
+ resultsBox.html('');
+ return;
+ }
+ // make the request to the Wagtail JSON search view
+ $.ajax({
+ url: wagtailJSONSearchURL + "?q=" + searchBox.val(),
+ dataType: "json"
+ })
+ .done(function(data) {
+ console.log(data);
+ if( data == undefined ){
+ resultsBox.html('');
+ return;
+ }
+ // we're in business! let's format the results
+ var htmlOutput = '';
+ data.forEach(function(element, index, array){
+ htmlOutput += '
';
+ });
+ // and display them
+ resultsBox.html(htmlOutput);
+ })
+ .error(function(data){
+ console.log(data);
+ });
+ });
+
+ });
+
+Results are returned as a JSON object with this structure:
+
+.. code-block:: guess
+
+ {
+ [
+ {
+ title: "Lumpy Space Princess",
+ url: "/oh-my-glob/"
+ },
+ {
+ title: "Lumpy Space",
+ url: "/no-smooth-posers/"
+ },
+ ...
+ ]
+ }
+
+What if you wanted access to the rest of the results context or didn't feel like using JSON? Wagtail also provides a generalized AJAX interface where you can use your own template to serve results asynchronously.
+
+The AJAX interface uses the same view as the normal HTML search, ``wagtailsearch_search``, but will serve different results if Django classifies the request as AJAX (``request.is_ajax()``). Another entry in your project settings will let you override the template used to serve this response:
+
+.. code-block:: python
+
+ WAGTAILSEARCH_RESULTS_TEMPLATE_AJAX = 'myapp/includes/search_listing.html'
+
+In this template, you'll have access to the same context variables provided to the HTML template. You could provide a template in JSON format with extra properties, such as ``query.hits`` and editor's picks, or render an HTML snippet that can go directly into your results ``
``. If you need more flexibility, such as multiple formats/templates based on differing requests, you can set up a custom search view.
+
+.. _editors-picks:
+
+
+Indexing Custom Fields & Custom Search Views
+--------------------------------------------
+
+This functionality is still under active development to provide a streamlined interface, but take a look at ``wagtail/wagtail/wagtailsearch/views/frontend.py`` if you are interested in coding custom search views.
+
+
+Search Backends
+---------------
+
+Wagtail can degrade to a database-backed text search, but we strongly recommend `Elasticsearch`_.
+
+.. _Elasticsearch: http://www.elasticsearch.org/
+
+
+Default DB Backend
+``````````````````
+The default DB search backend uses Django's ``__icontains`` filter.
+
+
+Elasticsearch Backend
+`````````````````````
+Prerequisites are the Elasticsearch service itself and, via pip, the `elasticutils`_ and `pyelasticsearch`_ packages:
+
+.. code-block:: guess
+
+ pip install elasticutils pyelasticsearch
+
+.. note::
+ The dependency on pyelasticsearch is scheduled to be replaced by a dependency on `elasticsearch-py`_.
+
+The backend is configured in settings:
+
+.. code-block:: python
+
+ WAGTAILSEARCH_BACKENDS = {
+ 'default': {
+ 'BACKEND': 'wagtail.wagtailsearch.backends.elasticsearch.ElasticSearch',
+ 'URLS': ['http://localhost:9200'],
+ 'INDEX': 'wagtail',
+ 'TIMEOUT': 5,
+ 'FORCE_NEW': False,
+ }
+ }
+
+Other than ``BACKEND`` the keys are optional and default to the values shown. ``FORCE_NEW`` is used by elasticutils. In addition, any other keys are passed directly to the Elasticsearch constructor as case-sensitive keyword arguments (e.g. ``'max_retries': 1``).
+
+If you prefer not to run an Elasticsearch server in development or production, there are many hosted services available, including `Searchly`_, who offer a free account suitable for testing and development. To use Searchly:
- Sign up for an account at `dashboard.searchly.com/users/sign\_up`_
- Use your Searchly dashboard to create a new index, e.g. 'wagtaildemo'
- Note the connection URL from your Searchly dashboard
-- Update ``WAGTAILSEARCH_ES_URLS`` and ``WAGTAILSEARCH_ES_INDEX`` in
- your local settings
+- Configure ``URLS`` and ``INDEX`` in the Elasticsearch entry in ``WAGTAILSEARCH_BACKENDS``
- Run ``./manage.py update_index``
-.. _Elasticsearch: http://www.elasticsearch.org/
+.. _elasticutils: http://elasticutils.readthedocs.org
+.. _pyelasticsearch: http://pyelasticsearch.readthedocs.org
+.. _elasticsearch-py: http://elasticsearch-py.readthedocs.org
.. _Searchly: http://www.searchly.com/
-.. _dashboard.searchly.com/users/sign\_up: https://dashboard.searchly.com/users/sign_up
\ No newline at end of file
+.. _dashboard.searchly.com/users/sign\_up: https://dashboard.searchly.com/users/sign_up
+
+Rolling Your Own
+````````````````
+Wagtail search backends implement the interface defined in ``wagtail/wagtail/wagtailsearch/backends/base.py``. At a minimum, the backend's ``search()`` method must return a collection of objects or ``model.objects.none()``. For a fully-featured search backend, examine the Elasticsearch backend code in ``elasticsearch.py``.
diff --git a/requirements-dev.txt b/requirements-dev.txt
index 008d24d2e..d35d6b087 100644
--- a/requirements-dev.txt
+++ b/requirements-dev.txt
@@ -1,7 +1,3 @@
-# Requirements essential for developing wagtail (not needed to run it)
-
-unittest2==0.5.1
-
# For coverage and PEP8 linting
coverage==3.7.1
flake8==2.1.0
diff --git a/runtests.py b/runtests.py
index ab7bc37c3..6fd37ebeb 100755
--- a/runtests.py
+++ b/runtests.py
@@ -26,6 +26,8 @@ if not settings.configured:
if has_elasticsearch:
WAGTAILSEARCH_BACKENDS['elasticsearch'] = {
'BACKEND': 'wagtail.wagtailsearch.backends.elasticsearch.ElasticSearch',
+ 'TIMEOUT': 10,
+ 'max_retries': 1,
}
settings.configure(
@@ -40,6 +42,7 @@ if not settings.configured:
STATIC_URL='/static/',
STATIC_ROOT=STATIC_ROOT,
MEDIA_ROOT=MEDIA_ROOT,
+ USE_TZ=True,
STATICFILES_FINDERS=(
'django.contrib.staticfiles.finders.AppDirectoriesFinder',
'compressor.finders.CompressorFinder',
@@ -80,6 +83,7 @@ if not settings.configured:
'wagtail.wagtailembeds',
'wagtail.wagtailsearch',
'wagtail.wagtailredirects',
+ 'wagtail.wagtailforms',
'wagtail.tests',
],
diff --git a/scripts/install/debian.sh b/scripts/install/debian.sh
index d29d5acdc..ee08191ac 100644
--- a/scripts/install/debian.sh
+++ b/scripts/install/debian.sh
@@ -1,5 +1,7 @@
# Production-configured Wagtail installation.
# BUT, SECURE SERVICES/ACCOUNT FOR FULL PRODUCTION USE!
+# For a non-dummy email backend configure Django's EMAIL_BACKEND
+# in settings/production.py post-installation.
# Tested on Debian 7.0.
# Tom Dyson and Neal Todd
diff --git a/scripts/install/ubuntu.sh b/scripts/install/ubuntu.sh
index c713cefa9..299e67a8d 100644
--- a/scripts/install/ubuntu.sh
+++ b/scripts/install/ubuntu.sh
@@ -1,5 +1,7 @@
# Production-configured Wagtail installation.
# BUT, SECURE SERVICES/ACCOUNT FOR FULL PRODUCTION USE!
+# For a non-dummy email backend configure Django's EMAIL_BACKEND
+# in settings/production.py post-installation.
# Tested on Ubuntu 13.04 and 13.10.
# Tom Dyson and Neal Todd
diff --git a/setup.py b/setup.py
index e8da542bc..7b26817cd 100644
--- a/setup.py
+++ b/setup.py
@@ -18,7 +18,7 @@ except ImportError:
setup(
name='wagtail',
- version='0.2',
+ version='0.3.1',
description='A Django content management system focused on flexibility and user experience',
author='Matthew Westcott',
author_email='matthew.westcott@torchbox.com',
@@ -51,6 +51,7 @@ setup(
"Pillow>=2.3.0",
"beautifulsoup4>=4.3.2",
"lxml>=3.3.0",
+ 'unicodecsv>=0.9.4',
'Unidecode>=0.04.14',
"BeautifulSoup==3.2.1", # django-compressor gets confused if we have lxml but not BS3 installed
],
diff --git a/wagtail/tests/fixtures/test.json b/wagtail/tests/fixtures/test.json
index 0a0fc0528..11b82d9f1 100644
--- a/wagtail/tests/fixtures/test.json
+++ b/wagtail/tests/fixtures/test.json
@@ -23,7 +23,7 @@
"model": "wagtailcore.page",
"fields": {
"title": "Welcome to the Wagtail test site!",
- "numchild": 1,
+ "numchild": 3,
"show_in_menus": false,
"live": true,
"depth": 2,
@@ -39,7 +39,7 @@
"model": "wagtailcore.page",
"fields": {
"title": "Events",
- "numchild": 2,
+ "numchild": 3,
"show_in_menus": true,
"live": true,
"depth": 3,
@@ -62,7 +62,7 @@
"model": "wagtailcore.page",
"fields": {
"title": "Christmas",
- "numchild": 1,
+ "numchild": 0,
"show_in_menus": true,
"live": true,
"depth": 4,
@@ -90,7 +90,7 @@
"model": "wagtailcore.page",
"fields": {
"title": "Tentative Unpublished Event",
- "numchild": 1,
+ "numchild": 0,
"show_in_menus": true,
"live": false,
"depth": 4,
@@ -118,7 +118,7 @@
"model": "wagtailcore.page",
"fields": {
"title": "Someone Else's Event",
- "numchild": 1,
+ "numchild": 0,
"show_in_menus": true,
"live": false,
"depth": 4,
@@ -164,6 +164,57 @@
}
},
+{
+ "pk": 8,
+ "model": "wagtailcore.page",
+ "fields": {
+ "title": "Contact us",
+ "numchild": 0,
+ "show_in_menus": true,
+ "live": true,
+ "depth": 3,
+ "content_type": ["tests", "formpage"],
+ "path": "000100010003",
+ "url_path": "/home/contact-us/",
+ "slug": "contact-us"
+ }
+},
+{
+ "pk": 8,
+ "model": "tests.formpage",
+ "fields": {
+ }
+},
+
+{
+ "pk": 1,
+ "model": "tests.formfield",
+ "fields": {
+ "sort_order": 1,
+ "label": "Your email",
+ "field_type": "email",
+ "required": true,
+ "choices": "",
+ "default_value": "",
+ "help_text": "",
+ "page": 8
+ }
+},
+{
+ "pk": 2,
+ "model": "tests.formfield",
+ "fields": {
+ "sort_order": 2,
+ "label": "Your message",
+ "field_type": "multiline",
+ "required": true,
+ "choices": "",
+ "default_value": "",
+ "help_text": "",
+ "page": 8
+ }
+},
+
{
"pk": 1,
"model": "wagtailcore.site",
@@ -201,6 +252,19 @@
]
}
},
+{
+ "pk": 5,
+ "model": "auth.group",
+ "fields": {
+ "name": "Site-wide editors",
+ "permissions": [
+ ["access_admin", "wagtailadmin", "admin"],
+ ["add_image", "wagtailimages", "image"],
+ ["change_image", "wagtailimages", "image"],
+ ["delete_image", "wagtailimages", "image"]
+ ]
+ }
+},
{
"pk": 1,
"model": "wagtailcore.grouppagepermission",
@@ -237,6 +301,15 @@
"permission_type": "publish"
}
},
+{
+ "pk": 5,
+ "model": "wagtailcore.grouppagepermission",
+ "fields": {
+ "group": ["Site-wide editors"],
+ "page": 2,
+ "permission_type": "edit"
+ }
+},
{
"pk": 1,
@@ -308,5 +381,42 @@
"password": "md5$seasalt$1e9bf2bf5606aa5c39852cc30f0f6f22",
"email": "inactiveuser@example.com"
}
+},
+{
+ "pk": 5,
+ "model": "auth.user",
+ "fields": {
+ "username": "siteeditor",
+ "first_name": "",
+ "last_name": "",
+ "is_active": true,
+ "is_superuser": false,
+ "is_staff": false,
+ "groups": [
+ ["Site-wide editors"]
+ ],
+ "user_permissions": [],
+ "password": "md5$seasalt$1e9bf2bf5606aa5c39852cc30f0f6f22",
+ "email": "siteeditor@example.com"
+ }
+},
+
+{
+ "pk": 1,
+ "model": "wagtailforms.formsubmission",
+ "fields": {
+ "form_data": "{\"your-email\": \"old@example.com\", \"your-message\": \"this is a really old message\"}",
+ "page": 8,
+ "submit_time": "2013-01-01T12:00:00.000Z"
+ }
+},
+{
+ "pk": 2,
+ "model": "wagtailforms.formsubmission",
+ "fields": {
+ "form_data": "{\"your-email\": \"new@example.com\", \"your-message\": \"this is a fairly new message\"}",
+ "page": 8,
+ "submit_time": "2014-01-01T12:00:00.000Z"
+ }
}
]
diff --git a/wagtail/tests/models.py b/wagtail/tests/models.py
index 97858df4d..e061a4bfe 100644
--- a/wagtail/tests/models.py
+++ b/wagtail/tests/models.py
@@ -6,6 +6,8 @@ from wagtail.wagtailcore.fields import RichTextField
from wagtail.wagtailadmin.edit_handlers import FieldPanel, MultiFieldPanel, InlinePanel, PageChooserPanel
from wagtail.wagtailimages.edit_handlers import ImageChooserPanel
from wagtail.wagtaildocs.edit_handlers import DocumentChooserPanel
+from wagtail.wagtailforms.models import AbstractEmailForm, AbstractFormField
+from wagtail.wagtailsnippets.models import register_snippet
EVENT_AUDIENCE_CHOICES = (
@@ -234,3 +236,61 @@ EventIndex.content_panels = [
FieldPanel('title', classname="full title"),
FieldPanel('intro', classname="full"),
]
+
+
+class FormField(AbstractFormField):
+ page = ParentalKey('FormPage', related_name='form_fields')
+
+class FormPage(AbstractEmailForm):
+ pass
+
+FormPage.content_panels = [
+ FieldPanel('title', classname="full title"),
+ InlinePanel(FormPage, 'form_fields', label="Form fields"),
+ MultiFieldPanel([
+ FieldPanel('to_address', classname="full"),
+ FieldPanel('from_address', classname="full"),
+ FieldPanel('subject', classname="full"),
+ ], "Email")
+]
+
+
+# Snippets
+
+# Snippets
+
+class Advert(models.Model):
+ url = models.URLField(null=True, blank=True)
+ text = models.CharField(max_length=255)
+
+ panels = [
+ FieldPanel('url'),
+ FieldPanel('text'),
+ ]
+
+ def __unicode__(self):
+ return self.text
+
+
+register_snippet(Advert)
+
+
+# AlphaSnippet and ZuluSnippet are for testing ordering of
+# snippets when registering. They are named as such to ensure
+# thier ordering is clear. They are registered during testing
+# to ensure specific [in]correct register ordering
+
+# AlphaSnippet is registered during TestSnippetOrdering
+class AlphaSnippet(models.Model):
+ text = models.CharField(max_length=255)
+
+ def __unicode__(self):
+ return self.text
+
+
+# ZuluSnippet is registered during TestSnippetOrdering
+class ZuluSnippet(models.Model):
+ text = models.CharField(max_length=255)
+
+ def __unicode__(self):
+ return self.text
diff --git a/wagtail/tests/templates/tests/form_page.html b/wagtail/tests/templates/tests/form_page.html
new file mode 100644
index 000000000..5fbd2ae9f
--- /dev/null
+++ b/wagtail/tests/templates/tests/form_page.html
@@ -0,0 +1,15 @@
+{% load pageurl %}
+
+
+
+
{{ self.title }}
+
+
+
{{ self.title }}
+
+
+
diff --git a/wagtail/tests/templates/tests/form_page_landing.html b/wagtail/tests/templates/tests/form_page_landing.html
new file mode 100644
index 000000000..e29a6a942
--- /dev/null
+++ b/wagtail/tests/templates/tests/form_page_landing.html
@@ -0,0 +1,11 @@
+{% load pageurl %}
+
+
+
+
{{ self.title }}
+
+
+
{{ self.title }}
+
Thank you for your feedback.
+
+
diff --git a/wagtail/tests/templates/tests/simple_page.html b/wagtail/tests/templates/tests/simple_page.html
new file mode 100644
index 000000000..3413b3aa2
--- /dev/null
+++ b/wagtail/tests/templates/tests/simple_page.html
@@ -0,0 +1,11 @@
+{% load pageurl %}
+
+
+
+
{{ self.title }}
+
+
+
{{ self.title }}
+
Simple page
+
+
diff --git a/wagtail/tests/utils.py b/wagtail/tests/utils.py
index 7b6557a78..6590e6dcc 100644
--- a/wagtail/tests/utils.py
+++ b/wagtail/tests/utils.py
@@ -14,7 +14,9 @@ except ImportError:
def login(client):
# Create a user
- User.objects.create_superuser(username='test', email='test@email.com', password='password')
+ user = User.objects.create_superuser(username='test', email='test@email.com', password='password')
# Login
client.login(username='test', password='password')
+
+ return user
diff --git a/wagtail/wagtailadmin/locale/zh/LC_MESSAGES/django.po b/wagtail/wagtailadmin/locale/zh/LC_MESSAGES/django.po
index 80a75d43f..c43755acc 100644
--- a/wagtail/wagtailadmin/locale/zh/LC_MESSAGES/django.po
+++ b/wagtail/wagtailadmin/locale/zh/LC_MESSAGES/django.po
@@ -31,11 +31,11 @@ msgstr "搜索词"
#: .\forms.py:42
msgid "Enter your username"
-msgstr ""
+msgstr "请输入用户名"
#: .\forms.py:45
msgid "Enter password"
-msgstr ""
+msgstr "请输入密码"
#: .\forms.py:50
msgid "Enter your email address to reset your password"
@@ -89,7 +89,7 @@ msgstr "登录Wagtail"
#: .\templates\wagtailadmin\login.html:42
msgid "Forgotten it?"
-msgstr "忘记了?"
+msgstr "忘记密码?"
#: .\templates\wagtailadmin\account\account.html:4
msgid "Account"
@@ -104,7 +104,7 @@ msgid ""
"Your avatar image is provided by Gravatar and is connected to your email "
"address. With a Gravatar account you can set an avatar for any number of "
"other email addresses you use."
-msgstr "您的头像图片是由Gravatar提供的,并且关联了您的电子邮件地址。一个Gravatar账号可以设置多个电子邮件地址的头像图片。"
+msgstr "您的头像图片是由Gravatar提供的,并且关联了您的电子邮箱。一个Gravatar账号可以设置多个电子邮箱的头像图片。"
#: .\templates\wagtailadmin\account\account.html:23
#: .\templates\wagtailadmin\account\change_password.html:4
@@ -113,7 +113,7 @@ msgstr "修改密码"
#: .\templates\wagtailadmin\account\account.html:27
msgid "Change the password you use to log in."
-msgstr "修改您用于登录的密码。"
+msgstr "修改登录密码。"
#: .\templates\wagtailadmin\account\change_password.html:16
msgid "Change Password"
diff --git a/wagtail/wagtailadmin/locale/zh_TW/LC_MESSAGES/django.mo b/wagtail/wagtailadmin/locale/zh_TW/LC_MESSAGES/django.mo
new file mode 100644
index 000000000..a00aa643b
Binary files /dev/null and b/wagtail/wagtailadmin/locale/zh_TW/LC_MESSAGES/django.mo differ
diff --git a/wagtail/wagtailadmin/locale/zh_TW/LC_MESSAGES/django.po b/wagtail/wagtailadmin/locale/zh_TW/LC_MESSAGES/django.po
new file mode 100644
index 000000000..f4d70b60e
--- /dev/null
+++ b/wagtail/wagtailadmin/locale/zh_TW/LC_MESSAGES/django.po
@@ -0,0 +1,843 @@
+# 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: Wagtail\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2014-03-14 23:02+0200\n"
+"PO-Revision-Date: 2014-05-01 12:09+0000\n"
+"Last-Translator: wdv4758h
\n"
+"Language-Team: \n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Language: zh_TW\n"
+"Plural-Forms: nplurals=1; plural=0;\n"
+
+#: .\edit_handlers.py:81 .\edit_handlers.py:130 .\edit_handlers.py:134
+msgid "Please type a valid time"
+msgstr "請輸入一個有效的時間"
+
+#: .\edit_handlers.py:724
+msgid "Common page configuration"
+msgstr "一般頁面設定"
+
+#: .\forms.py:18
+msgid "Search term"
+msgstr "搜尋關鍵字"
+
+#: .\forms.py:42
+msgid "Enter your username"
+msgstr "請輸入您的帳號"
+
+#: .\forms.py:45
+msgid "Enter password"
+msgstr "請輸入密碼"
+
+#: .\forms.py:50
+msgid "Enter your email address to reset your password"
+msgstr "請輸入您的電子信箱來重新設定密碼"
+
+#: .\forms.py:59
+msgid "Please fill your email address."
+msgstr "請輸入您的電子信箱"
+
+#: .\forms.py:72
+msgid ""
+"Sorry, you cannot reset your password here as your user account is managed "
+"by another server."
+msgstr "對不起,您不能在此重新設定您的密碼,因為您的帳號是由其他伺服器所管理。"
+
+#: .\forms.py:75
+msgid "This email address is not recognised."
+msgstr "找不到這個電子信箱。"
+
+#: .\templates\wagtailadmin\base.html:7 .\templates\wagtailadmin\home.html:4
+msgid "Dashboard"
+msgstr "Dashboard"
+
+#: .\templates\wagtailadmin\base.html:31
+msgid "Menu"
+msgstr "選單"
+
+#: .\templates\wagtailadmin\home.html:22
+#, python-format
+msgid "Welcome to the %(site_name)s Wagtail CMS"
+msgstr "歡迎進入 %(site_name)s 的 Wagtail 內容管理系統"
+
+#: .\templates\wagtailadmin\home.html:33
+msgid ""
+"This is your dashboard on which helpful information about content you've "
+"created will be displayed."
+msgstr "這是您的 Dashboard,會顯示對於已建立的內容有幫助的訊息。"
+
+#: .\templates\wagtailadmin\login.html:4
+#: .\templates\wagtailadmin\login.html:55
+msgid "Sign in"
+msgstr "登入"
+
+#: .\templates\wagtailadmin\login.html:18
+msgid "Your username and password didn't match. Please try again."
+msgstr "您的帳號和密碼輸入錯誤,請再試一次。"
+
+#: .\templates\wagtailadmin\login.html:26
+msgid "Sign in to Wagtail"
+msgstr "登入 Wagtail"
+
+#: .\templates\wagtailadmin\login.html:42
+msgid "Forgotten it?"
+msgstr "忘記了嗎?"
+
+#: .\templates\wagtailadmin\account\account.html:4
+msgid "Account"
+msgstr "帳號"
+
+#: .\templates\wagtailadmin\account\account.html:11
+msgid "Set gravatar"
+msgstr "設定 gravatar"
+
+#: .\templates\wagtailadmin\account\account.html:15
+msgid ""
+"Your avatar image is provided by Gravatar and is connected to your email "
+"address. With a Gravatar account you can set an avatar for any number of "
+"other email addresses you use."
+msgstr "您的頭像是由 Gravatar 所提供,並且已經聯結你的電子信箱。一個 Gravatar 帳號可以設定多個電子信箱的頭像圖片。"
+
+#: .\templates\wagtailadmin\account\account.html:23
+#: .\templates\wagtailadmin\account\change_password.html:4
+msgid "Change password"
+msgstr "修改密碼"
+
+#: .\templates\wagtailadmin\account\account.html:27
+msgid "Change the password you use to log in."
+msgstr "修改登入用的密碼。"
+
+#: .\templates\wagtailadmin\account\change_password.html:16
+msgid "Change Password"
+msgstr "修改密碼"
+
+#: .\templates\wagtailadmin\account\change_password.html:19
+msgid ""
+"Your password can't be changed here. Please contact a site administrator."
+msgstr "您的密碼不能在這更改。請聯絡網站管理員。"
+
+#: .\templates\wagtailadmin\account\password_reset\complete.html:4
+#: .\templates\wagtailadmin\account\password_reset\confirm.html:42
+#: .\templates\wagtailadmin\account\password_reset\done.html:4
+#: .\templates\wagtailadmin\account\password_reset\form.html:37
+msgid "Reset password"
+msgstr "重新設定密碼"
+
+#: .\templates\wagtailadmin\account\password_reset\complete.html:15
+msgid "Password change successful"
+msgstr "密碼修改成功"
+
+#: .\templates\wagtailadmin\account\password_reset\complete.html:16
+msgid "Login"
+msgstr "登入"
+
+#: .\templates\wagtailadmin\account\password_reset\confirm.html:4
+#: .\templates\wagtailadmin\account\password_reset\confirm.html:26
+msgid "Set your new password"
+msgstr "設定您的新密碼"
+
+#: .\templates\wagtailadmin\account\password_reset\confirm.html:19
+msgid "The passwords do not match. Please try again."
+msgstr "密碼不一致,請再試一次。"
+
+#: .\templates\wagtailadmin\account\password_reset\done.html:15
+msgid "Check your email"
+msgstr "請檢查您的電子信箱"
+
+#: .\templates\wagtailadmin\account\password_reset\done.html:16
+msgid "A link to reset your password has been emailed to you."
+msgstr "一個重新設定密碼連結已經寄到您的電子信箱了"
+
+#: .\templates\wagtailadmin\account\password_reset\email.txt:2
+msgid "Please follow the link below to reset your password"
+msgstr "請點擊下面的連結來重新設定您的密碼"
+
+#: .\templates\wagtailadmin\account\password_reset\email_subject.txt:2
+msgid "Password reset"
+msgstr "密碼已經重新設定"
+
+#: .\templates\wagtailadmin\account\password_reset\form.html:27
+msgid "Reset your password"
+msgstr "重新設定您的密碼"
+
+#: .\templates\wagtailadmin\chooser\_link_types.html:5
+#: .\templates\wagtailadmin\chooser\_link_types.html:7
+msgid "Internal link"
+msgstr "內部連結"
+
+#: .\templates\wagtailadmin\chooser\_link_types.html:11
+#: .\templates\wagtailadmin\chooser\_link_types.html:13
+msgid "External link"
+msgstr "外部連結"
+
+#: .\templates\wagtailadmin\chooser\_link_types.html:17
+#: .\templates\wagtailadmin\chooser\_link_types.html:19
+msgid "Email link"
+msgstr "電子信箱連結"
+
+#: .\templates\wagtailadmin\chooser\_search_form.html:7
+#: .\templates\wagtailadmin\pages\search.html:3
+#: .\templates\wagtailadmin\pages\search.html:16
+#: .\templatetags\wagtailadmin_nav.py:44
+msgid "Search"
+msgstr "搜尋"
+
+#: .\templates\wagtailadmin\chooser\_search_results.html:3
+#: .\templatetags\wagtailadmin_nav.py:43
+msgid "Explorer"
+msgstr "瀏覽"
+
+#: .\templates\wagtailadmin\chooser\_search_results.html:5
+#: .\templates\wagtailadmin\pages\index.html:15
+#: .\templates\wagtailadmin\pages\move_choose_destination.html:10
+msgid "Home"
+msgstr "首頁"
+
+#: .\templates\wagtailadmin\chooser\_search_results.html:13
+#, python-format
+msgid ""
+"\n"
+" There is one match\n"
+" "
+msgid_plural ""
+"\n"
+" There are %(counter)s matches\n"
+" "
+msgstr[0] "\n 有一個符合"
+msgstr[1] "\n 有 $(counter)s 個符合"
+
+#: .\templates\wagtailadmin\chooser\browse.html:2
+#: .\templates\wagtailadmin\chooser\search.html:2
+#: .\templates\wagtailadmin\edit_handlers\page_chooser_panel.html:13
+msgid "Choose a page"
+msgstr "選擇一個頁面"
+
+#: .\templates\wagtailadmin\chooser\email_link.html:2
+msgid "Add an email link"
+msgstr "新增一個電子信箱"
+
+#: .\templates\wagtailadmin\chooser\email_link.html:14
+#: .\templates\wagtailadmin\chooser\external_link.html:14
+msgid "Insert link"
+msgstr "插入一個連結"
+
+#: .\templates\wagtailadmin\chooser\external_link.html:2
+msgid "Add an external link"
+msgstr "新增一個外部連結"
+
+#: .\templates\wagtailadmin\edit_handlers\chooser_panel.html:20
+msgid "Clear choice"
+msgstr "清除選擇"
+
+#: .\templates\wagtailadmin\edit_handlers\chooser_panel.html:22
+msgid "Choose another item"
+msgstr "選擇其他選項"
+
+#: .\templates\wagtailadmin\edit_handlers\chooser_panel.html:27
+msgid "Choose an item"
+msgstr "選擇一個選項"
+
+#: .\templates\wagtailadmin\edit_handlers\inline_panel_child.html:5
+msgid "Move up"
+msgstr "往上移動"
+
+#: .\templates\wagtailadmin\edit_handlers\inline_panel_child.html:6
+msgid "Move down"
+msgstr "往下移動"
+
+#: .\templates\wagtailadmin\edit_handlers\inline_panel_child.html:8
+#: .\templates\wagtailadmin\pages\confirm_delete.html:7
+#: .\templates\wagtailadmin\pages\edit.html:36
+#: .\templates\wagtailadmin\pages\list.html:68
+#: .\templates\wagtailadmin\pages\list.html:188
+msgid "Delete"
+msgstr "刪除"
+
+#: .\templates\wagtailadmin\edit_handlers\page_chooser_panel.html:12
+msgid "Choose another page"
+msgstr "選擇另外一個頁面"
+
+#: .\templates\wagtailadmin\home\pages_for_moderation.html:5
+msgid "Pages awaiting moderation"
+msgstr "這些頁面正等待審核"
+
+#: .\templates\wagtailadmin\home\pages_for_moderation.html:13
+#: .\templates\wagtailadmin\home\recent_edits.html:12
+#: .\templates\wagtailadmin\pages\list.html:101
+msgid "Title"
+msgstr "標題"
+
+#: .\templates\wagtailadmin\home\pages_for_moderation.html:14
+#: .\templates\wagtailadmin\pages\list.html:22
+msgid "Parent"
+msgstr "上一層"
+
+#: .\templates\wagtailadmin\home\pages_for_moderation.html:15
+#: .\templates\wagtailadmin\pages\list.html:24
+#: .\templates\wagtailadmin\pages\list.html:116
+msgid "Type"
+msgstr "類型"
+
+#: .\templates\wagtailadmin\home\pages_for_moderation.html:16
+msgid "Edited"
+msgstr "編輯"
+
+#: .\templates\wagtailadmin\home\pages_for_moderation.html:23
+#: .\templates\wagtailadmin\home\recent_edits.html:21
+#: .\templates\wagtailadmin\pages\list.html:167
+#: .\templates\wagtailadmin\pages\list.html:176
+msgid "Edit this page"
+msgstr "編輯這個頁面"
+
+#: .\templates\wagtailadmin\home\pages_for_moderation.html:28
+#: .\templates\wagtailadmin\pages\_moderator_userbar.html:12
+msgid "Approve"
+msgstr "通過"
+
+#: .\templates\wagtailadmin\home\pages_for_moderation.html:34
+#: .\templates\wagtailadmin\pages\_moderator_userbar.html:17
+msgid "Reject"
+msgstr "拒絕"
+
+#: .\templates\wagtailadmin\home\pages_for_moderation.html:37
+#: .\templates\wagtailadmin\home\recent_edits.html:23
+#: .\templates\wagtailadmin\pages\_moderator_userbar.html:9
+#: .\templates\wagtailadmin\pages\list.html:56
+#: .\templates\wagtailadmin\pages\list.html:176
+msgid "Edit"
+msgstr "編輯"
+
+#: .\templates\wagtailadmin\home\pages_for_moderation.html:38
+#: .\templates\wagtailadmin\pages\create.html:24
+#: .\templates\wagtailadmin\pages\edit.html:42
+msgid "Preview"
+msgstr "預覽"
+
+#: .\templates\wagtailadmin\home\recent_edits.html:5
+msgid "Your most recent edits"
+msgstr "你最近的編輯"
+
+#: .\templates\wagtailadmin\home\recent_edits.html:13
+msgid "Date"
+msgstr "日期"
+
+#: .\templates\wagtailadmin\home\recent_edits.html:14
+#: .\templates\wagtailadmin\pages\list.html:25
+#: .\templates\wagtailadmin\pages\list.html:128
+msgid "Status"
+msgstr "狀態"
+
+#: .\templates\wagtailadmin\home\recent_edits.html:25
+#: .\templates\wagtailadmin\pages\list.html:59
+#: .\templates\wagtailadmin\pages\list.html:179
+msgid "View draft"
+msgstr "觀看草稿"
+
+#: .\templates\wagtailadmin\home\recent_edits.html:28
+#: .\templates\wagtailadmin\pages\list.html:62
+#: .\templates\wagtailadmin\pages\list.html:182
+msgid "View live"
+msgstr "觀看線上版"
+
+#: .\templates\wagtailadmin\home\site_summary.html:3
+msgid "Site summary"
+msgstr "網站摘要"
+
+#: .\templates\wagtailadmin\home\site_summary.html:6
+#, python-format
+msgid ""
+"\n"
+" %(total_pages)s Page\n"
+" "
+msgid_plural ""
+"\n"
+" %(total_pages)s Pages\n"
+" "
+msgstr[0] "\n %(total_pages)s 頁面\n "
+msgstr[1] "\n %(total_pages)s 頁面\n "
+
+#: .\templates\wagtailadmin\home\site_summary.html:13
+#, python-format
+msgid ""
+"\n"
+" %(total_images)s Image\n"
+" "
+msgid_plural ""
+"\n"
+" %(total_images)s Images\n"
+" "
+msgstr[0] "\n %(total_images)s 圖片\n "
+msgstr[1] "\n %(total_images)s 圖片\n "
+
+#: .\templates\wagtailadmin\home\site_summary.html:20
+#, python-format
+msgid ""
+"\n"
+" %(total_docs)s Document\n"
+" "
+msgid_plural ""
+"\n"
+" %(total_docs)s Documents\n"
+" "
+msgstr[0] "\n %(total_docs)s 文件\n "
+msgstr[1] "\n %(total_docs)s 文件\n "
+
+#: .\templates\wagtailadmin\notifications\approved.html:1
+#, python-format
+msgid "The page \"%(title)s\" has been approved"
+msgstr "這個頁面 \"%(title)s\" 已經通過"
+
+#: .\templates\wagtailadmin\notifications\approved.html:2
+#, python-format
+msgid "The page \"%(title)s\" has been approved."
+msgstr "這個頁面 \"%(title)s\" 已經通過"
+
+#: .\templates\wagtailadmin\notifications\approved.html:4
+msgid "You can view the page here:"
+msgstr "你可以在此觀看這個頁面"
+
+#: .\templates\wagtailadmin\notifications\rejected.html:1
+#, python-format
+msgid "The page \"%(title)s\" has been rejected"
+msgstr "這個頁面 \"%(title)s\" 已經被拒絕"
+
+#: .\templates\wagtailadmin\notifications\rejected.html:2
+#, python-format
+msgid "The page \"%(title)s\" has been rejected."
+msgstr "這個頁面 \"%(title)s\" 已經被拒絕"
+
+#: .\templates\wagtailadmin\notifications\rejected.html:4
+#: .\templates\wagtailadmin\notifications\submitted.html:5
+msgid "You can edit the page here:"
+msgstr "你可以在此編輯這個頁面:"
+
+#: .\templates\wagtailadmin\notifications\submitted.html:1
+#, python-format
+msgid "The page \"%(page)s\" has been submitted for moderation"
+msgstr "這個頁面 \"%(page)s\" 已經送審"
+
+#: .\templates\wagtailadmin\notifications\submitted.html:2
+#, python-format
+msgid "The page \"%(page)s\" has been submitted for moderation."
+msgstr "這個頁面 \"%(page)s\" 已經送審。"
+
+#: .\templates\wagtailadmin\notifications\submitted.html:4
+msgid "You can preview the page here:"
+msgstr "你可以在此預覽這個頁面:"
+
+#: .\templates\wagtailadmin\pages\_moderator_userbar.html:4
+#, python-format
+msgid ""
+"\n"
+" Previewing '%(title)s', submitted by %(submitted_by)s on %(submitted_on)s.\n"
+" "
+msgstr "\n 預覽 '%(title)s', %(submitted_by)s 在 %(submitted_on)s 送審。\n "
+
+#: .\templates\wagtailadmin\pages\add_subpage.html:6
+#, python-format
+msgid "Create a page in %(title)s"
+msgstr "以 %(title)s 為題建立一個頁面"
+
+#: .\templates\wagtailadmin\pages\add_subpage.html:9
+msgid "Create a page in"
+msgstr "在這建立一個頁面"
+
+#: .\templates\wagtailadmin\pages\add_subpage.html:13
+msgid "Choose which type of page you'd like to create."
+msgstr "選擇希望建立的頁面類型。"
+
+#: .\templates\wagtailadmin\pages\add_subpage.html:26
+#, python-format
+msgid "Pages using %(page_type)s"
+msgstr "%(page_type)s 類的頁面"
+
+#: .\templates\wagtailadmin\pages\confirm_delete.html:3
+#, python-format
+msgid "Delete %(title)s"
+msgstr "刪除 %(title)s"
+
+#: .\templates\wagtailadmin\pages\confirm_delete.html:12
+msgid "Are you sure you want to delete this page?"
+msgstr "你確定要刪除這頁嗎?"
+
+#: .\templates\wagtailadmin\pages\confirm_delete.html:14
+#, python-format
+msgid ""
+"\n"
+" This will also delete one more subpage.\n"
+" "
+msgid_plural ""
+"\n"
+" This will also delete %(descendant_count)s more subpages.\n"
+" "
+msgstr[0] "\n 這也會刪除一個子頁面。 "
+msgstr[1] "\n 這也會刪除 %(descendant_count)s 個子頁面。 "
+
+#: .\templates\wagtailadmin\pages\confirm_delete.html:22
+msgid ""
+"Alternatively you can unpublish the page. This removes the page from public "
+"view and you can edit or publish it again later."
+msgstr "你可以選擇取消發佈此頁面。此頁面將將無法從外部觀看,你可以編輯後再次發。"
+
+#: .\templates\wagtailadmin\pages\confirm_delete.html:26
+msgid "Delete it"
+msgstr "刪除"
+
+#: .\templates\wagtailadmin\pages\confirm_delete.html:26
+msgid "Unpublish it"
+msgstr "取消發佈"
+
+#: .\templates\wagtailadmin\pages\confirm_move.html:3
+#, python-format
+msgid "Move %(title)s"
+msgstr "移動 %(title)s"
+
+#: .\templates\wagtailadmin\pages\confirm_move.html:6
+#: .\templates\wagtailadmin\pages\list.html:65
+#: .\templates\wagtailadmin\pages\list.html:185
+msgid "Move"
+msgstr "移動"
+
+#: .\templates\wagtailadmin\pages\confirm_move.html:11
+#, python-format
+msgid "Are you sure you want to move this page into '%(title)s'?"
+msgstr "你確定想要移動此頁面至 '%(title)s' 嗎?"
+
+#: .\templates\wagtailadmin\pages\confirm_move.html:13
+#, python-format
+msgid ""
+"Are you sure you want to move this page and all of its children into "
+"'%(title)s'?"
+msgstr "你確定要移動此頁面和其所有子頁面至 '%(title)s' 嗎?"
+
+#: .\templates\wagtailadmin\pages\confirm_move.html:18
+msgid "Yes, move this page"
+msgstr "是的,移動此頁面"
+
+#: .\templates\wagtailadmin\pages\confirm_unpublish.html:3
+#, python-format
+msgid "Unpublish %(title)s"
+msgstr "取消發佈 %(title)s"
+
+#: .\templates\wagtailadmin\pages\confirm_unpublish.html:6
+#: .\templates\wagtailadmin\pages\edit.html:33
+#: .\templates\wagtailadmin\pages\list.html:71
+#: .\templates\wagtailadmin\pages\list.html:191
+msgid "Unpublish"
+msgstr "取消發佈"
+
+#: .\templates\wagtailadmin\pages\confirm_unpublish.html:10
+msgid "Are you sure you want to unpublish this page?"
+msgstr "你確定想取消發佈此頁面嗎?"
+
+#: .\templates\wagtailadmin\pages\confirm_unpublish.html:13
+msgid "Yes, unpublish it"
+msgstr "是的,取消發佈"
+
+#: .\templates\wagtailadmin\pages\content_type_use.html:7
+msgid "Pages using"
+msgstr "頁面正在使用"
+
+#: .\templates\wagtailadmin\pages\create.html:5
+#, python-format
+msgid "New %(page_type)s"
+msgstr "新 %(page_type)s 分類"
+
+#: .\templates\wagtailadmin\pages\create.html:9
+msgid "New"
+msgstr "新"
+
+#: .\templates\wagtailadmin\pages\create.html:21
+msgid "Save as draft"
+msgstr "儲存為草稿"
+
+#: .\templates\wagtailadmin\pages\create.html:26
+#: .\templates\wagtailadmin\pages\edit.html:39
+msgid "Publish"
+msgstr "發佈"
+
+#: .\templates\wagtailadmin\pages\create.html:28
+#: .\templates\wagtailadmin\pages\edit.html:41
+msgid "Submit for moderation"
+msgstr "送審"
+
+#: .\templates\wagtailadmin\pages\edit.html:5
+#, python-format
+msgid "Editing %(title)s"
+msgstr "編輯 %(title)s"
+
+#: .\templates\wagtailadmin\pages\edit.html:12
+#, python-format
+msgid "Editing %(title)s"
+msgstr "編輯 %(title)s"
+
+#: .\templates\wagtailadmin\pages\edit.html:15
+msgid "Status:"
+msgstr "狀態:"
+
+#: .\templates\wagtailadmin\pages\edit.html:29
+msgid "Save draft"
+msgstr "儲存草稿"
+
+#: .\templates\wagtailadmin\pages\edit.html:52
+#, python-format
+msgid "Last modified: %(last_mod)s"
+msgstr "上一次編輯:%(last_mod)s"
+
+#: .\templates\wagtailadmin\pages\edit.html:54
+#, python-format
+msgid "by %(modified_by)s"
+msgstr "作者 %(modified_by)s"
+
+#: .\templates\wagtailadmin\pages\index.html:4
+#, python-format
+msgid "Exploring %(title)s"
+msgstr "瀏覽%(title)s"
+
+#: .\templates\wagtailadmin\pages\list.html:53
+#: .\templates\wagtailadmin\pages\list.html:194
+msgid "Add child page"
+msgstr "新增子頁面"
+
+#: .\templates\wagtailadmin\pages\list.html:94
+msgid "Disable ordering of child pages"
+msgstr "禁止子頁面的排序"
+
+#: .\templates\wagtailadmin\pages\list.html:94
+#: .\templates\wagtailadmin\pages\list.html:96
+msgid "Order"
+msgstr "排序"
+
+#: .\templates\wagtailadmin\pages\list.html:96
+msgid "Enable ordering of child pages"
+msgstr "開啟子頁面排序"
+
+#: .\templates\wagtailadmin\pages\list.html:149
+msgid "Drag"
+msgstr "拖曳"
+
+#: .\templates\wagtailadmin\pages\list.html:220
+#: .\templates\wagtailadmin\pages\list.html:224
+#, python-format
+msgid "Explorer subpages of '%(title)s'"
+msgstr "瀏覽 '%(title)s' 的子頁面"
+
+#: .\templates\wagtailadmin\pages\list.html:220
+#: .\templates\wagtailadmin\pages\list.html:224
+#: .\templates\wagtailadmin\pages\list.html:228
+msgid "Explore"
+msgstr "瀏覽"
+
+#: .\templates\wagtailadmin\pages\list.html:228
+#, python-format
+msgid "Explorer child pages of '%(title)s'"
+msgstr "瀏覽 '%(title)s' 的子頁面"
+
+#: .\templates\wagtailadmin\pages\list.html:230
+#, python-format
+msgid "Add a child page to '%(title)s'"
+msgstr "新增子頁面至 '%(title)s'"
+
+#: .\templates\wagtailadmin\pages\list.html:230
+msgid "Add subpage"
+msgstr "新增子頁面"
+
+#: .\templates\wagtailadmin\pages\list.html:239
+msgid "No pages have been created."
+msgstr "沒有已儲存的頁面"
+
+#: .\templates\wagtailadmin\pages\list.html:239
+#, python-format
+msgid "Why not add one?"
+msgstr "為什麼不 新增一個頁面呢?"
+
+#: .\templates\wagtailadmin\pages\move_choose_destination.html:3
+#, python-format
+msgid "Select a new parent page for %(title)s"
+msgstr "為 %(title)s 選擇一個新的母頁面"
+
+#: .\templates\wagtailadmin\pages\move_choose_destination.html:7
+#, python-format
+msgid "Select a new parent page for %(title)s"
+msgstr "為 %(title)s 選擇一個新的母頁面"
+
+#: .\templates\wagtailadmin\pages\search_results.html:6
+#, python-format
+msgid ""
+"\n"
+" There is one match\n"
+" "
+msgid_plural ""
+"\n"
+" There are %(counter)s matches\n"
+" "
+msgstr[0] "\n 有一個符合"
+msgstr[1] "\n 有 $(counter)s 個符合"
+
+#: .\templates\wagtailadmin\pages\search_results.html:17
+#, python-format
+msgid ""
+"\n"
+" Page %(page_number)s of %(num_pages)s.\n"
+" "
+msgstr "\n 第 %(page_number)s / %(num_pages)s頁。\n "
+
+#: .\templates\wagtailadmin\pages\search_results.html:24
+#: .\templates\wagtailadmin\pages\search_results.html:26
+#: .\templates\wagtailadmin\shared\pagination_nav.html:8
+#: .\templates\wagtailadmin\shared\pagination_nav.html:10
+#: .\templates\wagtailadmin\shared\pagination_nav.html:14
+msgid "Previous"
+msgstr "往前"
+
+#: .\templates\wagtailadmin\pages\search_results.html:33
+#: .\templates\wagtailadmin\pages\search_results.html:35
+#: .\templates\wagtailadmin\shared\pagination_nav.html:21
+#: .\templates\wagtailadmin\shared\pagination_nav.html:23
+#: .\templates\wagtailadmin\shared\pagination_nav.html:25
+msgid "Next"
+msgstr "往後"
+
+#: .\templates\wagtailadmin\pages\search_results.html:43
+#, python-format
+msgid "Sorry, no pages match \"%(query_string)s\""
+msgstr "對不起,沒有任何頁面符合 \"%(query_string)s\""
+
+#: .\templates\wagtailadmin\pages\search_results.html:45
+msgid "Enter a search term above"
+msgstr "請輸入關鍵字"
+
+#: .\templates\wagtailadmin\pages\select_location.html:3
+#, python-format
+msgid "Where do you want to create a %(page_type)s"
+msgstr "你想在哪建立 %(page_type)s"
+
+#: .\templates\wagtailadmin\pages\select_location.html:5
+msgid "Where do you want to create this"
+msgstr "你想在哪建立這個"
+
+#: .\templates\wagtailadmin\pages\select_type.html:3
+#: .\templates\wagtailadmin\pages\select_type.html:6
+msgid "Create a new page"
+msgstr "建立一個新頁面"
+
+#: .\templates\wagtailadmin\pages\select_type.html:10
+msgid ""
+"Your new page will be saved in the top level of your website. You "
+"can move it after saving."
+msgstr "你的新頁面將會儲存到網站的 最上層 你可以在儲存後移動它。"
+
+#: .\templates\wagtailadmin\shared\main_nav.html:15
+msgid "Account settings"
+msgstr "帳號設定"
+
+#: .\templates\wagtailadmin\shared\main_nav.html:16
+msgid "Log out"
+msgstr "登出"
+
+#: .\templates\wagtailadmin\shared\main_nav.html:20
+msgid "More"
+msgstr "更多"
+
+#: .\templates\wagtailadmin\shared\main_nav.html:22
+msgid "Redirects"
+msgstr "重導向"
+
+#: .\templates\wagtailadmin\shared\main_nav.html:23
+msgid "Editors Picks"
+msgstr "編者精選"
+
+#: .\templates\wagtailadmin\shared\pagination_nav.html:3
+#, python-format
+msgid "Page %(page_num)s of %(total_pages)s."
+msgstr "第 %(page_num)s 頁 共 %(total_pages)s 頁"
+
+#: .\templatetags\wagtailadmin_nav.py:52
+msgid "Images"
+msgstr "圖片"
+
+#: .\templatetags\wagtailadmin_nav.py:56
+msgid "Documents"
+msgstr "文件"
+
+#: .\templatetags\wagtailadmin_nav.py:61
+msgid "Snippets"
+msgstr "片段"
+
+#: .\templatetags\wagtailadmin_nav.py:66
+msgid "Users"
+msgstr "使用者"
+
+#: .\views\account.py:26
+msgid "Your password has been changed successfully!"
+msgstr "您的密碼已經更改成功。"
+
+#: .\views\pages.py:99
+msgid "Sorry, you do not have access to create a page of type '{0}'."
+msgstr "對不起,你沒有建立 '{0}' 類型頁面的權限。"
+
+#: .\views\pages.py:103
+msgid ""
+"Pages of this type can only be created as children of '{0}'. This "
+"new page will be saved there."
+msgstr "這一類的頁面只能建立為 '{0}' 的子頁面。此頁面將會儲存在那邊。"
+
+#: .\views\pages.py:166
+msgid "This slug is already in use"
+msgstr "這個地址已被使用"
+
+#: .\views\pages.py:187 .\views\pages.py:254 .\views\pages.py:589
+msgid "Page '{0}' published."
+msgstr "第 '{0}' 頁已發佈。"
+
+#: .\views\pages.py:189 .\views\pages.py:256
+msgid "Page '{0}' submitted for moderation."
+msgstr "第 '{0}' 頁已送審。"
+
+#: .\views\pages.py:192
+msgid "Page '{0}' created."
+msgstr "第 '{0}' 頁已建立。"
+
+#: .\views\pages.py:201
+msgid "The page could not be created due to errors."
+msgstr "這頁面因有錯誤而無法建立。"
+
+#: .\views\pages.py:259
+msgid "Page '{0}' updated."
+msgstr "第 '{0}' 頁已更新"
+
+#: .\views\pages.py:268
+msgid "The page could not be saved due to validation errors"
+msgstr "這頁面因有驗證錯誤而無法儲存。"
+
+#: .\views\pages.py:280
+msgid "This page is currently awaiting moderation"
+msgstr "這頁正等待審核"
+
+#: .\views\pages.py:298
+msgid "Page '{0}' deleted."
+msgstr "第 '{0}' 頁已刪除"
+
+#: .\views\pages.py:428
+msgid "Page '{0}' unpublished."
+msgstr "第 '{0}' 頁已取消發佈"
+
+#: .\views\pages.py:479
+msgid "Page '{0}' moved."
+msgstr "第 '{0}' 頁已移動。"
+
+#: .\views\pages.py:584 .\views\pages.py:602 .\views\pages.py:621
+msgid "The page '{0}' is not currently awaiting moderation."
+msgstr "第 '{0}' 頁目前不需要等待審核。"
+
+#: .\views\pages.py:608
+msgid "Page '{0}' rejected for publication."
+msgstr "第 '{0}' 頁已被拒絕發佈。"
diff --git a/wagtail/wagtailadmin/modal_workflow.py b/wagtail/wagtailadmin/modal_workflow.py
index a4d86f501..998dfdec3 100644
--- a/wagtail/wagtailadmin/modal_workflow.py
+++ b/wagtail/wagtailadmin/modal_workflow.py
@@ -23,4 +23,4 @@ def render_modal_workflow(request, html_template, js_template, template_vars={})
response_text = "{%s}" % ','.join(response_keyvars)
- return HttpResponse(response_text, mimetype="text/javascript")
+ return HttpResponse(response_text, content_type="text/javascript")
diff --git a/wagtail/wagtailadmin/static/wagtailadmin/js/core.js b/wagtail/wagtailadmin/static/wagtailadmin/js/core.js
index e5895e34f..85c4ca31e 100644
--- a/wagtail/wagtailadmin/static/wagtailadmin/js/core.js
+++ b/wagtail/wagtailadmin/static/wagtailadmin/js/core.js
@@ -93,17 +93,6 @@ $(function(){
});
});
- $(".nav-main .more > a").bind('click keydown', function(){
- var currentAlt = $(this).data('altstate');
- var newAlt = $(this).html();
-
- $(this).html(currentAlt);
- $(this).data('altstate', newAlt);
- $(this).toggleClass('icon-arrow-up icon-arrow-down');
- $(this).parent().find('ul').toggle('fast');
- return false;
- });
-
$('#menu-search input').bind('focus', function(){
$('#menu-search').addClass('focussed');
}).bind('blur', function(){
@@ -128,7 +117,7 @@ $(function(){
$(window.headerSearch.termInput).trigger('focus');
function search () {
- var workingClasses = "working icon icon-spinner";
+ var workingClasses = "icon-spinner";
$(window.headerSearch.termInput).parent().addClass(workingClasses);
search_next_index++;
diff --git a/wagtail/wagtailadmin/static/wagtailadmin/js/page-editor.js b/wagtail/wagtailadmin/static/wagtailadmin/js/page-editor.js
index cbff2c8af..4e8e1b02d 100644
--- a/wagtail/wagtailadmin/static/wagtailadmin/js/page-editor.js
+++ b/wagtail/wagtailadmin/static/wagtailadmin/js/page-editor.js
@@ -181,6 +181,17 @@ function InlinePanel(opts) {
self.updateMoveButtonDisabledStates();
});
}
+
+ /* Hide container on page load if it is marked as deleted. Remove the error
+ message so that it doesn't count towards the number of errors on the tab at the
+ top of the page. */
+ if ( $('#' + deleteInputId).val() === "1" ) {
+ $('#' + childId).hide(0, function() {
+ self.updateMoveButtonDisabledStates();
+ self.setHasContent();
+ });
+ $('#' + childId).find(".error-message").remove();
+ }
};
self.formsUl = $('#' + opts.formsetPrefix + '-FORMS');
diff --git a/wagtail/wagtailadmin/static/wagtailadmin/scss/components/formatters.scss b/wagtail/wagtailadmin/static/wagtailadmin/scss/components/formatters.scss
index 569821e10..bc2b02a8c 100644
--- a/wagtail/wagtailadmin/static/wagtailadmin/scss/components/formatters.scss
+++ b/wagtail/wagtailadmin/static/wagtailadmin/scss/components/formatters.scss
@@ -177,4 +177,9 @@ a.tag:hover{
/* make a block-level element inline */
.inline{
display:inline;
+}
+
+/* utility class to allow things to be scrollable if their contents can't wrap more nicely */
+.overflow{
+ overflow:auto;
}
\ No newline at end of file
diff --git a/wagtail/wagtailadmin/static/wagtailadmin/scss/components/forms.scss b/wagtail/wagtailadmin/static/wagtailadmin/scss/components/forms.scss
index 9ef27297c..29c44b4f3 100644
--- a/wagtail/wagtailadmin/static/wagtailadmin/scss/components/forms.scss
+++ b/wagtail/wagtailadmin/static/wagtailadmin/scss/components/forms.scss
@@ -21,22 +21,13 @@ legend{
@include visuallyhidden();
}
-.fields li{
- padding-top:0.5em;
- padding-bottom:0.5em;
-}
-
-.field{
- padding:0 0 0.6em 0;
-}
-
label{
font-weight:bold;
color:$color-grey-1;
font-size:1.1em;
display:block;
padding:0 0 0.8em 0;
- line-height:1em;
+ line-height:1.3em;
.checkbox &,
.radio &{
@@ -47,10 +38,10 @@ label{
input, textarea, select, .richtext, .tagit{
@include border-radius(6px);
@include border-box();
- font-family:Open Sans,Arial,sans-serif;
width:100%;
- border:1px dashed $color-input-border;
- padding:1.2em;
+ font-family:Open Sans,Arial,sans-serif;
+ border:1px solid $color-input-border;
+ padding:0.9em 1.2em;
background-color:$color-fieldset-hover;
-webkit-appearance: none;
color:$color-text-input;
@@ -76,10 +67,44 @@ input, textarea, select, .richtext, .tagit{
}
}
-input[type=radio],input[type=checkbox]{
+/* select boxes */
+.typed_choice_field .input{
+ position:relative;
+
+ select{
+ outline:none;
+ }
+
+ &:after{
+ @include border-radius(0 6px 6px 0);
+ z-index:0;
+ position:absolute;
+ right:1px;
+ top:1px;
+ height:95%;
+ width:1.5em;
+ font-family:wagtail;
+ content:"q";
+ border:1px solid $color-input-border;
+ border-width:0 0 0 1px;
+ text-align:center;
+ line-height:1.4em;
+ font-size:3em;
+ pointer-events:none;
+ color:$color-grey-3;
+ background-color:$color-fieldset-hover;
+ margin:0px 1px 0 0;
+ }
+
+ .ie &:after{
+ display:none;
+ }
+}
+
+/* radio and check boxes */
+input[type=radio], input[type=checkbox]{
@include border-radius(0);
cursor:pointer;
- float:left;
border:0;
}
@@ -350,18 +375,15 @@ button.icon{
.help, .error-message{
font-size:0.85em;
font-weight:normal;
- margin:0 0 0.5em 0;
+ margin:0.5em 0 0 0;
+}
+.error-message{
+ color:$color-red;
}
.help{
color:$color-grey-2;
}
-/* permanently show checkbox/radio help as they have no focus state */
-.boolean_field .help, .radio .help{
- opacity:1;
-}
-
-
fieldset:hover > .help,
.field.focused + .help,
.field:focus + .help,
@@ -380,18 +402,77 @@ li.focused > .help{
font-size:13px;
}
-.error-message{
- margin:0;
- color:$color-red;
- clear:both;
-}
-
.error input, .error textarea, .error select, .error .tagit{
border-color:$color-red;
background-color:$color-input-error-bg;
}
+/* Layouts for particular kinds of of fields */
+
+/* permanently show checkbox/radio help as they have no focus state */
+.boolean_field .help, .radio .help{
+ opacity:1;
+}
+.iconfield {
+ position:relative;
+
+ input:not([type=radio]), input:not([type=checkbox]), input:not([type=submit]), input:not([type=button]){
+ padding-left:2.5em;
+ }
+
+ &:before, &:after{
+ font-family:wagtail;
+ position:absolute;
+ top:0.4em;
+ font-size:1.4em;
+ color:$color-grey-3;
+ }
+ &:before{
+ left:0.5em;
+ }
+ &:after{
+ right:0.5em;
+ }
+
+ /* special case for search spinners */
+ &.icon-spinner:after{
+ color:$color-teal;
+ opacity:0.8;
+ font-size:20px;
+ width:20px;
+ height:20px;
+ line-height:23px;
+ text-align:center;
+ top:0.3em;
+
+ }
+}
+
+.fields li{
+ padding-top:0.5em;
+ padding-bottom:1.2em;
+}
+
+.field-content .input li{
+ label{
+ width:auto;
+ float:none;
+ }
+}
+
+.input{
+ clear:both;
+}
+
/* field sizing */
+
+.field-small{
+ input, textarea, select, .richtext, .tagit{
+ @include border-radius(3px);
+ padding:0.4em 1em;
+ }
+}
+
.field{
&.col1,
&.col2,
@@ -453,7 +534,7 @@ ul.inline li:first-child, li.inline:first-child{
display:block;
float:left;
color:$color-grey-3;
- line-height:0.85em;
+ line-height:1em;
font-size:2.5em;
margin-right:0.3em;
}
@@ -495,7 +576,6 @@ ul.inline li:first-child, li.inline:first-child{
.unchosen, .chosen{
&:before{
content:"b";
- margin-left:-0.1em; /* this glyphs appear to have left padding, counteracted here */
}
}
}
@@ -568,112 +648,6 @@ ul.tagit li.tagit-choice-editable{
}
}
-
-/* search bars (search integrated into header area) */
-.search-bar{
- margin-top:-2em;
- padding-top:1em;
- padding-bottom:1em;
- margin-bottom:2em;
-
- &.full-width{
- @include nice-padding();
- background-color:$color-header-bg;
- border-bottom:1px solid $color-grey-4;
- }
-
- label{
- display:none;
- }
-
- .fields{
- position:relative;
- clear:both;
-
- .field input{
- padding-left:3em;
-
- &:focus{
- background-color:white;
- }
- }
- .field:before, .field:after{
- font-family:wagtail;
- position:absolute;
- top:1em;
- font-size:25px;
-
- }
- .field:before{
- left:0.5em;
- content:"f";
- color:$color-grey-3;
- }
- .field:after{
- color:$color-teal;
- opacity:0.8;
- font-size:20px;
- width:20px;
- height:20px;
- line-height:23px;
- text-align:center;
- top:0.3em;
- right:0.5em;
- }
- }
- .submit{
- display:none;
- position:absolute;
- right:0;
- top:0;
- input{
- padding:1.55em 2em;
- }
- }
- .taglist{
- font-size:0.9em;
- line-height:2.4em;
- h3{
- display:inline;
- }
- a{
- white-space: nowrap
- }
- }
-
- &.small{
- margin:0;
- padding:0;
- .fields{
- li{
- padding:0;
- }
- .field{
- padding:0;
- }
- .field input{
- padding:0.4em 1.4em 0.4em 2em;
-
- &:focus{
- background-color:white;
- }
- }
- .field:before{
- font-size:1.1rem;
- top:0.45em;
- }
-
- }
- }
-}
-
-/* mozilla specific hack */
-@-moz-document url-prefix() {
- .search-bar .fields .field:after{
- line-height:20px;
- }
-}
-
/* Transitions */
fieldset, input, textarea, select{
@include transition(background-color 0.2s ease);
@@ -686,11 +660,22 @@ input[type=submit], input[type=reset], input[type=button], .button, button{
}
@media screen and (min-width: $breakpoint-mobile){
- .help{
- opacity:1;
- }
- .fields{
- max-width:800px;
+ label{
+ @include column(2);
+ padding-top:1.2em;
+ padding-left:0;
+
+ .model_multiple_choice_field &,
+ .boolean_field &,
+ .model_choice_field &,
+ .image_field &,
+ .file_field &{
+ padding-top:0;
+ }
+
+ .boolean_field &{
+ padding-bottom:0;
+ }
}
input[type=submit], input[type=reset], input[type=button], .button, button{
@@ -706,4 +691,20 @@ input[type=submit], input[type=reset], input[type=button], .button, button{
}
}
}
+
+ .help{
+ opacity:1;
+ }
+ .fields{
+ max-width:800px;
+ }
+
+ .field{
+ @include row();
+ }
+
+ .field-content{
+ @include column(10);
+ padding-right:0;
+ }
}
\ No newline at end of file
diff --git a/wagtail/wagtailadmin/static/wagtailadmin/scss/components/header.scss b/wagtail/wagtailadmin/static/wagtailadmin/scss/components/header.scss
new file mode 100644
index 000000000..849420ae0
--- /dev/null
+++ b/wagtail/wagtailadmin/static/wagtailadmin/scss/components/header.scss
@@ -0,0 +1,156 @@
+header{
+ padding-top:1em;
+ padding-bottom:1em;
+ background-color: $color-header-bg;
+ margin-bottom:2em;
+ color:white;
+
+ h1, h2{
+ margin:0;
+ color:white;
+ }
+
+ h1{
+ padding:0.2em 0;
+
+ &.icon:before{
+ width:1em;
+ display:none;
+ margin-right:0.4em;
+ font-size:1.5em;
+ }
+ }
+
+ .col{
+ float:left;
+ margin-right:2em;
+ }
+ .left{
+ float:left;
+
+ .hasform &:first-child{
+ padding-bottom:0.5em;
+ float:none;
+ }
+ }
+ .right{
+ text-align:right;
+ float:right;
+ }
+
+ /* For case where content below header should merge with it */
+ &.merged{
+ margin-bottom:0;
+ }
+ &.tab-merged, &.no-border{
+ border:0;
+ }
+ &.merged.no-border{
+ padding-bottom:0;
+ }
+ &.no-v-padding{
+ padding-top:0;
+ padding-bottom:0;
+ }
+ /*
+ &.hasform h1{
+ margin-top:0.2em;
+ }
+ */
+ .button{
+ background-color:$color-teal-darker;
+ &:hover{
+ background-color:$color-teal-dark;
+ }
+ }
+
+ /* necessary on mobile only to make way for hamburger menu */
+ &.nice-padding{
+ padding-left:4em;
+ }
+
+ label{
+ @include visuallyhidden();
+ }
+
+ input[type=text], select{
+ border-width:0;
+
+ &:focus{
+ background-color:white;
+ }
+ }
+
+ .fields{
+ margin-top:-0.5em;
+ li{
+ padding-bottom:0;
+ }
+ .field{
+ padding:0;
+ }
+ }
+
+ .field-content{
+ width:auto;
+ padding:0;
+ }
+}
+
+/* mozilla specific hack */
+@-moz-document url-prefix() {
+ .iconfield.icon-spinner:after{
+ line-height:20px;
+ }
+}
+
+.page-explorer header{
+ margin-bottom:0;
+ padding-bottom:0em;
+}
+
+
+@media screen and (min-width: $breakpoint-mobile){
+ header{
+ padding-top:1.5em;
+ padding-bottom:1.5em;
+
+ .left{
+ float:left;
+ margin-right:0;
+
+ &:first-child{
+ padding-bottom:0;
+ float:left;
+ }
+ }
+ .second{
+ clear:none;
+
+ .right, .left{
+ float:right;
+ }
+ }
+
+ h1.icon:before{
+ display:inline-block;
+ }
+
+ .col3{
+ @include column(3);
+ }
+ .col3.addbutton{
+ width:auto;
+ }
+ .col6{
+ @include column(6);
+ }
+ .col9{
+ @include column(9);
+ }
+ .breadcrumb{
+ margin-left:-($desktop-nice-padding);
+ margin-right:-($desktop-nice-padding);
+ }
+ }
+}
\ No newline at end of file
diff --git a/wagtail/wagtailadmin/static/wagtailadmin/scss/components/icons.scss b/wagtail/wagtailadmin/static/wagtailadmin/scss/components/icons.scss
index 9a1351d9a..4de3aa131 100644
--- a/wagtail/wagtailadmin/static/wagtailadmin/scss/components/icons.scss
+++ b/wagtail/wagtailadmin/static/wagtailadmin/scss/components/icons.scss
@@ -231,14 +231,20 @@
.icon-collapse-up:before{
content:"6";
}
+.icon-date:before{
+ content:"7";
+}
+.icon-success:before{
+ content:"9";
+}
.icon-help:before{
content:"?";
}
.icon-warning:before{
content:"!";
}
-.icon-success:before{
- content:"9";
+.icon-form:before{
+ content:"$";
}
.icon.text-replace{
diff --git a/wagtail/wagtailadmin/static/wagtailadmin/scss/core.scss b/wagtail/wagtailadmin/static/wagtailadmin/scss/core.scss
index 2c1232091..60200de20 100644
--- a/wagtail/wagtailadmin/static/wagtailadmin/scss/core.scss
+++ b/wagtail/wagtailadmin/static/wagtailadmin/scss/core.scss
@@ -11,6 +11,7 @@
@import "components/listing.scss";
@import "components/messages.scss";
@import "components/formatters.scss";
+@import "components/header.scss";
@import "fonts.scss";
@@ -225,19 +226,6 @@ img{
}
}
- .more{
- border:0;
-
- > a{
- &:before{
- margin-right:0.4em;
- }
- font-size:0.8em;
- padding:0.2em 1.2em;
- background-color:$color-grey-1-1;
- }
- }
-
.avatar{
display:none;
}
@@ -311,10 +299,6 @@ img{
}
}
- .js .nav-main .more ul{
- display:none;
- }
-
.explorer{
position:absolute;
margin-top:70px;
@@ -385,88 +369,6 @@ body.explorer-open {
}
}
-header{
- padding-top:1em;
- padding-bottom:1em;
- background-color: $color-header-bg;
- margin-bottom:2em;
- color:white;
-
- h1, h2{
- margin:0;
- color:white;
- }
-
- h1{
- padding:0.2em 0;
-
- &.icon:before{
- width:1em;
- display:none;
- margin-right:0.4em;
- font-size:1.3em;
- }
- }
-
- .col{
- float:left;
- margin-right:2em;
- }
- .left{
- float:left;
-
- .hasform &:first-child{
- padding-bottom:0.5em;
- float:none;
- }
- }
- .search-bar input{
- @include border-radius(3px);
- width:auto;
- border-width:0;
- }
- .right{
- text-align:right;
- float:right;
- }
-
- /* For case where content below header should merge with it */
- &.merged{
- margin-bottom:0;
- }
- &.tab-merged, &.no-border{
- border:0;
- }
- &.merged.no-border{
- padding-bottom:0;
- }
- &.no-v-padding{
- padding-top:0;
- padding-bottom:0;
- }
- /*
- &.hasform h1{
- margin-top:0.2em;
- }
- */
- .button{
- background-color:$color-teal-darker;
- &:hover{
- background-color:$color-teal-dark;
- }
- }
- /* necessary on mobile only to make way for hamburger menu */
- &.nice-padding{
- padding-left:4em;
- }
-}
-
-.page-explorer header{
- margin-bottom:0;
- padding-bottom:0em;
-}
-
-
footer{
@include row();
@include border-radius(3px 3px 0 0);
@@ -707,7 +609,7 @@ footer, .logo{
padding-right:$desktop-nice-padding;
}
- body{
+ .wrapper{
margin-left:$menu-width;
}
@@ -726,7 +628,7 @@ footer, .logo{
left:0;
height:100%;
width:$menu-width;
- margin-left: -$menu-width;
+ margin-left: 0;
.inner{
height:100%;
@@ -832,52 +734,6 @@ footer, .logo{
}
}
- header{
- padding-top:1.5em;
- padding-bottom:1.5em;
-
- &.nice-padding{
- @include nice-padding();
- }
-
- .left{
- float:left;
- margin-right:0;
-
- &:first-child{
- padding-bottom:0;
- float:left;
- }
- }
- .second{
- clear:none;
-
- .right, .left{
- float:right;
- }
- }
-
- h1.icon:before{
- display:inline-block;
- }
-
- .col3{
- @include column(3);
- }
- .col3.addbutton{
- width:auto;
- }
- .col6{
- @include column(6);
- }
- .col9{
- @include column(9);
- }
- .breadcrumb{
- margin-left:-($desktop-nice-padding);
- margin-right:-($desktop-nice-padding);
- }
- }
footer{
width:80%;
margin-left:50px;
diff --git a/wagtail/wagtailadmin/static/wagtailadmin/scss/fonts/wagtail.eot b/wagtail/wagtailadmin/static/wagtailadmin/scss/fonts/wagtail.eot
index f55be6906..6ac63514a 100644
Binary files a/wagtail/wagtailadmin/static/wagtailadmin/scss/fonts/wagtail.eot and b/wagtail/wagtailadmin/static/wagtailadmin/scss/fonts/wagtail.eot differ
diff --git a/wagtail/wagtailadmin/static/wagtailadmin/scss/fonts/wagtail.svg b/wagtail/wagtailadmin/static/wagtailadmin/scss/fonts/wagtail.svg
index 188de85f2..9bded54bf 100644
--- a/wagtail/wagtailadmin/static/wagtailadmin/scss/fonts/wagtail.svg
+++ b/wagtail/wagtailadmin/static/wagtailadmin/scss/fonts/wagtail.svg
@@ -67,6 +67,8 @@
-
+
+
+
diff --git a/wagtail/wagtailadmin/static/wagtailadmin/scss/fonts/wagtail.ttf b/wagtail/wagtailadmin/static/wagtailadmin/scss/fonts/wagtail.ttf
index a401ae2dd..2006feefb 100644
Binary files a/wagtail/wagtailadmin/static/wagtailadmin/scss/fonts/wagtail.ttf and b/wagtail/wagtailadmin/static/wagtailadmin/scss/fonts/wagtail.ttf differ
diff --git a/wagtail/wagtailadmin/static/wagtailadmin/scss/fonts/wagtail.woff b/wagtail/wagtailadmin/static/wagtailadmin/scss/fonts/wagtail.woff
index fbefc159a..072c20a16 100644
Binary files a/wagtail/wagtailadmin/static/wagtailadmin/scss/fonts/wagtail.woff and b/wagtail/wagtailadmin/static/wagtailadmin/scss/fonts/wagtail.woff differ
diff --git a/wagtail/wagtailadmin/static/wagtailadmin/scss/layouts/login.scss b/wagtail/wagtailadmin/static/wagtailadmin/scss/layouts/login.scss
index 4abf3ae20..3e158e51f 100644
--- a/wagtail/wagtailadmin/static/wagtailadmin/scss/layouts/login.scss
+++ b/wagtail/wagtailadmin/static/wagtailadmin/scss/layouts/login.scss
@@ -82,7 +82,7 @@ form{
.field{
padding:0;
}
- .field.icon:before{
+ .iconfield:before{
display:none;
}
@@ -168,25 +168,29 @@ form{
font-size:4em;
}
- .field.icon:before{
- display:inline-block;
- position: absolute;
- color:$color-grey-4;
- border: 2px solid $color-grey-4;
- border-radius: 100%;
- width: 1em;
- padding: 0.3em;
- left: $desktop-nice-padding;
- margin-top: -1em;
- top: 50%;
- font-size:1.5em;
- }
-
.full{
margin:0px (-$desktop-nice-padding);
- input{
- padding-left:($desktop-nice-padding + 50px);
+ .iconfield{
+ &:before{
+ display:inline-block;
+ position: absolute;
+ color:$color-grey-4;
+ border: 2px solid $color-grey-4;
+ border-radius: 100%;
+ width: 1em;
+ padding: 0.3em;
+ left: $desktop-nice-padding;
+ margin-top: -1.1rem;
+ top: 50%;
+ font-size:1.3rem;
+ }
+
+ input{
+ padding-left:($desktop-nice-padding + 50px);
+ }
}
+
+
}
}
\ No newline at end of file
diff --git a/wagtail/wagtailadmin/static/wagtailadmin/scss/layouts/page-editor.scss b/wagtail/wagtailadmin/static/wagtailadmin/scss/layouts/page-editor.scss
index e7fa55c7c..c9a22b3ac 100644
--- a/wagtail/wagtailadmin/static/wagtailadmin/scss/layouts/page-editor.scss
+++ b/wagtail/wagtailadmin/static/wagtailadmin/scss/layouts/page-editor.scss
@@ -148,7 +148,6 @@
display:block;
float:none;
-
.help{
display:none;
}
@@ -343,6 +342,10 @@ footer .preview{
@include column(10);
padding-left:0;
padding-right:0;
+
+ fieldset{
+ width:100%;
+ }
}
.object-help{
@@ -371,6 +374,12 @@ footer .preview{
.field{
padding:0;
}
+ .field-content{
+ display: block;
+ float: none;
+ width: auto;
+ padding: inherit;
+ }
}
.multiple{
@include column(10);
@@ -381,5 +390,12 @@ footer .preview{
&.empty .add{
margin:0 0 0 -50px;
}
+
+ &.single-field label{
+ display: block;
+ float: none;
+ width: auto;
+ padding:auto;
+ }
}
}
diff --git a/wagtail/wagtailadmin/static/wagtailadmin/scss/panels/rich-text.scss b/wagtail/wagtailadmin/static/wagtailadmin/scss/panels/rich-text.scss
index 8b26f36ab..c951a0bc5 100644
--- a/wagtail/wagtailadmin/static/wagtailadmin/scss/panels/rich-text.scss
+++ b/wagtail/wagtailadmin/static/wagtailadmin/scss/panels/rich-text.scss
@@ -3,14 +3,13 @@
.hallotoolbar{
position:absolute;
- left:50px;
+ left:$mobile-nice-padding;
z-index:5;
margin-top:4em;
margin-left:0em;
}
.hallotoolbar.affixed{
position:fixed;
- margin-left:140px;
margin-top:0;
}
.hallotoolbar button{
@@ -148,18 +147,8 @@
}
}
}
-
-@media screen and (min-width: $breakpoint-desktop-larger){
- /* .hallotoolbar{
- margin:0 auto;
- position:absolute;
- left:-$menu-width;
- right:0;
- z-index:5;
- margin-top:3em;
+@media screen and (min-width: $breakpoint-mobile){
+ .hallotoolbar{
+ left:$menu-width + $desktop-nice-padding;
}
- .hallotoolbar.affixed{
- position:fixed;
- margin:0 auto;
- }*/
-}
+ }
\ No newline at end of file
diff --git a/wagtail/wagtailadmin/static/wagtailadmin/scss/userbar.scss b/wagtail/wagtailadmin/static/wagtailadmin/scss/userbar.scss
index 84b99b537..af9e20195 100644
--- a/wagtail/wagtailadmin/static/wagtailadmin/scss/userbar.scss
+++ b/wagtail/wagtailadmin/static/wagtailadmin/scss/userbar.scss
@@ -87,11 +87,13 @@ li, .home{
.action{
@include transition(background-color 0.2s ease, color 0.2s ease);
background-color:$color-teal;
- color:white;
+ color:$color-teal;
&:before{
margin-right:0.4em;
vertical-align:middle;
+ font-size:1.7em;
+ color:white;
}
&:hover{
diff --git a/wagtail/wagtailadmin/static/wagtailadmin/scss/variables.scss b/wagtail/wagtailadmin/static/wagtailadmin/scss/variables.scss
index 3533bd876..4c06efec8 100644
--- a/wagtail/wagtailadmin/static/wagtailadmin/scss/variables.scss
+++ b/wagtail/wagtailadmin/static/wagtailadmin/scss/variables.scss
@@ -42,7 +42,7 @@ $color-grey-5: #fafafa;
$color-thead-bg: $color-grey-5;
$color-header-bg: $color-teal; // #ff6a58;
$color-fieldset-hover: $color-grey-5;
-$color-input-border: $color-grey-3;
+$color-input-border: $color-grey-4;
$color-input-focus: #f4fcfc;
$color-input-error-bg: #feedee;
$color-button: $color-teal;
diff --git a/wagtail/wagtailadmin/tasks.py b/wagtail/wagtailadmin/tasks.py
index 3d6f3e8f1..59779d36b 100644
--- a/wagtail/wagtailadmin/tasks.py
+++ b/wagtail/wagtailadmin/tasks.py
@@ -85,3 +85,16 @@ def send_notification(page_revision_id, notification, excluded_user_id):
# Send email
send_mail(email_subject, email_content, from_email, email_addresses)
+
+
+@task
+def send_email_task(email_subject, email_content, email_addresses, from_email=None):
+ if not from_email:
+ if hasattr(settings, 'WAGTAILADMIN_NOTIFICATION_FROM_EMAIL'):
+ from_email = settings.WAGTAILADMIN_NOTIFICATION_FROM_EMAIL
+ elif hasattr(settings, 'DEFAULT_FROM_EMAIL'):
+ from_email = settings.DEFAULT_FROM_EMAIL
+ else:
+ from_email = 'webmaster@localhost'
+
+ send_mail(email_subject, email_content, from_email, email_addresses)
diff --git a/wagtail/wagtailadmin/templates/wagtailadmin/chooser/_search_behaviour.js b/wagtail/wagtailadmin/templates/wagtailadmin/chooser/_search_behaviour.js
index 9c3f77154..a3fee7722 100644
--- a/wagtail/wagtailadmin/templates/wagtailadmin/chooser/_search_behaviour.js
+++ b/wagtail/wagtailadmin/templates/wagtailadmin/chooser/_search_behaviour.js
@@ -1,6 +1,6 @@
-modal.ajaxifyForm($('form.search-bar', modal.body));
+modal.ajaxifyForm($('form.search-form', modal.body));
-var searchUrl = $('form.search-bar', modal.body).attr('action');
+var searchUrl = $('form.search-form', modal.body).attr('action');
function search() {
$.ajax({
diff --git a/wagtail/wagtailadmin/templates/wagtailadmin/edit_handlers/field_panel_field.html b/wagtail/wagtailadmin/templates/wagtailadmin/edit_handlers/field_panel_field.html
index 602efa583..472cae0b2 100644
--- a/wagtail/wagtailadmin/templates/wagtailadmin/edit_handlers/field_panel_field.html
+++ b/wagtail/wagtailadmin/templates/wagtailadmin/edit_handlers/field_panel_field.html
@@ -1,18 +1,23 @@
- {% if field_type != "boolean_field" %}{{ field.label_tag }}{% endif %}
- {% block form_field %}
- {{ field }}
- {% endblock %}
- {% if field_type = "boolean_field" %}{{ field.label_tag }}{% endif %}
+ {{ field.label_tag }}
+
+
+ {% block form_field %}
+ {{ field }}
+ {% endblock %}
+
+
+ {% if field.help_text %}
+
{{ field.help_text }}
+ {% endif %}
+
+ {% if field.errors %}
+
+ {% for error in field.errors %}
+ {{ error }}
+ {% endfor %}
+
+ {% endif %}
+
-{% if field.errors %}
-
- {% for error in field.errors %}
- {{ error }}
- {% endfor %}
-
-{% endif %}
-{% if field.help_text %}
- {{ field.help_text }}
-{% endif %}
diff --git a/wagtail/wagtailadmin/templates/wagtailadmin/login.html b/wagtail/wagtailadmin/templates/wagtailadmin/login.html
index 9cb28ed86..012dd32f8 100644
--- a/wagtail/wagtailadmin/templates/wagtailadmin/login.html
+++ b/wagtail/wagtailadmin/templates/wagtailadmin/login.html
@@ -28,15 +28,19 @@
-
-
+
{{ form.username.label_tag }}
- {{ form.username }}
+
+ {{ form.username }}
+
-
-
+
{{ form.password.label_tag }}
- {{ form.password }}
+
+ {{ form.password }}
+
{% if show_password_reset %}
{% trans "Forgotten it?" %}
diff --git a/wagtail/wagtailadmin/templates/wagtailadmin/pages/list.html b/wagtail/wagtailadmin/templates/wagtailadmin/pages/list.html
index 7078834ae..7258c5429 100644
--- a/wagtail/wagtailadmin/templates/wagtailadmin/pages/list.html
+++ b/wagtail/wagtailadmin/templates/wagtailadmin/pages/list.html
@@ -229,4 +229,24 @@
{% trans "No pages have been created." %}{% if parent_page and parent_page_perms.can_add_subpage %} {% blocktrans %}Why not add one?{% endblocktrans %}{% endif %} |
{% endif %}
-
\ No newline at end of file
+
+
+{% if parent_page and pages and pages.paginator %}
+
+{% endif %}
\ No newline at end of file
diff --git a/wagtail/wagtailadmin/templates/wagtailadmin/shared/field_as_li.html b/wagtail/wagtailadmin/templates/wagtailadmin/shared/field_as_li.html
index af4ba73a3..678dd67fd 100644
--- a/wagtail/wagtailadmin/templates/wagtailadmin/shared/field_as_li.html
+++ b/wagtail/wagtailadmin/templates/wagtailadmin/shared/field_as_li.html
@@ -1,21 +1,25 @@
{% load wagtailadmin_tags %}
-
-
+
-
- {% if field|fieldtype != "boolean_field" %}{{ field.label_tag }}{% endif %}
- {% block form_field %}
- {{ field }}
- {% endblock %}
- {% if field|fieldtype = "boolean_field" %}{{ field.label_tag }}{% endif %}
-
+ {{ field.label_tag }}
+
+
+ {% block form_field %}
+ {{ field }}
+ {% endblock %}
+
+
+ {% if field.help_text %}
+
{{ field.help_text }}
+ {% endif %}
- {% if field.errors %}
-
- {% for error in field.errors %}
- {{ error|escape }}
- {% endfor %}
-
- {% endif %}
- {% if field.help_text %}
-
{{ field.help_text }}
- {% endif %}
+ {% if field.errors %}
+
+ {% for error in field.errors %}
+ {{ error|escape }}
+ {% endfor %}
+
+ {% endif %}
+
+
\ No newline at end of file
diff --git a/wagtail/wagtailadmin/templates/wagtailadmin/shared/header.html b/wagtail/wagtailadmin/templates/wagtailadmin/shared/header.html
index 3ea5d4d10..59340d2d8 100644
--- a/wagtail/wagtailadmin/templates/wagtailadmin/shared/header.html
+++ b/wagtail/wagtailadmin/templates/wagtailadmin/shared/header.html
@@ -5,12 +5,12 @@
{{ title }} {{ subtitle }}
{% if search_url %}
-
{% endif %}
diff --git a/wagtail/wagtailadmin/templates/wagtailadmin/shared/main_nav.html b/wagtail/wagtailadmin/templates/wagtailadmin/shared/main_nav.html
index f7eb6528a..ce06d895c 100644
--- a/wagtail/wagtailadmin/templates/wagtailadmin/shared/main_nav.html
+++ b/wagtail/wagtailadmin/templates/wagtailadmin/shared/main_nav.html
@@ -10,19 +10,5 @@
{% trans "Log out" %}
- {% if request.user.is_superuser %} {# for now, 'More' links will be superuser-only #}
- -
- {% trans 'More' %}
-
-
-
- {% get_wagtailadmin_tab_urls as wagtailadmin_tab_urls %}
- {% for name, title in wagtailadmin_tab_urls %}
-
- {% endfor %}
-
-
- {% endif %}
-
diff --git a/wagtail/wagtailadmin/templates/wagtailadmin/shared/pagination_nav.html b/wagtail/wagtailadmin/templates/wagtailadmin/shared/pagination_nav.html
index 39eb88a15..ca3e4b073 100644
--- a/wagtail/wagtailadmin/templates/wagtailadmin/shared/pagination_nav.html
+++ b/wagtail/wagtailadmin/templates/wagtailadmin/shared/pagination_nav.html
@@ -1,4 +1,16 @@
{% load i18n %}
+{% if not is_ajax %}
+ {% comment %}
+ HACK: This template expects to be passed a 'linkurl' parameter, containing a URL name
+ that can be reverse-resolved by the {% url %} tag with no further parameters.
+ Views that have parameters in their URL can work around this by passing a bogus
+ (but non-blank) URL name, which will return an empty string and produce a final URL
+ of the form "?q=123", implicitly preserving the current URL path.
+ Using the {% url ... as ... %} form of the tag ensures that this fails silently,
+ rather than throwing a NoReverseMatch exception.
+ {% endcomment %}
+ {% url linkurl as url_to_use %}
+{% endif %}